src/HOL/Library/Continuity.thy
changeset 21404 eb85850d3eb7
parent 21312 1d39091a3208
child 22367 6860f09242bf
equal deleted inserted replaced
21403:dd58f13a8eb4 21404:eb85850d3eb7
    16 "chain M == !i. M i \<le> M(Suc i)"
    16 "chain M == !i. M i \<le> M(Suc i)"
    17  continuous :: "('a::order \<Rightarrow> 'a::order) \<Rightarrow> bool"
    17  continuous :: "('a::order \<Rightarrow> 'a::order) \<Rightarrow> bool"
    18 "continuous F == !M. chain M \<longrightarrow> F(SUP i. M i) = (SUP i. F(M i))"
    18 "continuous F == !M. chain M \<longrightarrow> F(SUP i. M i) = (SUP i. F(M i))"
    19 
    19 
    20 abbreviation
    20 abbreviation
    21  bot :: "'a::order"
    21   bot :: "'a::order" where
    22 "bot == Sup {}"
    22   "bot == Sup {}"
    23 
    23 
    24 lemma SUP_nat_conv:
    24 lemma SUP_nat_conv:
    25  "(SUP n::nat. M n::'a::comp_lat) = join (M 0) (SUP n. M(Suc n))"
    25  "(SUP n::nat. M n::'a::comp_lat) = join (M 0) (SUP n. M(Suc n))"
    26 apply(rule order_antisym)
    26 apply(rule order_antisym)
    27  apply(rule SUP_leI)
    27  apply(rule SUP_leI)
    89 
    89 
    90 
    90 
    91 subsection "Chains"
    91 subsection "Chains"
    92 
    92 
    93 definition
    93 definition
    94   up_chain :: "(nat => 'a set) => bool"
    94   up_chain :: "(nat => 'a set) => bool" where
    95   "up_chain F = (\<forall>i. F i \<subseteq> F (Suc i))"
    95   "up_chain F = (\<forall>i. F i \<subseteq> F (Suc i))"
    96 
    96 
    97 lemma up_chainI: "(!!i. F i \<subseteq> F (Suc i)) ==> up_chain F"
    97 lemma up_chainI: "(!!i. F i \<subseteq> F (Suc i)) ==> up_chain F"
    98   by (simp add: up_chain_def)
    98   by (simp add: up_chain_def)
    99 
    99 
   111   apply (blast dest: up_chain_less_mono)
   111   apply (blast dest: up_chain_less_mono)
   112   done
   112   done
   113 
   113 
   114 
   114 
   115 definition
   115 definition
   116   down_chain :: "(nat => 'a set) => bool"
   116   down_chain :: "(nat => 'a set) => bool" where
   117   "down_chain F = (\<forall>i. F (Suc i) \<subseteq> F i)"
   117   "down_chain F = (\<forall>i. F (Suc i) \<subseteq> F i)"
   118 
   118 
   119 lemma down_chainI: "(!!i. F (Suc i) \<subseteq> F i) ==> down_chain F"
   119 lemma down_chainI: "(!!i. F (Suc i) \<subseteq> F i) ==> down_chain F"
   120   by (simp add: down_chain_def)
   120   by (simp add: down_chain_def)
   121 
   121 
   135 
   135 
   136 
   136 
   137 subsection "Continuity"
   137 subsection "Continuity"
   138 
   138 
   139 definition
   139 definition
   140   up_cont :: "('a set => 'a set) => bool"
   140   up_cont :: "('a set => 'a set) => bool" where
   141   "up_cont f = (\<forall>F. up_chain F --> f (\<Union>(range F)) = \<Union>(f ` range F))"
   141   "up_cont f = (\<forall>F. up_chain F --> f (\<Union>(range F)) = \<Union>(f ` range F))"
   142 
   142 
   143 lemma up_contI:
   143 lemma up_contI:
   144     "(!!F. up_chain F ==> f (\<Union>(range F)) = \<Union>(f ` range F)) ==> up_cont f"
   144     "(!!F. up_chain F ==> f (\<Union>(range F)) = \<Union>(f ` range F)) ==> up_cont f"
   145   apply (unfold up_cont_def)
   145   apply (unfold up_cont_def)
   162   apply (auto simp add: nat_not_singleton)
   162   apply (auto simp add: nat_not_singleton)
   163   done
   163   done
   164 
   164 
   165 
   165 
   166 definition
   166 definition
   167   down_cont :: "('a set => 'a set) => bool"
   167   down_cont :: "('a set => 'a set) => bool" where
   168   "down_cont f =
   168   "down_cont f =
   169     (\<forall>F. down_chain F --> f (Inter (range F)) = Inter (f ` range F))"
   169     (\<forall>F. down_chain F --> f (Inter (range F)) = Inter (f ` range F))"
   170 
   170 
   171 lemma down_contI:
   171 lemma down_contI:
   172   "(!!F. down_chain F ==> f (Inter (range F)) = Inter (f ` range F)) ==>
   172   "(!!F. down_chain F ==> f (Inter (range F)) = Inter (f ` range F)) ==>
   192 
   192 
   193 
   193 
   194 subsection "Iteration"
   194 subsection "Iteration"
   195 
   195 
   196 definition
   196 definition
   197   up_iterate :: "('a set => 'a set) => nat => 'a set"
   197   up_iterate :: "('a set => 'a set) => nat => 'a set" where
   198   "up_iterate f n = (f^n) {}"
   198   "up_iterate f n = (f^n) {}"
   199 
   199 
   200 lemma up_iterate_0 [simp]: "up_iterate f 0 = {}"
   200 lemma up_iterate_0 [simp]: "up_iterate f 0 = {}"
   201   by (simp add: up_iterate_def)
   201   by (simp add: up_iterate_def)
   202 
   202 
   244   apply (erule UNION_up_iterate_is_fp [symmetric])
   244   apply (erule UNION_up_iterate_is_fp [symmetric])
   245   done
   245   done
   246 
   246 
   247 
   247 
   248 definition
   248 definition
   249   down_iterate :: "('a set => 'a set) => nat => 'a set"
   249   down_iterate :: "('a set => 'a set) => nat => 'a set" where
   250   "down_iterate f n = (f^n) UNIV"
   250   "down_iterate f n = (f^n) UNIV"
   251 
   251 
   252 lemma down_iterate_0 [simp]: "down_iterate f 0 = UNIV"
   252 lemma down_iterate_0 [simp]: "down_iterate f 0 = UNIV"
   253   by (simp add: down_iterate_def)
   253   by (simp add: down_iterate_def)
   254 
   254