commit 6418d3112c22e4d30ef7c4c6e283ba13e6a7590e Author: Simon Cruanes Date: Wed Apr 11 09:02:54 2018 -0500 add todo file diff --git a/TODO.md b/TODO.md new file mode 100644 index 00000000..c41dc4c1 --- /dev/null +++ b/TODO.md @@ -0,0 +1,73 @@ +# Goals + +## TODO + +- SAT: + * merge all clause vectors into one + * remove all simplifications at level 0 + * addition of clauses: should be much simpler + +- explicit lifecycle for SAT atoms (dead/assigned/in-heap) +- simplify addition of clauses: + * do not simplify at level 0 + * steps on addition: + 1. internalize all atoms (dead -> in-heap) + 2. unit-propagate/do nothing/add clause + 3. remove clause on backtracking if not at level 0 + +- merge Solver_types.ml with Internal.ml +- make CC work on QF_UF + * internalize terms on the fly (backtrackable) + * basic notion of activity (of subterms) for `ite` (and recfuns, later)? + +- redo_down_to_level_0 should actually redo down to `base_level` + +- add `CC.add_rw_step t u` work, where `t-->u` + (remove `t` from sig table, should have almost 0 overhead after that) + * use it for + +- notion of `value` (V_true,V_false,V_custom, + maybe undefined some day) +- write theory of datatypes (without acyclicity) with local case splits + `value` + injectivity +- design evaluation system (guards + `eval:(term -> value) option` in custom TC) +- compilation of rec functions to defined constants +- theory of defined constants relying on congruence closure + evaluation + of guards of each case + +- datatype acyclicity check + +- Shostak theory of eq-ℚ + +- abstract domain propagation in CC +- domain propagation (intervals) for ℚ arith +- full ℚ theory: shostak + domains + if-sat simplex + +## Main goals + +- Add a backend to send proofs to dedukti + * First, pure resolution proofs + * Then, require theories to output lemma proofs for dedukti (in some format yet to be decided) +- Allow to plug one's code into boolean propagation + * react upon propagation (possibly by propagating more, or side-effect) + * more advanced/specific propagation (2-clauses)? + * implement 'constraints' (see https://www.lri.fr/~conchon/TER/2013/3/minisat.pdf ) + +## Long term goals + +- max-sat/max-smt +- coq proofs ? + + +## Done + +- theory of boolean constructs (on the fly Tseitin using local clauses) + * test `Sat_solver.add_clause` and `new_atom` behavior upon backtracking + → when we backtrack an atom, its Tseitin encoding should be removed + * NOTE: clauses should never be added twice + (or else: what if a clause is added, removed (but not filtered from watched lits) then re-added? duplicate?) +- backtrackable addition of clauses/atoms in Sat solver +- remove tseitin lib +- typing and translation Ast -> Term (from mc2?) +- main executable for SMT solver +- base types (Term, Lit, …) +- theory combination +- basic design of theories