Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/Isabelle/FOL/ex/   (Isabelle Prover Version 2025-1©)  Datei vom 16.11.2025 mit Größe 22 kB image not shown  

Quelle  Intuitionistic.thy   Sprache: Isabelle

 

(*  Title:      FOL/ex/Intuitionistic.thy
    Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
    Copyright   1991  University of Cambridge
*)


section ‹Intuitionistic First-Order Logic›

theory Intuitionistic
imports IFOL
begin

(*
Single-step ML commands:
by (IntPr.step_tac 1)
by (biresolve_tac safe_brls 1);
by (biresolve_tac haz_brls 1);
by (assume_tac 1);
by (IntPr.safe_tac 1);
by (IntPr.mp_tac 1);
by (IntPr.fast_tac @{context} 1);
*)



text‹Metatheorem (for \emph{propositional} formulae):
 $P$ is classically provable iff $\neg\neg P$ is intuitionistically provable.
 Therefore $\neg P$ is classically provable iff it is intuitionistically
 provable.

 : Let $Q$ be the conjunction of the propositions $A\vee\neg A$, one for
  atom $A$ in $P$. Now $\neg\neg Q$ is intuitionistically provable because
 \neg\neg(A\vee\neg A)$ is and because double-negation distributes over
 . If $P$ is provable classically, then clearly $Q\rightarrow P$ is
  intuitionistically, so $\neg\neg(Q\rightarrow P)$ is also provable
 . The latter is intuitionistically equivalent to $\neg\neg
 \rightarrow\neg\neg P$, hence to $\neg\neg P$, since $\neg\neg Q$ is
  provable. Finally, if $P$ is a negation then $\neg\neg P$
  intuitionstically equivalent to $P$. [Andy Pitts]
›

lemma ‹¬ ¬ (P ∧ Q) ⟷ ¬ ¬ P ∧ ¬ ¬ Q›
  by (tactic ‹IntPr.fast_tac context 1›)

lemma ‹¬ ¬ ((¬ P ⟶ Q) ⟶ (¬ P ⟶ ¬ Q) ⟶ P)›
  by (tactic ‹IntPr.fast_tac context 1›)

text ‹Double-negation does NOT distribute over disjunction.›

lemma ‹¬ ¬ (P ⟶ Q) ⟷ (¬ ¬ P ⟶ ¬ ¬ Q)›
  by (tactic ‹IntPr.fast_tac context 1›)

lemma ‹¬ ¬ ¬ P ⟷ ¬ P›
  by (tactic ‹IntPr.fast_tac context 1›)

lemma ‹¬ ¬ ((P ⟶ Q ∨ R) ⟶ (P ⟶ Q) ∨ (P ⟶ R))›
  by (tactic ‹IntPr.fast_tac context 1›)

lemma ‹(P ⟷ Q) ⟷ (Q ⟷ P)›
  by (tactic ‹IntPr.fast_tac context 1›)

lemma ‹((P ⟶ (Q ∨ (Q ⟶ R))) ⟶ R) ⟶ R›
  by (tactic ‹IntPr.fast_tac context 1›)

lemma
  ‹(((G ⟶ A) ⟶ J) ⟶ D ⟶ E) ⟶ (((H ⟶ B) ⟶ I) ⟶ C ⟶ J)
 ⟶ (A ⟶ H) ⟶ F ⟶ G ⟶ (((C ⟶ B) ⟶ I) ⟶ D) ⟶ (A ⟶ C)
 ⟶ (((F ⟶ A) ⟶ B) ⟶ I) ⟶ E
›
  by (tactic ‹IntPr.fast_tac context 1›)

text ‹Admissibility of the excluded middle for negated formulae›
lemma ‹(P ∨ ¬P ⟶ ¬Q) ⟶ ¬Q›
  by (tactic ‹IntPr.fast_tac context 1›)

text ‹The same in a more general form, no ex falso quodlibet›
lemma ‹(P ∨ (P⟶R) ⟶ Q ⟶ R) ⟶ Q ⟶ R›
  by (tactic ‹IntPr.fast_tac context 1›)


subsection ‹Lemmas for the propositional double-negation translation›

lemma ‹P ⟶ ¬ ¬ P›
  by (tactic ‹IntPr.fast_tac context 1›)

lemma ‹¬ ¬ (¬ ¬ P ⟶ P)›
  by (tactic ‹IntPr.fast_tac context 1›)

