equal
deleted
inserted
replaced
8 imports Cont |
8 imports Cont |
9 begin |
9 begin |
10 |
10 |
11 datatype 'a discr = Discr "'a :: type" |
11 datatype 'a discr = Discr "'a :: type" |
12 |
12 |
13 subsection {* Discrete ordering *} |
13 subsection {* Discrete cpo class instance *} |
14 |
14 |
15 instantiation discr :: (type) below |
15 instantiation discr :: (type) discrete_cpo |
16 begin |
16 begin |
17 |
17 |
18 definition |
18 definition |
19 below_discr_def: |
19 "(op \<sqsubseteq> :: 'a discr \<Rightarrow> 'a discr \<Rightarrow> bool) = (op =)" |
20 "(op \<sqsubseteq> :: 'a discr \<Rightarrow> 'a discr \<Rightarrow> bool) = (op =)" |
|
21 |
20 |
22 instance .. |
21 instance |
|
22 by default (simp add: below_discr_def) |
|
23 |
23 end |
24 end |
24 |
|
25 subsection {* Discrete cpo class instance *} |
|
26 |
|
27 instance discr :: (type) discrete_cpo |
|
28 by intro_classes (simp add: below_discr_def) |
|
29 |
|
30 lemma discr_below_eq [iff]: "((x::('a::type)discr) << y) = (x = y)" |
|
31 by simp (* FIXME: same discrete_cpo - remove? is [iff] important? *) |
|
32 |
|
33 lemma discr_chain0: |
|
34 "!!S::nat=>('a::type)discr. chain S ==> S i = S 0" |
|
35 apply (unfold chain_def) |
|
36 apply (induct_tac "i") |
|
37 apply (rule refl) |
|
38 apply (erule subst) |
|
39 apply (rule sym) |
|
40 apply fast |
|
41 done |
|
42 |
|
43 lemma discr_chain_range0 [simp]: |
|
44 "!!S::nat=>('a::type)discr. chain(S) ==> range(S) = {S 0}" |
|
45 by (fast elim: discr_chain0) |
|
46 |
25 |
47 subsection {* \emph{undiscr} *} |
26 subsection {* \emph{undiscr} *} |
48 |
27 |
49 definition |
28 definition |
50 undiscr :: "('a::type)discr => 'a" where |
29 undiscr :: "('a::type)discr => 'a" where |
54 by (simp add: undiscr_def) |
33 by (simp add: undiscr_def) |
55 |
34 |
56 lemma Discr_undiscr [simp]: "Discr (undiscr y) = y" |
35 lemma Discr_undiscr [simp]: "Discr (undiscr y) = y" |
57 by (induct y) simp |
36 by (induct y) simp |
58 |
37 |
59 lemma discr_chain_f_range0: |
|
60 "!!S::nat=>('a::type)discr. chain(S) ==> range(%i. f(S i)) = {f(S 0)}" |
|
61 by (fast dest: discr_chain0 elim: arg_cong) |
|
62 |
|
63 lemma cont_discr [iff]: "cont (%x::('a::type)discr. f x)" |
|
64 by (rule cont_discrete_cpo) |
|
65 |
|
66 end |
38 end |