equal
deleted
inserted
replaced
160 using bifinite [where 'a='a] |
160 using bifinite [where 'a='a] |
161 by (fast intro!: approx_chain_u_map) |
161 by (fast intro!: approx_chain_u_map) |
162 qed |
162 qed |
163 |
163 |
164 instance u :: (profinite) bifinite |
164 instance u :: (profinite) bifinite |
165 by default (rule profinite) |
165 by standard (rule profinite) |
166 |
166 |
167 text {* |
167 text {* |
168 Types @{typ "'a \<rightarrow> 'b"} and @{typ "'a u \<rightarrow>! 'b"} are isomorphic. |
168 Types @{typ "'a \<rightarrow> 'b"} and @{typ "'a u \<rightarrow>! 'b"} are isomorphic. |
169 *} |
169 *} |
170 |
170 |
254 |
254 |
255 lemma approx_chain_unit: "approx_chain (\<bottom> :: nat \<Rightarrow> unit \<rightarrow> unit)" |
255 lemma approx_chain_unit: "approx_chain (\<bottom> :: nat \<Rightarrow> unit \<rightarrow> unit)" |
256 by (simp add: approx_chain_def cfun_eq_iff finite_deflation_bottom) |
256 by (simp add: approx_chain_def cfun_eq_iff finite_deflation_bottom) |
257 |
257 |
258 instance unit :: bifinite |
258 instance unit :: bifinite |
259 by default (fast intro!: approx_chain_unit) |
259 by standard (fast intro!: approx_chain_unit) |
260 |
260 |
261 instance discr :: (countable) profinite |
261 instance discr :: (countable) profinite |
262 by default (fast intro!: discr_approx) |
262 by standard (fast intro!: discr_approx) |
263 |
263 |
264 instance lift :: (countable) bifinite |
264 instance lift :: (countable) bifinite |
265 proof |
265 proof |
266 note [simp] = cont_Abs_lift cont_Rep_lift Rep_lift_inverse Abs_lift_inverse |
266 note [simp] = cont_Abs_lift cont_Rep_lift Rep_lift_inverse Abs_lift_inverse |
267 obtain a :: "nat \<Rightarrow> ('a discr)\<^sub>\<bottom> \<rightarrow> ('a discr)\<^sub>\<bottom>" where a: "approx_chain a" |
267 obtain a :: "nat \<Rightarrow> ('a discr)\<^sub>\<bottom> \<rightarrow> ('a discr)\<^sub>\<bottom>" where a: "approx_chain a" |