lemma ‹¬ ¬ P ∧ ¬ ¬ (P ⟶ Q) ⟶ ¬ ¬ Q›
  by (tactic ‹IntPr.fast_tac context 1›)


text ‹The following are classically but not constructively valid.
 The attempt to prove them terminates quickly!
›
lemma ‹((P ⟶ Q) ⟶ P) ⟶ P›
apply (tactic ‹IntPr.fast_tac context 1›)?
apply (rule asm_rl) ― ‹Checks that subgoals remain: proof failed.›
oops

lemma ‹(P ∧ Q ⟶ R) ⟶ (P ⟶ R) ∨ (Q ⟶ R)›
apply (tactic ‹IntPr.fast_tac context 1›)?
apply (rule asm_rl) ― ‹Checks that subgoals remain: proof failed.›
oops


subsection ‹de Bruijn formulae›

text ‹de Bruijn formula with three predicates›
lemma
  ‹((P ⟷ Q) ⟶ P ∧ Q ∧ R) ∧
 ((Q ⟷ R) ⟶ P ∧ Q ∧ R) ∧
 ((R ⟷ P) ⟶ P ∧ Q ∧ R) ⟶ P ∧ Q ∧ R
›
  by (tactic ‹IntPr.fast_tac context 1›)


text ‹de Bruijn formula with five predicates›
lemma
  ‹((P ⟷ Q) ⟶ P ∧ Q ∧ R ∧ S ∧ T) ∧
 ((Q ⟷ R) ⟶ P ∧ Q ∧ R ∧ S ∧ T) ∧
 ((R ⟷ S) ⟶ P ∧ Q ∧ R ∧ S ∧ T) ∧
 ((S ⟷ T) ⟶ P ∧ Q ∧ R ∧ S ∧ T) ∧
 ((T ⟷ P) ⟶ P ∧ Q ∧ R ∧ S ∧ T) ⟶ P ∧ Q ∧ R ∧ S ∧ T
›
  by (tactic ‹IntPr.fast_tac context 1›)


text ‹
 Problems from of Sahlin, Franzen and Haridi,
 An Intuitionistic Predicate Logic Theorem Prover.
 J. Logic and Comp. 2 (5), October 1992, 619-656.
 
›

text‹Problem 1.1›
lemma
  ‹(∀x. ∃y. ∀z. p(x) ∧ q(y) ∧ r(z)) ⟷
 (∀z. ∃y. ∀x. p(x) ∧ q(y) ∧ r(z))
›
  by (tactic ‹IntPr.best_dup_tac context 1›)  ― ‹SLOW›

text‹Problem 3.1›
lemma ‹¬ (∃x. ∀y. mem(y,x) ⟷ ¬ mem(x,x))›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹Problem 4.1: hopeless!›
lemma
  ‹(∀x. p(x) ⟶ p(h(x)) ∨ p(g(x))) ∧ (∃x. p(x)) ∧ (∀x. ¬ p(h(x)))
 ⟶ (∃x. p(g(g(g(g(g(x)))))))
›
  oops


subsection ‹Intuitionistic FOL: propositional problems based on Pelletier.›

text‹‹¬¬›1›
lemma ‹¬ ¬ ((P ⟶ Q) ⟷ (¬ Q ⟶ ¬ P))›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹‹¬¬›2›
lemma ‹¬ ¬ (¬ ¬ P ⟷ P)›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹3›
lemma ‹¬ (P ⟶ Q) ⟶ (Q ⟶ P)›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹‹¬¬›4›
lemma ‹¬ ¬ ((¬ P ⟶ Q) ⟷ (¬ Q ⟶ P))›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹‹¬¬›5›
lemma ‹¬ ¬ ((P ∨ Q ⟶ P ∨ R) ⟶ P ∨ (Q ⟶ R))›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹‹¬¬›6›
lemma ‹¬ ¬ (P ∨ ¬ P)›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹‹¬¬›7›
lemma ‹¬ ¬ (P ∨ ¬ ¬ ¬ P)›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹‹¬¬›8. Peirce's law›
lemma ‹¬ ¬ (((P ⟶ Q) ⟶ P) ⟶ P)›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹9›
lemma ‹((P ∨ Q) ∧ (¬ P ∨ Q) ∧ (P ∨ ¬ Q)) ⟶ ¬ (¬ P ∨ ¬ Q)›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹10›
lemma ‹(Q ⟶ R) ⟶ (R ⟶ P ∧ Q) ⟶ (P ⟶ (Q ∨ R)) ⟶ (P ⟷ Q)›
  by (tactic ‹IntPr.fast_tac context 1›)


