equal
deleted
inserted
replaced
41 trancl_set :: "('a \<times> 'a) set => ('a \<times> 'a) set" ("(_^+)" [1000] 999) |
41 trancl_set :: "('a \<times> 'a) set => ('a \<times> 'a) set" ("(_^+)" [1000] 999) |
42 "r^+ == Collect2 (member2 r)^++" |
42 "r^+ == Collect2 (member2 r)^++" |
43 |
43 |
44 abbreviation |
44 abbreviation |
45 reflcl :: "('a => 'a => bool) => 'a => 'a => bool" ("(_^==)" [1000] 1000) where |
45 reflcl :: "('a => 'a => bool) => 'a => 'a => bool" ("(_^==)" [1000] 1000) where |
46 "r^== == join r op =" |
46 "r^== == sup r op =" |
47 |
47 |
48 abbreviation |
48 abbreviation |
49 reflcl_set :: "('a \<times> 'a) set => ('a \<times> 'a) set" ("(_^=)" [1000] 999) where |
49 reflcl_set :: "('a \<times> 'a) set => ('a \<times> 'a) set" ("(_^=)" [1000] 999) where |
50 "r^= == r \<union> Id" |
50 "r^= == r \<union> Id" |
51 |
51 |
69 subsection {* Reflexive-transitive closure *} |
69 subsection {* Reflexive-transitive closure *} |
70 |
70 |
71 lemma rtrancl_set_eq [pred_set_conv]: "(member2 r)^** = member2 (r^*)" |
71 lemma rtrancl_set_eq [pred_set_conv]: "(member2 r)^** = member2 (r^*)" |
72 by (simp add: rtrancl_set_def) |
72 by (simp add: rtrancl_set_def) |
73 |
73 |
74 lemma reflcl_set_eq [pred_set_conv]: "(join (member2 r) op =) = member2 (r Un Id)" |
74 lemma reflcl_set_eq [pred_set_conv]: "(sup (member2 r) op =) = member2 (r Un Id)" |
75 by (simp add: expand_fun_eq) |
75 by (simp add: expand_fun_eq) |
76 |
76 |
77 lemmas rtrancl_refl [intro!, Pure.intro!, simp] = rtrancl_refl [to_set] |
77 lemmas rtrancl_refl [intro!, Pure.intro!, simp] = rtrancl_refl [to_set] |
78 lemmas rtrancl_into_rtrancl [Pure.intro] = rtrancl_into_rtrancl [to_set] |
78 lemmas rtrancl_into_rtrancl [Pure.intro] = rtrancl_into_rtrancl [to_set] |
79 |
79 |
188 apply (drule rtrancl_mono', simp) |
188 apply (drule rtrancl_mono', simp) |
189 done |
189 done |
190 |
190 |
191 lemmas rtrancl_subset = rtrancl_subset' [to_set] |
191 lemmas rtrancl_subset = rtrancl_subset' [to_set] |
192 |
192 |
193 lemma rtrancl_Un_rtrancl': "(join (R^**) (S^**))^** = (join R S)^**" |
193 lemma rtrancl_Un_rtrancl': "(sup (R^**) (S^**))^** = (sup R S)^**" |
194 by (blast intro!: rtrancl_subset' intro: rtrancl_mono' [THEN predicate2D]) |
194 by (blast intro!: rtrancl_subset' intro: rtrancl_mono' [THEN predicate2D]) |
195 |
195 |
196 lemmas rtrancl_Un_rtrancl = rtrancl_Un_rtrancl' [to_set] |
196 lemmas rtrancl_Un_rtrancl = rtrancl_Un_rtrancl' [to_set] |
197 |
197 |
198 lemma rtrancl_reflcl' [simp]: "(R^==)^** = R^**" |
198 lemma rtrancl_reflcl' [simp]: "(R^==)^** = R^**" |
206 apply (rename_tac a b) |
206 apply (rename_tac a b) |
207 apply (case_tac "a = b", blast) |
207 apply (case_tac "a = b", blast) |
208 apply (blast intro!: r_into_rtrancl) |
208 apply (blast intro!: r_into_rtrancl) |
209 done |
209 done |
210 |
210 |
211 lemma rtrancl_r_diff_Id': "(meet r op ~=)^** = r^**" |
211 lemma rtrancl_r_diff_Id': "(inf r op ~=)^** = r^**" |
212 apply (rule sym) |
212 apply (rule sym) |
213 apply (rule rtrancl_subset') |
213 apply (rule rtrancl_subset') |
214 apply blast+ |
214 apply blast+ |
215 done |
215 done |
216 |
216 |