lemma\<open>(P \<longleftrightarrow> Q) \<longleftrightarrow> (Q \<longleftrightarrow> P)\<close> by blast
lemma\<open>\<not> (P \<longleftrightarrow> \<not> P)\<close> by blast
subsection \<open>Pelletier's examples\<close>
text\<open>
Sample problems from
\<^item> F. J. Pelletier,
Seventy-Five Problems for Testing Automatic Theorem Provers,
J. Automated Reasoning 2 (1986), 191-216.
Errata, JAR 4 (1988), 236-236.
The hardest problems -- judging by experience with several theorem
provers, including matrix ones -- are 34 and 43. \<close>
text\<open>Theorem B of Peter Andrews, Theorem Proving via General Matings,
JACM 28 (1981).\<close> lemma\<open>(\<exists>x. \<forall>y. P(x) \<longleftrightarrow> P(y)) \<longrightarrow> ((\<exists>x. P(x)) \<longleftrightarrow> (\<forall>y. P(y)))\<close> by blast
text\<open>Needs multiple instantiation of ALL.\<close> lemma\<open>(\<forall>x. P(x) \<longrightarrow> P(f(x))) \<and> P(d) \<longrightarrow> P(f(f(f(d))))\<close> by blast
text\<open>Needs double instantiation of the quantifier\<close> lemma\<open>\<exists>x. P(x) \<longrightarrow> P(a) \<and> P(b)\<close> by blast
lemma\<open>\<exists>z. P(z) \<longrightarrow> (\<forall>x. P(x))\<close> by blast
lemma\<open>\<exists>x. (\<exists>y. P(y)) \<longrightarrow> P(x)\<close> by blast
text\<open>V. Lifschitz, What Is the Inverse Method?, JAR 5 (1989), 1--23. NOT PROVED.\<close> lemma \<open>\<exists>x x'. \<forall>y. \<exists>z z'.
(\<not> P(y,y) \<or> P(x,x) \<or> \<not> S(z,x)) \<and>
(S(x,y) \<or> \<not> S(y,z) \<or> Q(z',z')) \<and>
(Q(x',y) \ \ Q(y,z') \ S(x',x'))\ oops
subsection \<open>Hard examples with quantifiers\<close>
text\<open>18\<close> lemma\<open>\<exists>y. \<forall>x. P(y) \<longrightarrow> P(x)\<close> by blast
text\<open>19\<close> lemma\<open>\<exists>x. \<forall>y z. (P(y) \<longrightarrow> Q(z)) \<longrightarrow> (P(x) \<longrightarrow> Q(x))\<close> by blast
text\<open>20\<close> lemma\<open>(\<forall>x y. \<exists>z. \<forall>w. (P(x) \<and> Q(y) \<longrightarrow> R(z) \<and> S(w))) \<longrightarrow> (\<exists>x y. P(x) \<and> Q(y)) \<longrightarrow> (\<exists>z. R(z))\<close> by blast
text\<open>21\<close> lemma\<open>(\<exists>x. P \<longrightarrow> Q(x)) \<and> (\<exists>x. Q(x) \<longrightarrow> P) \<longrightarrow> (\<exists>x. P \<longleftrightarrow> Q(x))\<close> by blast
text\<open>22\<close> lemma\<open>(\<forall>x. P \<longleftrightarrow> Q(x)) \<longrightarrow> (P \<longleftrightarrow> (\<forall>x. Q(x)))\<close> by blast
text\<open>23\<close> lemma\<open>(\<forall>x. P \<or> Q(x)) \<longleftrightarrow> (P \<or> (\<forall>x. Q(x)))\<close> by blast
text\<open>
Other proofs: Can use\<open>auto\<close>, which cheats by using rewriting! \<open>Deepen_tac\<close> alone requires 253 secs. Or \<open>by (mini_tac 1 THEN Deepen_tac 5 1)\<close>. \<close>
subsection \<open>Problems (mainly) involving equality or functions\<close>
text\<open>48\<close> lemma\<open>(a = b \<or> c = d) \<and> (a = c \<or> b = d) \<longrightarrow> a = d \<or> b = c\<close> by blast
text\<open>49. NOT PROVED AUTOMATICALLY. Hard because it involves substitution for
Vars; the type constraint ensures that x,y,z have the same type as a,b,u.\<close> lemma \<open>(\<exists>x y::'a. \<forall>z. z = x \<or> z = y) \<and> P(a) \<and> P(b) \<and> a \<noteq> b \<longrightarrow> (\<forall>u::'a. P(u))\<close> apply safe apply (rule_tac x = \<open>a\<close> in allE, assumption) apply (rule_tac x = \<open>b\<close> in allE, assumption) apply fast \<comment> \<open>blast's treatment of equality can't do it\<close> done
text\<open>50. (What has this to do with equality?)\<close> lemma\<open>(\<forall>x. P(a,x) \<or> (\<forall>y. P(x,y))) \<longrightarrow> (\<exists>x. \<forall>y. P(x,y))\<close> by blast
text\<open>51\<close> lemma \<open>(\<exists>z w. \<forall>x y. P(x,y) \<longleftrightarrow> (x = z \<and> y = w)) \<longrightarrow>
(\<exists>z. \<forall>x. \<exists>w. (\<forall>y. P(x,y) \<longleftrightarrow> y=w) \<longleftrightarrow> x = z)\<close> by blast
text\<open>52\<close> text\<open>Almost the same as 51.\<close> lemma \<open>(\<exists>z w. \<forall>x y. P(x,y) \<longleftrightarrow> (x = z \<and> y = w)) \<longrightarrow>
(\<exists>w. \<forall>y. \<exists>z. (\<forall>x. P(x,y) \<longleftrightarrow> x = z) \<longleftrightarrow> y = w)\<close> by blast
text\<open>55\<close> text\<open>Non-equational version, from Manthey and Bry, CADE-9 (Springer, 1988).
fast DISCOVERS who killed Agatha.\<close>
schematic_goal \<open>lives(agatha) \<and> lives(butler) \<and> lives(charles) \<and>
(killed(agatha,agatha) \<or> killed(butler,agatha) \<or> killed(charles,agatha)) \<and>
(\<forall>x y. killed(x,y) \<longrightarrow> hates(x,y) \<and> \<not> richer(x,y)) \<and>
(\<forall>x. hates(agatha,x) \<longrightarrow> \<not> hates(charles,x)) \<and>
(hates(agatha,agatha) \<and> hates(agatha,charles)) \<and>
(\<forall>x. lives(x) \<and> \<not> richer(x,agatha) \<longrightarrow> hates(butler,x)) \<and>
(\<forall>x. hates(agatha,x) \<longrightarrow> hates(butler,x)) \<and>
(\<forall>x. \<not> hates(x,agatha) \<or> \<not> hates(x,butler) \<or> \<not> hates(x,charles)) \<longrightarrow>
killed(?who,agatha)\<close> by fast \<comment> \<open>MUCH faster than blast\<close>
text\<open>56\<close> lemma\<open>(\<forall>x. (\<exists>y. P(y) \<and> x = f(y)) \<longrightarrow> P(x)) \<longleftrightarrow> (\<forall>x. P(x) \<longrightarrow> P(f(x)))\<close> by blast
text\<open>57\<close> lemma \<open>P(f(a,b), f(b,c)) \<and> P(f(b,c), f(a,c)) \<and>
(\<forall>x y z. P(x,y) \<and> P(y,z) \<longrightarrow> P(x,z)) \<longrightarrow> P(f(a,b), f(a,c))\<close> by blast
text\<open>58 NOT PROVED AUTOMATICALLY\<close> lemma\<open>(\<forall>x y. f(x) = g(y)) \<longrightarrow> (\<forall>x y. f(f(x)) = f(g(y)))\<close> by (slow elim: subst_context)
text\<open>Challenge found on info-hol.\<close> lemma\<open>\<forall>x. \<exists>v w. \<forall>y z. P(x) \<and> Q(y) \<longrightarrow> (P(v) \<or> R(w)) \<and> (R(z) \<longrightarrow> Q(v))\<close> by blast
text\<open>
Attributed to Lewis Carroll by S. G. Pulman. The first or last assumption
can be deleted.\<close> lemma \<open>(\<forall>x. honest(x) \<and> industrious(x) \<longrightarrow> healthy(x)) \<and> \<not> (\<exists>x. grocer(x) \<and> healthy(x)) \<and>
(\<forall>x. industrious(x) \<and> grocer(x) \<longrightarrow> honest(x)) \<and>
(\<forall>x. cyclist(x) \<longrightarrow> industrious(x)) \<and>
(\<forall>x. \<not> healthy(x) \<and> cyclist(x) \<longrightarrow> \<not> honest(x)) \<longrightarrow> (\<forall>x. grocer(x) \<longrightarrow> \<not> cyclist(x))\<close> by blast
(*Runtimes for old versions of this file: Thu Jul 23 1992: loaded in 467s using iffE [on SPARC2] Mon Nov 14 1994: loaded in 144s [on SPARC10, with deepen_tac] Wed Nov 16 1994: loaded in 138s [after addition of norm_term_skip] Mon Nov 21 1994: loaded in 131s [DEPTH_FIRST suppressing repetitions]
Further runtimes on a Sun-4 Tue Mar 4 1997: loaded in 93s (version 94-7) Tue Mar 4 1997: loaded in 89s Thu Apr 3 1997: loaded in 44s--using mostly Blast_tac Thu Apr 3 1997: loaded in 96s--addition of two Halting Probs Thu Apr 3 1997: loaded in 98s--using lim-1 for all haz rules Tue Dec 2 1997: loaded in 107s--added 46; new equalSubst Fri Dec 12 1997: loaded in 91s--faster proof reconstruction Thu Dec 18 1997: loaded in 94s--two new "obvious theorems" (??)
*)
end
¤ Dauer der Verarbeitung: 0.18 Sekunden
(vorverarbeitet)
¤
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 ist noch experimentell.