subsection‹11. Proved in each direction (incorrectly, says Pelletier!!)›

lemma ‹P ⟷ P›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹‹¬¬›12. Dijkstra's law›
lemma ‹¬ ¬ (((P ⟷ Q) ⟷ R) ⟷ (P ⟷ (Q ⟷ R)))›
  by (tactic ‹IntPr.fast_tac context 1›)

lemma ‹((P ⟷ Q) ⟷ R) ⟶ ¬ ¬ (P ⟷ (Q ⟷ R))›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹13. Distributive law›
lemma ‹P ∨ (Q ∧ R) ⟷ (P ∨ Q) ∧ (P ∨ R)›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹‹¬¬›14›
lemma ‹¬ ¬ ((P ⟷ Q) ⟷ ((Q ∨ ¬ P) ∧ (¬ Q ∨ P)))›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹‹¬¬›15›
lemma ‹¬ ¬ ((P ⟶ Q) ⟷ (¬ P ∨ Q))›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹‹¬¬›16›
lemma ‹¬ ¬ ((P ⟶ Q) ∨ (Q ⟶ P))›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹‹¬¬›17›
lemma ‹¬ ¬ (((P ∧ (Q ⟶ R)) ⟶ S) ⟷ ((¬ P ∨ Q ∨ S) ∧ (¬ P ∨ ¬ R ∨ S)))›
  by (tactic ‹IntPr.fast_tac context 1›)

text ‹Dijkstra's ``Golden Rule''›
lemma ‹(P ∧ Q) ⟷ P ⟷ Q ⟷ (P ∨ Q)›
  by (tactic ‹IntPr.fast_tac context 1›)


section ‹Examples with quantifiers›

subsection ‹The converse is classical in the following implications \dots›

lemma ‹(∃x. P(x) ⟶ Q) ⟶ (∀x. P(x)) ⟶ Q›
  by (tactic ‹IntPr.fast_tac context 1›)

lemma ‹((∀x. P(x)) ⟶ Q) ⟶ ¬ (∀x. P(x) ∧ ¬ Q)›
  by (tactic ‹IntPr.fast_tac context 1›)

lemma ‹((∀x. ¬ P(x)) ⟶ Q) ⟶ ¬ (∀x. ¬ (P(x) ∨ Q))›
  by (tactic ‹IntPr.fast_tac context 1›)

lemma ‹(∀x. P(x)) ∨ Q ⟶ (∀x. P(x) ∨ Q)›
  by (tactic ‹IntPr.fast_tac context 1›)

lemma ‹(∃x. P ⟶ Q(x)) ⟶ (P ⟶ (∃x. Q(x)))›
  by (tactic ‹IntPr.fast_tac context 1›)


subsection ‹The following are not constructively valid!›
text ‹The attempt to prove them terminates quickly!›

lemma ‹((∀x. P(x)) ⟶ Q) ⟶ (∃x. P(x) ⟶ Q)›
  apply (tactic ‹IntPr.fast_tac context 1›)?
  apply (rule asm_rl) ― ‹Checks that subgoals remain: proof failed.›
  oops

lemma ‹(P ⟶ (∃x. Q(x))) ⟶ (∃x. P ⟶ Q(x))›
  apply (tactic ‹IntPr.fast_tac context 1›)?
  apply (rule asm_rl) ― ‹Checks that subgoals remain: proof failed.›
  oops

lemma ‹(∀x. P(x) ∨ Q) ⟶ ((∀x. P(x)) ∨ Q)›
  apply (tactic ‹IntPr.fast_tac context 1›)?
  apply (rule asm_rl) ― ‹Checks that subgoals remain: proof failed.›
  oops

lemma ‹(∀x. ¬ ¬ P(x)) ⟶ ¬ ¬ (∀x. P(x))›
  apply (tactic ‹IntPr.fast_tac context 1›)?
  apply (rule asm_rl) ― ‹Checks that subgoals remain: proof failed.›
  oops

text ‹Classically but not intuitionistically valid. Proved by a bug in 1986!›
lemma ‹∃x. Q(x) ⟶ (∀x. Q(x))›
  apply (tactic ‹IntPr.fast_tac context 1›)?
  apply (rule asm_rl) ― ‹Checks that subgoals remain: proof failed.›
  oops


subsection ‹Hard examples with quantifiers›

text ‹
 The ones that have not been proved are not known to be valid! Some will
 require quantifier duplication -- not currently available.
 
›

