# HG changeset patch # User haftmann # Date 1330626892 -3600 # Node ID e9e7209eb3750b003709f6bafb80d19607163dd9 # Parent 6b94c39b73666755e388a2e857e8d8e7124bb98b more fundamental pred-to-set conversions, particularly by means of inductive_set; associated consolidation of some theorem names (c.f. NEWS) diff -r 6b94c39b7366 -r e9e7209eb375 NEWS --- a/NEWS Thu Mar 01 17:13:54 2012 +0000 +++ b/NEWS Thu Mar 01 19:34:52 2012 +0100 @@ -90,6 +90,18 @@ * New type synonym 'a rel = ('a * 'a) set +* More default pred/set conversions on a couple of relation operations +and predicates. Consolidation of some relation theorems: + + converse_def ~> converse_unfold + rel_comp_def ~> rel_comp_unfold + symp_def ~> (dropped, use symp_def and sym_def instead) + transp_def ~> transp_trans + Domain_def ~> Domain_unfold + Range_def ~> Domain_converse [symmetric] + +INCOMPATIBILITY. + * Consolidated various theorem names relating to Finite_Set.fold combinator: @@ -99,7 +111,7 @@ SUPR_fold_sup ~> SUP_fold_sup union_set ~> union_set_fold minus_set ~> minus_set_fold - + INCOMPATIBILITY. * Consolidated theorem names concerning fold combinators: diff -r 6b94c39b7366 -r e9e7209eb375 src/HOL/Equiv_Relations.thy --- a/src/HOL/Equiv_Relations.thy Thu Mar 01 17:13:54 2012 +0000 +++ b/src/HOL/Equiv_Relations.thy Thu Mar 01 19:34:52 2012 +0100 @@ -31,7 +31,7 @@ lemma sym_trans_comp_subset: "sym r ==> trans r ==> r\ O r \ r" - by (unfold trans_def sym_def converse_def) blast + by (unfold trans_def sym_def converse_unfold) blast lemma refl_on_comp_subset: "refl_on A r ==> r \ r\ O r" by (unfold refl_on_def) blast @@ -426,7 +426,7 @@ lemma equivp_equiv: "equiv UNIV A \ equivp (\x y. (x, y) \ A)" - by (auto intro: equivpI elim: equivpE simp add: equiv_def reflp_def symp_def transp_def) + by (auto intro!: equivI equivpI [to_set] elim!: equivE equivpE [to_set]) lemma equivp_reflp_symp_transp: shows "equivp R \ reflp R \ symp R \ transp R" @@ -449,3 +449,4 @@ by (erule equivpE, erule transpE) end + diff -r 6b94c39b7366 -r e9e7209eb375 src/HOL/Library/Zorn.thy --- a/src/HOL/Library/Zorn.thy Thu Mar 01 17:13:54 2012 +0000 +++ b/src/HOL/Library/Zorn.thy Thu Mar 01 19:34:52 2012 +0100 @@ -453,7 +453,7 @@ proof assume "m={}" moreover have "Well_order {(x,x)}" - by(simp add:order_on_defs refl_on_def trans_def antisym_def total_on_def Field_def Domain_def Range_def) + by(simp add:order_on_defs refl_on_def trans_def antisym_def total_on_def Field_def Domain_unfold Domain_converse [symmetric]) ultimately show False using max by (auto simp:I_def init_seg_of_def simp del:Field_insert) qed @@ -470,14 +470,14 @@ --{*We show that the extension is a well-order*} have "Refl ?m" using `Refl m` Fm by(auto simp:refl_on_def) moreover have "trans ?m" using `trans m` `x \ Field m` - unfolding trans_def Field_def Domain_def Range_def by blast + unfolding trans_def Field_def Domain_unfold Domain_converse [symmetric] by blast moreover have "antisym ?m" using `antisym m` `x \ Field m` - unfolding antisym_def Field_def Domain_def Range_def by blast + unfolding antisym_def Field_def Domain_unfold Domain_converse [symmetric] by blast moreover have "Total ?m" using `Total m` Fm by(auto simp: total_on_def) moreover have "wf(?m-Id)" proof- have "wf ?s" using `x \ Field m` - by(auto simp add:wf_eq_minimal Field_def Domain_def Range_def) metis + by(auto simp add:wf_eq_minimal Field_def Domain_unfold Domain_converse [symmetric]) metis thus ?thesis using `wf(m-Id)` `x \ Field m` wf_subset[OF `wf ?s` Diff_subset] by (fastforce intro!: wf_Un simp add: Un_Diff Field_def) @@ -485,7 +485,7 @@ ultimately have "Well_order ?m" by(simp add:order_on_defs) --{*We show that the extension is above m*} moreover hence "(m,?m) : I" using `Well_order m` `x \ Field m` - by(fastforce simp:I_def init_seg_of_def Field_def Domain_def Range_def) + by(fastforce simp:I_def init_seg_of_def Field_def Domain_unfold Domain_converse [symmetric]) ultimately --{*This contradicts maximality of m:*} have False using max `x \ Field m` unfolding Field_def by blast @@ -501,7 +501,7 @@ using well_ordering[where 'a = "'a"] by blast let ?r = "{(x,y). x:A & y:A & (x,y):r}" have 1: "Field ?r = A" using wo univ - by(fastforce simp: Field_def Domain_def Range_def order_on_defs refl_on_def) + by(fastforce simp: Field_def Domain_unfold Domain_converse [symmetric] order_on_defs refl_on_def) have "Refl r" "trans r" "antisym r" "Total r" "wf(r-Id)" using `Well_order r` by(simp_all add:order_on_defs) have "Refl ?r" using `Refl r` by(auto simp:refl_on_def 1 univ) diff -r 6b94c39b7366 -r e9e7209eb375 src/HOL/Metis_Examples/Tarski.thy --- a/src/HOL/Metis_Examples/Tarski.thy Thu Mar 01 17:13:54 2012 +0000 +++ b/src/HOL/Metis_Examples/Tarski.thy Thu Mar 01 19:34:52 2012 +0100 @@ -189,10 +189,10 @@ by (simp add: glb_def greatest_def isGlb_def some_eq_ex [symmetric]) lemma isGlb_dual_isLub: "isGlb S cl = isLub S (dual cl)" -by (simp add: isLub_def isGlb_def dual_def converse_def) +by (simp add: isLub_def isGlb_def dual_def converse_unfold) lemma isLub_dual_isGlb: "isLub S cl = isGlb S (dual cl)" -by (simp add: isLub_def isGlb_def dual_def converse_def) +by (simp add: isLub_def isGlb_def dual_def converse_unfold) lemma (in PO) dualPO: "dual cl \ PartialOrder" apply (insert cl_po) @@ -212,10 +212,10 @@ done lemma lub_dual_glb: "lub S cl = glb S (dual cl)" -by (simp add: lub_def glb_def least_def greatest_def dual_def converse_def) +by (simp add: lub_def glb_def least_def greatest_def dual_def converse_unfold) lemma glb_dual_lub: "glb S cl = lub S (dual cl)" -by (simp add: lub_def glb_def least_def greatest_def dual_def converse_def) +by (simp add: lub_def glb_def least_def greatest_def dual_def converse_unfold) lemma CL_subset_PO: "CompleteLattice \ PartialOrder" by (simp add: PartialOrder_def CompleteLattice_def, fast) diff -r 6b94c39b7366 -r e9e7209eb375 src/HOL/Predicate_Compile_Examples/Predicate_Compile_Tests.thy --- a/src/HOL/Predicate_Compile_Examples/Predicate_Compile_Tests.thy Thu Mar 01 17:13:54 2012 +0000 +++ b/src/HOL/Predicate_Compile_Examples/Predicate_Compile_Tests.thy Thu Mar 01 19:34:52 2012 +0100 @@ -1043,14 +1043,14 @@ (i => bool) => o * i => bool, (i => bool) => i => bool) [inductify] Id_on . thm Id_on.equation -thm Domain_def +thm Domain_unfold code_pred (modes: (o * o => bool) => o => bool, (o * o => bool) => i => bool, (i * o => bool) => i => bool) [inductify] Domain . thm Domain.equation -thm Range_def +thm Domain_converse [symmetric] code_pred (modes: (o * o => bool) => o => bool, (o * o => bool) => i => bool, diff -r 6b94c39b7366 -r e9e7209eb375 src/HOL/Quotient_Examples/FSet.thy --- a/src/HOL/Quotient_Examples/FSet.thy Thu Mar 01 17:13:54 2012 +0000 +++ b/src/HOL/Quotient_Examples/FSet.thy Thu Mar 01 19:34:52 2012 +0100 @@ -534,7 +534,7 @@ assumes "(R1 ===> R2 ===> R3) C C" and "(R4 ===> R5 ===> R6) C C" shows "(R1 OOO R4 ===> R2 OOO R5 ===> R3 OOO R6) C C" by (auto intro!: fun_relI) - (metis (full_types) assms fun_relE pred_comp.intros) + (metis (full_types) assms fun_relE pred_compI) lemma append_rsp2 [quot_respect]: "(list_all2 op \ OOO op \ ===> list_all2 op \ OOO op \ ===> list_all2 op \ OOO op \) append append" @@ -560,7 +560,7 @@ by (induct y ya rule: list_induct2') (simp_all, metis apply_rsp' list_eq_def) show "(list_all2 op \ OOO op \) (map f xa) (map f' ya)" - by (metis a b c list_eq_def pred_comp.intros) + by (metis a b c list_eq_def pred_compI) qed lemma map_prs2 [quot_preserve]: diff -r 6b94c39b7366 -r e9e7209eb375 src/HOL/Relation.thy --- a/src/HOL/Relation.thy Thu Mar 01 17:13:54 2012 +0000 +++ b/src/HOL/Relation.thy Thu Mar 01 19:34:52 2012 +0100 @@ -113,28 +113,33 @@ subsubsection {* Reflexivity *} -definition - refl_on :: "'a set \ ('a \ 'a) set \ bool" where - "refl_on A r \ r \ A \ A & (ALL x: A. (x,x) : r)" +definition refl_on :: "'a set \ 'a rel \ bool" +where + "refl_on A r \ r \ A \ A \ (\x\A. (x, x) \ r)" -abbreviation - refl :: "('a * 'a) set => bool" where -- {* reflexivity over a type *} +abbreviation refl :: "'a rel \ bool" +where -- {* reflexivity over a type *} "refl \ refl_on UNIV" -definition reflp :: "('a \ 'a \ bool) \ bool" where +definition reflp :: "('a \ 'a \ bool) \ bool" +where "reflp r \ refl {(x, y). r x y}" +lemma reflp_refl_eq [pred_set_conv]: + "reflp (\x y. (x, y) \ r) \ refl r" + by (simp add: refl_on_def reflp_def) + lemma refl_onI: "r \ A \ A ==> (!!x. x : A ==> (x, x) : r) ==> refl_on A r" -by (unfold refl_on_def) (iprover intro!: ballI) + by (unfold refl_on_def) (iprover intro!: ballI) lemma refl_onD: "refl_on A r ==> a : A ==> (a, a) : r" -by (unfold refl_on_def) blast + by (unfold refl_on_def) blast lemma refl_onD1: "refl_on A r ==> (x, y) : r ==> x : A" -by (unfold refl_on_def) blast + by (unfold refl_on_def) blast lemma refl_onD2: "refl_on A r ==> (x, y) : r ==> y : A" -by (unfold refl_on_def) blast + by (unfold refl_on_def) blast lemma reflpI: "(\x. r x x) \ reflp r" @@ -146,32 +151,40 @@ using assms by (auto dest: refl_onD simp add: reflp_def) lemma refl_on_Int: "refl_on A r ==> refl_on B s ==> refl_on (A \ B) (r \ s)" -by (unfold refl_on_def) blast + by (unfold refl_on_def) blast + +lemma reflp_inf: + "reflp r \ reflp s \ reflp (r \ s)" + by (auto intro: reflpI elim: reflpE) lemma refl_on_Un: "refl_on A r ==> refl_on B s ==> refl_on (A \ B) (r \ s)" -by (unfold refl_on_def) blast + by (unfold refl_on_def) blast + +lemma reflp_sup: + "reflp r \ reflp s \ reflp (r \ s)" + by (auto intro: reflpI elim: reflpE) lemma refl_on_INTER: "ALL x:S. refl_on (A x) (r x) ==> refl_on (INTER S A) (INTER S r)" -by (unfold refl_on_def) fast + by (unfold refl_on_def) fast lemma refl_on_UNION: "ALL x:S. refl_on (A x) (r x) \ refl_on (UNION S A) (UNION S r)" -by (unfold refl_on_def) blast + by (unfold refl_on_def) blast -lemma refl_on_empty[simp]: "refl_on {} {}" -by(simp add:refl_on_def) +lemma refl_on_empty [simp]: "refl_on {} {}" + by (simp add:refl_on_def) lemma refl_on_def' [nitpick_unfold, code]: - "refl_on A r = ((\(x, y) \ r. x : A \ y : A) \ (\x \ A. (x, x) : r))" -by (auto intro: refl_onI dest: refl_onD refl_onD1 refl_onD2) + "refl_on A r \ (\(x, y) \ r. x \ A \ y \ A) \ (\x \ A. (x, x) \ r)" + by (auto intro: refl_onI dest: refl_onD refl_onD1 refl_onD2) subsubsection {* Irreflexivity *} -definition - irrefl :: "('a * 'a) set => bool" where - "irrefl r \ (\x. (x,x) \ r)" +definition irrefl :: "'a rel \ bool" +where + "irrefl r \ (\x. (x, x) \ r)" lemma irrefl_distinct [code]: "irrefl r \ (\(x, y) \ r. x \ y)" @@ -180,166 +193,231 @@ subsubsection {* Symmetry *} -definition - sym :: "('a * 'a) set => bool" where - "sym r \ (ALL x y. (x,y): r --> (y,x): r)" +definition sym :: "'a rel \ bool" +where + "sym r \ (\x y. (x, y) \ r \ (y, x) \ r)" + +definition symp :: "('a \ 'a \ bool) \ bool" +where + "symp r \ (\x y. r x y \ r y x)" -lemma symI: "(!!a b. (a, b) : r ==> (b, a) : r) ==> sym r" -by (unfold sym_def) iprover +lemma symp_sym_eq [pred_set_conv]: + "symp (\x y. (x, y) \ r) \ sym r" + by (simp add: sym_def symp_def) -lemma symD: "sym r ==> (a, b) : r ==> (b, a) : r" -by (unfold sym_def, blast) - -definition symp :: "('a \ 'a \ bool) \ bool" where - "symp r \ sym {(x, y). r x y}" +lemma symI: + "(\a b. (a, b) \ r \ (b, a) \ r) \ sym r" + by (unfold sym_def) iprover lemma sympI: - "(\x y. r x y \ r y x) \ symp r" - by (auto intro: symI simp add: symp_def) + "(\a b. r a b \ r b a) \ symp r" + by (fact symI [to_pred]) + +lemma symE: + assumes "sym r" and "(b, a) \ r" + obtains "(a, b) \ r" + using assms by (simp add: sym_def) lemma sympE: - assumes "symp r" and "r x y" - obtains "r y x" - using assms by (auto dest: symD simp add: symp_def) + assumes "symp r" and "r b a" + obtains "r a b" + using assms by (rule symE [to_pred]) + +lemma symD: + assumes "sym r" and "(b, a) \ r" + shows "(a, b) \ r" + using assms by (rule symE) -lemma sym_Int: "sym r ==> sym s ==> sym (r \ s)" -by (fast intro: symI dest: symD) +lemma sympD: + assumes "symp r" and "r b a" + shows "r a b" + using assms by (rule symD [to_pred]) + +lemma sym_Int: + "sym r \ sym s \ sym (r \ s)" + by (fast intro: symI elim: symE) -lemma sym_Un: "sym r ==> sym s ==> sym (r \ s)" -by (fast intro: symI dest: symD) +lemma symp_inf: + "symp r \ symp s \ symp (r \ s)" + by (fact sym_Int [to_pred]) + +lemma sym_Un: + "sym r \ sym s \ sym (r \ s)" + by (fast intro: symI elim: symE) + +lemma symp_sup: + "symp r \ symp s \ symp (r \ s)" + by (fact sym_Un [to_pred]) -lemma sym_INTER: "ALL x:S. sym (r x) ==> sym (INTER S r)" -by (fast intro: symI dest: symD) +lemma sym_INTER: + "\x\S. sym (r x) \ sym (INTER S r)" + by (fast intro: symI elim: symE) + +(* FIXME thm sym_INTER [to_pred] *) -lemma sym_UNION: "ALL x:S. sym (r x) ==> sym (UNION S r)" -by (fast intro: symI dest: symD) +lemma sym_UNION: + "\x\S. sym (r x) \ sym (UNION S r)" + by (fast intro: symI elim: symE) + +(* FIXME thm sym_UNION [to_pred] *) subsubsection {* Antisymmetry *} -definition - antisym :: "('a * 'a) set => bool" where - "antisym r \ (ALL x y. (x,y):r --> (y,x):r --> x=y)" +definition antisym :: "'a rel \ bool" +where + "antisym r \ (\x y. (x, y) \ r \ (y, x) \ r \ x = y)" + +abbreviation antisymP :: "('a \ 'a \ bool) \ bool" +where + "antisymP r \ antisym {(x, y). r x y}" lemma antisymI: "(!!x y. (x, y) : r ==> (y, x) : r ==> x=y) ==> antisym r" -by (unfold antisym_def) iprover + by (unfold antisym_def) iprover lemma antisymD: "antisym r ==> (a, b) : r ==> (b, a) : r ==> a = b" -by (unfold antisym_def) iprover - -abbreviation antisymP :: "('a \ 'a \ bool) \ bool" where - "antisymP r \ antisym {(x, y). r x y}" + by (unfold antisym_def) iprover lemma antisym_subset: "r \ s ==> antisym s ==> antisym r" -by (unfold antisym_def) blast + by (unfold antisym_def) blast lemma antisym_empty [simp]: "antisym {}" -by (unfold antisym_def) blast + by (unfold antisym_def) blast subsubsection {* Transitivity *} -definition - trans :: "('a * 'a) set => bool" where - "trans r \ (ALL x y z. (x,y):r --> (y,z):r --> (x,z):r)" +definition trans :: "'a rel \ bool" +where + "trans r \ (\x y z. (x, y) \ r \ (y, z) \ r \ (x, z) \ r)" + +definition transp :: "('a \ 'a \ bool) \ bool" +where + "transp r \ (\x y z. r x y \ r y z \ r x z)" + +lemma transp_trans_eq [pred_set_conv]: + "transp (\x y. (x, y) \ r) \ trans r" + by (simp add: trans_def transp_def) + +abbreviation transP :: "('a \ 'a \ bool) \ bool" +where -- {* FIXME drop *} + "transP r \ trans {(x, y). r x y}" lemma transI: - "(!!x y z. (x, y) : r ==> (y, z) : r ==> (x, z) : r) ==> trans r" -by (unfold trans_def) iprover - -lemma transD: "trans r ==> (a, b) : r ==> (b, c) : r ==> (a, c) : r" -by (unfold trans_def) iprover - -abbreviation transP :: "('a \ 'a \ bool) \ bool" where - "transP r \ trans {(x, y). r x y}" - -definition transp :: "('a \ 'a \ bool) \ bool" where - "transp r \ trans {(x, y). r x y}" + "(\x y z. (x, y) \ r \ (y, z) \ r \ (x, z) \ r) \ trans r" + by (unfold trans_def) iprover lemma transpI: "(\x y z. r x y \ r y z \ r x z) \ transp r" - by (auto intro: transI simp add: transp_def) - + by (fact transI [to_pred]) + +lemma transE: + assumes "trans r" and "(x, y) \ r" and "(y, z) \ r" + obtains "(x, z) \ r" + using assms by (unfold trans_def) iprover + lemma transpE: assumes "transp r" and "r x y" and "r y z" obtains "r x z" - using assms by (auto dest: transD simp add: transp_def) + using assms by (rule transE [to_pred]) + +lemma transD: + assumes "trans r" and "(x, y) \ r" and "(y, z) \ r" + shows "(x, z) \ r" + using assms by (rule transE) + +lemma transpD: + assumes "transp r" and "r x y" and "r y z" + shows "r x z" + using assms by (rule transD [to_pred]) -lemma trans_Int: "trans r ==> trans s ==> trans (r \ s)" -by (fast intro: transI elim: transD) +lemma trans_Int: + "trans r \ trans s \ trans (r \ s)" + by (fast intro: transI elim: transE) -lemma trans_INTER: "ALL x:S. trans (r x) ==> trans (INTER S r)" -by (fast intro: transI elim: transD) +lemma transp_inf: + "transp r \ transp s \ transp (r \ s)" + by (fact trans_Int [to_pred]) + +lemma trans_INTER: + "\x\S. trans (r x) \ trans (INTER S r)" + by (fast intro: transI elim: transD) + +(* FIXME thm trans_INTER [to_pred] *) lemma trans_join [code]: "trans r \ (\(x, y1) \ r. \(y2, z) \ r. y1 = y2 \ (x, z) \ r)" by (auto simp add: trans_def) +lemma transp_trans: + "transp r \ trans {(x, y). r x y}" + by (simp add: trans_def transp_def) + subsubsection {* Totality *} -definition - total_on :: "'a set => ('a * 'a) set => bool" where - "total_on A r \ (\x\A.\y\A. x\y \ (x,y)\r \ (y,x)\r)" +definition total_on :: "'a set \ 'a rel \ bool" +where + "total_on A r \ (\x\A. \y\A. x \ y \ (x, y) \ r \ (y, x) \ r)" abbreviation "total \ total_on UNIV" -lemma total_on_empty[simp]: "total_on {} r" -by(simp add:total_on_def) +lemma total_on_empty [simp]: "total_on {} r" + by (simp add: total_on_def) subsubsection {* Single valued relations *} -definition - single_valued :: "('a * 'b) set => bool" where - "single_valued r \ (ALL x y. (x,y):r --> (ALL z. (x,z):r --> y=z))" - -lemma single_valuedI: - "ALL x y. (x,y):r --> (ALL z. (x,z):r --> y=z) ==> single_valued r" -by (unfold single_valued_def) - -lemma single_valuedD: - "single_valued r ==> (x, y) : r ==> (x, z) : r ==> y = z" -by (simp add: single_valued_def) +definition single_valued :: "('a \ 'b) set \ bool" +where + "single_valued r \ (\x y. (x, y) \ r \ (\z. (x, z) \ r \ y = z))" abbreviation single_valuedP :: "('a \ 'b \ bool) \ bool" where "single_valuedP r \ single_valued {(x, y). r x y}" +lemma single_valuedI: + "ALL x y. (x,y):r --> (ALL z. (x,z):r --> y=z) ==> single_valued r" + by (unfold single_valued_def) + +lemma single_valuedD: + "single_valued r ==> (x, y) : r ==> (x, z) : r ==> y = z" + by (simp add: single_valued_def) + lemma single_valued_subset: "r \ s ==> single_valued s ==> single_valued r" -by (unfold single_valued_def) blast + by (unfold single_valued_def) blast subsection {* Relation operations *} subsubsection {* The identity relation *} -definition - Id :: "('a * 'a) set" where - "Id = {p. EX x. p = (x,x)}" +definition Id :: "'a rel" +where + "Id = {p. \x. p = (x, x)}" lemma IdI [intro]: "(a, a) : Id" -by (simp add: Id_def) + by (simp add: Id_def) lemma IdE [elim!]: "p : Id ==> (!!x. p = (x, x) ==> P) ==> P" -by (unfold Id_def) (iprover elim: CollectE) + by (unfold Id_def) (iprover elim: CollectE) lemma pair_in_Id_conv [iff]: "((a, b) : Id) = (a = b)" -by (unfold Id_def) blast + by (unfold Id_def) blast lemma refl_Id: "refl Id" -by (simp add: refl_on_def) + by (simp add: refl_on_def) lemma antisym_Id: "antisym Id" -- {* A strange result, since @{text Id} is also symmetric. *} -by (simp add: antisym_def) + by (simp add: antisym_def) lemma sym_Id: "sym Id" -by (simp add: sym_def) + by (simp add: sym_def) lemma trans_Id: "trans Id" -by (simp add: trans_def) + by (simp add: trans_def) lemma single_valued_Id [simp]: "single_valued Id" by (unfold single_valued_def) blast @@ -356,45 +434,45 @@ subsubsection {* Diagonal: identity over a set *} -definition - Id_on :: "'a set => ('a * 'a) set" where - "Id_on A = (\x\A. {(x,x)})" +definition Id_on :: "'a set \ 'a rel" +where + "Id_on A = (\x\A. {(x, x)})" lemma Id_on_empty [simp]: "Id_on {} = {}" -by (simp add: Id_on_def) + by (simp add: Id_on_def) lemma Id_on_eqI: "a = b ==> a : A ==> (a, b) : Id_on A" -by (simp add: Id_on_def) + by (simp add: Id_on_def) lemma Id_onI [intro!,no_atp]: "a : A ==> (a, a) : Id_on A" -by (rule Id_on_eqI) (rule refl) + by (rule Id_on_eqI) (rule refl) lemma Id_onE [elim!]: "c : Id_on A ==> (!!x. x : A ==> c = (x, x) ==> P) ==> P" -- {* The general elimination rule. *} -by (unfold Id_on_def) (iprover elim!: UN_E singletonE) + by (unfold Id_on_def) (iprover elim!: UN_E singletonE) lemma Id_on_iff: "((x, y) : Id_on A) = (x = y & x : A)" -by blast + by blast lemma Id_on_def' [nitpick_unfold]: "Id_on {x. A x} = Collect (\(x, y). x = y \ A x)" -by auto + by auto lemma Id_on_subset_Times: "Id_on A \ A \ A" -by blast + by blast lemma refl_on_Id_on: "refl_on A (Id_on A)" -by (rule refl_onI [OF Id_on_subset_Times Id_onI]) + by (rule refl_onI [OF Id_on_subset_Times Id_onI]) lemma antisym_Id_on [simp]: "antisym (Id_on A)" -by (unfold antisym_def) blast + by (unfold antisym_def) blast lemma sym_Id_on [simp]: "sym (Id_on A)" -by (rule symI) clarify + by (rule symI) clarify lemma trans_Id_on [simp]: "trans (Id_on A)" -by (fast intro: transI elim: transD) + by (fast intro: transI elim: transD) lemma single_valued_Id_on [simp]: "single_valued (Id_on A)" by (unfold single_valued_def) blast @@ -402,184 +480,228 @@ subsubsection {* Composition *} -definition rel_comp :: "('a \ 'b) set \ ('b \ 'c) set \ ('a * 'c) set" (infixr "O" 75) +inductive_set rel_comp :: "('a \ 'b) set \ ('b \ 'c) set \ ('a \ 'c) set" (infixr "O" 75) + for r :: "('a \ 'b) set" and s :: "('b \ 'c) set" where - "r O s = {(x, z). \y. (x, y) \ r \ (y, z) \ s}" + rel_compI [intro]: "(a, b) \ r \ (b, c) \ s \ (a, c) \ r O s" -lemma rel_compI [intro]: - "(a, b) : r ==> (b, c) : s ==> (a, c) : r O s" -by (unfold rel_comp_def) blast +abbreviation pred_comp (infixr "OO" 75) where + "pred_comp \ rel_compp" -lemma rel_compE [elim!]: "xz : r O s ==> - (!!x y z. xz = (x, z) ==> (x, y) : r ==> (y, z) : s ==> P) ==> P" -by (unfold rel_comp_def) (iprover elim!: CollectE splitE exE conjE) +lemmas pred_compI = rel_compp.intros -inductive pred_comp :: "('a \ 'b \ bool) \ ('b \ 'c \ bool) \ 'a \ 'c \ bool" (infixr "OO" 75) -for r :: "'a \ 'b \ bool" and s :: "'b \ 'c \ bool" -where - pred_compI [intro]: "r a b \ s b c \ (r OO s) a c" +text {* + For historic reasons, the elimination rules are not wholly corresponding. + Feel free to consolidate this. +*} +inductive_cases rel_compEpair: "(a, c) \ r O s" inductive_cases pred_compE [elim!]: "(r OO s) a c" -lemma pred_comp_rel_comp_eq [pred_set_conv]: - "((\x y. (x, y) \ r) OO (\x y. (x, y) \ s)) = (\x y. (x, y) \ r O s)" - by (auto simp add: fun_eq_iff) +lemma rel_compE [elim!]: "xz \ r O s \ + (\x y z. xz = (x, z) \ (x, y) \ r \ (y, z) \ s \ P) \ P" + by (cases xz) (simp, erule rel_compEpair, iprover) + +lemmas pred_comp_rel_comp_eq = rel_compp_rel_comp_eq + +lemma R_O_Id [simp]: + "R O Id = R" + by fast -lemma rel_compEpair: - "(a, c) : r O s ==> (!!y. (a, y) : r ==> (y, c) : s ==> P) ==> P" -by (iprover elim: rel_compE Pair_inject ssubst) +lemma Id_O_R [simp]: + "Id O R = R" + by fast + +lemma rel_comp_empty1 [simp]: + "{} O R = {}" + by blast -lemma R_O_Id [simp]: "R O Id = R" -by fast +(* CANDIDATE lemma pred_comp_bot1 [simp]: + "" + by (fact rel_comp_empty1 [to_pred]) *) -lemma Id_O_R [simp]: "Id O R = R" -by fast +lemma rel_comp_empty2 [simp]: + "R O {} = {}" + by blast -lemma rel_comp_empty1[simp]: "{} O R = {}" -by blast +(* CANDIDATE lemma pred_comp_bot2 [simp]: + "" + by (fact rel_comp_empty2 [to_pred]) *) -lemma rel_comp_empty2[simp]: "R O {} = {}" -by blast +lemma O_assoc: + "(R O S) O T = R O (S O T)" + by blast + +lemma pred_comp_assoc: + "(r OO s) OO t = r OO (s OO t)" + by (fact O_assoc [to_pred]) -lemma O_assoc: "(R O S) O T = R O (S O T)" -by blast +lemma trans_O_subset: + "trans r \ r O r \ r" + by (unfold trans_def) blast + +lemma transp_pred_comp_less_eq: + "transp r \ r OO r \ r " + by (fact trans_O_subset [to_pred]) -lemma trans_O_subset: "trans r ==> r O r \ r" -by (unfold trans_def) blast +lemma rel_comp_mono: + "r' \ r \ s' \ s \ r' O s' \ r O s" + by blast -lemma rel_comp_mono: "r' \ r ==> s' \ s ==> (r' O s') \ (r O s)" -by blast +lemma pred_comp_mono: + "r' \ r \ s' \ s \ r' OO s' \ r OO s " + by (fact rel_comp_mono [to_pred]) lemma rel_comp_subset_Sigma: - "r \ A \ B ==> s \ B \ C ==> (r O s) \ A \ C" -by blast + "r \ A \ B \ s \ B \ C \ r O s \ A \ C" + by blast + +lemma rel_comp_distrib [simp]: + "R O (S \ T) = (R O S) \ (R O T)" + by auto -lemma rel_comp_distrib[simp]: "R O (S \ T) = (R O S) \ (R O T)" -by auto +lemma pred_comp_distrib (* CANDIDATE [simp] *): + "R OO (S \ T) = R OO S \ R OO T" + by (fact rel_comp_distrib [to_pred]) + +lemma rel_comp_distrib2 [simp]: + "(S \ T) O R = (S O R) \ (T O R)" + by auto -lemma rel_comp_distrib2[simp]: "(S \ T) O R = (S O R) \ (T O R)" -by auto +lemma pred_comp_distrib2 (* CANDIDATE [simp] *): + "(S \ T) OO R = S OO R \ T OO R" + by (fact rel_comp_distrib2 [to_pred]) + +lemma rel_comp_UNION_distrib: + "s O UNION I r = (\i\I. s O r i) " + by auto -lemma rel_comp_UNION_distrib: "s O UNION I r = UNION I (%i. s O r i)" -by auto +(* FIXME thm rel_comp_UNION_distrib [to_pred] *) -lemma rel_comp_UNION_distrib2: "UNION I r O s = UNION I (%i. r i O s)" -by auto +lemma rel_comp_UNION_distrib2: + "UNION I r O s = (\i\I. r i O s) " + by auto + +(* FIXME thm rel_comp_UNION_distrib2 [to_pred] *) lemma single_valued_rel_comp: - "single_valued r ==> single_valued s ==> single_valued (r O s)" -by (unfold single_valued_def) blast + "single_valued r \ single_valued s \ single_valued (r O s)" + by (unfold single_valued_def) blast + +lemma rel_comp_unfold: + "r O s = {(x, z). \y. (x, y) \ r \ (y, z) \ s}" + by (auto simp add: set_eq_iff) subsubsection {* Converse *} -definition - converse :: "('a * 'b) set => ('b * 'a) set" - ("(_^-1)" [1000] 999) where - "r^-1 = {(y, x). (x, y) : r}" +inductive_set converse :: "('a \ 'b) set \ ('b \ 'a) set" ("(_^-1)" [1000] 999) + for r :: "('a \ 'b) set" +where + "(a, b) \ r \ (b, a) \ r^-1" notation (xsymbols) converse ("(_\)" [1000] 999) -lemma converseI [sym]: "(a, b) : r ==> (b, a) : r^-1" - by (simp add: converse_def) - -lemma converseD [sym]: "(a,b) : r^-1 ==> (b, a) : r" - by (simp add: converse_def) - -lemma converseE [elim!]: - "yx : r^-1 ==> (!!x y. yx = (y, x) ==> (x, y) : r ==> P) ==> P" - -- {* More general than @{text converseD}, as it ``splits'' the member of the relation. *} - by (unfold converse_def) (iprover elim!: CollectE splitE bexE) - -lemma converse_iff [iff]: "((a,b): r^-1) = ((b,a) : r)" - by (simp add: converse_def) - -inductive conversep :: "('a \ 'b \ bool) \ 'b \ 'a \ bool" ("(_^--1)" [1000] 1000) - for r :: "'a \ 'b \ bool" where - conversepI: "r a b \ r^--1 b a" +notation + conversep ("(_^--1)" [1000] 1000) notation (xsymbols) conversep ("(_\\)" [1000] 1000) -lemma conversepD: - assumes ab: "r^--1 a b" - shows "r b a" using ab - by cases simp +lemma converseI [sym]: + "(a, b) \ r \ (b, a) \ r\" + by (fact converse.intros) + +lemma conversepI (* CANDIDATE [sym] *): + "r a b \ r\\ b a" + by (fact conversep.intros) + +lemma converseD [sym]: + "(a, b) \ r\ \ (b, a) \ r" + by (erule converse.cases) iprover + +lemma conversepD (* CANDIDATE [sym] *): + "r\\ b a \ r a b" + by (fact converseD [to_pred]) + +lemma converseE [elim!]: + -- {* More general than @{text converseD}, as it ``splits'' the member of the relation. *} + "yx \ r\ \ (\x y. yx = (y, x) \ (x, y) \ r \ P) \ P" + by (cases yx) (simp, erule converse.cases, iprover) -lemma conversep_iff [iff]: "r^--1 a b = r b a" - by (iprover intro: conversepI dest: conversepD) +lemmas conversepE (* CANDIDATE [elim!] *) = conversep.cases + +lemma converse_iff [iff]: + "(a, b) \ r\ \ (b, a) \ r" + by (auto intro: converseI) + +lemma conversep_iff [iff]: + "r\\ a b = r b a" + by (fact converse_iff [to_pred]) -lemma conversep_converse_eq [pred_set_conv]: - "(\x y. (x, y) \ r)^--1 = (\x y. (x, y) \ r^-1)" - by (auto simp add: fun_eq_iff) +lemma converse_converse [simp]: + "(r\)\ = r" + by (simp add: set_eq_iff) -lemma conversep_conversep [simp]: "(r^--1)^--1 = r" - by (iprover intro: order_antisym conversepI dest: conversepD) +lemma conversep_conversep [simp]: + "(r\\)\\ = r" + by (fact converse_converse [to_pred]) + +lemma converse_rel_comp: "(r O s)^-1 = s^-1 O r^-1" + by blast lemma converse_pred_comp: "(r OO s)^--1 = s^--1 OO r^--1" by (iprover intro: order_antisym conversepI pred_compI elim: pred_compE dest: conversepD) +lemma converse_Int: "(r \ s)^-1 = r^-1 \ s^-1" + by blast + lemma converse_meet: "(r \ s)^--1 = r^--1 \ s^--1" by (simp add: inf_fun_def) (iprover intro: conversepI ext dest: conversepD) +lemma converse_Un: "(r \ s)^-1 = r^-1 \ s^-1" + by blast + lemma converse_join: "(r \ s)^--1 = r^--1 \ s^--1" by (simp add: sup_fun_def) (iprover intro: conversepI ext dest: conversepD) -lemma conversep_noteq [simp]: "(op \)^--1 = op \" - by (auto simp add: fun_eq_iff) - -lemma conversep_eq [simp]: "(op =)^--1 = op =" - by (auto simp add: fun_eq_iff) - -lemma converse_converse [simp]: "(r^-1)^-1 = r" -by (unfold converse_def) blast - -lemma converse_rel_comp: "(r O s)^-1 = s^-1 O r^-1" -by blast - -lemma converse_Int: "(r \ s)^-1 = r^-1 \ s^-1" -by blast - -lemma converse_Un: "(r \ s)^-1 = r^-1 \ s^-1" -by blast - lemma converse_INTER: "(INTER S r)^-1 = (INT x:S. (r x)^-1)" -by fast + by fast lemma converse_UNION: "(UNION S r)^-1 = (UN x:S. (r x)^-1)" -by blast + by blast lemma converse_Id [simp]: "Id^-1 = Id" -by blast + by blast lemma converse_Id_on [simp]: "(Id_on A)^-1 = Id_on A" -by blast + by blast lemma refl_on_converse [simp]: "refl_on A (converse r) = refl_on A r" -by (unfold refl_on_def) auto + by (unfold refl_on_def) auto lemma sym_converse [simp]: "sym (converse r) = sym r" -by (unfold sym_def) blast + by (unfold sym_def) blast lemma antisym_converse [simp]: "antisym (converse r) = antisym r" -by (unfold antisym_def) blast + by (unfold antisym_def) blast lemma trans_converse [simp]: "trans (converse r) = trans r" -by (unfold trans_def) blast + by (unfold trans_def) blast lemma sym_conv_converse_eq: "sym r = (r^-1 = r)" -by (unfold sym_def) fast + by (unfold sym_def) fast lemma sym_Un_converse: "sym (r \ r^-1)" -by (unfold sym_def) blast + by (unfold sym_def) blast lemma sym_Int_converse: "sym (r \ r^-1)" -by (unfold sym_def) blast + by (unfold sym_def) blast -lemma total_on_converse[simp]: "total_on A (r^-1) = total_on A r" -by (auto simp: total_on_def) +lemma total_on_converse [simp]: "total_on A (r^-1) = total_on A r" + by (auto simp: total_on_def) lemma finite_converse [iff]: "finite (r^-1) = finite r" apply (subgoal_tac "r^-1 = (%(x,y). (y,x))`r") @@ -588,50 +710,61 @@ apply (erule finite_imageD [unfolded inj_on_def]) apply (simp split add: split_split) apply (erule finite_imageI) - apply (simp add: converse_def image_def, auto) + apply (simp add: set_eq_iff image_def, auto) apply (rule bexI) prefer 2 apply assumption apply simp done +lemma conversep_noteq [simp]: "(op \)^--1 = op \" + by (auto simp add: fun_eq_iff) + +lemma conversep_eq [simp]: "(op =)^--1 = op =" + by (auto simp add: fun_eq_iff) + +lemma converse_unfold: + "r\ = {(y, x). (x, y) \ r}" + by (simp add: set_eq_iff) + subsubsection {* Domain, range and field *} -definition - Domain :: "('a * 'b) set => 'a set" where - "Domain r = {x. EX y. (x,y):r}" +definition Domain :: "('a \ 'b) set \ 'a set" +where + "Domain r = {x. \y. (x, y) \ r}" -definition - Range :: "('a * 'b) set => 'b set" where - "Range r = Domain(r^-1)" +definition Range :: "('a \ 'b) set \ 'b set" +where + "Range r = Domain (r\)" -definition - Field :: "('a * 'a) set => 'a set" where +definition Field :: "'a rel \ 'a set" +where "Field r = Domain r \ Range r" declare Domain_def [no_atp] lemma Domain_iff: "(a : Domain r) = (EX y. (a, y) : r)" -by (unfold Domain_def) blast + by (unfold Domain_def) blast lemma DomainI [intro]: "(a, b) : r ==> a : Domain r" -by (iprover intro!: iffD2 [OF Domain_iff]) + by (iprover intro!: iffD2 [OF Domain_iff]) lemma DomainE [elim!]: "a : Domain r ==> (!!y. (a, y) : r ==> P) ==> P" -by (iprover dest!: iffD1 [OF Domain_iff]) + by (iprover dest!: iffD1 [OF Domain_iff]) lemma Range_iff: "(a : Range r) = (EX y. (y, a) : r)" -by (simp add: Domain_def Range_def) + by (simp add: Domain_def Range_def) lemma RangeI [intro]: "(a, b) : r ==> b : Range r" -by (unfold Range_def) (iprover intro!: converseI DomainI) + by (unfold Range_def) (iprover intro!: converseI DomainI) lemma RangeE [elim!]: "b : Range r ==> (!!x. (x, b) : r ==> P) ==> P" -by (unfold Range_def) (iprover elim!: DomainE dest!: converseD) + by (unfold Range_def) (iprover elim!: DomainE dest!: converseD) inductive DomainP :: "('a \ 'b \ bool) \ 'a \ bool" - for r :: "'a \ 'b \ bool" where + for r :: "'a \ 'b \ bool" +where DomainPI [intro]: "r a b \ DomainP r a" inductive_cases DomainPE [elim!]: "DomainP r a" @@ -640,7 +773,8 @@ by (blast intro!: Orderings.order_antisym predicate1I) inductive RangeP :: "('a \ 'b \ bool) \ 'b \ bool" - for r :: "'a \ 'b \ bool" where + for r :: "'a \ 'b \ bool" +where RangePI [intro]: "r a b \ RangeP r b" inductive_cases RangePE [elim!]: "RangeP r b" @@ -679,8 +813,8 @@ lemma Domain_Union: "Domain (Union S) = (\A\S. Domain A)" by blast -lemma Domain_converse[simp]: "Domain(r^-1) = Range r" - by(auto simp: Range_def) +lemma Domain_converse [simp]: "Domain (r\) = Range r" + by auto lemma Domain_mono: "r \ s ==> Domain r \ Domain s" by blast @@ -731,7 +865,7 @@ lemma Range_Union: "Range (Union S) = (\A\S. Range A)" by blast -lemma Range_converse [simp]: "Range(r^-1) = Domain r" +lemma Range_converse [simp]: "Range (r\) = Domain r" by blast lemma snd_eq_Range: "snd ` R = Range R" @@ -767,73 +901,76 @@ apply (auto simp add: Field_def Domain_insert Range_insert) done +lemma Domain_unfold: + "Domain r = {x. \y. (x, y) \ r}" + by (fact Domain_def) + subsubsection {* Image of a set under a relation *} -definition - Image :: "[('a * 'b) set, 'a set] => 'b set" - (infixl "``" 90) where - "r `` s = {y. EX x:s. (x,y):r}" +definition Image :: "('a \ 'b) set \ 'a set \ 'b set" (infixl "``" 90) +where + "r `` s = {y. \x\s. (x, y) \ r}" declare Image_def [no_atp] lemma Image_iff: "(b : r``A) = (EX x:A. (x, b) : r)" -by (simp add: Image_def) + by (simp add: Image_def) lemma Image_singleton: "r``{a} = {b. (a, b) : r}" -by (simp add: Image_def) + by (simp add: Image_def) lemma Image_singleton_iff [iff]: "(b : r``{a}) = ((a, b) : r)" -by (rule Image_iff [THEN trans]) simp + by (rule Image_iff [THEN trans]) simp lemma ImageI [intro,no_atp]: "(a, b) : r ==> a : A ==> b : r``A" -by (unfold Image_def) blast + by (unfold Image_def) blast lemma ImageE [elim!]: - "b : r `` A ==> (!!x. (x, b) : r ==> x : A ==> P) ==> P" -by (unfold Image_def) (iprover elim!: CollectE bexE) + "b : r `` A ==> (!!x. (x, b) : r ==> x : A ==> P) ==> P" + by (unfold Image_def) (iprover elim!: CollectE bexE) lemma rev_ImageI: "a : A ==> (a, b) : r ==> b : r `` A" -- {* This version's more effective when we already have the required @{text a} *} -by blast + by blast lemma Image_empty [simp]: "R``{} = {}" -by blast + by blast lemma Image_Id [simp]: "Id `` A = A" -by blast + by blast lemma Image_Id_on [simp]: "Id_on A `` B = A \ B" -by blast + by blast lemma Image_Int_subset: "R `` (A \ B) \ R `` A \ R `` B" -by blast + by blast lemma Image_Int_eq: "single_valued (converse R) ==> R `` (A \ B) = R `` A \ R `` B" -by (simp add: single_valued_def, blast) + by (simp add: single_valued_def, blast) lemma Image_Un: "R `` (A \ B) = R `` A \ R `` B" -by blast + by blast lemma Un_Image: "(R \ S) `` A = R `` A \ S `` A" -by blast + by blast lemma Image_subset: "r \ A \ B ==> r``C \ B" -by (iprover intro!: subsetI elim!: ImageE dest!: subsetD SigmaD2) + by (iprover intro!: subsetI elim!: ImageE dest!: subsetD SigmaD2) lemma Image_eq_UN: "r``B = (\y\ B. r``{y})" -- {* NOT suitable for rewriting *} -by blast + by blast lemma Image_mono: "r' \ r ==> A' \ A ==> (r' `` A') \ (r `` A)" -by blast + by blast lemma Image_UN: "(r `` (UNION A B)) = (\x\A. r `` (B x))" -by blast + by blast lemma Image_INT_subset: "(r `` INTER A B) \ (\x\A. r `` (B x))" -by blast + by blast text{*Converse inclusion requires some assumptions*} lemma Image_INT_eq: @@ -844,26 +981,27 @@ done lemma Image_subset_eq: "(r``A \ B) = (A \ - ((r^-1) `` (-B)))" -by blast + by blast lemma Image_Collect_split [simp]: "{(x, y). P x y} `` A = {y. EX x:A. P x y}" -by auto + by auto subsubsection {* Inverse image *} -definition - inv_image :: "('b * 'b) set => ('a => 'b) => ('a * 'a) set" where - "inv_image r f = {(x, y). (f x, f y) : r}" +definition inv_image :: "'b rel \ ('a \ 'b) \ 'a rel" +where + "inv_image r f = {(x, y). (f x, f y) \ r}" -definition inv_imagep :: "('b \ 'b \ bool) \ ('a \ 'b) \ 'a \ 'a \ bool" where +definition inv_imagep :: "('b \ 'b \ bool) \ ('a \ 'b) \ 'a \ 'a \ bool" +where "inv_imagep r f = (\x y. r (f x) (f y))" lemma [pred_set_conv]: "inv_imagep (\x y. (x, y) \ r) f = (\x y. (x, y) \ inv_image r f)" by (simp add: inv_image_def inv_imagep_def) lemma sym_inv_image: "sym r ==> sym (inv_image r f)" -by (unfold sym_def inv_image_def) blast + by (unfold sym_def inv_image_def) blast lemma trans_inv_image: "trans r ==> trans (inv_image r f)" apply (unfold trans_def inv_image_def) @@ -875,7 +1013,7 @@ by (auto simp:inv_image_def) lemma converse_inv_image[simp]: "(inv_image R f)^-1 = inv_image (R^-1) f" -unfolding inv_image_def converse_def by auto + unfolding inv_image_def converse_unfold by auto lemma in_inv_imagep [simp]: "inv_imagep r f x y = r (f x) (f y)" by (simp add: inv_imagep_def) @@ -883,7 +1021,8 @@ subsubsection {* Powerset *} -definition Powp :: "('a \ bool) \ 'a set \ bool" where +definition Powp :: "('a \ bool) \ 'a set \ bool" +where "Powp A = (\B. \x \ B. A x)" lemma Powp_Pow_eq [pred_set_conv]: "Powp (\x. x \ A) = (\x. x \ Pow A)" diff -r 6b94c39b7366 -r e9e7209eb375 src/HOL/Transitive_Closure.thy --- a/src/HOL/Transitive_Closure.thy Thu Mar 01 17:13:54 2012 +0000 +++ b/src/HOL/Transitive_Closure.thy Thu Mar 01 19:34:52 2012 +0100 @@ -628,10 +628,10 @@ by (blast intro: subsetD [OF rtrancl_Un_subset]) lemma trancl_domain [simp]: "Domain (r^+) = Domain r" - by (unfold Domain_def) (blast dest: tranclD) + by (unfold Domain_unfold) (blast dest: tranclD) lemma trancl_range [simp]: "Range (r^+) = Range r" -unfolding Range_def by(simp add: trancl_converse [symmetric]) + unfolding Domain_converse [symmetric] by (simp add: trancl_converse [symmetric]) lemma Not_Domain_rtrancl: "x ~: Domain R ==> ((x, y) : R^*) = (x = y)" @@ -839,7 +839,7 @@ apply (drule tranclD2) apply (clarsimp simp: rtrancl_is_UN_relpow) apply (rule_tac x="Suc n" in exI) - apply (clarsimp simp: rel_comp_def) + apply (clarsimp simp: rel_comp_unfold) apply fastforce apply clarsimp apply (case_tac n, simp) @@ -860,7 +860,7 @@ next case (Suc n) show ?case - proof (simp add: rel_comp_def Suc) + proof (simp add: rel_comp_unfold Suc) show "(\y. (\f. f 0 = a \ f n = y \ (\i R)) \ (y,b) \ R) = (\f. f 0 = a \ f(Suc n) = b \ (\i R))" (is "?l = ?r") @@ -1175,3 +1175,4 @@ {* simple transitivity reasoner (predicate version) *} end + diff -r 6b94c39b7366 -r e9e7209eb375 src/HOL/UNITY/Comp/Client.thy --- a/src/HOL/UNITY/Comp/Client.thy Thu Mar 01 17:13:54 2012 +0000 +++ b/src/HOL/UNITY/Comp/Client.thy Thu Mar 01 19:34:52 2012 +0100 @@ -138,7 +138,7 @@ "Client \ transient {s. rel s = k & k giv s & h pfixGe ask s}" apply (simp add: Client_def mk_total_program_def) apply (rule_tac act = rel_act in totalize_transientI) - apply (auto simp add: Domain_def Client_def) + apply (auto simp add: Domain_unfold Client_def) apply (blast intro: less_le_trans prefix_length_le strict_prefix_length_less) apply (auto simp add: prefix_def genPrefix_iff_nth Ge_def) apply (blast intro: strict_prefix_length_less) diff -r 6b94c39b7366 -r e9e7209eb375 src/HOL/UNITY/UNITY_tactics.ML --- a/src/HOL/UNITY/UNITY_tactics.ML Thu Mar 01 17:13:54 2012 +0000 +++ b/src/HOL/UNITY/UNITY_tactics.ML Thu Mar 01 19:34:52 2012 +0100 @@ -46,7 +46,7 @@ ORELSE res_inst_tac ctxt [(("act", 0), sact)] @{thm transientI} 2, (*simplify the command's domain*) - simp_tac (simpset_of ctxt addsimps @{thms Domain_def}) 3, + simp_tac (simpset_of ctxt addsimps @{thms Domain_unfold}) 3, constrains_tac ctxt 1, ALLGOALS (clarify_tac ctxt), ALLGOALS (asm_lr_simp_tac (simpset_of ctxt))]); diff -r 6b94c39b7366 -r e9e7209eb375 src/HOL/ZF/Games.thy --- a/src/HOL/ZF/Games.thy Thu Mar 01 17:13:54 2012 +0000 +++ b/src/HOL/ZF/Games.thy Thu Mar 01 19:34:52 2012 +0100 @@ -330,7 +330,7 @@ by (simp add: option_to_is_option_of) show ?thesis apply (simp add: option_of) - apply (auto intro: wf_inv_image wf_is_option_of) + apply (auto intro: wf_is_option_of) done qed @@ -359,7 +359,7 @@ lemma "neg_game (neg_game g) = g" apply (induct g rule: neg_game.induct) apply (subst neg_game.simps)+ - apply (simp add: right_options left_options comp_zimage_eq) + apply (simp add: comp_zimage_eq) apply (subgoal_tac "zimage (neg_game o neg_game) (left_options g) = left_options g") apply (subgoal_tac "zimage (neg_game o neg_game) (right_options g) = right_options g") apply (auto simp add: game_split[symmetric]) @@ -552,7 +552,7 @@ apply (simp only: plus_game.simps[where G=G and H=H]) apply (simp add: game_ext_eq goal1) apply (auto simp add: - zimage_cong[where f = "\ g. plus_game g zero_game" and g = "id"] + zimage_cong [where f = "\ g. plus_game g zero_game" and g = "id"] induct_hyp) done qed @@ -974,3 +974,4 @@ qed end + diff -r 6b94c39b7366 -r e9e7209eb375 src/HOL/ZF/HOLZF.thy --- a/src/HOL/ZF/HOLZF.thy Thu Mar 01 17:13:54 2012 +0000 +++ b/src/HOL/ZF/HOLZF.thy Thu Mar 01 19:34:52 2012 +0100 @@ -660,7 +660,7 @@ "Ext R y \ { x . (x, y) \ R }" lemma Ext_Elem: "Ext is_Elem_of = explode" - by (auto intro: ext simp add: Ext_def is_Elem_of_def explode_def) + by (auto simp add: Ext_def is_Elem_of_def explode_def) lemma "Ext SpecialR Empty \ explode z" proof @@ -892,3 +892,4 @@ by (auto intro: set_like_subset wf_subset simp add: wf_eq_wfzf[symmetric]) end + diff -r 6b94c39b7366 -r e9e7209eb375 src/HOL/ex/Set_Theory.thy --- a/src/HOL/ex/Set_Theory.thy Thu Mar 01 17:13:54 2012 +0000 +++ b/src/HOL/ex/Set_Theory.thy Thu Mar 01 19:34:52 2012 +0100 @@ -128,7 +128,7 @@ let ?n = "card A" have "finite A" using `card A \ 2` by(auto intro:ccontr) have 0: "R `` A <= A" using `sym R` `Domain R <= A` - unfolding Domain_def sym_def by blast + unfolding Domain_unfold sym_def by blast have h: "ALL a:A. R `` {a} <= A" using 0 by blast hence 1: "ALL a:A. finite(R `` {a})" using `finite A` by(blast intro: finite_subset) diff -r 6b94c39b7366 -r e9e7209eb375 src/HOL/ex/Tarski.thy --- a/src/HOL/ex/Tarski.thy Thu Mar 01 17:13:54 2012 +0000 +++ b/src/HOL/ex/Tarski.thy Thu Mar 01 19:34:52 2012 +0100 @@ -227,10 +227,10 @@ by (simp add: glb_def greatest_def isGlb_def some_eq_ex [symmetric]) lemma isGlb_dual_isLub: "isGlb S cl = isLub S (dual cl)" -by (simp add: isLub_def isGlb_def dual_def converse_def) +by (simp add: isLub_def isGlb_def dual_def converse_unfold) lemma isLub_dual_isGlb: "isLub S cl = isGlb S (dual cl)" -by (simp add: isLub_def isGlb_def dual_def converse_def) +by (simp add: isLub_def isGlb_def dual_def converse_unfold) lemma (in PO) dualPO: "dual cl \ PartialOrder" apply (insert cl_po) @@ -251,10 +251,10 @@ done lemma lub_dual_glb: "lub S cl = glb S (dual cl)" -by (simp add: lub_def glb_def least_def greatest_def dual_def converse_def) +by (simp add: lub_def glb_def least_def greatest_def dual_def converse_unfold) lemma glb_dual_lub: "glb S cl = lub S (dual cl)" -by (simp add: lub_def glb_def least_def greatest_def dual_def converse_def) +by (simp add: lub_def glb_def least_def greatest_def dual_def converse_unfold) lemma CL_subset_PO: "CompleteLattice \ PartialOrder" by (simp add: PartialOrder_def CompleteLattice_def, fast)