From a978b46a98b130a07983cc80a43342f2e4465869 Mon Sep 17 00:00:00 2001 From: SimonGuilloud Date: Wed, 20 Dec 2023 19:08:26 +0100 Subject: [PATCH] Introduce local definitions and comprehensions (#199) This PR introduces methods witness, t.replace, t.collect, t.map and t.filter. Update of the manual, describing how those work, along with some corrections to the statement of axioms ot match LISA's presentation. Include test cases using each, and proved some required theorems. Fix an error in the reconstruction of OL-normalized formulas used in some tactics. --- CHANGES.md | 3 + Reference Manual/lisa.pdf | Bin 255269 -> 265521 bytes Reference Manual/lisa.tex | 2 +- Reference Manual/macro.tex | 3 + Reference Manual/prooflib.tex | 55 ++++- Reference Manual/theory.tex | 65 +++++- .../lisa/kernel/fol/EquivalenceChecker.scala | 2 +- .../main/scala/lisa/SetTheoryLibrary.scala | 10 +- .../scala/lisa/automation/CommonTactics.scala | 2 +- .../settheory/SetTheoryTactics.scala | 8 +- .../lisa/maths/settheory/Comprehensions.scala | 201 ++++++++++++++++++ .../lisa/maths/settheory/SetTheory.scala | 75 +++---- .../lisa/maths/settheory/SetTheory2.scala | 104 +++++++++ .../settheory/orderings/InclusionOrders.scala | 2 +- .../maths/settheory/orderings/Induction.scala | 5 +- .../settheory/orderings/PartialOrders.scala | 4 +- .../maths/settheory/orderings/Recursion.scala | 41 +++- .../maths/settheory/orderings/Segments.scala | 9 +- .../lisa/utilities/ComprehensionsTests.scala | 83 ++++++++ .../src/main/scala/lisa/fol/Common.scala | 5 +- .../src/main/scala/lisa/fol/Sequents.scala | 2 +- .../scala/lisa/prooflib/ProofsHelpers.scala | 60 +++++- .../scala/lisa/prooflib/WithTheorems.scala | 55 +++-- 23 files changed, 707 insertions(+), 89 deletions(-) create mode 100644 lisa-sets/src/main/scala/lisa/maths/settheory/Comprehensions.scala create mode 100644 lisa-sets/src/main/scala/lisa/maths/settheory/SetTheory2.scala create mode 100644 lisa-sets/src/test/scala/lisa/utilities/ComprehensionsTests.scala diff --git a/CHANGES.md b/CHANGES.md index 07a5d71d..25595ade 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,8 @@ # Change List +## 2023-12-19 +Introduction of local definitions, with methods `witness`, `t.replace`, `t.collect`, `t.map` and `t.filter`. Update of the manual, describing how those work, along with some corrections to the statement of axioms ot match LISA's presentation. Include test cases using each, and proved some required theorems. Fix an error in the reconstruction of OL-normalized formulas used in some tactics. + ## 2023-12-06 Re-added discovery of formulas which could not be substituted for error reporting to `Substitution.ApplyRules` diff --git a/Reference Manual/lisa.pdf b/Reference Manual/lisa.pdf index 371e8030840fa106d5fd471a92ace6ccf3f6ad19..e97f7213031a3c0d2316b802cf7e2e5ec394c855 100644 GIT binary patch delta 114465 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 z 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 delta 104133 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%0Dq!KaU6}K?+JWJz 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 B7B~O^ diff --git a/Reference Manual/lisa.tex b/Reference Manual/lisa.tex index 7f0764c5..e08f0c4b 100644 --- a/Reference Manual/lisa.tex +++ b/Reference Manual/lisa.tex @@ -23,7 +23,7 @@ \vspace{1.5cm} - \textbf{\large Version 0.2.1} + %\textbf{\large Version 0.2.1} \textbf{\large \today} diff --git a/Reference Manual/macro.tex b/Reference Manual/macro.tex index f0aa42bf..3f33ec60 100644 --- a/Reference Manual/macro.tex +++ b/Reference Manual/macro.tex @@ -33,10 +33,13 @@ \newtheorem{axz}{} \renewcommand\theaxz{Z\arabic{axz}} +\newcommand*{\axzautorefname}{Axiom} \newtheorem{axzf}{} \renewcommand\theaxzf{ZF\arabic{axzf}} +\newcommand*{\axzfautorefname}{Axiom} \newtheorem{axtg}{} \renewcommand\theaxtg{TG\arabic{axtg}} +\newcommand*{\axtgautorefname}{Axiom} \theoremstyle{definition} \newtheorem{definition}{Definition} diff --git a/Reference Manual/prooflib.tex b/Reference Manual/prooflib.tex index 6ac40d7e..a025733d 100644 --- a/Reference Manual/prooflib.tex +++ b/Reference Manual/prooflib.tex @@ -21,7 +21,6 @@ \chapter{Developping Mathematics with Prooflib} have(thesis) by Tautology.from(step1, step2) } - val emptySetIsASubset = Theorem( ∅ ⊆ x ) { @@ -40,7 +39,59 @@ \chapter{Developping Mathematics with Prooflib} In this chapter, we will describe how each of these construct is made possible and how they translate to statements in the Kernel. -\section*{WIP} +\section{Richer FOL} + + + +\section{Proof Builders} + +\subsection{Proofs} + +\subsection{Facts} + +\subsection{Instantiations} + +\subsection{Local Definitions} +\label{sec:localDefinitions} +The following line of reasonning is standard in mathematical proofs. Suppose we have already proven the following fact: +$$\exists x. P(x)$$ +And want to prove the property $\phi$. +A proof of $\phi$ using the previous theorem would naturally be obtained the following way: +\begin{quotation} + Since we have proven $\exists x. P(x)$, let $c$ be an arbitrary value such that $P(c)$ holds. + Hence we prove $\phi$, using the fact that $P(c)$: (...). +\end{quotation} +However, introducing a definition locally corresponding to a statement of the form +$$\exists x. P(x)$$ +is not a built-in feature of first order logic. This can however be simulated by introducing a fresh variable symbol $c$, that must stay fresh in the rest of the proof, and the assumption $P(c)$. The rest of the proof is then carried out under this assumption. When the proof is finished, the end statement should not contain $c$ free as it is a \textit{local} definition, and the assumption can be eliminated using the LeftExists and Cut rules. Such a $c$ is called a \textit{witness}. +Formally, the proof in (...) is a proof of $P(c) \vdash \phi$. This can be transformed into a proof of $\phi$ by mean of the following steps: +\begin{center} + \AxiomC{$P(c) \vdash \phi$} + \UnaryInfC{$\exists x. P(x) \vdash \phi$} + \RightLabel{\text { LeftExists}} + \AxiomC{$\exists x. P(x)$} + \RightLabel{\text { Cut}} + \BinaryInfC{$\phi$} +\end{center} +Not that for this step to be correct, $c$ must not be free in $\phi$. This correspond to the fact that $c$ is an arbitrary free symbol. + +This simulation is provided by LISA through the \lstinline|witness|{} method. It takes as argument a fact showing $\exists x. P(x)$, and introduce a new symbol with the desired property. For an example, see figure \ref{fig:localDefinitionExample}. + +\begin{figure} + \begin{lstlisting}[language=lisa, frame=single] + val existentialAxiom = Axiom(exists(x, in(x, emptySet))) + val falso = Theorem(⊥) { + val c = witness(existentialAxiom) + have(⊥) by Tautology.from( + c.definition, emptySetAxiom of (x:= c)) + } + \end{lstlisting} + \caption{An example use of local definitions in LISA} + \label{fig:localDefinitionExample} + \end{figure} + + +\section{DSL} %It is important to note that when multiple such files are developed, they all use the same underlying \lstinline|RunningTheory|{}. This makes it possible to use results proved previously by means of a simple \lstinline|import|{} statement as one would import a regular object. Similarly, one should also import as usual automation and tactics developed alongside. It is expected in the medium term that \lstinline|lisa.Main|{} will come with basic automation. %All imported theory objects will be run through as well, but only the result of the selected one will be printed. diff --git a/Reference Manual/theory.tex b/Reference Manual/theory.tex index 5817ba5b..7dca513a 100644 --- a/Reference Manual/theory.tex +++ b/Reference Manual/theory.tex @@ -41,25 +41,28 @@ \chapter{Library Development: Set Theory} $\forall x. x \notin \emptyset$ \end{axz} \begin{axz}[extensionality]\label{axz:extensionality} - $\forall x, y. (\forall z. z \in x \iff z \in y) \iff (x = y)$ + $(\forall z. z \in x \iff z \in y) \iff (x = y)$ \end{axz} \begin{axz}[subset]\label{axz:subset} - $\forall x, y. x\subset y \iff \forall z. z \in x \iff z \in y$ + $x\subset y \iff \forall z. z \in x \implies z \in y$ \end{axz} \begin{axz}[pair]\label{axz:pair} - $\forall x, y, z. (z \in (x, y)) \iff ((x \in y) \lor (y \in z))$ + $(z \in \lbrace x, y\rbrace) \iff ((x = z) \lor (y = z))$ \end{axz} \begin{axz}[union]\label{axz:union} - $\forall x, z. (x \in \operatorname{U}(z)) \iff (\exists y. (x \in y) \land (y \in z))$ + $(z \in \operatorname{U}(x)) \iff (\exists y. (y \in x) \land (z \in y))$ \end{axz} \begin{axz}[power]\label{axz:power} - $\forall x, y. (x \in \operatorname{\mathcal{P}}(y)) \iff (x \subset y)$ + $(x \in \operatorname{\mathcal{P}}(y)) \iff (x \subset y)$ \end{axz} \begin{axz}[foundation]\label{axz:foundation} $\forall x. (x \neq \emptyset) \implies (\exists y. (y \in x) \land (\forall z. z \in x))$ \end{axz} \begin{axz}[comprehension schema]\label{axz:comprehension} - $\forall z, \vec{v}. \exists y. \forall x. (x \in y) \iff ((x \in z) \land \phi(x, z, \vec{v}))$ + $\exists y. \forall x. x \in y \iff (x \in z \land \phi(x))$ + \end{axz} + \begin{axz}[infinity]\label{axz:infinity} + $\exists x. \emptyset \in x \land (\forall y. y \in x \implies \operatorname{U}(\lbrace y, \lbrace y, y \rbrace \rbrace) \in x)$ \end{axz} \caption{Axioms for Zermelo set theory.} \label{fig:axiomsz} @@ -67,9 +70,55 @@ \chapter{Library Development: Set Theory} \begin{figure} \begin{axzf}[replacement schema]\label{axzf:replacement} - $$\forall a. (\forall x. (x \in a) \implies !\exists y. \phi(a, \vec{v}, x, y)) \implies $$ - $$(\exists b. \forall x. (x \in a) \implies (\exists y. (y \in b) \land \phi(a, \vec{v}, x, y)))$$ + $$\forall x. (x \in a) \implies \forall y, z. (\psi(x, y) \land \psi(x, y)) \implies y = z \implies $$ + $$(\exists b. \forall y. (y \in B) \implies (\exists x. (x \in a) \land \psi(x, y)))$$ \end{axzf} \caption{Axioms for Zermelo-Fraenkel set theory.} \label{fig:axiomszf} \end{figure} + + +\section{Using Comprehension and Replacement} + +In traditional mathematics and set theory, it is standard to use \textit{set builder notations}, to denote sets built from comprehension and replacement, for example + +$$\lbrace -x \mid x\in \mathbb N \land \operatorname{isEven}(x) \rbrace$$ +This also naturally corresponds to \textit{comprehensions} over collections in programming languages, as in \autoref{tab:comprehensionsProgramming}. +\begin{table}[h] + \begin{tabular}{l|l} + \textbf{Language} & \textbf{Comprehension} \\ \hline + Python & \lstinline$[-x for x in range(10) if x % 2 == 0]$ \\ + Haskell & \lstinline$[-x | x <- [0..9], even x]$ \\ + Scala & \lstinline$for (x <- 0 to 9 if x % 2 == 0) yield -x$ \\ + \end{tabular} + \caption{Comprehensions in various programming languages} + \label{tab:comprehensionsProgramming} +\end{table} +Those are typicaly syntactic sugar for a more verbose expression. For example in scala, \lstinline|(0 to 9).filter(x => x % 2 == 0).map(x => -x)|. However this kind of expressions is not possible in first order logic: We can't built in any way a term that contains formulas as subexpressions, as in \lstinline|filter|. So if we want to use such constructions, we need to simulate it as we did for local definitions in \autoref{sec:localDefinitions}. + +It turns out that the comprehension schema is a consequence of the replacement schema when the value plugged for $\psi(x, y)$ is $\phi(x) \land y = x$, i.e. when $\psi$ denotes a restriction of the diagonal relation. Hence, what follows is built only from replacement. +Note that the replacement axiom \autoref{axzf:replacement} is conditional of the schematic symbol $\psi$ being a functional relation. It is more convenient to move this condition inside the axiom, to obtain a non-conditional equivalence. This is the approach adopted in Isabelle/ZF \cite{noelExperimentingIsabelleZF1993}. We instead can prove and use +$$ \exists B, \forall y. y \in B \iff (\exists x. x \in A \land P(y, e) \land ∀ z. \psi(x, z) \implies z = y) $$ +Which maps elements of $A$ through the functional component of $\psi$ only. If $\psi$ is functional, those are equivalent. + +LISA allows to write, for an arbitrary term \lstinline|t| and lambda expression \lstinline|P: (Term, Term) \mapsto Formula|, +\begin{center} + \lstinline|val c = t.replace(P)| +\end{center} +One can then use \lstinline|c.elim(e)| to obtain the fact +$e \in B \iff (\exists x. x \in A \land P(x, e) \land \forall z. \psi(x, z) \implies z = y)$. As in the case of local definitions, this statement will automatically be eliminated from the context at the end of the proof. + +Moreover, we most often want to map a set by a known function. In those case, LISA provides refined versions \lstinline|t.filter|, \lstinline|t.map| and \lstinline|t.collect|, which are detailed in table \ref{tab:comprehensions}. In particular, these versions already prove the functionality requirement of replacement. +\begin{table}[h] + \begin{tabular}{l|l} + \textbf{\lstinline|val c = |} & \textbf{\lstinline|c.elim(e)|} \\ \hline + \lstinline|t.replace(P)| & $e \in c \iff (\exists x. x \in t \land P(x, e) \land ∀ z. P(x, z) \implies z = e)$ \\ + \lstinline|t.collect(F, M)| & $e \in c \iff (\exists x. x \in t \land F(x) \land M(x) = e)$ \\ + \lstinline|t.map(M)| & $e \in c \iff (\exists x. x \in t \land M(x) = e)$ \\ + \lstinline|t.filter(F)| & $e \in c \iff e \in t \land F(e)$ \\ + \end{tabular} + \caption{Comprehensions in LISA} + \label{tab:comprehensions} +\end{table} + +Note that each of those expressions is represented as a variable symbol in the kernel proof, and the definitions are only valid inside the current proof. They should not appear in theorem statements (in which case they should be properly introduced as defined constants). \ No newline at end of file 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 dccfed2b..d323f621 100644 --- a/lisa-kernel/src/main/scala/lisa/kernel/fol/EquivalenceChecker.scala +++ b/lisa-kernel/src/main/scala/lisa/kernel/fol/EquivalenceChecker.scala @@ -313,7 +313,7 @@ private[fol] trait EquivalenceChecker extends FormulaDefinitions { t match { case Term(label: VariableLabel, _) => - if (subst.contains(i - label.id.no)) VariableTerm(VariableLabel(subst(i - label.id.no))) + if ((label.id.name == "x") && subst.contains(i - label.id.no)) VariableTerm(VariableLabel(subst(i - label.id.no))) else if (label.id.name.head == '$') VariableTerm(VariableLabel(Identifier(label.id.name.tail, label.id.no))) else { throw new Exception("This case should be unreachable, error") diff --git a/lisa-sets/src/main/scala/lisa/SetTheoryLibrary.scala b/lisa-sets/src/main/scala/lisa/SetTheoryLibrary.scala index 12c9f70f..addae4c8 100644 --- a/lisa-sets/src/main/scala/lisa/SetTheoryLibrary.scala +++ b/lisa-sets/src/main/scala/lisa/SetTheoryLibrary.scala @@ -76,10 +76,10 @@ object SetTheoryLibrary extends lisa.prooflib.Library { private val x = variable private val y = variable private val z = variable - final val φ = predicate[2] + final val φ = predicate[1] private val A = variable private val B = variable - private val P = predicate[3] + private val P = predicate[2] //////////// // Axioms // @@ -119,7 +119,7 @@ object SetTheoryLibrary extends lisa.prooflib.Library { * This schema represents an infinite collection of axioms, one for each * formula `ϕ(x, z)`. */ - final val comprehensionSchema: AXIOM = Axiom(exists(y, forall(x, in(x, y) <=> (in(x, z) /\ φ(x, z))))) + final val comprehensionSchema: AXIOM = Axiom(exists(y, forall(x, in(x, y) <=> (in(x, z) /\ φ(x))))) /** * Empty Set Axiom --- From the Comprehension Schema follows the existence of @@ -201,8 +201,8 @@ object SetTheoryLibrary extends lisa.prooflib.Library { * satisfy `P` for each `a ∈ x`. */ final val replacementSchema: AXIOM = Axiom( - forall(A, in(A, x) ==> existsOne(B, P(x, A, B))) ==> - exists(y, forall(B, in(B, y) <=> exists(A, in(A, x) /\ P(x, A, B)))) + forall(x, in(x, A) ==> ∀(y, ∀(z, (P(x, y) /\ P(x, z)) ==> (y === z)))) ==> + exists(B, forall(y, in(y, B) <=> exists(x, in(x, A) /\ P(x, y)))) ) final val tarskiAxiom: AXIOM = Axiom( diff --git a/lisa-sets/src/main/scala/lisa/automation/CommonTactics.scala b/lisa-sets/src/main/scala/lisa/automation/CommonTactics.scala index 3ecd56b4..383ed4f8 100644 --- a/lisa-sets/src/main/scala/lisa/automation/CommonTactics.scala +++ b/lisa-sets/src/main/scala/lisa/automation/CommonTactics.scala @@ -143,7 +143,7 @@ object CommonTactics { case Some(value: lib.FunctionDefinition[?]) => value case _ => return proof.InvalidProofTactic("Could not get definition of function.") } - val method: (F.ConstantFunctionLabel[?], proof.Fact) => Seq[F.Term] => F.Sequent => proof.ProofTacticJudgement = + val method: (F.ConstantFunctionLabel[?], proof.Fact) => Seq[F.Term] => F.Sequent => proof.ProofTacticJudgement = expr.f.substituteUnsafe(expr.vars.zip(xs).toMap) match { case F.AppliedConnector( F.And, diff --git a/lisa-sets/src/main/scala/lisa/automation/settheory/SetTheoryTactics.scala b/lisa-sets/src/main/scala/lisa/automation/settheory/SetTheoryTactics.scala index 09dcb5e2..5b93cd98 100644 --- a/lisa-sets/src/main/scala/lisa/automation/settheory/SetTheoryTactics.scala +++ b/lisa-sets/src/main/scala/lisa/automation/settheory/SetTheoryTactics.scala @@ -2,7 +2,7 @@ package lisa.automation.settheory import lisa.SetTheoryLibrary.{_, given} import lisa.fol.FOL.{_, given} -import lisa.kernel.proof.SequentCalculus as SC +import lisa.kernel.proof.SequentCalculus as SCunique import lisa.maths.settheory.SetTheory import lisa.prooflib.BasicStepTactic.* import lisa.prooflib.Library @@ -45,10 +45,10 @@ object SetTheoryTactics { line: sourcecode.Line, file: sourcecode.File, om: OutputManager - )(originalSet: Term, separationPredicate: LambdaTF[2])( // TODO dotty forgets that Term <:< LisaObject[Term] + )(originalSet: Term, separationPredicate: LambdaTF[1])( // TODO dotty forgets that Term <:< LisaObject[Term] bot: Sequent ): proof.ProofTacticJudgement = { - require(separationPredicate.bounds.length == 2) // separationPredicate takes two args + require(separationPredicate.bounds.length == 1) // separationPredicate takes two args given lisa.SetTheoryLibrary.type = lisa.SetTheoryLibrary // fresh variable names to avoid conflicts val botWithAssumptions = bot ++ (proof.getAssumptions |- ()) @@ -56,7 +56,7 @@ object SetTheoryTactics { val t1 = Variable(freshId(takenIDs, x.id)) val t2 = Variable(freshId(takenIDs, y.id)) - val prop = (in(t2, originalSet) /\ separationPredicate(t2, originalSet)) // TODO (Seq(t2, originalSet) + val prop = (in(t2, originalSet) /\ separationPredicate(t2)) // TODO (Seq(t2, originalSet) def fprop(z: Term) = forall(t2, in(t2, z) <=> prop) /** diff --git a/lisa-sets/src/main/scala/lisa/maths/settheory/Comprehensions.scala b/lisa-sets/src/main/scala/lisa/maths/settheory/Comprehensions.scala new file mode 100644 index 00000000..2ebbdc47 --- /dev/null +++ b/lisa-sets/src/main/scala/lisa/maths/settheory/Comprehensions.scala @@ -0,0 +1,201 @@ +package lisa.maths.settheory + +import lisa.SetTheoryLibrary +import lisa.SetTheoryLibrary.* +import lisa.maths.settheory.SetTheory.functional +import lisa.prooflib.BasicStepTactic.RightForall +import lisa.prooflib.BasicStepTactic.TacticSubproof +import lisa.prooflib.SimpleDeducedSteps.* +import lisa.utils.KernelHelpers.++<< +import lisa.utils.KernelHelpers.+<< +import lisa.utils.KernelHelpers.-<< +import lisa.utils.KernelHelpers.apply +import lisa.utils.{_, given} + +// Need to objects until https://github.com/lampepfl/dotty/pull/18647 is fixed. +// See also https://github.com/lampepfl/dotty/issues/18569 + +object Comprehensions { + import lisa.fol.FOL.{*, given} + import lisa.maths.settheory.SetTheory2.{primReplacement, replacement, functionalIsFunctional, onePointRule} + import lisa.automation.Tautology + import lisa.automation.Substitution + private val x = variable + private val y = variable + private val z = variable + private val A = variable + private val B = variable + private val C = variable + private val P = predicate[2] + private val Q = predicate[1] + private val Filter = predicate[1] + private val Map = function[1] + + given lib: lisa.SetTheoryLibrary.type = lisa.SetTheoryLibrary + + // Comprehension + + /** + * A Comprehension is a local definition of a set from a base set, a filter and a map. In Set builder notation, it denotes + * {map(x) | x in A /\ filter(x)}. + * It is represented by a variable usable locally in the proof. The assumptions corresponding to the definition of that variable are automatically eliminated. + * To obtain the defining property of the comprehension, use the [[elim]] fact. + * + * @param _proof the [[Proof]] in which the comprehension is valid + * @param t The base set + * @param filter A filter on elements of the base set + * @param map A map from elements of the base set to elements of the comprehension + * @param id The identifier of the variable encoding the comprehension. + */ + class Comprehension(_proof: Proof, val t: Term, val filter: (Term ** 1) |-> Formula, val map: (Term ** 1) |-> Term, id: Identifier) extends LocalyDefinedVariable(_proof, id) { + given proof.type = proof + + protected lazy val replacer: (Term ** 2) |-> Formula = lambda((A, B), filter(A) /\ (B === map(A))) + + private val mainFact = have( + ∃(B, ∀(y, in(y, B) <=> ∃(x, in(x, A) /\ P(x, y)))).substitute(P := replacer) + ) subproof { + val s = have(thesis) by Tautology.from(primReplacement of (P := replacer), functionalIsFunctional of (Filter := filter, Map := map)) + } + + /** + * forall(y, in(y, B) <=> ∃(x, in(x, A) /\ filter(x) /\ (y === map(x)) + */ + override val definition: proof.Fact = assume(using proof)(forall(y, in(y, B) <=> ∃(x, in(x, A) /\ P(x, y))).substitute(P := replacer, A := t, B := this)) + + val elem_bound = definingFormula.asInstanceOf[BinderFormula].bound + + protected val instDef: proof.Fact = { + have(definingFormula |- definingFormula.asInstanceOf[BinderFormula].body) by InstantiateForall(using SetTheoryLibrary, proof)(elem_bound)(definition) + } + + /** + * `in(elem, B) <=> ∃(x, in(x, A) /\ filter(x) /\ (elem === map(x))` + * if built with term.map, `in(elem, B) <=> ∃(x, in(x, A) /\ (elem === map(x))` + * if built with term.filter, `in(elem, B) <=> (in(elem, t) /\ filter(elem))` + */ + def elim(elem: Term) = instDef of (elem_bound := elem) + + // Add elimination to proof + { + val (compS, compI) = proof.sequentAndIntOfFact(mainFact of (A := t)) + val definU = definingFormula.underlying + val exDefinU = K.BinderFormula(K.Exists, underlyingLabel, definU) + _proof.addElimination( + definingFormula, + (i, sequent) => + val resSequent = (sequent.underlying -<< definU) + List( + SC.LeftExists(resSequent +<< exDefinU, i, definU, underlyingLabel), + SC.Cut(resSequent, compI, i + 1, exDefinU) + ) + ) + } + + def toStringFull: String = s"$id{${map(elem_bound)} | ${elem_bound} ∈ $t /\\ ${filter(elem_bound)}]}" + } + + // Replacement and Set Builders + + private def innerRepl(c: Variable, replacer: (Term ** 2) |-> Formula, t: Term): BinderFormula = // forall(x, in(x, y) <=> (in(x, t) /\ φ(x))) + ∀(y, in(y, B) <=> ∃(x, in(x, A) /\ P(x, y) /\ ∀(z, P(x, z) ==> (z === y)))).substitute(P := replacer, A := t, y := c) + + // Axiom(exists(y, forall(x, in(x, y) <=> (in(x, z) /\ φ(x))))) + + class Replacement(_proof: Proof, val t: Term, val replacer: (Term ** 2) |-> Formula, id: Identifier) extends LocalyDefinedVariable(_proof, id) { + given proof.type = proof + + override val definition: proof.Fact = assume(using proof)(innerRepl(this, replacer, t)) + + val elem_bound = definingFormula.asInstanceOf[BinderFormula].bound + + protected val instDef: proof.Fact = { + InstantiateForall(using SetTheoryLibrary, proof)(elem_bound)(definition)(definingFormula |- definingFormula.asInstanceOf[BinderFormula].body) + .validate(summon[sourcecode.Line], summon[sourcecode.File]) + } + + // Add elimination to proof + { + val (compS, compI) = proof.sequentAndIntOfFact(replacement of (P := replacer, z := t, y := this)) + + val definU = definingFormula.underlying + val exDefinU = K.BinderFormula(K.Exists, underlyingLabel, definU) + + _proof.addElimination( + definingFormula, + (i, sequent) => + + val resSequent = (sequent.underlying -<< definU) + List( + SC.LeftExists(resSequent +<< exDefinU, i, definU, underlyingLabel), + SC.Cut(resSequent, compI, i + 1, exDefinU) + ) + ) + } + + /** + * in(elem, y) <=> ∃(x, in(x, t) /\ replacer(x, y) /\ ∀(z, P(x, z) ==> (z === y)) + */ + def elim(elem: Term): proof.Fact = instDef of (elem_bound := elem) + + def toStringFull: String = s"$id{$elem_bound | ${definition.asInstanceOf[BinderFormula].body.asInstanceOf[AppliedConnector].args(1)}]}" + } + + extension (t: Term) { + def replace(using _proof: Proof, name: sourcecode.Name)(replacer: (Term ** 2) |-> Formula): Replacement { val proof: _proof.type } = { + if (_proof.lockedSymbols ++ _proof.possibleGoal.toSet.flatMap(_.allSchematicLabels)).map(_.id.name).contains(name.value) then throw new Exception(s"Name $name is already used in the proof") + val id = name.value + val c = Replacement(_proof, t, replacer, id) + c.asInstanceOf[Replacement { val proof: _proof.type }] + } + + def collect(using _proof: Proof, name: sourcecode.Name)(filter: (Term ** 1) |-> Formula, map: (Term ** 1) |-> Term): Comprehension { val proof: _proof.type } = { + if (_proof.lockedSymbols ++ _proof.possibleGoal.toSet.flatMap(_.allSchematicLabels)).map(_.id.name).contains(name.value) then throw new Exception(s"Name $name is already used in the proof") + val id = name.value + val c = new Comprehension(_proof, t, filter, map, id) + c.asInstanceOf[Comprehension { val proof: _proof.type }] + } + + def map(using _proof: Proof, name: sourcecode.Name)(map: (Term ** 1) |-> Term): Comprehension { val proof: _proof.type } = { + if (_proof.lockedSymbols ++ _proof.possibleGoal.toSet.flatMap(_.allSchematicLabels)).map(_.id.name).contains(name.value) then throw new Exception(s"Name $name is already used in the proof") + val id = name.value + inline def _map = map + inline def _t = t + val c = new Comprehension(_proof, t, lambda(x, top), map, id) { + + override val instDef: proof.Fact = { + val elim_formula = (forall(elem_bound, in(elem_bound, B) <=> ∃(x, in(x, A) /\ P(x, elem_bound))).substitute(P := lambda((A, B), B === _map(A)), A := _t, B := this)).body + + have(TacticSubproof(using proof) { + val s = have(definingFormula |- definingFormula.asInstanceOf[BinderFormula].body) by InstantiateForall(elem_bound)(definition) + thenHave(definingFormula |- elim_formula) by Restate.from + }) + + } + } + c.asInstanceOf[Comprehension { val proof: _proof.type }] + } + + def filter(using _proof: Proof, name: sourcecode.Name)(filter: (Term ** 1) |-> Formula): Comprehension { val proof: _proof.type } = { + if (_proof.lockedSymbols ++ _proof.possibleGoal.toSet.flatMap(_.allSchematicLabels)).map(_.id.name).contains(name.value) then throw new Exception(s"Name $name is already used in the proof") + val id = name.value + inline def _filter = filter + inline def _t = t + val c = new Comprehension(_proof, t, filter, lambda(x, x), id) { + + override val instDef: proof.Fact = { + have(TacticSubproof(using proof) { + val ex = new Variable(freshId(definingFormula.allSchematicLabels.map(_.id), "x")) + have(definingFormula |- definingFormula.asInstanceOf[BinderFormula].body) by InstantiateForall(elem_bound)(definition) + have(in(elem_bound, this) <=> ∃(ex, (ex === elem_bound) /\ in(ex, _t) /\ _filter(ex))) by Tautology.from(lastStep) + thenHave(in(elem_bound, this) <=> (in(elem_bound, _t) /\ _filter(elem_bound))) by Substitution.ApplyRules(onePointRule of (y := elem_bound, Q := lambda(ex, in(ex, _t) /\ _filter(ex)))) + }) + } + + } + c.asInstanceOf[Comprehension { val proof: _proof.type }] + } + + } + +} diff --git a/lisa-sets/src/main/scala/lisa/maths/settheory/SetTheory.scala b/lisa-sets/src/main/scala/lisa/maths/settheory/SetTheory.scala index d52c226e..34737dbb 100644 --- a/lisa-sets/src/main/scala/lisa/maths/settheory/SetTheory.scala +++ b/lisa-sets/src/main/scala/lisa/maths/settheory/SetTheory.scala @@ -4,6 +4,8 @@ import lisa.automation.kernel.CommonTactics.Definition import lisa.automation.settheory.SetTheoryTactics.* import lisa.maths.Quantifiers.* +import scala.collection.immutable.{Map => ScalaMap} + /** * Set Theory Library * @@ -36,6 +38,7 @@ object SetTheory extends lisa.Main { private val P = predicate[1] private val Q = predicate[1] + private val R = predicate[2] private val schemPred = predicate[1] /** @@ -80,7 +83,7 @@ object SetTheory extends lisa.Main { * where `P(t)` does not contain `z` as a free variable. * * @example {{{ - * have(∃(z, ∀(t, in(t, z) ⇔ myProperty(t))) ⊢ ∃!(z, ∀(t, in(t, z) ⇔ myProperty(t)))) by InstPredSchema(Map(schemPred -> (t, myProperty(t))))` + * have(∃(z, ∀(t, in(t, z) ⇔ myProperty(t))) ⊢ ∃!(z, ∀(t, in(t, z) ⇔ myProperty(t)))) by InstPredSchema(ScalaMap(schemPred -> (t, myProperty(t))))` * }}} * * Instantiation will fail if `myProperty(t)` contains `z` as a free variable. @@ -100,12 +103,12 @@ object SetTheory extends lisa.Main { // backward direction have(fprop(z) |- fprop(z)) by Hypothesis val instLhs = thenHave(fprop(z) |- prop(z)) by InstantiateForall(t) - val instRhs = thenHave(fprop(a) |- prop(a)) by InstFunSchema(Map(z -> a)) + val instRhs = thenHave(fprop(a) |- prop(a)) by InstFunSchema(ScalaMap(z -> a)) have((fprop(z), fprop(a)) |- prop(z) /\ prop(a)) by RightAnd(instLhs, instRhs) thenHave(fprop(z) /\ fprop(a) |- in(t, a) <=> in(t, z)) by Tautology val extLhs = thenHave(fprop(z) /\ fprop(a) |- ∀(t, in(t, a) <=> in(t, z))) by RightForall - val extRhs = have(∀(t, in(t, a) <=> in(t, z)) <=> (a === z)) by InstFunSchema(Map(x -> a, y -> z))(extensionalityAxiom) + val extRhs = have(∀(t, in(t, a) <=> in(t, z)) <=> (a === z)) by InstFunSchema(ScalaMap(x -> a, y -> z))(extensionalityAxiom) have(fprop(z) /\ fprop(a) |- (∀(t, in(t, a) <=> in(t, z)) <=> (a === z)) /\ ∀(t, in(t, a) <=> in(t, z))) by RightAnd(extLhs, extRhs) thenHave(fprop(z) /\ fprop(a) |- (a === z)) by Tautology @@ -192,7 +195,7 @@ object SetTheory extends lisa.Main { thenHave((in(z, x), (a === x)) |- in(z, a) /\ ((a === x) \/ (a === y))) by Tautology andThen(Substitution.applySubst(upairax, false)) thenHave((in(z, x), (a === x)) |- ∃(a, in(z, a) /\ in(a, unorderedPair(x, y)))) by RightExists - thenHave((in(z, x), (x === x)) |- ∃(a, in(z, a) /\ in(a, unorderedPair(x, y)))) by InstFunSchema(Map(a -> x)) + thenHave((in(z, x), (x === x)) |- ∃(a, in(z, a) /\ in(a, unorderedPair(x, y)))) by InstFunSchema(ScalaMap(a -> x)) val tax = thenHave((in(z, x)) |- ∃(a, in(z, a) /\ in(a, unorderedPair(x, y)))) by Restate have((in(z, y), (a === y)) |- in(z, y)) by Hypothesis @@ -200,7 +203,7 @@ object SetTheory extends lisa.Main { thenHave((in(z, y), (a === y)) |- in(z, a) /\ ((a === x) \/ (a === y))) by Tautology andThen(Substitution.applySubst(upairax, false)) thenHave((in(z, y), (a === y)) |- ∃(a, in(z, a) /\ in(a, unorderedPair(x, y)))) by RightExists - thenHave((in(z, y), (y === y)) |- ∃(a, in(z, a) /\ in(a, unorderedPair(x, y)))) by InstFunSchema(Map(a -> y)) + thenHave((in(z, y), (y === y)) |- ∃(a, in(z, a) /\ in(a, unorderedPair(x, y)))) by InstFunSchema(ScalaMap(a -> y)) val tay = thenHave((in(z, y)) |- ∃(a, in(z, a) /\ in(a, unorderedPair(x, y)))) by Restate have((in(z, x) \/ in(z, y)) |- ∃(a, in(z, a) /\ in(a, unorderedPair(x, y)))) by LeftOr(tax, tay) @@ -249,7 +252,7 @@ object SetTheory extends lisa.Main { ) { val form = formulaVariable - have(∀(x, (x === successor(y)) <=> (x === union(unorderedPair(y, unorderedPair(y, y)))))) by InstFunSchema(Map(x -> y))(successor.definition) + have(∀(x, (x === successor(y)) <=> (x === union(unorderedPair(y, unorderedPair(y, y)))))) by InstFunSchema(ScalaMap(x -> y))(successor.definition) thenHave(((successor(y) === successor(y)) <=> (successor(y) === union(unorderedPair(y, unorderedPair(y, y)))))) by InstantiateForall(successor(y)) val succDef = thenHave((successor(y) === union(unorderedPair(y, unorderedPair(y, y))))) by Restate val inductDef = have(inductive(x) <=> in(∅, x) /\ ∀(y, in(y, x) ==> in(successor(y), x))) by Restate.from(inductive.definition) @@ -340,7 +343,7 @@ object SetTheory extends lisa.Main { val setWithNoElementsIsEmpty = Theorem( ∀(y, !in(y, x)) |- (x === ∅) ) { - have(!in(y, ∅)) by InstFunSchema(Map(x -> y))(emptySetAxiom) + have(!in(y, ∅)) by InstFunSchema(ScalaMap(x -> y))(emptySetAxiom) thenHave(() |- (!in(y, ∅), in(y, x))) by Weakening val lhs = thenHave(in(y, ∅) ==> in(y, x)) by Restate @@ -352,7 +355,7 @@ object SetTheory extends lisa.Main { thenHave(∀(y, !in(y, x)) |- in(y, x) <=> in(y, ∅)) by LeftForall val exLhs = thenHave(∀(y, !in(y, x)) |- ∀(y, in(y, x) <=> in(y, ∅))) by RightForall - have(∀(z, in(z, x) <=> in(z, ∅)) <=> (x === ∅)) by InstFunSchema(Map(x -> x, y -> ∅))(extensionalityAxiom) + have(∀(z, in(z, x) <=> in(z, ∅)) <=> (x === ∅)) by InstFunSchema(ScalaMap(x -> x, y -> ∅))(extensionalityAxiom) val exRhs = thenHave(∀(y, in(y, x) <=> in(y, ∅)) <=> (x === ∅)) by Restate have(∀(y, !in(y, x)) |- (∀(y, in(y, x) <=> in(y, ∅)) <=> (x === ∅)) /\ ∀(y, in(y, x) <=> in(y, ∅))) by RightAnd(exLhs, exRhs) @@ -439,13 +442,13 @@ object SetTheory extends lisa.Main { val secondElemInPair = Theorem( in(y, unorderedPair(x, y)) ) { - val lhs = have(in(z, unorderedPair(x, y)) <=> ((z === x) \/ (z === y))) by InstFunSchema(Map(x -> x, y -> y, z -> z))(pairAxiom) + val lhs = have(in(z, unorderedPair(x, y)) <=> ((z === x) \/ (z === y))) by InstFunSchema(ScalaMap(x -> x, y -> y, z -> z))(pairAxiom) have((z === y) |- (z === y)) by Hypothesis val rhs = thenHave((z === y) |- (z === x) \/ (z === y)) by Restate val factset = have((z === y) |- (in(z, unorderedPair(x, y)) <=> ((z === x) \/ (z === y))) /\ ((z === x) \/ (z === y))) by RightAnd(lhs, rhs) thenHave((z === y) |- in(z, unorderedPair(x, y))) by Tautology - thenHave((y === y) |- in(y, unorderedPair(x, y))) by InstFunSchema(Map(z -> y)) + thenHave((y === y) |- in(y, unorderedPair(x, y))) by InstFunSchema(ScalaMap(z -> y)) thenHave(in(y, unorderedPair(x, y))) by LeftRefl } @@ -459,7 +462,7 @@ object SetTheory extends lisa.Main { ) { // specialization of the pair axiom to a singleton - have(in(y, unorderedPair(x, x)) <=> (x === y) \/ (x === y)) by InstFunSchema(Map(x -> x, y -> x, z -> y))(pairAxiom) + have(in(y, unorderedPair(x, x)) <=> (x === y) \/ (x === y)) by InstFunSchema(ScalaMap(x -> x, y -> x, z -> y))(pairAxiom) thenHave(in(y, singleton(x)) <=> (x === y)) by Restate } @@ -532,7 +535,7 @@ object SetTheory extends lisa.Main { thenHave((a === c, b === d) |- unorderedPair(a, b) === unorderedPair(c, d)) by RightSubstEq.withParameters(List((a, c), (b, d)), lambda(Seq(x, y), unorderedPair(a, b) === unorderedPair(x, y))) val lhs = thenHave(Set((a === c) /\ (b === d)) |- unorderedPair(a, b) === unorderedPair(c, d)) by Restate - have(unorderedPair(a, b) === unorderedPair(b, a)) by InstFunSchema(Map(x -> a, y -> b))(unorderedPairSymmetry) + have(unorderedPair(a, b) === unorderedPair(b, a)) by InstFunSchema(ScalaMap(x -> a, y -> b))(unorderedPairSymmetry) thenHave((a === d, b === c) |- (unorderedPair(a, b) === unorderedPair(c, d))) by RightSubstEq.withParameters(List((a, d), (b, c)), lambda(Seq(x, y), unorderedPair(a, b) === unorderedPair(y, x))) val rhs = thenHave(Set((a === d) /\ (b === c)) |- (unorderedPair(a, b) === unorderedPair(c, d))) by Restate @@ -550,13 +553,13 @@ object SetTheory extends lisa.Main { val singletonNonEmpty = Theorem( !(singleton(x) === ∅) ) { - val reflLhs = have(in(x, singleton(x)) <=> (x === x)) by InstFunSchema(Map(y -> x))(singletonHasNoExtraElements) + val reflLhs = have(in(x, singleton(x)) <=> (x === x)) by InstFunSchema(ScalaMap(y -> x))(singletonHasNoExtraElements) val reflRhs = have((x === x)) by RightRefl have((x === x) /\ (in(x, singleton(x)) <=> (x === x))) by RightAnd(reflLhs, reflRhs) val lhs = thenHave(in(x, singleton(x))) by Tautology - val rhs = have(in(x, singleton(x)) |- !(singleton(x) === ∅)) by InstFunSchema(Map(y -> x, x -> singleton(x)))(setWithElementNonEmpty) + val rhs = have(in(x, singleton(x)) |- !(singleton(x) === ∅)) by InstFunSchema(ScalaMap(y -> x, x -> singleton(x)))(setWithElementNonEmpty) have(!(singleton(x) === ∅)) by Cut(lhs, rhs) } @@ -571,18 +574,18 @@ object SetTheory extends lisa.Main { ) { // forward direction // {x} === {y} |- x === y - have(∀(z, in(z, singleton(x)) <=> in(z, singleton(y))) <=> (singleton(x) === singleton(y))) by InstFunSchema(Map(x -> singleton(x), y -> singleton(y)))(extensionalityAxiom) + have(∀(z, in(z, singleton(x)) <=> in(z, singleton(y))) <=> (singleton(x) === singleton(y))) by InstFunSchema(ScalaMap(x -> singleton(x), y -> singleton(y)))(extensionalityAxiom) thenHave((singleton(x) === singleton(y)) |- ∀(z, in(z, singleton(x)) <=> in(z, singleton(y)))) by Tautology val singiff = thenHave((singleton(x) === singleton(y)) |- in(z, singleton(x)) <=> in(z, singleton(y))) by InstantiateForall(z) - val singX = have(in(z, singleton(x)) <=> (z === x)) by InstFunSchema(Map(y -> z))(singletonHasNoExtraElements) + val singX = have(in(z, singleton(x)) <=> (z === x)) by InstFunSchema(ScalaMap(y -> z))(singletonHasNoExtraElements) have((singleton(x) === singleton(y)) |- (in(z, singleton(x)) <=> in(z, singleton(y))) /\ (in(z, singleton(x)) <=> (z === x))) by RightAnd(singiff, singX) val yToX = thenHave((singleton(x) === singleton(y)) |- (in(z, singleton(y)) <=> (z === x))) by Tautology - val singY = have(in(z, singleton(y)) <=> (z === y)) by InstFunSchema(Map(x -> y))(singX) + val singY = have(in(z, singleton(y)) <=> (z === y)) by InstFunSchema(ScalaMap(x -> y))(singX) have((singleton(x) === singleton(y)) |- (in(z, singleton(y)) <=> (z === x)) /\ (in(z, singleton(y)) <=> (z === y))) by RightAnd(yToX, singY) thenHave((singleton(x) === singleton(y)) |- ((z === x) <=> (z === y))) by Tautology - thenHave((singleton(x) === singleton(y)) |- ((x === x) <=> (x === y))) by InstFunSchema(Map(z -> x)) + thenHave((singleton(x) === singleton(y)) |- ((x === x) <=> (x === y))) by InstFunSchema(ScalaMap(z -> x)) thenHave((singleton(x) === singleton(y)) |- (x === y)) by Restate val fwd = thenHave((singleton(x) === singleton(y)) ==> (x === y)) by Tautology @@ -732,7 +735,7 @@ object SetTheory extends lisa.Main { ) { val X = singleton(x) - have(!(X === ∅) ==> ∃(y, in(y, X) /\ ∀(z, in(z, X) ==> !in(z, y)))) by InstFunSchema(Map(x -> X))(foundationAxiom) + have(!(X === ∅) ==> ∃(y, in(y, X) /\ ∀(z, in(z, X) ==> !in(z, y)))) by InstFunSchema(ScalaMap(x -> X))(foundationAxiom) val lhs = thenHave(!(X === ∅) |- ∃(y, in(y, X) /\ ∀(z, in(z, X) ==> !in(z, y)))) by Restate have(in(y, X) |- in(y, X) <=> (x === y)) by Weakening(singletonHasNoExtraElements) @@ -740,7 +743,7 @@ object SetTheory extends lisa.Main { have((in(x, X), (in(z, X) ==> !in(z, x)), in(y, X)) |- in(z, X) ==> !in(z, x)) by Hypothesis thenHave((in(x, X), ∀(z, in(z, X) ==> !in(z, x)), in(y, X)) |- in(z, X) ==> !in(z, x)) by LeftForall - thenHave((in(x, X), ∀(z, in(z, X) ==> !in(z, x)), in(x, X)) |- in(x, X) ==> !in(x, x)) by InstFunSchema(Map(z -> x, y -> x)) + thenHave((in(x, X), ∀(z, in(z, X) ==> !in(z, x)), in(x, X)) |- in(x, X) ==> !in(x, x)) by InstFunSchema(ScalaMap(z -> x, y -> x)) val coreRhs = thenHave(in(x, X) /\ ∀(z, in(z, X) ==> !in(z, x)) |- !in(x, x)) by Restate // now we need to show that the assumption is indeed true @@ -789,12 +792,12 @@ object SetTheory extends lisa.Main { ) { val lhs = have(subset(powerSet(x), x) |- subset(powerSet(x), x)) by Hypothesis - val rhs = have(in(powerSet(x), powerSet(x)) <=> subset(powerSet(x), x)) by InstFunSchema(Map(x -> powerSet(x), y -> x))(powerAxiom) + val rhs = have(in(powerSet(x), powerSet(x)) <=> subset(powerSet(x), x)) by InstFunSchema(ScalaMap(x -> powerSet(x), y -> x))(powerAxiom) have(subset(powerSet(x), x) |- subset(powerSet(x), x) /\ (in(powerSet(x), powerSet(x)) <=> subset(powerSet(x), x))) by RightAnd(lhs, rhs) val contraLhs = thenHave(subset(powerSet(x), x) |- in(powerSet(x), powerSet(x))) by Tautology - val contraRhs = have(!in(powerSet(x), powerSet(x))) by InstFunSchema(Map(x -> powerSet(x)))(selfNonInclusion) + val contraRhs = have(!in(powerSet(x), powerSet(x))) by InstFunSchema(ScalaMap(x -> powerSet(x)))(selfNonInclusion) have(subset(powerSet(x), x) |- !in(powerSet(x), powerSet(x)) /\ in(powerSet(x), powerSet(x))) by RightAnd(contraLhs, contraRhs) thenHave(subset(powerSet(x), x) |- ()) by Restate @@ -848,7 +851,7 @@ object SetTheory extends lisa.Main { val setIntersectionUniqueness = Theorem( ∃!(z, ∀(t, in(t, z) <=> (in(t, x) /\ in(t, y)))) ) { - have(∃!(z, ∀(t, in(t, z) <=> (in(t, x) /\ in(t, y))))) by UniqueComprehension(x, lambda((t, z), in(t, y))) + have(∃!(z, ∀(t, in(t, z) <=> (in(t, x) /\ in(t, y))))) by UniqueComprehension(x, lambda(t, in(t, y))) } /** @@ -896,7 +899,7 @@ object SetTheory extends lisa.Main { val unaryIntersectionUniqueness = Theorem( ∃!(z, ∀(t, in(t, z) <=> (exists(b, in(b, x)) /\ ∀(b, in(b, x) ==> in(t, b))))) ) { - val uniq = have(∃!(z, ∀(t, in(t, z) <=> (in(t, union(x)) /\ ∀(b, in(b, x) ==> in(t, b)))))) by UniqueComprehension(union(x), lambda((t, z), ∀(b, in(b, x) ==> in(t, b)))) + val uniq = have(∃!(z, ∀(t, in(t, z) <=> (in(t, union(x)) /\ ∀(b, in(b, x) ==> in(t, b)))))) by UniqueComprehension(union(x), lambda(t, ∀(b, in(b, x) ==> in(t, b)))) val lhs = have((in(t, union(x)) /\ ∀(b, in(b, x) ==> in(t, b))) |- ∀(b, in(b, x) ==> in(t, b)) /\ exists(b, in(b, x))) subproof { val unionAx = have(in(t, union(x)) |- exists(b, in(b, x) /\ in(t, b))) by Weakening(unionAxiom of (z -> t)) @@ -960,7 +963,7 @@ object SetTheory extends lisa.Main { val setDifferenceUniqueness = Theorem( ∃!(z, ∀(t, in(t, z) <=> (in(t, x) /\ !in(t, y)))) ) { - have(∃!(z, ∀(t, in(t, z) <=> (in(t, x) /\ !in(t, y))))) by UniqueComprehension(x, lambda((t, z), !in(t, y))) + have(∃!(z, ∀(t, in(t, z) <=> (in(t, x) /\ !in(t, y))))) by UniqueComprehension(x, lambda(t, !in(t, y))) } /** @@ -988,9 +991,9 @@ object SetTheory extends lisa.Main { val intersectionOfPredicateClassExists = Theorem( ∃(x, P(x)) |- ∃(z, ∀(t, in(t, z) <=> ∀(y, P(y) ==> in(t, y)))) ) { - have(∃(z, ∀(t, in(t, z) <=> (in(t, x) /\ φ(t, x))))) by InstFunSchema(Map(z -> x))(comprehensionSchema) + have(∃(z, ∀(t, in(t, z) <=> (in(t, x) /\ φ(t))))) by InstFunSchema(ScalaMap(z -> x))(comprehensionSchema) - val conjunction = thenHave(∃(z, ∀(t, in(t, z) <=> (in(t, x) /\ ∀(y, P(y) ==> in(t, y)))))) by InstPredSchema(Map(φ -> lambda(Seq(t, x), ∀(y, P(y) ==> in(t, y))))) + val conjunction = thenHave(∃(z, ∀(t, in(t, z) <=> (in(t, x) /\ ∀(y, P(y) ==> in(t, y)))))) by InstPredSchema(ScalaMap(φ -> lambda(t, ∀(y, P(y) ==> in(t, y))))) have(∀(y, P(y) ==> in(t, y)) |- ∀(y, P(y) ==> in(t, y))) by Hypothesis thenHave(∀(y, P(y) ==> in(t, y)) /\ P(x) |- ∀(y, P(y) ==> in(t, y))) by Weakening @@ -1034,7 +1037,7 @@ object SetTheory extends lisa.Main { val secondInPairSingletonUniqueness = Theorem( ∃!(z, ∀(t, in(t, z) <=> (in(t, union(p)) /\ ((!(union(p) === unaryIntersection(p))) ==> (!in(t, unaryIntersection(p))))))) ) { - have(thesis) by UniqueComprehension(union(p), lambda((t, x), ((!(union(p) === unaryIntersection(p))) ==> (!in(t, unaryIntersection(p)))))) + have(thesis) by UniqueComprehension(union(p), lambda(t, ((!(union(p) === unaryIntersection(p))) ==> (!in(t, unaryIntersection(p)))))) } /** @@ -1170,7 +1173,7 @@ object SetTheory extends lisa.Main { thenHave((union(pair(x, y)) === unaryIntersection(pair(x, y))) |- in(z, union(pair(x, y))) <=> in(z, unaryIntersection(pair(x, y)))) by InstantiateForall(z) have((union(pair(x, y)) === unaryIntersection(pair(x, y))) |- (((z === x) \/ (z === y)) <=> (z === x))) by Tautology.from(lastStep, unionPair, pairUnaryIntersection) - thenHave((union(pair(x, y)) === unaryIntersection(pair(x, y))) |- (((y === x) \/ (y === y)) <=> (y === x))) by InstFunSchema(Map(z -> y)) + thenHave((union(pair(x, y)) === unaryIntersection(pair(x, y))) |- (((y === x) \/ (y === y)) <=> (y === x))) by InstFunSchema(ScalaMap(z -> y)) thenHave(thesis) by Restate } @@ -1347,7 +1350,7 @@ object SetTheory extends lisa.Main { ) { have(∃!(z, ∀(t, in(t, z) <=> (in(t, powerSet(powerSet(setUnion(x, y)))) /\ ∃(a, ∃(b, (t === pair(a, b)) /\ in(a, x) /\ in(b, y))))))) by UniqueComprehension( powerSet(powerSet(setUnion(x, y))), - lambda((t, z), ∃(a, ∃(b, (t === pair(a, b)) /\ in(a, x) /\ in(b, y)))) + lambda(t, ∃(a, ∃(b, (t === pair(a, b)) /\ in(a, x) /\ in(b, y)))) ) } @@ -1825,7 +1828,7 @@ object SetTheory extends lisa.Main { ) { val uniq = have(∃!(z, ∀(t, in(t, z) <=> (in(t, union(union(r))) /\ ∃(a, in(pair(t, a), r)))))) by UniqueComprehension( union(union(r)), - lambda((t, b), ∃(a, in(pair(t, a), r))) + lambda(t, ∃(a, in(pair(t, a), r))) ) // eliminating t \in UU r @@ -1893,7 +1896,7 @@ object SetTheory extends lisa.Main { ) { val uniq = have(∃!(z, ∀(t, in(t, z) <=> (in(t, union(union(r))) /\ ∃(a, in(pair(a, t), r)))))) by UniqueComprehension( union(union(r)), - lambda((t, b), ∃(a, in(pair(a, t), r))) + lambda(t, ∃(a, in(pair(a, t), r))) ) // eliminating t \in UU r @@ -2316,7 +2319,7 @@ object SetTheory extends lisa.Main { val setOfFunctionsUniqueness = Theorem( ∃!(z, ∀(t, in(t, z) <=> (in(t, powerSet(cartesianProduct(x, y))) /\ functionalOver(t, x)))) ) { - have(thesis) by UniqueComprehension(powerSet(cartesianProduct(x, y)), lambda((t, z), functionalOver(t, x))) + have(thesis) by UniqueComprehension(powerSet(cartesianProduct(x, y)), lambda(t, functionalOver(t, x))) } /** @@ -2593,7 +2596,7 @@ object SetTheory extends lisa.Main { ) { have(∃!(g, ∀(t, in(t, g) <=> (in(t, f) /\ ∃(y, ∃(z, in(y, x) /\ (t === pair(y, z)))))))) by UniqueComprehension( f, - lambda((t, b), ∃(y, ∃(z, in(y, x) /\ (t === pair(y, z))))) + lambda(t, ∃(y, ∃(z, in(y, x) /\ (t === pair(y, z))))) ) } @@ -2822,7 +2825,7 @@ object SetTheory extends lisa.Main { ) { have(∃!(z, ∀(g, in(g, z) <=> (in(g, powerSet(Sigma(x, f))) /\ (subset(x, relationDomain(g)) /\ functional(g)))))) by UniqueComprehension( powerSet(Sigma(x, f)), - lambda((z, y), (subset(x, relationDomain(z)) /\ functional(z))) + lambda(z, (subset(x, relationDomain(z)) /\ functional(z))) ) } @@ -3237,7 +3240,7 @@ object SetTheory extends lisa.Main { have((ydef, surjective(f, x, powerSet(x))) |- ()) by Cut(existsZ, existsToContra) val yToContra = thenHave((∃(y, ydef), surjective(f, x, powerSet(x))) |- ()) by LeftExists - val yexists = have(∃(y, ydef)) by Restate.from(comprehensionSchema of (z -> x, φ -> lambda((t, z), !in(t, app(f, t))))) + val yexists = have(∃(y, ydef)) by Restate.from(comprehensionSchema of (z -> x, φ -> lambda(t, !in(t, app(f, t))))) have(thesis) by Cut(yexists, yToContra) } diff --git a/lisa-sets/src/main/scala/lisa/maths/settheory/SetTheory2.scala b/lisa-sets/src/main/scala/lisa/maths/settheory/SetTheory2.scala new file mode 100644 index 00000000..55690ed4 --- /dev/null +++ b/lisa-sets/src/main/scala/lisa/maths/settheory/SetTheory2.scala @@ -0,0 +1,104 @@ +package lisa.maths.settheory + +object SetTheory2 extends lisa.Main { + import lisa.maths.settheory.SetTheory.* + // import Comprehensions.* + + private val s = variable + private val x = variable + private val x_1 = variable + private val y = variable + private val z = variable + private val f = function[1] + private val t = variable + private val A = variable + private val B = variable + private val C = variable + private val P = predicate[2] + private val Q = predicate[1] + private val Filter = predicate[1] + private val Map = function[1] + + val primReplacement = Theorem( + ∀(x, in(x, A) ==> ∀(y, ∀(z, (P(x, y) /\ P(x, z)) ==> (y === z)))) |- + ∃(B, forall(y, in(y, B) <=> ∃(x, in(x, A) /\ P(x, y)))) + ) { + have(thesis) by Restate.from(replacementSchema of (A := A, x := x, P := P)) + } + + val manyForall = Lemma( + ∀(x, in(x, A) ==> ∀(y, ∀(z, (P(x, y) /\ P(x, z)) ==> (y === z)))).substitute(P := lambda((A, B), P(A, B) /\ ∀(C, P(A, C) ==> (B === C)))) <=> top + ) { + have(thesis) by Tableau + } + + val functionalIsFunctional = Lemma( + ∀(x, in(x, A) ==> ∀(y, ∀(z, (P(x, y) /\ P(x, z)) ==> (y === z)))).substitute(P := lambda((A, B), Filter(A) /\ (B === Map(A)))) <=> top + ) { + + have(y === Map(x) |- (y === Map(x))) by Restate + thenHave((y === Map(x), z === Map(x)) |- y === z) by Substitution.ApplyRules(Map(x) === z) + thenHave(in(x, A) |- ((Filter(x) /\ (y === Map(x)) /\ (z === Map(x))) ==> (y === z))) by Weakening + thenHave(in(x, A) |- ∀(z, ((Filter(x) /\ (y === Map(x)) /\ (z === Map(x))) ==> (y === z)))) by RightForall + thenHave(in(x, A) |- ∀(y, ∀(z, ((Filter(x) /\ (y === Map(x)) /\ (z === Map(x))) ==> (y === z))))) by RightForall + thenHave(in(x, A) ==> ∀(y, ∀(z, ((Filter(x) /\ (y === Map(x)) /\ (z === Map(x))) ==> (y === z))))) by Restate + thenHave(∀(x, in(x, A) ==> ∀(y, ∀(z, ((Filter(x) /\ (y === Map(x)) /\ (z === Map(x))) ==> (y === z)))))) by RightForall + thenHave(thesis) by Restate + + } + + /** + * Theorem --- the refined replacement axiom. Easier to use as a rule than primReplacement. + */ + val replacement = Theorem( + ∃(B, ∀(y, in(y, B) <=> ∃(x, in(x, A) /\ P(x, y) /\ ∀(z, P(x, z) ==> (z === y))))) + ) { + have(thesis) by Tautology.from(manyForall, primReplacement of (P := lambda((A, B), P(A, B) /\ ∀(C, P(A, C) ==> (B === C))))) + } + + val onePointRule = Theorem( + ∃(x, (x === y) /\ Q(x)) <=> Q(y) + ) { + val s1 = have(∃(x, (x === y) /\ Q(x)) ==> Q(y)) subproof { + assume(∃(x, (x === y) /\ Q(x))) + val ex = witness(lastStep) + val s1 = have(Q(ex)) by Tautology.from(ex.definition) + val s2 = have(ex === y) by Tautology.from(ex.definition) + have(Q(y)) by Substitution.ApplyRules(s2)(s1) + } + val s2 = have(Q(y) ==> ∃(x, (x === y) /\ Q(x))) subproof { + assume(Q(y)) + thenHave((y === y) /\ Q(y)) by Restate + thenHave(∃(x, (x === y) /\ Q(x))) by RightExists + thenHave(thesis) by Restate.from + } + have(thesis) by Tautology.from(s1, s2) + } + + /** + * Theorem - `∃(x_1, in(x_1, singleton(∅)) /\ (x === f(x_1))) <=> (x === f(∅))` + */ + val singletonMap = Lemma( + ∃(x_1, in(x_1, singleton(∅)) /\ (x === f(x_1))) <=> (x === f(∅)) + ) { + val s1 = have(∃(x_1, in(x_1, singleton(∅)) /\ (x === f(x_1))) ==> (x === f(∅))) subproof { + have(x === f(∅) |- x === f(∅)) by Restate + thenHave((x_1 === ∅, x === f(x_1)) |- x === f(∅)) by Substitution.ApplyRules(x_1 === ∅) + thenHave((x_1 === ∅) /\ (x === f(x_1)) |- x === f(∅)) by Restate + thenHave((in(x_1, singleton(∅))) /\ ((x === f(x_1))) |- x === f(∅)) by Substitution.ApplyRules(singletonHasNoExtraElements of (y := x_1, x := ∅)) + thenHave(∃(x_1, in(x_1, singleton(∅)) /\ ((x === f(x_1)))) |- x === f(∅)) by LeftExists + + } + + val s2 = have((x === f(∅)) ==> ∃(x_1, in(x_1, singleton(∅)) /\ (x === f(x_1)))) subproof { + have(x === f(∅) |- (∅ === ∅) /\ (x === f(∅))) by Restate + thenHave(x === f(∅) |- in(∅, singleton(∅)) /\ (x === f(∅))) by Substitution.ApplyRules(singletonHasNoExtraElements of (y := x_1, x := ∅)) + thenHave(x === f(∅) |- ∃(x_1, in(x_1, singleton(∅)) /\ (x === f(x_1)))) by RightExists + thenHave(thesis) by Restate.from + + } + + have(thesis) by Tautology.from(s1, s2) + } + +} diff --git a/lisa-sets/src/main/scala/lisa/maths/settheory/orderings/InclusionOrders.scala b/lisa-sets/src/main/scala/lisa/maths/settheory/orderings/InclusionOrders.scala index 890d988a..7a1be0cf 100644 --- a/lisa-sets/src/main/scala/lisa/maths/settheory/orderings/InclusionOrders.scala +++ b/lisa-sets/src/main/scala/lisa/maths/settheory/orderings/InclusionOrders.scala @@ -35,7 +35,7 @@ object InclusionOrders extends lisa.Main { val inclusionOnUniqueness = Lemma( () |- existsOne(z, forall(t, in(t, z) <=> (in(t, cartesianProduct(a, a)) /\ exists(y, exists(x, in(y, x) /\ (t === pair(y, x))))))) ) { - have(thesis) by UniqueComprehension(cartesianProduct(a, a), lambda((t, a), exists(y, exists(x, in(y, x) /\ (t === pair(y, x)))))) + have(thesis) by UniqueComprehension(cartesianProduct(a, a), lambda(t, exists(y, exists(x, in(y, x) /\ (t === pair(y, x)))))) } /** diff --git a/lisa-sets/src/main/scala/lisa/maths/settheory/orderings/Induction.scala b/lisa-sets/src/main/scala/lisa/maths/settheory/orderings/Induction.scala index b43484c7..b1feffb5 100644 --- a/lisa-sets/src/main/scala/lisa/maths/settheory/orderings/Induction.scala +++ b/lisa-sets/src/main/scala/lisa/maths/settheory/orderings/Induction.scala @@ -4,11 +4,12 @@ import lisa.automation.settheory.SetTheoryTactics.* import lisa.maths.Quantifiers.* import lisa.maths.settheory.SetTheory.* import lisa.maths.settheory.orderings.InclusionOrders.* -import Ordinals.* import lisa.maths.settheory.orderings.PartialOrders.* import lisa.maths.settheory.orderings.Segments.* import lisa.maths.settheory.orderings.WellOrders.* +import Ordinals.* + object Induction extends lisa.Main { // var defs @@ -76,7 +77,7 @@ object Induction extends lisa.Main { // z exists by comprehension val zExists = have(exists(z, zDef)) subproof { - have(existsOne(z, zDef)) by UniqueComprehension(A, lambda((t, x), !Q(t))) + have(existsOne(z, zDef)) by UniqueComprehension(A, lambda(t, !Q(t))) have(thesis) by Cut(lastStep, existsOneImpliesExists of P -> lambda(z, zDef)) } diff --git a/lisa-sets/src/main/scala/lisa/maths/settheory/orderings/PartialOrders.scala b/lisa-sets/src/main/scala/lisa/maths/settheory/orderings/PartialOrders.scala index 52df62f1..5aa20f7d 100644 --- a/lisa-sets/src/main/scala/lisa/maths/settheory/orderings/PartialOrders.scala +++ b/lisa-sets/src/main/scala/lisa/maths/settheory/orderings/PartialOrders.scala @@ -113,7 +113,7 @@ object PartialOrders extends lisa.Main { val setOfLowerBoundsUniqueness = Theorem( () |- ∃!(z, ∀(t, in(t, z) <=> (in(t, secondInPair(p)) /\ lowerBound(t, y, p)))) ) { - have(thesis) by UniqueComprehension(secondInPair(p), lambda((t, x), lowerBound(t, y, p))) + have(thesis) by UniqueComprehension(secondInPair(p), lambda(t, lowerBound(t, y, p))) } /** @@ -136,7 +136,7 @@ object PartialOrders extends lisa.Main { val setOfUpperBoundsUniqueness = Theorem( () |- ∃!(z, ∀(t, in(t, z) <=> (in(t, secondInPair(p)) /\ upperBound(t, y, p)))) ) { - have(thesis) by UniqueComprehension(secondInPair(p), lambda((t, x), upperBound(t, y, p))) + have(thesis) by UniqueComprehension(secondInPair(p), lambda(t, upperBound(t, y, p))) } /** diff --git a/lisa-sets/src/main/scala/lisa/maths/settheory/orderings/Recursion.scala b/lisa-sets/src/main/scala/lisa/maths/settheory/orderings/Recursion.scala index 60af52ff..3e4d406f 100644 --- a/lisa-sets/src/main/scala/lisa/maths/settheory/orderings/Recursion.scala +++ b/lisa-sets/src/main/scala/lisa/maths/settheory/orderings/Recursion.scala @@ -5,11 +5,12 @@ import lisa.maths.Quantifiers.* import lisa.maths.settheory.SetTheory.* import lisa.maths.settheory.orderings.InclusionOrders.* import lisa.maths.settheory.orderings.Induction.* -import Ordinals.* import lisa.maths.settheory.orderings.PartialOrders.* import lisa.maths.settheory.orderings.Segments.* import lisa.maths.settheory.orderings.WellOrders.* +import Ordinals.* + /** * This file is dedicated to proving the well-ordered and transfinite recursion * theorems. Auxiliary lemmas are sections of the recursion proof separated out @@ -504,7 +505,7 @@ object Recursion extends lisa.Main { // B defined by x => x < a1 /\ k1 x != k2 x exists val B = variable val BDef = forall(x, in(x, B) <=> (in(x, initialSegment(p, a1)) /\ !(app(k1, x) === app(k2, x)))) - val BExists = have(exists(B, BDef)) by Weakening(comprehensionSchema of (z -> initialSegment(p, a1), φ -> lambda((x, z), !(app(k1, x) === app(k2, x))))) + val BExists = have(exists(B, BDef)) by Weakening(comprehensionSchema of (z -> initialSegment(p, a1), φ -> lambda(x, !(app(k1, x) === app(k2, x))))) // B forms a subset of p1 val subsetB = have(BDef |- subset(B, p1)) subproof { @@ -1188,6 +1189,36 @@ object Recursion extends lisa.Main { } + val uniquenessFromExistsOne = Theorem( + existsOne(x, P(x)) |- forall(y, forall(z, (P(y) /\ P(z)) ==> (y === z))) + ) { + val a1 = assume(exists(x, forall(y, P(y) <=> (y === x)))) + val xe = witness(a1) + have(P(y) <=> (y === xe)) by InstantiateForall(y)(xe.definition) + val py = thenHave(P(y) |- y === xe) by Weakening + have(P(z) <=> (z === xe)) by InstantiateForall(z)(xe.definition) + val pz = thenHave(P(z) |- z === xe) by Weakening + have((P(y), P(z)) |- (y === z)) by Substitution.ApplyRules(pz)(py) + have((P(y) /\ P(z)) ==> (y === z)) by Tautology.from(lastStep) + thenHave(forall(z, (P(y) /\ P(z)) ==> (y === z))) by RightForall + thenHave(thesis) by RightForall + + } + + private val A = variable + private val B = variable + private val R = predicate[2] + val strictReplacementSchema = Theorem( + forall(x, in(x, A) ==> existsOne(y, R(x, y))) + |- exists(B, forall(y, in(y, B) <=> exists(x, in(x, A) /\ R(x, y)))) + ) { + assume(forall(x, in(x, A) ==> existsOne(y, R(x, y)))) + thenHave(in(x, A) ==> existsOne(y, R(x, y))) by InstantiateForall(x) + have(in(x, A) ==> ∀(y, ∀(z, (R(x, y) /\ R(x, z)) ==> (y === z)))) by Tautology.from(uniquenessFromExistsOne of (P := lambda(y, R(x, y))), lastStep) + thenHave(forall(x, in(x, A) ==> ∀(y, ∀(z, (R(x, y) /\ R(x, z)) ==> (y === z))))) by RightForall + have(thesis) by Tautology.from(lastStep, replacementSchema of (SchematicPredicateLabel("P", 2) -> R)) + } + /** * Theorem --- Recursive Function Exists * @@ -1842,13 +1873,17 @@ object Recursion extends lisa.Main { val sPsi = SchematicPredicateLabel("P", 3) have(forall(y, in(y, initialSegment(p, x)) ==> existsOne(g, fun(g, y)))) by Restate + println(existsOne(g, fun(g, y))) + println(lastStep.bot) have(exists(w, forall(t, in(t, w) <=> exists(y, in(y, initialSegment(p, x)) /\ fun(t, y))))) by Tautology.from( lastStep, - replacementSchema of (x -> initialSegment(p, x), sPsi -> lambda((x, y, g), fun(g, y))) + strictReplacementSchema of (A -> initialSegment(p, x), R -> lambda((y, g), fun(g, y))) ) } have(thesis) by Tautology.from(lastStep, funExists) + println("thesis") + println(lastStep.bot) } /** diff --git a/lisa-sets/src/main/scala/lisa/maths/settheory/orderings/Segments.scala b/lisa-sets/src/main/scala/lisa/maths/settheory/orderings/Segments.scala index 877ad459..248564e3 100644 --- a/lisa-sets/src/main/scala/lisa/maths/settheory/orderings/Segments.scala +++ b/lisa-sets/src/main/scala/lisa/maths/settheory/orderings/Segments.scala @@ -4,10 +4,11 @@ import lisa.automation.settheory.SetTheoryTactics.* import lisa.maths.Quantifiers.* import lisa.maths.settheory.SetTheory.* import lisa.maths.settheory.orderings.InclusionOrders.* -import Ordinals.* import lisa.maths.settheory.orderings.PartialOrders.* import lisa.maths.settheory.orderings.WellOrders.* +import Ordinals.* + object Segments extends lisa.Main { // var defs @@ -38,7 +39,7 @@ object Segments extends lisa.Main { val initialSegmentUniqueness = Lemma( existsOne(z, forall(t, in(t, z) <=> (in(t, firstInPair(p)) /\ in(pair(t, a), secondInPair(p))))) ) { - have(thesis) by UniqueComprehension(firstInPair(p), lambda((t, z), in(pair(t, a), secondInPair(p)))) + have(thesis) by UniqueComprehension(firstInPair(p), lambda(t, in(pair(t, a), secondInPair(p)))) } val initialSegment = DEF(p, a) --> The(z, forall(t, in(t, z) <=> (in(t, firstInPair(p)) /\ in(pair(t, a), secondInPair(p)))))(initialSegmentUniqueness) @@ -46,7 +47,7 @@ object Segments extends lisa.Main { val initialSegmentLeqUniqueness = Lemma( existsOne(z, forall(t, in(t, z) <=> (in(t, firstInPair(p)) /\ (in(pair(t, a), secondInPair(p)) \/ (t === a))))) ) { - have(thesis) by UniqueComprehension(firstInPair(p), lambda((t, z), (in(pair(t, a), secondInPair(p)) \/ (t === a)))) + have(thesis) by UniqueComprehension(firstInPair(p), lambda(t, (in(pair(t, a), secondInPair(p)) \/ (t === a)))) } val initialSegmentLeq = DEF(p, a) --> The(z, forall(t, in(t, z) <=> (in(t, firstInPair(p)) /\ (in(pair(t, a), secondInPair(p)) \/ (t === a)))))(initialSegmentLeqUniqueness) @@ -54,7 +55,7 @@ object Segments extends lisa.Main { val initialSegmentOrderUniqueness = Lemma( existsOne(z, forall(t, in(t, z) <=> (in(t, secondInPair(p)) /\ (in(firstInPair(t), initialSegment(p, a)) /\ in(secondInPair(t), initialSegment(p, a)))))) ) { - have(thesis) by UniqueComprehension(secondInPair(p), lambda((t, z), (in(firstInPair(t), initialSegment(p, a)) /\ in(secondInPair(t), initialSegment(p, a))))) + have(thesis) by UniqueComprehension(secondInPair(p), lambda(t, (in(firstInPair(t), initialSegment(p, a)) /\ in(secondInPair(t), initialSegment(p, a))))) } val initialSegmentOrder = diff --git a/lisa-sets/src/test/scala/lisa/utilities/ComprehensionsTests.scala b/lisa-sets/src/test/scala/lisa/utilities/ComprehensionsTests.scala new file mode 100644 index 00000000..7b7a67c3 --- /dev/null +++ b/lisa-sets/src/test/scala/lisa/utilities/ComprehensionsTests.scala @@ -0,0 +1,83 @@ +package lisa.utilities + +import org.scalatest.funsuite.AnyFunSuite + +class ComprehensionsTests extends AnyFunSuite { + + object ComprehensionsTests extends lisa.Main { + import lisa.maths.settheory.SetTheory.* + import lisa.maths.settheory.Comprehensions.* + + private val x = variable + private val x_1 = variable + private val y = variable + private val z = variable + private val s = variable + private val t = variable + private val A = variable + private val B = variable + private val C = variable + private val P = predicate[2] + private val Q = predicate[1] + private val Filter = predicate[1] + private val Map = function[1] + private val f = function[1] + + val singletonMap = Lemma( + ∃(x_1, in(x_1, singleton(∅)) /\ (x === f(x_1))) <=> (x === f(∅)) + ) { + val s1 = have(∃(x_1, in(x_1, singleton(∅)) /\ (x === f(x_1))) ==> (x === f(∅))) subproof { + have(x === f(∅) |- x === f(∅)) by Restate + thenHave((x_1 === ∅, x === f(x_1)) |- x === f(∅)) by Substitution.ApplyRules(x_1 === ∅) + thenHave((x_1 === ∅) /\ (x === f(x_1)) |- x === f(∅)) by Restate + thenHave((in(x_1, singleton(∅))) /\ ((x === f(x_1))) |- x === f(∅)) by Substitution.ApplyRules(singletonHasNoExtraElements of (y := x_1, x := ∅)) + thenHave(∃(x_1, in(x_1, singleton(∅)) /\ ((x === f(x_1)))) |- x === f(∅)) by LeftExists + + } + + val s2 = have((x === f(∅)) ==> ∃(x_1, in(x_1, singleton(∅)) /\ (x === f(x_1)))) subproof { + have(x === f(∅) |- (∅ === ∅) /\ (x === f(∅))) by Restate + thenHave(x === f(∅) |- in(∅, singleton(∅)) /\ (x === f(∅))) by Substitution.ApplyRules(singletonHasNoExtraElements of (y := x_1, x := ∅)) + thenHave(x === f(∅) |- ∃(x_1, in(x_1, singleton(∅)) /\ (x === f(x_1)))) by RightExists + thenHave(thesis) by Restate.from + + } + + have(thesis) by Tautology.from(s1, s2) + } + + val testCollector = Theorem( + ∃(s, ∀(x, in(x, s) <=> (x === f(∅)))) + ) { + val r = singleton(∅).collect(lambda(x, top), f) + + have(in(x, r) <=> (x === f(∅))) by Substitution.ApplyRules(singletonMap)(r.elim(x)) + thenHave(∀(x, in(x, r) <=> (x === f(∅)))) by RightForall + thenHave(thesis) by RightExists + } + + val testMap = Theorem( + ∃(s, ∀(x, in(x, s) <=> (x === f(∅)))) + ) { + val r = singleton(∅).map(f) + have(in(x, r) <=> (x === f(∅))) by Substitution.ApplyRules(singletonMap)(r.elim(x)) + thenHave(∀(x, in(x, r) <=> (x === f(∅)))) by RightForall + thenHave(thesis) by RightExists + } + + val testFilter = Theorem( + ∃(x, Q(x)) |- ∃(z, ∀(t, in(t, z) <=> ∀(y, Q(y) ==> in(t, y)))) + ) { + val s1 = assume(∃(x_1, Q(x_1))) + val x = witness(s1) + val z = x.filter(lambda(t, ∀(y, Q(y) ==> in(t, y)))) + have(∀(y, Q(y) ==> in(t, y)) <=> ((t ∈ x) /\ ∀(y, Q(y) ==> in(t, y)))) by Tableau + have(in(t, z) <=> ∀(y, Q(y) ==> (t ∈ y))) by Substitution.ApplyRules(lastStep)(z.elim(t)) + thenHave(∀(t, in(t, z) <=> ∀(y, Q(y) ==> in(t, y)))) by RightForall + thenHave(thesis) by RightExists + + } + } + assert(ComprehensionsTests.theory.getTheorem("testFilter").nonEmpty) + +} diff --git a/lisa-utils/src/main/scala/lisa/fol/Common.scala b/lisa-utils/src/main/scala/lisa/fol/Common.scala index cc698916..39bdc5df 100644 --- a/lisa-utils/src/main/scala/lisa/fol/Common.scala +++ b/lisa-utils/src/main/scala/lisa/fol/Common.scala @@ -30,7 +30,6 @@ trait Common { extension [T, N <: Arity](self: T ** N) { def toSeq: Seq[T] = self - def map[U](f: T => U): U ** N = self.map(f) } @@ -747,6 +746,10 @@ trait Common { def applyUnsafe(arg: (Variable, Formula)): BinderFormula = BinderFormula(this, arg._1, arg._2) def apply(v: Variable, f: Formula): BinderFormula = applyUnsafe((v, f)) + def unapply(b: BinderFormula): Option[(Variable, Formula)] = b match { + case BinderFormula(label, v, f) if (label == this) => Some((v, f)) + case _ => None + } inline def freeSchematicLabels: Set[SchematicLabel[?]] = Set.empty inline def allSchematicLabels: Set[SchematicLabel[?]] = Set.empty inline def substituteUnsafe(map: Map[SchematicLabel[_], LisaObject[_]]): this.type = this diff --git a/lisa-utils/src/main/scala/lisa/fol/Sequents.scala b/lisa-utils/src/main/scala/lisa/fol/Sequents.scala index 8209575d..44eb047b 100644 --- a/lisa-utils/src/main/scala/lisa/fol/Sequents.scala +++ b/lisa-utils/src/main/scala/lisa/fol/Sequents.scala @@ -39,7 +39,7 @@ trait Sequents extends Common with lisa.fol.Lambdas { case sl: SchematicFunctionLabel[?] => p._2 match { case l: LambdaExpression[Term, Term, ?] @unchecked if (l.bounds.isEmpty || l.bounds.head.isInstanceOf[Variable]) & l.body.isInstanceOf[Term] => - (p._1.asInstanceOf, l) + (sl, l) case s: TermLabel[?] => val vars = nFreshId(Seq(s.id), s.arity).map(id => Variable(id)) (sl, LambdaExpression(vars, s.applySeq(vars), s.arity)) diff --git a/lisa-utils/src/main/scala/lisa/prooflib/ProofsHelpers.scala b/lisa-utils/src/main/scala/lisa/prooflib/ProofsHelpers.scala index b6541e71..da97d5e3 100644 --- a/lisa-utils/src/main/scala/lisa/prooflib/ProofsHelpers.scala +++ b/lisa-utils/src/main/scala/lisa/prooflib/ProofsHelpers.scala @@ -35,7 +35,7 @@ trait ProofsHelpers { } } - infix def subproof(using proof: Library#Proof, om: OutputManager, line: sourcecode.Line, file: sourcecode.File)(computeProof: proof.InnerProof ?=> Unit): proof.ProofStep = { + infix def subproof(using proof: Library#Proof, line: sourcecode.Line, file: sourcecode.File)(computeProof: proof.InnerProof ?=> Unit): proof.ProofStep = { val botWithAssumptions = HaveSequent.this.bot ++ (proof.getAssumptions |- ()) val iProof: proof.InnerProof = new proof.InnerProof(Some(botWithAssumptions)) computeProof(using iProof) @@ -124,6 +124,7 @@ trait ProofsHelpers { def of(insts: F.SubstPair*): proof.InstantiatedFact = { proof.InstantiatedFact(fact, insts) } + def statement: F.Sequent = proof.sequentOfFact(fact) } def currentProof(using p: library.Proof): Library#Proof = p @@ -358,4 +359,61 @@ trait ProofsHelpers { val statement: F.Sequent = () |- Iff(label.applySeq(vars), lambda.body) library.last = Some(this) } + + ///////////////////////// + // Local Definitions // + ///////////////////////// + + import lisa.utils.parsing.FOLPrinter.prettySCProof + import lisa.utils.KernelHelpers.apply + + /** + * A term with a definition, local to a proof. + * + * @param proof + * @param id + */ + abstract class LocalyDefinedVariable(val proof: library.Proof, id: Identifier) extends Variable(id) { + + val definition: proof.Fact + lazy val definingFormula = proof.sequentOfFact(definition).right.head + + // proof.addDefinition(this, defin(this), fact) + // val definition: proof.Fact = proof.getDefinition(this) + } + + /** + * A witness for a statement of the form ∃(x, P(x)) is a (fresh) variable y such that P(y) holds. This is a local definition, typically used with `val y = witness(fact)` + * where `fact` is a fact of the form `∃(x, P(x))`. The property P(y) can then be used with y.elim + */ + def witness(using _proof: library.Proof, line: sourcecode.Line, file: sourcecode.File, name: sourcecode.Name)(fact: _proof.Fact): LocalyDefinedVariable { val proof: _proof.type } = { + + val (els, eli) = _proof.sequentAndIntOfFact(fact) + els.right.head match + case Exists(x, inner) => + val id = freshId((els.allSchematicLabels ++ _proof.lockedSymbols ++ _proof.possibleGoal.toSet.flatMap(_.allSchematicLabels)).map(_.id), name.value) + val c: LocalyDefinedVariable = new LocalyDefinedVariable(_proof, id) { val definition = assume(using proof)(inner.substitute(x := this)) } + val defin = c.definingFormula + val definU = defin.underlying + val exDefinU = K.Exists(c.underlyingLabel, definU) + + if els.right.size != 1 || !K.isSame(els.right.head.underlying, exDefinU) then + throw new UserInvalidDefinitionException(c.id, "Eliminator fact for " + c + " in a definition should have a single formula, equivalent to " + exDefinU + ", on the right side.") + + _proof.addElimination( + defin, + (i, sequent) => + val resSequent = (sequent.underlying -<< definU) + List( + SC.LeftExists(resSequent +<< exDefinU, i, definU, c.underlyingLabel), + SC.Cut(resSequent ++<< els.underlying, eli, i + 1, exDefinU) + ) + ) + + c.asInstanceOf[LocalyDefinedVariable { val proof: _proof.type }] + + case _ => throw new Exception("Pick is used to obtain a witness of an existential statement.") + + } + } diff --git a/lisa-utils/src/main/scala/lisa/prooflib/WithTheorems.scala b/lisa-utils/src/main/scala/lisa/prooflib/WithTheorems.scala index 46a510d4..98f077eb 100644 --- a/lisa-utils/src/main/scala/lisa/prooflib/WithTheorems.scala +++ b/lisa-utils/src/main/scala/lisa/prooflib/WithTheorems.scala @@ -8,6 +8,7 @@ import lisa.utils.KernelHelpers.{_, given} import lisa.utils.LisaException import lisa.utils.UserLisaException import lisa.utils.UserLisaException.* +import lisa.utils.parsing.FOLPrinter.prettySCProof import lisa.utils.parsing.UnreachableException import scala.annotation.nowarn @@ -58,7 +59,7 @@ trait WithTheorems { private var imports: List[(OutsideFact, F.Sequent)] = Nil private var instantiatedFacts: List[(InstantiatedFact, Int)] = Nil private var assumptions: List[F.Formula] = assump - private var discharges: List[Fact] = Nil + private var eliminations: List[(F.Formula, (Int, F.Sequent) => List[K.SCProofStep])] = Nil /** * the theorem that is being proved (paritally, if subproof) by this proof. @@ -133,9 +134,33 @@ trait WithTheorems { if (!assumptions.contains(f)) assumptions = f :: assumptions } + def addElimination(f: F.Formula, elim: (Int, F.Sequent) => List[K.SCProofStep]): Unit = { + eliminations = (f, elim) :: eliminations + } + def addDischarge(ji: Fact): Unit = { - if (!discharges.contains(ji)) discharges = ji :: discharges + val (s1, t1) = sequentAndIntOfFact(ji) + val f = s1.right.head + val fu = f.underlying + addElimination( + f, + (i, sequent) => + List( + SC.Cut((sequent.underlying -<< fu) ++ (s1.underlying ->> fu), t1, i, fu) + ) + ) } + /* + def addDefinition(v: LocalyDefinedVariable, defin: F.Formula): Unit = { + if localdefs.contains(v) then + throw new UserInvalidDefinitionException("v", "Variable already defined with" + v.definition + " in current proof") + else { + localdefs(v) = defin + addAssumption(defin) + } + } + def getDefinition(v: LocalyDefinedVariable): Fact = localdefs(v)._2 + */ // Getters @@ -156,11 +181,6 @@ trait WithTheorems { */ def getAssumptions: List[F.Formula] = assumptions - /** - * @return The list of Formula, typically proved by outer theorems or axioms that will get discharged in the end of the proof. - */ - def getDischarges: List[Fact] = discharges - /** * Produce the low level [[K.SCProof]] corresponding to the proof. Automatically eliminates any formula in the discharges that is still left of the sequent. * @@ -168,17 +188,20 @@ trait WithTheorems { */ def toSCProof: K.SCProof = { import lisa.utils.KernelHelpers.{-<<, ->>} - val finalSteps = discharges.foldLeft(steps.map(_.scps))((cumul, next) => { - val (s1, t1) = sequentAndIntOfFact(next) - val s = s1.underlying - val lastStep = cumul.head - val t2 = cumul.length - 1 - SC.Cut((lastStep.bot -<< s.right.head) ++ (s ->> s.right.head), t1, t2, s.right.head) :: cumul - }) - - K.SCProof(finalSteps.reverse.toIndexedSeq, getImports.map(of => of._2.underlying).toIndexedSeq) + val finalSteps = eliminations.foldLeft[(List[SC.SCProofStep], F.Sequent)]((steps.map(_.scps), steps.head.bot)) { (cumul_bot, f_elim) => + val (cumul, bot) = cumul_bot + val (f, elim) = f_elim + val i = cumul.size + val elimSteps = elim(i - 1, bot) + (elimSteps.foldLeft(cumul)((cumul2, step) => step :: cumul2), bot -<< f) + } + + val r = K.SCProof(finalSteps._1.reverse.toIndexedSeq, getImports.map(of => of._2.underlying).toIndexedSeq) + r } + def currentSCProof: K.SCProof = K.SCProof(steps.map(_.scps).reverse.toIndexedSeq, getImports.map(of => of._2.underlying).toIndexedSeq) + /** * For a fact, returns the sequent that the fact proove and the position of the fact in the proof. *