Skip to the content.

CSU CS 557 Network Verification & Synthesis, Spring 2023

Course Information

Instructor

Jedidiah McClurg, Assistant Professor of CS

Teaching Assistant (TA)

(No teaching assistant)

Course Overview

This course is a hands-on introduction to verification and synthesis of networked systems. Students will learn how to (1) reason about correctness of networked systems using first-order logic, temporal logic, and Hoare logic, (2) build tools such as model-checkers to formally verify (exhaustively test) networked systems written in various languages, and (3) leverage verification functionality to automatically generate (synthesize) correct networked systems from high-level descriptions of network behavior.

Prerequisites

It is strongly recommended that you have a solid background in Computer Networks. It is also helpful if you have some basic Linux command-line experience.

Course Goals

  1. Learn several approaches for specifying and reasoning about correctness of networked systems.
  2. Learn how to build verification tools to check the correctness of networked systems.
  3. Gain exposure to recent research in the areas of network verification and network synthesis.
  4. Apply some verification/synthesis techniques to a networking/systems problem of interest to you.

Textbook and Other Reading Materials

NOTE: the following resources are recommended, but not required. The instructor will assign readings from these sources to supplement our discussions in class, but our in-class discussions will constitute the “official” version of the course material.

The above links will take you to free versions of the materials.

Schedule

This schedule is tentative, and is subject to change. Deadlines are at midnight (Mountain Time) on the corresponding date.

week date topic lecture notes supplemental reading homework project
1 Jan 17 introduction to formal methods lecture01   hw01 assigned  
  Jan 19 natural deduction lecture02 LICS 1.1-1.2 hw01 due  
2 Jan 24 propositional logic, semantics of propositional logic lecture03, lecture04 LICS 1.3, LICS 1.4    
  Jan 26 normal forms lecture05 LICS 1.5    
3 Jan 31 SAT solving lecture06 LICS 1.6, CDCL hw02 assigned  
  Feb 2 predicate logic lecture07 LICS 2.1-2.2    
4 Feb 7 proof theory of predicate logic lecture08 LICS 2.3    
  Feb 9 semantics of predicate logic, SMT solving lecture09 LICS 2.4, SMT hw02 due  
5 Feb 14 linear temporal logic (LTL) lecture10 LICS 3.2 hw03 assigned  
  Feb 16 model checking lecture11 LICS 3.3    
6 Feb 21 computation tree logic (CTL), CTL model checking lecture12, lecture13 LICS 3.4, LICS 3.6.1    
  Feb 23 LTL model checking lecture14 LICS 3.6.3 hw03 due  
7 Feb 28 no class        
  Mar 2 no class        
8 Mar 7 paper presentation (Varshik) Veriflow: Verifying Network-Wide Invariants in Real Time      
  Mar 9 paper presentation (William) Header space analysis: Static checking for networks     project proposal due
9 Mar 14 no class (holiday)        
  Mar 16 no class (holiday)        
10 Mar 21 paper presentation (Richi) Debugging the data plane with anteater      
  Mar 23 paper presentation (Tomas) Kuai: A model checker for software-defined networks      
11 Mar 28 paper presentation (Jonathon) Checking beliefs in dynamic networks      
  Mar 30 paper presentation (Audrey) Abstractions for Network Update      
12 Apr 4 paper presentation (Ronaldo) Efficient Synthesis of Network Updates      
  Apr 6 no class        
13 Apr 11 paper presentation (Zachary) TRANSIT: Specifying Protocols with Concolic Snippets      
  Apr 13 program syntax/semantics lecture15 LICS 4.1-4.2.1 hw04 assigned  
14 Apr 18 program verification, Hoare logic, verification conditions lecture16, lecture17, lecture18 LICS 4.2.2-4.2.4, 4.3, Weakest Preconditions    
  Apr 20 no class        
15 Apr 25 paper presentation NetKAT: Semantic Foundations for Networks   hw04 due  
  Apr 27 paper presentation VeriCon: towards verifying controller programs in software-defined networks   extra credit hw05 assigned  
16 May 2 paper presentation p4v: Practical Verification for Programmable Data Planes     presentation slides due
  May 4 project presentations        
17 May 9 no class (final exam week)        
  May 11 no class (final exam week)     extra credit hw05 due final report due

