Topic List
Students CAN pick a project which is NOT on this list.
You should prove Bourbaki-Witt fixpoint theorem and reprove loop_recur
using this theorem. For this purpose, you should define concepts like partial
ordering w.r.t. an equivalent relation but not only w.r.t. equality.
Difficulty estimation: 3. Slots remaining: 3.
You should first prove a general theorem which can be used to prove
equivalence between two recursively defined semantics. Then, you need to prove
the equivalence among all three recursively defined denotational semantics that
we mentioned in class using this theorem.
Difficulty estimation: 1. Slots remaining: 3.
You should first formalize 3 definitions that we have not provided in
class. Then you should prove the equivalence among 7 definitions of reflexive
transitive closure.
Difficulty estimation: 0. Slots remaining: 3.
Prove Imp's Hoare logic completeness.
Difficulty estimation: 5. Slots remaining: 0.
You should prove first order logic's soundness theorem. You need to build
all basic properties of FOL by yourself.
Difficulty estimation: 4. Slots remaining: 3.
You should prove first order logic's completeness theorem. You do not need
to build all basic properties of FOL by yourself. For necessary but elementary
facts, you can state them and use them without proving.
Difficulty estimation: 8. Slots remaining: 2.
You need to read Chapter 10.2, 10.3 and 10.3.1 of <<Parameterized
Algorithm>> by Marek Cygan. You should formalize the algorithm for coloring
counting using fast Mobius transformation. Its correctness is theorem 10.16
in the book. You should prove that algorithm's correctness in Coq.
You only need to define this algorithm as a Coq function or a Coq relation
(small step description of this algorithm). You do not need to implement it
in a programming language. You do not need to verify its implementation in
any programming language.
Difficulty estimation: 5. Slots remaining: 3.
Discrete Fourier transformation can be used to compute big number's
multiplication. FFT is a well-known efficient algorithm to calculate discrete
fourier transformation. Your should learn how this algorithm works and prove
its correctness in Coq. You need to either define this algorithm using complex
numbers (you may find some library in Coq's standard library or other Coq's
user's contribution) or via an abstract ring with some extra properties.
You only need to define this algorithm as a Coq function or a Coq relation
(small step description of this algorithm). You do not need to implement it
in a programming language. You do not need to verify its implementation in
any programming language.
Difficulty estimation: 5. Slots remaining: 2.
LIS (longest increasing subsequence) is a famous problem which can solved
in O(nlogn) time, in which n means the length of the whole sequence. Pick an
algorithm for LIS with that time bound and prove its correctness.
You only need to define this algorithm as a Coq function or a Coq relation
(small step description of this algorithm). You do not need to implement it
in a programming language. You do not need to verify its implementation in
any programming language.
Difficulty estimation: 4. Slots remaining: 3.
You should first write a binary search tree in C and then verify its
correctness using VST. This program should at least including insert, query
(returning value / returning address), set (by key / by address), next,
previous, begin, and end these operations. The following signature describes
different query and set functions:
Difficulty estimation: 6. Slots remaining: 0.
You should first define a Hoare logic, a denotational semantics and a small
step semantics for a programming language with break and continue. Then you
need to prove the equivalence between small step semantics and denotational
semantics. Also, you should prove the soundness theorem of Hoare logic.
Difficulty estimation: 7. Slots remaining: 0.
You should first define a Hoare logic, a denotational semantics and a small
step semantics for a programming language with possible runtime error and some
nondeterministic commands. Then you need to prove the equivalence between small
step semantics and denotational semantics. Also, you should prove the soundness theorem of Hoare logic.
Difficulty estimation: 4. Slots remaining: 3.
Bourbaki-Witt fixpoint theorem
Equivalence among 3 denotational semantics
Equivalence among 7 definitions of reflexive transitive closure
Hoare logic's completeness theorem
First order logic's soundness theorem
First order logic's completeness theorem
Algorithm Correctness of Mobius transformation
Algorithm Correctness of fast Fourier transform (FFT)
Algorithm correctness for calculating longest increasing subsequence
Implementation Correctness of binary search tree's via VST
typedef int value; typedef int key; value query_value(key k); struct tree * query_addr(key k); void set_by_key(key k, value v); void set_by_addr(struct tree * p, value v);
Semantic equivalence for programs with break and continue
Semantic equivalence for programs with run-time error and nondeterminism
(* Tue May 21 13:01:44 UTC 2019 *)