src/HOL/Inductive.thy
changeset 55604 42e4e8c2e8dc
parent 55575 a5e33e18fb5c
child 56146 8453d35e4684
equal deleted inserted replaced
55603:48596c45bf7f 55604:42e4e8c2e8dc
   175   apply assumption
   175   apply assumption
   176   done
   176   done
   177 
   177 
   178 text{*strong version, thanks to Coen and Frost*}
   178 text{*strong version, thanks to Coen and Frost*}
   179 lemma coinduct_set: "[| mono(f);  a: X;  X \<subseteq> f(X Un gfp(f)) |] ==> a : gfp(f)"
   179 lemma coinduct_set: "[| mono(f);  a: X;  X \<subseteq> f(X Un gfp(f)) |] ==> a : gfp(f)"
   180   by (blast intro: weak_coinduct [OF _ coinduct_lemma])
   180   by (rule weak_coinduct[rotated], rule coinduct_lemma) blast+
   181 
   181 
   182 lemma coinduct: "[| mono(f); X \<le> f (sup X (gfp f)) |] ==> X \<le> gfp(f)"
   182 lemma coinduct: "[| mono(f); X \<le> f (sup X (gfp f)) |] ==> X \<le> gfp(f)"
   183   apply (rule order_trans)
   183   apply (rule order_trans)
   184   apply (rule sup_ge1)
   184   apply (rule sup_ge1)
   185   apply (erule gfp_upperbound [OF coinduct_lemma])
   185   apply (rule gfp_upperbound)
       
   186   apply (erule coinduct_lemma)
   186   apply assumption
   187   apply assumption
   187   done
   188   done
   188 
   189 
   189 lemma gfp_fun_UnI2: "[| mono(f);  a: gfp(f) |] ==> a: f(X Un gfp(f))"
   190 lemma gfp_fun_UnI2: "[| mono(f);  a: gfp(f) |] ==> a: f(X Un gfp(f))"
   190   by (blast dest: gfp_lemma2 mono_Un)
   191   by (blast dest: gfp_lemma2 mono_Un)