text‹‹¬¬›18›
lemma ‹¬ ¬ (∃y. ∀x. P(y) ⟶ P(x))›
  oops  ― ‹NOT PROVED›

text‹‹¬¬›19›
lemma ‹¬ ¬ (∃x. ∀y z. (P(y) ⟶ Q(z)) ⟶ (P(x) ⟶ Q(x)))›
  oops  ― ‹NOT PROVED›

text‹20›
lemma
  ‹(∀x y. ∃z. ∀w. (P(x) ∧ Q(y) ⟶ R(z) ∧ S(w)))
 ⟶ (∃x y. P(x) ∧ Q(y)) ⟶ (∃z. R(z))
›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹21›
lemma ‹(∃x. P ⟶ Q(x)) ∧ (∃x. Q(x) ⟶ P) ⟶ ¬ ¬ (∃x. P ⟷ Q(x))›
  oops ― ‹NOT PROVED; needs quantifier duplication›

text‹22›
lemma ‹(∀x. P ⟷ Q(x)) ⟶ (P ⟷ (∀x. Q(x)))›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹‹¬¬›23›
lemma ‹¬ ¬ ((∀x. P ∨ Q(x)) ⟷ (P ∨ (∀x. Q(x))))›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹24›
lemma
  ‹¬ (∃x. S(x) ∧ Q(x)) ∧ (∀x. P(x) ⟶ Q(x) ∨ R(x)) ∧
 (¬ (∃x. P(x)) ⟶ (∃x. Q(x))) ∧ (∀x. Q(x) ∨ R(x) ⟶ S(x))
 ⟶ ¬ ¬ (∃x. P(x) ∧ R(x))
›
text ‹
 Not clear why ‹fast_tac›, ‹best_tac›, ‹ASTAR› and
 ‹ITER_DEEPEN› all take forever.
 
›
  apply (tactic ‹IntPr.safe_tac context›)
  apply (erule impE)
  apply (tactic ‹IntPr.fast_tac context 1›)
  apply (tactic ‹IntPr.fast_tac context 1›)
  done

text‹25›
lemma
  ‹(∃x. P(x)) ∧
 (∀x. L(x) ⟶ ¬ (M(x) ∧ R(x))) ∧
 (∀x. P(x) ⟶ (M(x) ∧ L(x))) ∧
 ((∀x. P(x) ⟶ Q(x)) ∨ (∃x. P(x) ∧ R(x)))
 ⟶ (∃x. Q(x) ∧ P(x))
›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹‹¬¬›26›
lemma
  ‹(¬ ¬ (∃x. p(x)) ⟷ ¬ ¬ (∃x. q(x))) ∧
 (∀x. ∀y. p(x) ∧ q(y) ⟶ (r(x) ⟷ s(y)))
 ⟶ ((∀x. p(x) ⟶ r(x)) ⟷ (∀x. q(x) ⟶ s(x)))
›
  oops  ― ‹NOT PROVED›

text‹27›
lemma
  ‹(∃x. P(x) ∧ ¬ Q(x)) ∧
 (∀x. P(x) ⟶ R(x)) ∧
 (∀x. M(x) ∧ L(x) ⟶ P(x)) ∧
 ((∃x. R(x) ∧ ¬ Q(x)) ⟶ (∀x. L(x) ⟶ ¬ R(x)))
 ⟶ (∀x. M(x) ⟶ ¬ L(x))
›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹‹¬¬›28. AMENDED›
lemma
  ‹(∀x. P(x) ⟶ (∀x. Q(x))) ∧
 (¬ ¬ (∀x. Q(x) ∨ R(x)) ⟶ (∃x. Q(x) ∧ S(x))) ∧
 (¬ ¬ (∃x. S(x)) ⟶ (∀x. L(x) ⟶ M(x)))
 ⟶ (∀x. P(x) ∧ L(x) ⟶ M(x))
›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹29. Essentially the same as Principia Mathematica *11.71›
lemma
  ‹(∃x. P(x)) ∧ (∃y. Q(y))
 ⟶ ((∀x. P(x) ⟶ R(x)) ∧ (∀y. Q(y) ⟶ S(y)) ⟷
 (∀x y. P(x) ∧ Q(y) ⟶ R(x) ∧ S(y)))
›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹‹¬¬›30›
lemma
  ‹(∀x. (P(x) ∨ Q(x)) ⟶ ¬ R(x)) ∧
 (∀x. (Q(x) ⟶ ¬ S(x)) ⟶ P(x) ∧ R(x))
 ⟶ (∀x. ¬ ¬ S(x))
