src/HOLCF/ConvexPD.thy
changeset 26407 562a1d615336
parent 26041 c2e15e65165f
child 26420 57a626f64875
equal deleted inserted replaced
26406:be5b78d95801 26407:562a1d615336
   140 
   140 
   141 
   141 
   142 subsection {* Type definition *}
   142 subsection {* Type definition *}
   143 
   143 
   144 cpodef (open) 'a convex_pd =
   144 cpodef (open) 'a convex_pd =
   145   "{S::'a::bifinite pd_basis set. convex_le.ideal S}"
   145   "{S::'a::profinite pd_basis set. convex_le.ideal S}"
   146 apply (simp add: convex_le.adm_ideal)
   146 apply (simp add: convex_le.adm_ideal)
   147 apply (fast intro: convex_le.ideal_principal)
   147 apply (fast intro: convex_le.ideal_principal)
   148 done
   148 done
   149 
   149 
   150 lemma ideal_Rep_convex_pd: "convex_le.ideal (Rep_convex_pd xs)"
   150 lemma ideal_Rep_convex_pd: "convex_le.ideal (Rep_convex_pd xs)"
   204 by (rule convex_pd_minimal [THEN UU_I, symmetric])
   204 by (rule convex_pd_minimal [THEN UU_I, symmetric])
   205 
   205 
   206 
   206 
   207 subsection {* Approximation *}
   207 subsection {* Approximation *}
   208 
   208 
   209 instance convex_pd :: (bifinite) approx ..
   209 instance convex_pd :: (profinite) approx ..
   210 
   210 
   211 defs (overloaded)
   211 defs (overloaded)
   212   approx_convex_pd_def:
   212   approx_convex_pd_def:
   213     "approx \<equiv> (\<lambda>n. convex_pd.basis_fun (\<lambda>t. convex_principal (approx_pd n t)))"
   213     "approx \<equiv> (\<lambda>n. convex_pd.basis_fun (\<lambda>t. convex_principal (approx_pd n t)))"
   214 
   214 
   243 lemma finite_fixes_approx_convex_pd:
   243 lemma finite_fixes_approx_convex_pd:
   244   "finite {xs::'a convex_pd. approx n\<cdot>xs = xs}"
   244   "finite {xs::'a convex_pd. approx n\<cdot>xs = xs}"
   245 unfolding approx_convex_pd_def
   245 unfolding approx_convex_pd_def
   246 by (rule convex_pd.finite_fixes_basis_fun_take)
   246 by (rule convex_pd.finite_fixes_basis_fun_take)
   247 
   247 
   248 instance convex_pd :: (bifinite) bifinite
   248 instance convex_pd :: (profinite) profinite
   249 apply intro_classes
   249 apply intro_classes
   250 apply (simp add: chain_approx_convex_pd)
   250 apply (simp add: chain_approx_convex_pd)
   251 apply (rule lub_approx_convex_pd)
   251 apply (rule lub_approx_convex_pd)
   252 apply (rule approx_convex_pd_idem)
   252 apply (rule approx_convex_pd_idem)
   253 apply (rule finite_fixes_approx_convex_pd)
   253 apply (rule finite_fixes_approx_convex_pd)
   254 done
   254 done
       
   255 
       
   256 instance convex_pd :: (bifinite) bifinite ..
   255 
   257 
   256 lemma compact_imp_convex_principal:
   258 lemma compact_imp_convex_principal:
   257   "compact xs \<Longrightarrow> \<exists>t. xs = convex_principal t"
   259   "compact xs \<Longrightarrow> \<exists>t. xs = convex_principal t"
   258 apply (drule bifinite_compact_eq_approx)
   260 apply (drule bifinite_compact_eq_approx)
   259 apply (erule exE)
   261 apply (erule exE)