equal
deleted
inserted
replaced
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) |