›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹31›
lemma
  ‹¬ (∃x. P(x) ∧ (Q(x) ∨ R(x))) ∧
 (∃x. L(x) ∧ P(x)) ∧
 (∀x. ¬ R(x) ⟶ M(x))
 ⟶ (∃x. L(x) ∧ M(x))
›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹32›
lemma
  ‹(∀x. P(x) ∧ (Q(x) ∨ R(x)) ⟶ S(x)) ∧
 (∀x. S(x) ∧ R(x) ⟶ L(x)) ∧
 (∀x. M(x) ⟶ R(x))
 ⟶ (∀x. P(x) ∧ M(x) ⟶ L(x))
›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹‹¬¬›33›
lemma
  ‹(∀x. ¬ ¬ (P(a) ∧ (P(x) ⟶ P(b)) ⟶ P(c))) ⟷
 (∀x. ¬ ¬ ((¬ P(a) ∨ P(x) ∨ P(c)) ∧ (¬ P(a) ∨ ¬ P(b) ∨ P(c))))
›
  apply (tactic ‹IntPr.best_tac context 1›)
  done


text‹36›
lemma
  ‹(∀x. ∃y. J(x,y)) ∧
 (∀x. ∃y. G(x,y)) ∧
 (∀x y. J(x,y) ∨ G(x,y) ⟶ (∀z. J(y,z) ∨ G(y,z) ⟶ H(x,z)))
 ⟶ (∀x. ∃y. H(x,y))
›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹37›
lemma
  ‹(∀z. ∃w. ∀x. ∃y.
 ¬ ¬ (P(x,z) ⟶ P(y,w)) ∧ P(y,z) ∧ (P(y,w) ⟶ (∃u. Q(u,w)))) ∧
 (∀x z. ¬ P(x,z) ⟶ (∃y. Q(y,z))) ∧
 (¬ ¬ (∃x y. Q(x,y)) ⟶ (∀x. R(x,x)))
 ⟶ ¬ ¬ (∀x. ∃y. R(x,y))
›
  oops  ― ‹NOT PROVED›

text‹39›
lemma ‹¬ (∃x. ∀y. F(y,x) ⟷ ¬ F(y,y))›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹40. AMENDED›
lemma
  ‹(∃y. ∀x. F(x,y) ⟷ F(x,x)) ⟶
 ¬ (∀x. ∃y. ∀z. F(z,y) ⟷ ¬ F(z,x))
›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹44›
lemma
  ‹(∀x. f(x) ⟶
 (∃y. g(y) ∧ h(x,y) ∧ (∃y. g(y) ∧ ¬ h(x,y)))) ∧
 (∃x. j(x) ∧ (∀y. g(y) ⟶ h(x,y)))
 ⟶ (∃x. j(x) ∧ ¬ f(x))
›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹48›
lemma ‹(a = b ∨ c = d) ∧ (a = c ∨ b = d) ⟶ a = d ∨ b = c›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹51›
lemma
  ‹(∃z w. ∀x y. P(x,y) ⟷ (x = z ∧ y = w)) ⟶
 (∃z. ∀x. ∃w. (∀y. P(x,y) ⟷ y = w) ⟷ x = z)
›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹52›
text ‹Almost the same as 51.›
lemma
  ‹(∃z w. ∀x y. P(x,y) ⟷ (x = z ∧ y = w)) ⟶
 (∃w. ∀y. ∃z. (∀x. P(x,y) ⟷ x = z) ⟷ y = w)
›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹56›
lemma ‹(∀x. (∃y. P(y) ∧ x = f(y)) ⟶ P(x)) ⟷ (∀x. P(x) ⟶ P(f(x)))›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹57›
lemma
  ‹P(f(a,b), f(b,c)) ∧ P(f(b,c), f(a,c)) ∧
 (∀x y z. P(x,y) ∧ P(y,z) ⟶ P(x,z)) ⟶ P(f(a,b), f(a,c))
›
  by (tactic ‹IntPr.fast_tac context 1›)

text‹60›
lemma ‹∀x. P(x,f(x)) ⟷ (∃y. (∀z. P(z,y) ⟶ P(z,f(x))) ∧ P(x,y))›
  by (tactic ‹IntPr.fast_tac context 1›)

end

Messung V0.5 in Prozent
C=29 H=100 G=73

¤ Dauer der Verarbeitung: 0.22 Sekunden  (vorverarbeitet am  2026-09-28) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.