Homework

There will be approximately 5 homeworks, which will be completed individually. These are designed to help encourage you to keep up-to-date on the course material. You will have approximately 2 weeks to work on each homework.

Student Paper Presentations

Students will work in groups or individually to thoroughly read one of the program synthesis research papers at the end of the course schedule. Each group/individual will prepare a detailed (50 min) presentation on the paper, and will lead the class discussion on the corresponding day. Paper assignments will be finalized shortly after project proposals are due.

Final Project

Each student will propose a programming project which utilizes a verification/synthesis technique(s) in a domain of interest. Project proposals are due approximately halfway through the course (week 8). Each student will give a brief presentation during the last week of class, to describe the project results. A brief final report will be due at the end of finals week.

Project Proposal

The purpose of this document is to propose a non-trivial problem related to the topics discussed in the class, and describe the basic steps you will take to develop a software solution. The project proposal should be in PDF format, and should be typeset nicely using LaTeX, Word, LibreOffice, or similar. The report should be 3-4 pages, and should contain at a minimum the following sections:

  1. Introduction: describe the problem you are trying to solve, and discuss the problem’s relevance.
  2. Examples: work through some self-contained examples by hand.
  3. Proposed Approach: propose a technique/algorithm to solve the problem, and discuss the expected challenges.
  4. Proposed Evaluation: describe how you will evaluate the correctness/performance of your solution.

Your proposal should provide convincing evidence that (A) the problem is non-trivial, and (B) you have a reasonable plan to tackle the problem. For our purposes, non-trivial will mean (roughly) that an algorithm needs to be written to solve the problem. For example, implementing a SAT solver by making a single call to Z3 or MiniSAT would be a trivial solution. If any aspect of the proposal is unconvincing, the instructor may require changes that will need to be documented and incorporated into the final project.

Project Report / Project Code

The purpose of the Project Report is to flesh out the details missing from the Project Proposal – in particular, you should detail the steps you took to develop your solution, and show how you tested it. The project proposal should be in PDF format, and should be typeset nicely using LaTeX, Word, LibreOffice, or similar. The report should be 6-8 pages, and should contain at a minimum the following sections:

  1. Introduction: describe the problem you solved, and discuss the problem’s relevance.
  2. Examples: work through some self-contained examples, either by hand, or step-by-step using your tool.
  3. Approach: describe the technique/algorithm you built to solve the problem, and discuss the challenges you encountered.
  4. Evaluation: describe how you evaluated the correctness/performance of your solution.

The Project Report (an the accompanying Project Code) are due on the last day of the semester (see Schedule). The Code should work on a standard Ubuntu Linux machine. If needed, you can package your code as a VirtualBox VM, so that it can be run on Linux.

Project Presentation

We will have short final-project presentations during the final class period. Each presentation time slot will be about 9 minutes. Aim for 7-8 minutes of presentation, and that will leave 1-2 minutes for questions. Please practice your talk to ensure that it falls in the 7-8 minute range, so that we can keep on schedule. Your presentations slides are due before the first presentation begins (see Schedule). Please upload your slides in PDF format to your project repository.

In your talk, please be sure to cover each of the 4 elements on the project (Introduction, Examples, Approach, Evaluation). One detailed slide for each of these should be sufficient.

Online Community and Communication

In Homework 1, you will be asked to introduce yourself to the instructor. This includes sending a passport-style photo of yourself to the instructor. The photo must be clear, with your face un-obstructed. If you are not comfortable providing a photo, then you will need to contact the instructor to set up a brief appointment (either via Zoom or in-person) to introduce yourself. Failure to meet this requirement on Homework 1 will result in a 0 (zero) for the Participation component of the grade.

We will use Piazza in the class. This is a great way to ask questions and communicate with the instructor and your classmates. Participation on Piazza will factor into the Participation component of the grade.

The class Piazza link is: https://piazza.com/class/lczhmwfibzedv/

The instructor will use Piazza to communicate with the class. If you have questions about the course, you should first do a quick search on the Piazza page, to make sure your question has not already been answered there. If not, please go ahead and post your question on Piazza so that the instructor or another student can answer it publicly. This will help to streamline the communication.

