# HG changeset patch # User nipkow # Date 1245697173 -7200 # Node ID 78529fc872b10998f50632193c3101b35682f062 # Parent a61475260e479ac6a87b580abee02ecbc0ce4751# Parent b5260f5272a482f609629272fc08adfa8ba85967 merged diff -r a61475260e47 -r 78529fc872b1 src/HOL/Algebra/Bij.thy --- a/src/HOL/Algebra/Bij.thy Mon Jun 22 20:31:08 2009 +0200 +++ b/src/HOL/Algebra/Bij.thy Mon Jun 22 20:59:33 2009 +0200 @@ -50,7 +50,7 @@ apply (simp add: compose_Bij) apply (simp add: id_Bij) apply (simp add: compose_Bij) - apply (blast intro: compose_assoc [symmetric] Bij_imp_funcset) + apply (blast intro: compose_assoc [symmetric] dest: Bij_imp_funcset) apply (simp add: id_Bij Bij_imp_funcset Bij_imp_extensional, simp) apply (blast intro: Bij_compose_restrict_eq restrict_Inv_Bij) done diff -r a61475260e47 -r 78529fc872b1 src/HOL/Algebra/Group.thy --- a/src/HOL/Algebra/Group.thy Mon Jun 22 20:31:08 2009 +0200 +++ b/src/HOL/Algebra/Group.thy Mon Jun 22 20:59:33 2009 +0200 @@ -542,10 +542,8 @@ (\x \ carrier G. \y \ carrier G. h (x \\<^bsub>G\<^esub> y) = h x \\<^bsub>H\<^esub> h y)}" lemma (in group) hom_compose: - "[|h \ hom G H; i \ hom H I|] ==> compose (carrier G) i h \ hom G I" -apply (auto simp add: hom_def funcset_compose) -apply (simp add: compose_def Pi_def) -done + "[|h \ hom G H; i \ hom H I|] ==> compose (carrier G) i h \ hom G I" +by (fastsimp simp add: hom_def compose_def) constdefs iso :: "_ => _ => ('a => 'b) set" (infixr "\" 60) @@ -568,7 +566,7 @@ lemma DirProd_commute_iso: shows "(\(x,y). (y,x)) \ (G \\ H) \ (H \\ G)" -by (auto simp add: iso_def hom_def inj_on_def bij_betw_def Pi_def) +by (auto simp add: iso_def hom_def inj_on_def bij_betw_def) lemma DirProd_assoc_iso: shows "(\(x,y,z). (x,(y,z))) \ (G \\ H \\ I) \ (G \\ (H \\ I))" @@ -592,7 +590,7 @@ "x \ carrier G ==> h x \ carrier H" proof - assume "x \ carrier G" - with homh [unfolded hom_def] show ?thesis by (auto simp add: Pi_def) + with homh [unfolded hom_def] show ?thesis by auto qed lemma (in group_hom) one_closed [simp]: diff -r a61475260e47 -r 78529fc872b1 src/HOL/Algebra/Sylow.thy --- a/src/HOL/Algebra/Sylow.thy Mon Jun 22 20:31:08 2009 +0200 +++ b/src/HOL/Algebra/Sylow.thy Mon Jun 22 20:59:33 2009 +0200 @@ -371,4 +371,3 @@ done end - diff -r a61475260e47 -r 78529fc872b1 src/HOL/Library/FuncSet.thy --- a/src/HOL/Library/FuncSet.thy Mon Jun 22 20:31:08 2009 +0200 +++ b/src/HOL/Library/FuncSet.thy Mon Jun 22 20:59:33 2009 +0200 @@ -51,7 +51,7 @@ subsection{*Basic Properties of @{term Pi}*} -lemma Pi_I: "(!!x. x \ A ==> f x \ B x) ==> f \ Pi A B" +lemma Pi_I[intro!]: "(!!x. x \ A ==> f x \ B x) ==> f \ Pi A B" by (simp add: Pi_def) lemma Pi_I'[simp]: "(!!x. x : A --> f x : B x) ==> f : Pi A B" @@ -63,13 +63,17 @@ lemma Pi_mem: "[|f: Pi A B; x \ A|] ==> f x \ B x" by (simp add: Pi_def) +lemma ballE [elim]: + "f : Pi A B ==> (f x : B x ==> Q) ==> (x ~: A ==> Q) ==> Q" +by(auto simp: Pi_def) + lemma funcset_mem: "[|f \ A -> B; x \ A|] ==> f x \ B" by (simp add: Pi_def) lemma funcset_image: "f \ A\B ==> f ` A \ B" - by (auto simp add: Pi_def) +by auto -lemma Pi_eq_empty: "((PI x: A. B x) = {}) = (\x\A. B(x) = {})" +lemma Pi_eq_empty[simp]: "((PI x: A. B x) = {}) = (\x\A. B(x) = {})" apply (simp add: Pi_def, auto) txt{*Converse direction requires Axiom of Choice to exhibit a function picking an element from each non-empty @{term "B x"}*} @@ -78,36 +82,36 @@ done lemma Pi_empty [simp]: "Pi {} B = UNIV" - by (simp add: Pi_def) +by (simp add: Pi_def) lemma Pi_UNIV [simp]: "A -> UNIV = UNIV" - by (simp add: Pi_def) +by (simp add: Pi_def) (* lemma funcset_id [simp]: "(%x. x): A -> A" by (simp add: Pi_def) *) text{*Covariance of Pi-sets in their second argument*} lemma Pi_mono: "(!!x. x \ A ==> B x <= C x) ==> Pi A B <= Pi A C" - by (simp add: Pi_def, blast) +by auto text{*Contravariance of Pi-sets in their first argument*} lemma Pi_anti_mono: "A' <= A ==> Pi A B <= Pi A' B" - by (simp add: Pi_def, blast) +by auto subsection{*Composition With a Restricted Domain: @{term compose}*} lemma funcset_compose: - "[| f \ A -> B; g \ B -> C |]==> compose A g f \ A -> C" - by (simp add: Pi_def compose_def restrict_def) + "[| f \ A -> B; g \ B -> C |]==> compose A g f \ A -> C" +by (simp add: Pi_def compose_def restrict_def) lemma compose_assoc: "[| f \ A -> B; g \ B -> C; h \ C -> D |] ==> compose A h (compose A g f) = compose A (compose B h g) f" - by (simp add: expand_fun_eq Pi_def compose_def restrict_def) +by (simp add: expand_fun_eq Pi_def compose_def restrict_def) lemma compose_eq: "x \ A ==> compose A g f x = g(f(x))" - by (simp add: compose_def restrict_def) +by (simp add: compose_def restrict_def) lemma surj_compose: "[| f ` A = B; g ` B = C |] ==> compose A g f ` A = C" by (auto simp add: image_def compose_eq) @@ -118,7 +122,7 @@ lemma restrict_in_funcset: "(!!x. x \ A ==> f x \ B) ==> (\x\A. f x) \ A -> B" by (simp add: Pi_def restrict_def) -lemma restrictI: "(!!x. x \ A ==> f x \ B x) ==> (\x\A. f x) \ Pi A B" +lemma restrictI[intro!]: "(!!x. x \ A ==> f x \ B x) ==> (\x\A. f x) \ Pi A B" by (simp add: Pi_def restrict_def) lemma restrict_apply [simp]: @@ -127,7 +131,7 @@ lemma restrict_ext: "(!!x. x \ A ==> f x = g x) ==> (\x\A. f x) = (\x\A. g x)" - by (simp add: expand_fun_eq Pi_def Pi_def restrict_def) + by (simp add: expand_fun_eq Pi_def restrict_def) lemma inj_on_restrict_eq [simp]: "inj_on (restrict f A) A = inj_on f A" by (simp add: inj_on_def restrict_def) @@ -150,68 +154,66 @@ the theorems belong here, or need at least @{term Hilbert_Choice}.*} lemma bij_betw_imp_funcset: "bij_betw f A B \ f \ A \ B" - by (auto simp add: bij_betw_def inj_on_Inv Pi_def) +by (auto simp add: bij_betw_def inj_on_Inv) lemma inj_on_compose: - "[| bij_betw f A B; inj_on g B |] ==> inj_on (compose A g f) A" - by (auto simp add: bij_betw_def inj_on_def compose_eq) + "[| bij_betw f A B; inj_on g B |] ==> inj_on (compose A g f) A" +by (auto simp add: bij_betw_def inj_on_def compose_eq) lemma bij_betw_compose: - "[| bij_betw f A B; bij_betw g B C |] ==> bij_betw (compose A g f) A C" - apply (simp add: bij_betw_def compose_eq inj_on_compose) - apply (auto simp add: compose_def image_def) - done + "[| bij_betw f A B; bij_betw g B C |] ==> bij_betw (compose A g f) A C" +apply (simp add: bij_betw_def compose_eq inj_on_compose) +apply (auto simp add: compose_def image_def) +done lemma bij_betw_restrict_eq [simp]: - "bij_betw (restrict f A) A B = bij_betw f A B" - by (simp add: bij_betw_def) + "bij_betw (restrict f A) A B = bij_betw f A B" +by (simp add: bij_betw_def) subsection{*Extensionality*} lemma extensional_arb: "[|f \ extensional A; x\ A|] ==> f x = undefined" - by (simp add: extensional_def) +by (simp add: extensional_def) lemma restrict_extensional [simp]: "restrict f A \ extensional A" - by (simp add: restrict_def extensional_def) +by (simp add: restrict_def extensional_def) lemma compose_extensional [simp]: "compose A f g \ extensional A" - by (simp add: compose_def) +by (simp add: compose_def) lemma extensionalityI: - "[| f \ extensional A; g \ extensional A; + "[| f \ extensional A; g \ extensional A; !!x. x\A ==> f x = g x |] ==> f = g" - by (force simp add: expand_fun_eq extensional_def) +by (force simp add: expand_fun_eq extensional_def) lemma Inv_funcset: "f ` A = B ==> (\x\B. Inv A f x) : B -> A" - by (unfold Inv_def) (fast intro: restrict_in_funcset someI2) +by (unfold Inv_def) (fast intro: someI2) lemma compose_Inv_id: - "bij_betw f A B ==> compose A (\y\B. Inv A f y) f = (\x\A. x)" - apply (simp add: bij_betw_def compose_def) - apply (rule restrict_ext, auto) - apply (erule subst) - apply (simp add: Inv_f_f) - done + "bij_betw f A B ==> compose A (\y\B. Inv A f y) f = (\x\A. x)" +apply (simp add: bij_betw_def compose_def) +apply (rule restrict_ext, auto) +apply (erule subst) +apply (simp add: Inv_f_f) +done lemma compose_id_Inv: - "f ` A = B ==> compose B f (\y\B. Inv A f y) = (\x\B. x)" - apply (simp add: compose_def) - apply (rule restrict_ext) - apply (simp add: f_Inv_f) - done + "f ` A = B ==> compose B f (\y\B. Inv A f y) = (\x\B. x)" +apply (simp add: compose_def) +apply (rule restrict_ext) +apply (simp add: f_Inv_f) +done subsection{*Cardinality*} lemma card_inj: "[|f \ A\B; inj_on f A; finite B|] ==> card(A) \ card(B)" - apply (rule card_inj_on_le) - apply (auto simp add: Pi_def) - done +by (rule card_inj_on_le) auto lemma card_bij: - "[|f \ A\B; inj_on f A; - g \ B\A; inj_on g B; finite A; finite B|] ==> card(A) = card(B)" - by (blast intro: card_inj order_antisym) + "[|f \ A\B; inj_on f A; + g \ B\A; inj_on g B; finite A; finite B|] ==> card(A) = card(B)" +by (blast intro: card_inj order_antisym) end diff -r a61475260e47 -r 78529fc872b1 src/HOL/MetisExamples/Abstraction.thy --- a/src/HOL/MetisExamples/Abstraction.thy Mon Jun 22 20:31:08 2009 +0200 +++ b/src/HOL/MetisExamples/Abstraction.thy Mon Jun 22 20:59:33 2009 +0200 @@ -201,7 +201,7 @@ "(cl,f) \ CLF ==> CLF \ (SIGMA cl': CL. {f. f \ pset cl' \ pset cl'}) ==> f \ pset cl \ pset cl" -by auto +by fast (*??no longer terminates, with combinators by (metis Collect_mem_eq SigmaD2 subsetD) *) diff -r a61475260e47 -r 78529fc872b1 src/HOL/ex/Tarski.thy --- a/src/HOL/ex/Tarski.thy Mon Jun 22 20:31:08 2009 +0200 +++ b/src/HOL/ex/Tarski.thy Mon Jun 22 20:59:33 2009 +0200 @@ -824,11 +824,6 @@ apply (simp add: intY1_def interval_def intY1_elem) done -lemma (in Tarski) intY1_func: "(%x: intY1. f x) \ intY1 -> intY1" -apply (rule restrictI) -apply (erule intY1_f_closed) -done - lemma (in Tarski) intY1_mono: "monotone (%x: intY1. f x) intY1 (induced intY1 r)" apply (auto simp add: monotone_def induced_def intY1_f_closed) @@ -853,7 +848,7 @@ apply (rule CLF.glbH_is_fixp [OF CLF.intro, unfolded CLF_set_def, of "\pset = intY1, order = induced intY1 r\", simplified]) apply auto apply (rule intY1_is_cl) -apply (rule intY1_func) +apply (erule intY1_f_closed) apply (rule intY1_mono) done