src/HOL/Transitive_Closure.thy
changeset 22422 ee19cdb07528
parent 22262 96ba62dff413
child 23743 52fbc991039f
equal deleted inserted replaced
22421:51a18dd1ea86 22422:ee19cdb07528
    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