src/HOL/Library/Bourbaki_Witt_Fixpoint.thy
changeset 67408 4a4c14b24800
parent 64911 f0e07600de47
equal deleted inserted replaced
67407:dbaa38bd223a 67408:4a4c14b24800
   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)