equal
deleted
inserted
replaced
355 lemma funpow_in_Chains: "{(f ^^ k) a |k. True} \<in> Chains leq" |
355 lemma funpow_in_Chains: "{(f ^^ k) a |k. True} \<in> Chains leq" |
356 using chain_iterates_above[OF a] fun_pow_iterates_above |
356 using chain_iterates_above[OF a] fun_pow_iterates_above |
357 by (blast intro: ChainsI dest: in_ChainsD) |
357 by (blast intro: ChainsI dest: in_ChainsD) |
358 |
358 |
359 lemma fixp_above_Kleene_iter: |
359 lemma fixp_above_Kleene_iter: |
360 assumes "\<forall>M \<in> Chains leq. finite M" (* convenient but surely not necessary *) |
360 assumes "\<forall>M \<in> Chains leq. finite M" \<comment> \<open>convenient but surely not necessary\<close> |
361 assumes "(f ^^ Suc k) a = (f ^^ k) a" |
361 assumes "(f ^^ Suc k) a = (f ^^ k) a" |
362 shows "fixp_above a = (f ^^ k) a" |
362 shows "fixp_above a = (f ^^ k) a" |
363 proof(rule leq_antisym) |
363 proof(rule leq_antisym) |
364 show "(fixp_above a, (f ^^ k) a) \<in> leq" using assms a |
364 show "(fixp_above a, (f ^^ k) a) \<in> leq" using assms a |
365 by(auto simp add: fixp_above_def chain_iterates_above Chain_finite_iterates_above_fun_pow_iff funpow_stability[OF assms(2)] intro!: lub_least intro: iterates_above.base) |
365 by(auto simp add: fixp_above_def chain_iterates_above Chain_finite_iterates_above_fun_pow_iff funpow_stability[OF assms(2)] intro!: lub_least intro: iterates_above.base) |