NOTE: if you have a question you do not wish to publicize (e.g., about grades, etc.), please create a “private post” on Piazza. Email should only be used in rare instances where use of Piazza would not be feasible.

There is a Github organization for the class: https://github.com/csu-nvs

All of your individual/team repositories will show up there.

Class Notes

Class notes will be posted 1-2 days after the lecture. Posted notes are not guaranteed to provide all information discussed in lecture (class attendance is highly recommended).

Grading

The following percentages show how final grades will be calculated. The instructor will not perform any rounding on the scores (e.g., a score of 92.999 will not be rounded up to 93). The instructor may or may not curve the overall grades, depending on how well the class performs overall, however, The instructor expects each student to work hard, and not rely on the curve!

item percentage
homeworks 45%
presentations 20%
final project 25%
participation 10%

Letter grades will be calculated based on the following intervals:

range grade
[93,100] A
[90,93) A-
[87,90) B+
[83,87) B
[80,83) B-
[77,80) C+
[73,77) C
[70,73) C-
[67,70) D+
[63,67) D
[60,63) D-
[0,60) F

Late Policy

Late policy: late submissions are accepted up to 5 days after the deadline, with a penalty of -20% per day applied.

Attendance

We will not take attendance, but your overall class attendance will factor into the Participation component of the grade.

Collaboration

We will use GitHub for collaboration. We will use private individual and team-specific repositories to submit assignments. Your repositories will show up here: https://github.com/csu-nvs

Respectfulness and Academic Honesty

Every student is expected to show respect to the instructors and the rest of the class. This course is preparation for your future career, so please make sure you are behaving with the same level of professionalism that would be expected at a future full-time position. The general rule of thumb is: informal is okay, but disrespectful is not.

Plagiarism/cheating is NOT acceptable, and will be met with the maximum available penalty. Sophisticated plagiarism-detection software will be used on every submitted assignment, and all confirmed instances of cheating will be immediately reported to the Computer Science department. Please ensure that you do not engage in or facilitate academic dishonesty in this class!

IMPORTANT CAVEATS

  1. A purely grade-driven approach to taking (graduate) courses is at best unnecessary, and at worst highly counterproductive. The volume of grade-related email/questions generated by students is typically far too high. As a (graduate) student, your task is not to to squeeze every possible point out of the course, your job is to learn the material, and be able to use it in the real world (for your research, or for your future job, etc.). It’s likely that 99% of employers are NOT going to care if you have an A versus an A- or B+, but they ARE going to care if you can reason about computer science concepts, write code, and understand how to build systems.

  2. YOU will determine how much knowledge/experience you gain from this course. The instructor has lots of expertise in the domains covered in the course, and will work hard to present you with the resources, tools, and techniques to develop a similar skillset. However, education is not a pre-packaged box that the instructor can hand out – YOU will need to put in the effort to actively engage with the material, participate in class, and work hard on the assignments/projects.

  3. We will take a very formal approach to the topics, i.e., we will carefully develop the mathematical/logical underpinnings of the concepts examined throughout the course. Although this may seem dry or boring at first, it is very important for you to develop a taste for being rigorous about computer science. This type of approach will suit you well in your future career, regardless of your research area or future career plans.

  4. We will learn how to read and absorb highly technical written materials. Throughout the course, the instructor will work to collect some of the most easily-digestible materials for your reference, but a big part of research is figuring out things that you don’t quite understand at first glance. You will need to exercise perseverance in reading research papers, and iterate until the pieces start falling into place.

Course Feedback

Just as you expect the instructor to grade your coursework in a fair and timely fashion, the instructor expects you to take the CSU course feedback seriously. Feedback is typically collected near the end of the course.

Your feedback is important! The instructor will read all of your comments, and use them to help improve the course/teaching in the future. Rather than simply leaving a numeric rating, please describe your rating in words – for example, a high score without any indication of what you enjoyed/gained from the class is great but not particularly informative, and a low score without any indication of what went wrong in the class will not help the instructor improve.

Please put yourself in the instructor’s shoes, and be constructive in your comments.

Typos and Bug Fixes

Please use the Issues or Pull Request features of GitHub to bring any typos or bugs to the instructor’s attention.

CSU Resources and Policies

Please visit the following CSU page to view policies relevant to your courses, and resources to help with various challenges you may encounter: https://col.st/2FA2g