src/HOL/Transitive_Closure.thy
changeset 29609 a010aab5bed0
parent 26801 244184661a09
child 30107 f3b3b0e3d184
child 30240 5b25fee0362c
equal deleted inserted replaced
29608:564ea783ace8 29609:a010aab5bed0
     1 (*  Title:      HOL/Transitive_Closure.thy
     1 (*  Title:      HOL/Transitive_Closure.thy
     2     ID:         $Id$
       
     3     Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
     2     Author:     Lawrence C Paulson, Cambridge University Computer Laboratory
     4     Copyright   1992  University of Cambridge
     3     Copyright   1992  University of Cambridge
     5 *)
     4 *)
     6 
     5 
     7 header {* Reflexive and Transitive closure of a relation *}
     6 header {* Reflexive and Transitive closure of a relation *}
   566   apply (erule rev_mp)
   565   apply (erule rev_mp)
   567   apply (erule rtrancl_induct)
   566   apply (erule rtrancl_induct)
   568    apply auto
   567    apply auto
   569   done
   568   done
   570 
   569 
       
   570 lemma trancl_subset_Field2: "r^+ <= Field r \<times> Field r"
       
   571   apply clarify
       
   572   apply (erule trancl_induct)
       
   573    apply (auto simp add: Field_def)
       
   574   done
       
   575 
       
   576 lemma finite_trancl: "finite (r^+) = finite r"
       
   577   apply auto
       
   578    prefer 2
       
   579    apply (rule trancl_subset_Field2 [THEN finite_subset])
       
   580    apply (rule finite_SigmaI)
       
   581     prefer 3
       
   582     apply (blast intro: r_into_trancl' finite_subset)
       
   583    apply (auto simp add: finite_Field)
       
   584   done
       
   585 
   571 text {* More about converse @{text rtrancl} and @{text trancl}, should
   586 text {* More about converse @{text rtrancl} and @{text trancl}, should
   572   be merged with main body. *}
   587   be merged with main body. *}
   573 
   588 
   574 lemma single_valued_confluent:
   589 lemma single_valued_confluent:
   575   "\<lbrakk> single_valued r; (x,y) \<in> r^*; (x,z) \<in> r^* \<rbrakk>
   590   "\<lbrakk> single_valued r; (x,y) \<in> r^*; (x,z) \<in> r^* \<rbrakk>