src/HOL/Bali/Basis.thy
changeset 32376 66b4946d9483
parent 32367 a508148f7c25
child 32960 69916a850301
equal deleted inserted replaced
32375:d33f5a96df0b 32376:66b4946d9483
    61 lemma rtrancl_into_rtrancl2: 
    61 lemma rtrancl_into_rtrancl2: 
    62   "\<lbrakk> (a, b) \<in>  r; (b, c) \<in> r^* \<rbrakk> \<Longrightarrow> (a, c) \<in>  r^*"
    62   "\<lbrakk> (a, b) \<in>  r; (b, c) \<in> r^* \<rbrakk> \<Longrightarrow> (a, c) \<in>  r^*"
    63 by (auto intro: r_into_rtrancl rtrancl_trans)
    63 by (auto intro: r_into_rtrancl rtrancl_trans)
    64 
    64 
    65 lemma triangle_lemma:
    65 lemma triangle_lemma:
    66  "\<lbrakk> \<And> a b c. \<lbrakk>(a,b)\<in>r; (a,c)\<in>r\<rbrakk> \<Longrightarrow> b=c; (a,x)\<in>r*; (a,y)\<in>r*\<rbrakk> 
    66  "\<lbrakk> \<And> a b c. \<lbrakk>(a,b)\<in>r; (a,c)\<in>r\<rbrakk> \<Longrightarrow> b=c; (a,x)\<in>r\<^sup>*; (a,y)\<in>r\<^sup>*\<rbrakk> 
    67  \<Longrightarrow> (x,y)\<in>r* \<or> (y,x)\<in>r*"
    67  \<Longrightarrow> (x,y)\<in>r\<^sup>* \<or> (y,x)\<in>r\<^sup>*"
    68 proof -
    68 proof -
    69   note converse_rtrancl_induct = converse_rtrancl_induct [consumes 1]
    69   note converse_rtrancl_induct = converse_rtrancl_induct [consumes 1]
    70   note converse_rtranclE = converse_rtranclE [consumes 1] 
    70   note converse_rtranclE = converse_rtranclE [consumes 1] 
    71   assume unique: "\<And> a b c. \<lbrakk>(a,b)\<in>r; (a,c)\<in>r\<rbrakk> \<Longrightarrow> b=c"
    71   assume unique: "\<And> a b c. \<lbrakk>(a,b)\<in>r; (a,c)\<in>r\<rbrakk> \<Longrightarrow> b=c"
    72   assume "(a,x)\<in>r*" 
    72   assume "(a,x)\<in>r\<^sup>*" 
    73   then show "(a,y)\<in>r* \<Longrightarrow> (x,y)\<in>r* \<or> (y,x)\<in>r*"
    73   then show "(a,y)\<in>r\<^sup>* \<Longrightarrow> (x,y)\<in>r\<^sup>* \<or> (y,x)\<in>r\<^sup>*"
    74   proof (induct rule: converse_rtrancl_induct)
    74   proof (induct rule: converse_rtrancl_induct)
    75     assume "(x,y)\<in>r*"
    75     assume "(x,y)\<in>r\<^sup>*"
    76     then show ?thesis 
    76     then show ?thesis 
    77       by blast
    77       by blast
    78   next
    78   next
    79     fix a v
    79     fix a v
    80     assume a_v_r: "(a, v) \<in> r" and
    80     assume a_v_r: "(a, v) \<in> r" and
    81           v_x_rt: "(v, x) \<in> r*" and
    81           v_x_rt: "(v, x) \<in> r\<^sup>*" and
    82           a_y_rt: "(a, y) \<in> r*"  and
    82           a_y_rt: "(a, y) \<in> r\<^sup>*"  and
    83              hyp: "(v, y) \<in> r* \<Longrightarrow> (x, y) \<in> r* \<or> (y, x) \<in> r*"
    83              hyp: "(v, y) \<in> r\<^sup>* \<Longrightarrow> (x, y) \<in> r\<^sup>* \<or> (y, x) \<in> r\<^sup>*"
    84     from a_y_rt 
    84     from a_y_rt 
    85     show "(x, y) \<in> r* \<or> (y, x) \<in> r*"
    85     show "(x, y) \<in> r\<^sup>* \<or> (y, x) \<in> r\<^sup>*"
    86     proof (cases rule: converse_rtranclE)
    86     proof (cases rule: converse_rtranclE)
    87       assume "a=y"
    87       assume "a=y"
    88       with a_v_r v_x_rt have "(y,x) \<in> r*"
    88       with a_v_r v_x_rt have "(y,x) \<in> r\<^sup>*"
    89 	by (auto intro: r_into_rtrancl rtrancl_trans)
    89 	by (auto intro: r_into_rtrancl rtrancl_trans)
    90       then show ?thesis 
    90       then show ?thesis 
    91 	by blast
    91 	by blast
    92     next
    92     next
    93       fix w 
    93       fix w 
    94       assume a_w_r: "(a, w) \<in> r" and
    94       assume a_w_r: "(a, w) \<in> r" and
    95             w_y_rt: "(w, y) \<in> r*"
    95             w_y_rt: "(w, y) \<in> r\<^sup>*"
    96       from a_v_r a_w_r unique 
    96       from a_v_r a_w_r unique 
    97       have "v=w" 
    97       have "v=w" 
    98 	by auto
    98 	by auto
    99       with w_y_rt hyp 
    99       with w_y_rt hyp 
   100       show ?thesis
   100       show ?thesis
   103   qed
   103   qed
   104 qed
   104 qed
   105 
   105 
   106 
   106 
   107 lemma rtrancl_cases [consumes 1, case_names Refl Trancl]:
   107 lemma rtrancl_cases [consumes 1, case_names Refl Trancl]:
   108  "\<lbrakk>(a,b)\<in>r*;  a = b \<Longrightarrow> P; (a,b)\<in>r+ \<Longrightarrow> P\<rbrakk> \<Longrightarrow> P"
   108  "\<lbrakk>(a,b)\<in>r\<^sup>*;  a = b \<Longrightarrow> P; (a,b)\<in>r\<^sup>+ \<Longrightarrow> P\<rbrakk> \<Longrightarrow> P"
   109 apply (erule rtranclE)
   109 apply (erule rtranclE)
   110 apply (auto dest: rtrancl_into_trancl1)
   110 apply (auto dest: rtrancl_into_trancl1)
   111 done
   111 done
   112 
   112 
   113 (* ### To Transitive_Closure *)
   113 (* ### To Transitive_Closure *)