src/HOL/Transitive_Closure.thy
changeset 20716 a6686a8e1b68
parent 19656 09be06943252
child 21210 c17fd2df4e9e
equal deleted inserted replaced
20715:c1f16b427d86 20716:a6686a8e1b68
   206 
   206 
   207 lemma r_comp_rtrancl_eq: "r O r^* = r^* O r"
   207 lemma r_comp_rtrancl_eq: "r O r^* = r^* O r"
   208   by (blast elim: rtranclE converse_rtranclE
   208   by (blast elim: rtranclE converse_rtranclE
   209     intro: rtrancl_into_rtrancl converse_rtrancl_into_rtrancl)
   209     intro: rtrancl_into_rtrancl converse_rtrancl_into_rtrancl)
   210 
   210 
   211 lemma rtrancl_unfold: "r^* = Id Un (r O r^*)"
   211 lemma rtrancl_unfold: "r^* = Id Un r O r^*"
   212   by (auto intro: rtrancl_into_rtrancl elim: rtranclE)
   212   by (auto intro: rtrancl_into_rtrancl elim: rtranclE)
   213 
   213 
   214 
   214 
   215 subsection {* Transitive closure *}
   215 subsection {* Transitive closure *}
   216 
   216 
   261   -- {* Another induction rule for trancl, incorporating transitivity *}
   261   -- {* Another induction rule for trancl, incorporating transitivity *}
   262   by (iprover intro: r_into_trancl major [THEN trancl_induct] cases)
   262   by (iprover intro: r_into_trancl major [THEN trancl_induct] cases)
   263 
   263 
   264 inductive_cases tranclE: "(a, b) : r^+"
   264 inductive_cases tranclE: "(a, b) : r^+"
   265 
   265 
   266 lemma trancl_unfold: "r^+ = r Un (r O r^+)"
   266 lemma trancl_unfold: "r^+ = r Un r O r^+"
   267   by (auto intro: trancl_into_trancl elim: tranclE)
   267   by (auto intro: trancl_into_trancl elim: tranclE)
   268 
   268 
   269 lemma trans_trancl[simp]: "trans(r^+)"
   269 lemma trans_trancl[simp]: "trans(r^+)"
   270   -- {* Transitivity of @{term "r^+"} *}
   270   -- {* Transitivity of @{term "r^+"} *}
   271 proof (rule transI)
   271 proof (rule transI)