# HG changeset patch # User paulson # Date 1168354179 -3600 # Node ID aaf5b49c9ed9b68c483b61229472962beb57fb23 # Parent 64f8f5433f3078e01975118a86dbf1a780c7634a simplified the resoution proofs diff -r 64f8f5433f30 -r aaf5b49c9ed9 src/HOL/ex/Classical.thy --- a/src/HOL/ex/Classical.thy Tue Jan 09 12:12:00 2007 +0100 +++ b/src/HOL/ex/Classical.thy Tue Jan 09 15:49:39 2007 +0100 @@ -830,43 +830,41 @@ assume P: "\U. P U" and Q: "\U. ~ Q U" and PQ: "~ P x | Q x" - have cl4: "\U. Q x" + have 1: "\U. Q x" by (meson P PQ) show "False" - by (meson Q cl4) + by (meson Q 1) qed text{*A lengthy proof of a significant theorem: @{text singleton_example_1}*} -lemmas subsetI_0 = subsetI[skolem, clausify 0] -lemmas subsetI_1 = subsetI[skolem, clausify 1] - text{*Full single-step proof*} lemma "\S::'a set set. \x \ S. \y \ S. x \ y \ \z. S \ {z}" proof (neg_clausify) fix S :: "'a set set" - assume CL1: "\Z. ~ (S \ {Z})" - and CL2: "\X Y. X \ S | Y \ S | X \ Y" - have CL10: "!!U V. U \ S | V \ S | ~ V \ U | V = U" - by (meson equalityI CL2) - have CL11: "!!U V. U \ S | V \ S | V = U" - by (meson CL10 CL2) - have CL13: "!!U V. U \ S | S \ V | U = Set_XsubsetI_sko1_ S V" - by (meson subsetI_0 CL11) - have CL14: "!!U V. S \ U | S \ V | Set_XsubsetI_sko1_ S U = Set_XsubsetI_sko1_ S V" - by (meson subsetI_0 CL13) - have CL29: "!!U V. S \ U | Set_XsubsetI_sko1_ S U = Set_XsubsetI_sko1_ S {V}" - by (meson CL1 CL14) - have CL58: "!!U V. Set_XsubsetI_sko1_ S {U} = Set_XsubsetI_sko1_ S {V}" - by (meson CL1 CL29) + assume 1: "\Z. ~ (S \ {Z})" + and 2: "\X Y. X \ S | Y \ S | X \ Y" + have 10: "!!U V. U \ S | V \ S | ~ V \ U | V = U" + by (meson equalityI 2) + have 11: "!!U V. U \ S | V \ S | V = U" + by (meson 10 2) + have 13: "!!U V. U \ S | S \ V | U = Set_XsubsetI_sko1_ S V" + by (meson subsetI 11) + have 14: "!!U V. S \ U | S \ V | Set_XsubsetI_sko1_ S U = Set_XsubsetI_sko1_ S V" + by (meson subsetI 13) + have 29: "!!U V. S \ U | Set_XsubsetI_sko1_ S U = Set_XsubsetI_sko1_ S {V}" + by (meson 1 14) + have 58: "!!U V. Set_XsubsetI_sko1_ S {U} = Set_XsubsetI_sko1_ S {V}" + by (meson 1 29) (*hacked here while we wait for Metis: !!U V complicates proofs.*) - have CL82: "Set_XsubsetI_sko1_ S {U} \ {V} | S \ {V}" - by (insert CL58 subsetI_1 [of S "{V}"], force) - have CL85: "Set_XsubsetI_sko1_ S {U} \ {V}" - by (meson CL1 CL82) + have 82: "Set_XsubsetI_sko1_ S {U} \ {V} | S \ {V}" + apply (insert 58 [of U V], erule ssubst) + by (meson 58 subsetI) + have 85: "Set_XsubsetI_sko1_ S {U} \ {V}" + by (meson 1 82) show False - by (meson insertI1 CL85) + by (meson insertI1 85) qed text{*Partially condensed proof*} @@ -874,17 +872,18 @@ "\S::'a set set. \x \ S. \y \ S. x \ y \ \z. S \ {z}" proof (neg_clausify) fix S :: "'a set set" - assume CL1: "\Z. ~ (S \ {Z})" - and CL2: "\X Y. X \ S | Y \ S | X \ Y" - have CL13: "!!U V. U \ S | S \ V | U = Set_XsubsetI_sko1_ S V" - by (meson subsetI_0 equalityI CL2) - have CL58: "!!U V. Set_XsubsetI_sko1_ S {U} = Set_XsubsetI_sko1_ S {V}" - by (meson CL1 subsetI_0 CL13) + assume 1: "\Z. ~ (S \ {Z})" + and 2: "\X Y. X \ S | Y \ S | X \ Y" + have 13: "!!U V. U \ S | S \ V | U = Set_XsubsetI_sko1_ S V" + by (meson subsetI equalityI 2) + have 58: "!!U V. Set_XsubsetI_sko1_ S {U} = Set_XsubsetI_sko1_ S {V}" + by (meson 1 subsetI 13) (*hacked here while we wait for Metis: !!U V complicates proofs.*) - have CL82: "Set_XsubsetI_sko1_ S {U} \ {V} | S \ {V}" - by (insert CL58 subsetI_1 [of S "{V}"], force) + have 82: "Set_XsubsetI_sko1_ S {U} \ {V} | S \ {V}" + apply (insert 58 [of U V], erule ssubst) + by (meson 58 subsetI) show False - by (meson insertI1 CL1 CL82) + by (meson insertI1 1 82) qed (**Not working: needs Metis @@ -892,12 +891,12 @@ lemma "\S::'a set set. \x \ S. \y \ S. x \ y \ \z. S \ {z}" proof (neg_clausify) fix S :: "'a set set" - assume CL1: "\Z. ~ (S \ {Z})" - and CL2: "\X Y. X \ S | Y \ S | X \ Y" - have CL58: "!!U V. Set_XsubsetI_sko1_ S {U} = Set_XsubsetI_sko1_ S {V}" - by (meson CL1 subsetI_0 equalityI CL2) + assume 1: "\Z. ~ (S \ {Z})" + and 2: "\X Y. X \ S | Y \ S | X \ Y" + have 58: "!!U V. Set_XsubsetI_sko1_ S {U} = Set_XsubsetI_sko1_ S {V}" + by (meson 1 subsetI_0 equalityI 2) show False - by (iprover intro: subsetI_1 insertI1 CL1 CL58 elim: ssubst) + by (iprover intro: subsetI_1 insertI1 1 58 elim: ssubst) qed ***)