302 |
302 |
303 (** Meta or object quantifier ????? **) |
303 (** Meta or object quantifier ????? **) |
304 lemma LeadsTo_wf_induct: |
304 lemma LeadsTo_wf_induct: |
305 "[| wf r; |
305 "[| wf r; |
306 \<forall>m. F \<in> (A \<inter> f-`{m}) LeadsTo |
306 \<forall>m. F \<in> (A \<inter> f-`{m}) LeadsTo |
307 ((A \<inter> f-`(r^-1 `` {m})) \<union> B) |] |
307 ((A \<inter> f-`(r\<inverse> `` {m})) \<union> B) |] |
308 ==> F \<in> A LeadsTo B" |
308 ==> F \<in> A LeadsTo B" |
309 apply (simp add: LeadsTo_eq_leadsTo) |
309 apply (simp add: LeadsTo_eq_leadsTo) |
310 apply (erule leadsTo_wf_induct) |
310 apply (erule leadsTo_wf_induct) |
311 apply (blast intro: leadsTo_weaken) |
311 apply (blast intro: leadsTo_weaken) |
312 done |
312 done |
313 |
313 |
314 |
314 |
315 lemma Bounded_induct: |
315 lemma Bounded_induct: |
316 "[| wf r; |
316 "[| wf r; |
317 \<forall>m \<in> I. F \<in> (A \<inter> f-`{m}) LeadsTo |
317 \<forall>m \<in> I. F \<in> (A \<inter> f-`{m}) LeadsTo |
318 ((A \<inter> f-`(r^-1 `` {m})) \<union> B) |] |
318 ((A \<inter> f-`(r\<inverse> `` {m})) \<union> B) |] |
319 ==> F \<in> A LeadsTo ((A - (f-`I)) \<union> B)" |
319 ==> F \<in> A LeadsTo ((A - (f-`I)) \<union> B)" |
320 apply (erule LeadsTo_wf_induct, safe) |
320 apply (erule LeadsTo_wf_induct, safe) |
321 apply (case_tac "m \<in> I") |
321 apply (case_tac "m \<in> I") |
322 apply (blast intro: LeadsTo_weaken) |
322 apply (blast intro: LeadsTo_weaken) |
323 apply (blast intro: subset_imp_LeadsTo) |
323 apply (blast intro: subset_imp_LeadsTo) |