From 386e808c82509c939138c7ee3e68d8299a61521d Mon Sep 17 00:00:00 2001 From: SimonGuilloud <simon.guilloud@bluewin.ch> Date: Tue, 18 Apr 2023 16:01:44 +0200 Subject: [PATCH 1/2] correct issue deep in OL Equivalence checker related to quantifiers. --- .../main/scala/lisa/kernel/fol/EquivalenceChecker.scala | 8 +------- .../lisa/automation/kernel/OLPropositionalSolver.scala | 4 ++++ src/main/scala/lisa/mathematics/SetTheory.scala | 2 +- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/lisa-kernel/src/main/scala/lisa/kernel/fol/EquivalenceChecker.scala b/lisa-kernel/src/main/scala/lisa/kernel/fol/EquivalenceChecker.scala index 70bb9a28..adfeb547 100644 --- a/lisa-kernel/src/main/scala/lisa/kernel/fol/EquivalenceChecker.scala +++ b/lisa-kernel/src/main/scala/lisa/kernel/fol/EquivalenceChecker.scala @@ -108,12 +108,6 @@ private[fol] trait EquivalenceChecker extends FormulaDefinitions { if (value) lessThanBitSet.update(otherIx + 1, true) } - // TODO: Check if needed - override def equals(obj: Any): Boolean = obj match { - case f: NormalFormula => eq(f) - case _ => super.equals(obj) - } - def recoverFormula: Formula = toFormulaAIG(this) } sealed abstract class NonTraversable extends NormalFormula @@ -400,7 +394,7 @@ private[fol] trait EquivalenceChecker extends FormulaDefinitions { case (NormalSchemConnector(id1, args1, polarity1), NormalSchemConnector(id2, args2, polarity2)) => id1 == id2 && polarity1 == polarity2 && args1.zip(args2).forall(f => latticesEQ(f._1, f._2)) case (NormalForall(x1, inner1, polarity1), NormalForall(x2, inner2, polarity2)) => - polarity1 == polarity2 && latticesLEQ(inner1, inner2) + polarity1 == polarity2 && (if (polarity1) latticesLEQ(inner1, inner2) else latticesLEQ(inner2, inner1)) case (_: NonTraversable, _: NonTraversable) => false case (_, NormalAnd(children, true)) => diff --git a/src/main/scala/lisa/automation/kernel/OLPropositionalSolver.scala b/src/main/scala/lisa/automation/kernel/OLPropositionalSolver.scala index 886216f7..2bf8faeb 100644 --- a/src/main/scala/lisa/automation/kernel/OLPropositionalSolver.scala +++ b/src/main/scala/lisa/automation/kernel/OLPropositionalSolver.scala @@ -92,11 +92,15 @@ object OLPropositionalSolver { // Transform a sequent into a format more adequate for solving private def augmentSequent(s: Sequent): AugSequent = { + import lisa.utils.parsing.FOLPrinter.* val f = reducedForm(sequentToFormula(s)) val atoms: scala.collection.mutable.Map[Formula, Int] = scala.collection.mutable.Map.empty AugSequent((Nil, Nil), f) } + + + def reduceSequent(s: Sequent): Formula = { val p = simplify(sequentToFormula(s)) val nf = computeNormalForm(p) diff --git a/src/main/scala/lisa/mathematics/SetTheory.scala b/src/main/scala/lisa/mathematics/SetTheory.scala index 7f301e91..fc33f2dd 100644 --- a/src/main/scala/lisa/mathematics/SetTheory.scala +++ b/src/main/scala/lisa/mathematics/SetTheory.scala @@ -868,7 +868,7 @@ object SetTheory extends lisa.Main { val exRed = thenHave(exists(b, in(b, x) /\ in(t, b)) |- exists(b, in(b, x))) by LeftExists have(in(t, union(x)) |- exists(b, in(b, x))) by Cut(unionAx, exRed) - thenHave(thesis) by Weakening + thenHave(thesis) by Tautology } val rhs = have(∀(b, in(b, x) ==> in(t, b)) /\ exists(b, in(b, x)) |- (in(t, union(x)) /\ ∀(b, in(b, x) ==> in(t, b)))) subproof { -- GitLab From d9f22e59ef42c0da0aef1c3ffe46770d8bfb5550 Mon Sep 17 00:00:00 2001 From: SimonGuilloud <simon.guilloud@bluewin.ch> Date: Tue, 18 Apr 2023 16:05:42 +0200 Subject: [PATCH 2/2] scalafix --- .../scala/lisa/automation/kernel/OLPropositionalSolver.scala | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/scala/lisa/automation/kernel/OLPropositionalSolver.scala b/src/main/scala/lisa/automation/kernel/OLPropositionalSolver.scala index 2bf8faeb..886216f7 100644 --- a/src/main/scala/lisa/automation/kernel/OLPropositionalSolver.scala +++ b/src/main/scala/lisa/automation/kernel/OLPropositionalSolver.scala @@ -92,15 +92,11 @@ object OLPropositionalSolver { // Transform a sequent into a format more adequate for solving private def augmentSequent(s: Sequent): AugSequent = { - import lisa.utils.parsing.FOLPrinter.* val f = reducedForm(sequentToFormula(s)) val atoms: scala.collection.mutable.Map[Formula, Int] = scala.collection.mutable.Map.empty AugSequent((Nil, Nil), f) } - - - def reduceSequent(s: Sequent): Formula = { val p = simplify(sequentToFormula(s)) val nf = computeNormalForm(p) -- GitLab