# HG changeset patch # User blanchet # Date 1325513320 -3600 # Node ID a109eb27f54f123171ce66b0463b17299e9a48e7 # Parent 0054a9513b374fcead043b2dfa638f74691230cd ported a dozen of proofs to the "set" type constructor diff -r 0054a9513b37 -r a109eb27f54f src/HOL/Metis_Examples/Abstraction.thy --- a/src/HOL/Metis_Examples/Abstraction.thy Mon Jan 02 14:45:13 2012 +0100 +++ b/src/HOL/Metis_Examples/Abstraction.thy Mon Jan 02 15:08:40 2012 +0100 @@ -23,11 +23,11 @@ pset :: "'a set => 'a set" order :: "'a set => ('a * 'a) set" -(*lemma "a \ {x. P x} \ P a" +lemma "a \ {x. P x} \ P a" proof - assume "a \ {x. P x}" - thus "P a" by metis -qed*) + thus "P a" by (metis mem_Collect_eq) +qed lemma Collect_triv: "a \ {x. P x} \ P a" by (metis mem_Collect_eq) @@ -35,14 +35,14 @@ lemma "a \ {x. P x --> Q x} \ a \ {x. P x} \ a \ {x. Q x}" by (metis Collect_imp_eq ComplD UnE) -(*lemma "(a, b) \ Sigma A B \ a \ A & b \ B a" +lemma "(a, b) \ Sigma A B \ a \ A \ b \ B a" proof - assume A1: "(a, b) \ Sigma A B" hence F1: "b \ B a" by (metis mem_Sigma_iff) have F2: "a \ A" by (metis A1 mem_Sigma_iff) have "b \ B a" by (metis F1) thus "a \ A \ b \ B a" by (metis F2) -qed*) +qed lemma Sigma_triv: "(a, b) \ Sigma A B \ a \ A & b \ B a" by (metis SigmaD1 SigmaD2) @@ -50,96 +50,91 @@ lemma "(a, b) \ (SIGMA x:A. {y. x = f y}) \ a \ A \ a = f b" by (metis (full_types, lam_lifting) CollectD SigmaD1 SigmaD2) -(*lemma "(a, b) \ (SIGMA x:A. {y. x = f y}) \ a \ A \ a = f b" +lemma "(a, b) \ (SIGMA x:A. {y. x = f y}) \ a \ A \ a = f b" proof - assume A1: "(a, b) \ (SIGMA x:A. {y. x = f y})" hence F1: "a \ A" by (metis mem_Sigma_iff) have "b \ {R. a = f R}" by (metis A1 mem_Sigma_iff) - hence F2: "b \ (\R. a = f R)" by (metis Collect_def) - hence "a = f b" by (unfold mem_def) + hence "a = f b" by (metis (full_types) mem_Collect_eq) thus "a \ A \ a = f b" by (metis F1) -qed*) +qed lemma "(cl, f) \ CLF \ CLF = (SIGMA cl: CL.{f. f \ pset cl}) \ f \ pset cl" by (metis Collect_mem_eq SigmaD2) -(*lemma "(cl, f) \ CLF \ CLF = (SIGMA cl: CL.{f. f \ pset cl}) \ f \ pset cl" +lemma "(cl, f) \ CLF \ CLF = (SIGMA cl: CL.{f. f \ pset cl}) \ f \ pset cl" proof - assume A1: "(cl, f) \ CLF" assume A2: "CLF = (SIGMA cl:CL. {f. f \ pset cl})" - have F1: "\v. (\R. R \ v) = v" by (metis Collect_mem_eq Collect_def) have "\v u. (u, v) \ CLF \ v \ {R. R \ pset u}" by (metis A2 mem_Sigma_iff) - hence "\v u. (u, v) \ CLF \ v \ pset u" by (metis F1 Collect_def) + hence "\v u. (u, v) \ CLF \ v \ pset u" by (metis mem_Collect_eq) thus "f \ pset cl" by (metis A1) -qed*) +qed -(*lemma +lemma "(cl, f) \ (SIGMA cl: CL. {f. f \ pset cl \ pset cl}) \ f \ pset cl \ pset cl" -by (metis (no_types) Sigma_triv)*) +by (metis (no_types) Collect_mem_eq Sigma_triv) -(*lemma +lemma "(cl, f) \ (SIGMA cl: CL. {f. f \ pset cl \ pset cl}) \ f \ pset cl \ pset cl" proof - assume A1: "(cl, f) \ (SIGMA cl:CL. {f. f \ pset cl \ pset cl})" - have F1: "\v. (\R. R \ v) = v" by (metis Collect_mem_eq Collect_def) have "f \ {R. R \ pset cl \ pset cl}" using A1 by simp - thus "f \ pset cl \ pset cl" by (metis F1 Collect_def) -qed*) + thus "f \ pset cl \ pset cl" by (metis mem_Collect_eq) +qed lemma "(cl, f) \ (SIGMA cl: CL. {f. f \ pset cl \ cl}) \ f \ pset cl \ cl" by (metis (no_types) Collect_conj_eq Int_def Sigma_triv inf_idem) -(*lemma +lemma "(cl, f) \ (SIGMA cl: CL. {f. f \ pset cl \ cl}) \ f \ pset cl \ cl" proof - assume A1: "(cl, f) \ (SIGMA cl:CL. {f. f \ pset cl \ cl})" - have F1: "\v. (\R. R \ v) = v" by (metis Collect_mem_eq Collect_def) have "f \ {R. R \ pset cl \ cl}" using A1 by simp - hence "f \ Id_on cl `` pset cl" by (metis F1 Int_commute Image_Id_on Collect_def) - hence "f \ Id_on cl `` pset cl" by metis + hence "f \ Id_on cl `` pset cl" by (metis Int_commute Image_Id_on mem_Collect_eq) hence "f \ cl \ pset cl" by (metis Image_Id_on) thus "f \ pset cl \ cl" by (metis Int_commute) -qed*) +qed lemma "(cl, f) \ (SIGMA cl: CL. {f. f \ pset cl \ pset cl & monotone f (pset cl) (order cl)}) \ (f \ pset cl \ pset cl) & (monotone f (pset cl) (order cl))" by auto -(*lemma +lemma "(cl, f) \ CLF \ CLF \ (SIGMA cl: CL. {f. f \ pset cl \ cl}) \ f \ pset cl \ cl" -by (metis (lam_lifting) Sigma_triv subsetD)*) +by (metis (lam_lifting) CollectD Sigma_triv subsetD) -(*lemma +lemma "(cl, f) \ CLF \ CLF = (SIGMA cl: CL. {f. f \ pset cl \ cl}) \ f \ pset cl \ cl" -by (metis (lam_lifting) Int_Collect SigmaD2 inf1I mem_def)*) +by (metis (lam_lifting) CollectD Sigma_triv) -(*lemma +lemma "(cl, f) \ CLF \ CLF \ (SIGMA cl': CL. {f. f \ pset cl' \ pset cl'}) \ f \ pset cl \ pset cl" -by (metis (lam_lifting) Collect_def Sigma_triv mem_def subsetD)*) +by (metis (lam_lifting) CollectD Sigma_triv subsetD) -(*lemma +lemma "(cl, f) \ CLF \ CLF = (SIGMA cl: CL. {f. f \ pset cl \ pset cl}) \ f \ pset cl \ pset cl" -by (metis (lam_lifting) Collect_def Sigma_triv mem_def)*) +by (metis (lam_lifting) CollectD Sigma_triv) -(*lemma +lemma "(cl, f) \ CLF \ CLF = (SIGMA cl: CL. {f. f \ pset cl \ pset cl & monotone f (pset cl) (order cl)}) \ (f \ pset cl \ pset cl) & (monotone f (pset cl) (order cl))" -by auto*) +by auto lemma "map (\x. (f x, g x)) xs = zip (map f xs) (map g xs)" apply (induct xs) @@ -153,16 +148,16 @@ apply (metis map.simps(1) zip_Nil) by auto -(*lemma "(\x. Suc (f x)) ` {x. even x} \ A \ \x. even x --> Suc (f x) \ A" -by (metis Collect_def image_eqI mem_def subsetD)*) +lemma "(\x. Suc (f x)) ` {x. even x} \ A \ \x. even x --> Suc (f x) \ A" +by (metis mem_Collect_eq image_eqI subsetD) -(*lemma +lemma "(\x. f (f x)) ` ((\x. Suc(f x)) ` {x. even x}) \ A \ (\x. even x --> f (f (Suc(f x))) \ A)" -by (metis Collect_def imageI mem_def set_rev_mp)*) +by (metis mem_Collect_eq imageI set_rev_mp) -(*lemma "f \ (\u v. b \ u \ v) ` A \ \u v. P (b \ u \ v) \ P(f y)" -by (metis (lam_lifting) imageE)*) +lemma "f \ (\u v. b \ u \ v) ` A \ \u v. P (b \ u \ v) \ P(f y)" +by (metis (lam_lifting) imageE) lemma image_TimesA: "(\(x, y). (f x, g y)) ` (A \ B) = (f ` A) \ (g ` B)" by (metis map_pair_def map_pair_surj_on)