Facebook
From Blush Bison, 1 Year ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 48
  1. Certainly! Here are some online resources you may find helpful for learning about bounded model checking:
  2.         1       "Introduction to Bounded Model Checking" by Armin Biere: This is a comprehensive tutorial that covers the basics of bounded model checking, including its history, underlying principles, and key concepts. The tutorial also provides several examples to help you understand how bounded model checking works in practice. You can find it at https://fmv.jku.at/papers/Biere-FMCAD03-tutorial.pdf.
  3.         2       "Bounded Model Checking" by Edmund Clarke: This is a short, introductory paper that provides an overview of bounded model checking and its applications. It's a great starting point for anyone who wants to learn about the basics of the technique. You can find it at https://www.cs.cmu.edu/~emc/papers/BoundedModelChecking.pdf.
  4.         3       "An Introduction to Bounded Model Checking" by Ankit Goel: This is a tutorial that covers the basics of bounded model checking, including its advantages, limitations, and applications. The tutorial also provides a step-by-step guide on how to use a bounded model checker. You can find it at https://www.learncbse.in/introduction-to-bounded-model-checking/.
  5.         4       "Bounded Model Checking" by Roberto Bruttomesso: This is a video lecture that provides an introduction to bounded model checking, including its principles, advantages, and limitations. The lecture also provides several examples to help you understand how bounded model checking works in practice. You can find it at https://www.youtube.com/watch?v=dzT9faejR10.
  6.         5       "Introduction to Model Checking" by Christel Baier and Joost-Pieter Katoen: This is a comprehensive textbook that covers both bounded and unbounded model checking techniques. The book provides a detailed overview of the principles, algorithms, and applications of model checking, including bounded model checking. You can find it at https://www.springer.com/gp/book/9783642199630.
  7. I hope these resources are helpful!
  8.  
  9.  
  10. Can you sketch out a semester long course project on implementing a bounded model checker for golang?
  11.  
  12.  
  13. Sure, here's a possible semester-long course project on implementing a bounded model checker for Go:
  14. Project Title: Implementing a Bounded Model Checker for Go
  15. Project Overview: The project involves implementing a bounded model checker for Go programs. The model checker will take as input a Go program and a bound (i.e., a limit on the number of iterations that the program can execute) and check whether the program satisfies a given safety property. The project will be divided into several stages, each building on the previous one:
  16. Stage 1: Familiarization with Go and Model Checking
  17. In this stage, students will become familiar with the basics of Go programming and model checking. They will read relevant papers and textbooks on Go and model checking and complete some exercises to solidify their understanding of the topics. By the end of this stage, students should be able to write simple Go programs and understand the basic concepts of model checking.
  18. Stage 2: Implementing a Symbolic Executor for Go
  19. In this stage, students will implement a symbolic executor for Go programs. The symbolic executor will take as input a Go program and a set of symbolic inputs (i.e., variables whose values are not known) and produce a symbolic execution tree that captures all possible paths that the program can take for the given inputs. The symbolic executor will use a constraint solver to generate constraints that capture the conditions under which each path is taken. By the end of this stage, students should be able to implement a basic symbolic executor for Go programs.
  20. Stage 3: Implementing a Bounded Model Checker for Go
  21. In this stage, students will implement a bounded model checker for Go programs using the symbolic executor from Stage 2. The model checker will take as input a Go program, a bound on the number of iterations, and a safety property expressed as a temporal logic formula. The model checker will first use the symbolic executor to generate the symbolic execution tree for the program and then check the safety property on each path up to the given bound. If the safety property is violated on any path, the model checker will report a counterexample. By the end of this stage, students should be able to implement a basic bounded model checker for Go programs.
  22. Stage 4: Optimizing the Bounded Model Checker for Go
  23. In this stage, students will optimize the bounded model checker implemented in Stage 3. They will explore various optimization techniques such as partial order reduction, symmetry reduction, and caching to improve the efficiency of the model checker. By the end of this stage, students should be able to implement an optimized bounded model checker for Go programs.
  24. Stage 5: Evaluation and Presentation
  25. In this stage, students will evaluate the performance of their bounded model checker on a set of benchmark programs and compare it with existing model checkers for Go. They will also prepare a presentation summarizing their work and highlighting the strengths and limitations of their approach.
  26. Deliverables: The deliverables for this project include:
  27.         •     A report documenting the implementation and evaluation of the bounded model checker.
  28.         •     A presentation summarizing the work and highlighting the strengths and limitations of the approach.
  29.         •     The source code of the bounded model checker implemented by the students.
  30. Assessment: The project will be assessed based on the following criteria:
  31.         •     The correctness and completeness of the implementation.
  32.         •     The efficiency and scalability of the model checker.
  33.         •     The clarity and organization of the report and presentation.
  34.         •     The quality of the source code and the use of good software engineering practices.
  35. Prerequisites: The course project assumes a solid understanding of programming concepts and familiarity with Go programming. Students should have completed a course on programming languages and a course on software engineering. Familiarity with model checking is desirable but not required, as the project will cover the basics of model checking.
  36.  
  37.  
  38. Can you breakdown steps 3 and 4 into detailed steps?
  39.  
  40.  
  41. Sure! Here are detailed steps for stages 3 and 4 of the semester-long course project on implementing a bounded model checker for Go:
  42. Stage 3: Implementing a Bounded Model Checker for Go
  43.         1       Define the syntax for the temporal logic formulae that the model checker will use to specify safety properties. This syntax should be expressive enough to capture a wide range of safety properties.
  44.         2       Implement a parser that can parse temporal logic formulae expressed in the syntax defined in step 1.
  45.         3       Define the data structures that will be used to represent the symbolic execution tree and the constraints generated by the symbolic executor.
  46.         4       Implement the symbolic executor for Go programs. The symbolic executor should take as input a Go program and a set of symbolic inputs, and it should produce a symbolic execution tree that captures all possible paths that the program can take for the given inputs. The symbolic executor should also generate constraints that capture the conditions under which each path is taken.
  47.         5       Implement the bounded model checker for Go programs. The model checker should take as input a Go program, a bound on the number of iterations, and a safety property expressed as a temporal logic formula. The model checker should first use the symbolic executor to generate the symbolic execution tree for the program and then check the safety property on each path up to the given bound. If the safety property is violated on any path, the model checker should report a counterexample.
  48.         6       Test the bounded model checker on a set of benchmark programs and ensure that it produces correct results.
  49. Stage 4: Optimizing the Bounded Model Checker for Go
  50.         1       Implement partial order reduction (POR) in the model checker. POR is a technique that exploits the independence between certain events in the program to reduce the number of paths that the model checker needs to explore.
  51.         2       Implement symmetry reduction in the model checker. Symmetry reduction is a technique that exploits symmetries in the program to reduce the number of paths that the model checker needs to explore.
  52.         3       Implement caching in the model checker. Caching is a technique that stores previously computed results to avoid recomputing them.
  53.         4       Evaluate the performance of the optimized model checker on a set of benchmark programs and compare it with the unoptimized version. Tune the optimization parameters to achieve the best performance.
  54.         5       Document the optimization techniques used in the model checker and their impact on performance.
  55.         6       Test the optimized model checker on a set of benchmark programs and ensure that it produces correct results.
  56. I hope that helps! Let me know if you have any other questions.
  57.  
  58.  
  59. Can you also break down step 2?
  60.  
  61.  
  62. Sure! Here are detailed steps for stage 2 of the semester-long course project on implementing a bounded model checker for Go:
  63. Stage 2: Implementing a Symbolic Executor for Go
  64.         1       Define the data structures that will be used to represent the symbolic execution tree and the constraints generated by the symbolic executor. These data structures should be capable of representing all possible paths that a Go program can take.
  65.         2       Implement a parser that can parse Go programs and generate an abstract syntax tree (AST) that represents the program's structure.
  66.         3       Implement a symbolic executor for Go programs. The symbolic executor should take as input a Go program and a set of symbolic inputs, and it should produce a symbolic execution tree that captures all possible paths that the program can take for the given inputs. The symbolic executor should also generate constraints that capture the conditions under which each path is taken.
  67.         4       Implement a constraint solver that can take as input a set of constraints generated by the symbolic executor and a set of concrete inputs, and it should produce a set of concrete values that satisfy the constraints. The constraint solver should be capable of handling complex constraints involving arithmetic, logical, and bitwise operations.
  68.         5       Integrate the symbolic executor and the constraint solver to generate concrete inputs that exercise specific paths in the program. This process is called path exploration.
  69.         6       Implement an algorithm to detect and avoid path explosion, which occurs when the number of paths generated by the symbolic executor grows exponentially with the size of the program.
  70.         7       Implement an algorithm to detect and handle unbounded loops, which occur when the program contains loops that can execute an unbounded number of times.
  71.         8       Test the symbolic executor on a set of benchmark programs and ensure that it produces correct results.
  72. I hope that helps! Let me know if you have any other questions.
  73.  
  74.  
  75.