-
- Downloads
Egraph (#220)
Add a tactic called "Congruence". This tactic tries to prove a sequent by congruence. Consider the congruence closure of all terms and formulas in the sequent, with respect to all === and <=> left of the sequent. The sequent is provable by congruence if one of the following conditions is met: - The right side contains an equality s === t or equivalence a <=> b provable in the congruence closure. - The left side contains an negated equality !(s === t) or equivalence !(a <=> b) provable in the congruence closure. - There is a formula a on the left and b on the right such that a and b are congruent. - There are two formulas a and !b on the left such that a and b are congruent. - There are two formulas a and !b on the right such that a and b are congruent. - The sequent is Ol-valid without equality reasoning Note that complete congruence closure modulo OL is an open problem. The tactic uses an egraph datastructure to compute the congruence closure. The egraph itselfs relies on two underlying union-find datastructure, one for terms and one for formulas. The union-finds are equiped with an explain method that produces a path between any two elements in the same equivalence class. Each edge of the path can come from an external equality, or be the consequence of congruence. The tactic uses uses this path to produce needed proofs.
Showing
- CHANGES.md 3 additions, 0 deletionsCHANGES.md
- lisa-examples/src/main/scala/Example.scala 58 additions, 29 deletionslisa-examples/src/main/scala/Example.scala
- lisa-sets/src/main/scala/lisa/automation/Congruence.scala 624 additions, 0 deletionslisa-sets/src/main/scala/lisa/automation/Congruence.scala
- lisa-sets/src/main/scala/lisa/maths/settheory/SetTheory2.scala 2 additions, 2 deletions...sets/src/main/scala/lisa/maths/settheory/SetTheory2.scala
- lisa-sets/src/test/scala/lisa/automation/CongruenceTest.scala 914 additions, 0 deletions...-sets/src/test/scala/lisa/automation/CongruenceTest.scala
- lisa-sets/src/test/scala/lisa/utilities/TestMain.scala 16 additions, 0 deletionslisa-sets/src/test/scala/lisa/utilities/TestMain.scala
- lisa-utils/src/main/scala/lisa/fol/FOLHelpers.scala 3 additions, 0 deletionslisa-utils/src/main/scala/lisa/fol/FOLHelpers.scala
- lisa-utils/src/main/scala/lisa/prooflib/BasicMain.scala 3 additions, 1 deletionlisa-utils/src/main/scala/lisa/prooflib/BasicMain.scala
- lisa-utils/src/main/scala/lisa/prooflib/ProofsHelpers.scala 2 additions, 2 deletionslisa-utils/src/main/scala/lisa/prooflib/ProofsHelpers.scala
- refman/lisa.pdf 0 additions, 0 deletionsrefman/lisa.pdf
- refman/tactics.tex 53 additions, 0 deletionsrefman/tactics.tex
Loading
Please register or sign in to comment