| author | huffman | 
| Mon, 14 Jan 2008 20:28:59 +0100 | |
| changeset 25906 | 2179c6661218 | 
| parent 25905 | 098469c6c351 | 
| child 25907 | 695a9d88d697 | 
| permissions | -rw-r--r-- | 
| 15600 | 1  | 
(* Title: HOLCF/Cprod.thy  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
2  | 
ID: $Id$  | 
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
3  | 
Author: Franz Regensburger  | 
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
4  | 
|
| 
16070
 
4a83dd540b88
removed LICENCE note -- everything is subject to Isabelle licence as
 
wenzelm 
parents: 
16057 
diff
changeset
 | 
5  | 
Partial ordering for cartesian product of HOL products.  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
6  | 
*)  | 
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
7  | 
|
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
8  | 
header {* The cpo of cartesian products *}
 | 
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
9  | 
|
| 15577 | 10  | 
theory Cprod  | 
11  | 
imports Cfun  | 
|
12  | 
begin  | 
|
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
13  | 
|
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
14  | 
defaultsort cpo  | 
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
15  | 
|
| 16008 | 16  | 
subsection {* Type @{typ unit} is a pcpo *}
 | 
17  | 
||
| 
25784
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
18  | 
instantiation unit :: sq_ord  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
19  | 
begin  | 
| 16008 | 20  | 
|
| 
25784
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
21  | 
definition  | 
| 16008 | 22  | 
less_unit_def [simp]: "x \<sqsubseteq> (y::unit) \<equiv> True"  | 
23  | 
||
| 
25784
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
24  | 
instance ..  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
25  | 
end  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
26  | 
|
| 16008 | 27  | 
instance unit :: po  | 
28  | 
by intro_classes simp_all  | 
|
29  | 
||
| 25815 | 30  | 
instance unit :: finite_po ..  | 
| 16008 | 31  | 
|
32  | 
instance unit :: pcpo  | 
|
33  | 
by intro_classes simp  | 
|
34  | 
||
| 
25131
 
2c8caac48ade
modernized specifications ('definition', 'abbreviation', 'notation');
 
wenzelm 
parents: 
18289 
diff
changeset
 | 
35  | 
definition  | 
| 
 
2c8caac48ade
modernized specifications ('definition', 'abbreviation', 'notation');
 
wenzelm 
parents: 
18289 
diff
changeset
 | 
36  | 
unit_when :: "'a \<rightarrow> unit \<rightarrow> 'a" where  | 
| 
 
2c8caac48ade
modernized specifications ('definition', 'abbreviation', 'notation');
 
wenzelm 
parents: 
18289 
diff
changeset
 | 
37  | 
"unit_when = (\<Lambda> a _. a)"  | 
| 16008 | 38  | 
|
| 18289 | 39  | 
translations  | 
| 
25131
 
2c8caac48ade
modernized specifications ('definition', 'abbreviation', 'notation');
 
wenzelm 
parents: 
18289 
diff
changeset
 | 
40  | 
"\<Lambda>(). t" == "CONST unit_when\<cdot>t"  | 
| 18289 | 41  | 
|
42  | 
lemma unit_when [simp]: "unit_when\<cdot>a\<cdot>u = a"  | 
|
43  | 
by (simp add: unit_when_def)  | 
|
44  | 
||
45  | 
||
46  | 
subsection {* Product type is a partial order *}
 | 
|
| 
15593
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
47  | 
|
| 
25784
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
48  | 
instantiation "*" :: (sq_ord, sq_ord) sq_ord  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
49  | 
begin  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
50  | 
|
| 
25784
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
51  | 
definition  | 
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
52  | 
less_cprod_def: "(op \<sqsubseteq>) \<equiv> \<lambda>p1 p2. (fst p1 \<sqsubseteq> fst p2 \<and> snd p1 \<sqsubseteq> snd p2)"  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
53  | 
|
| 
25784
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
54  | 
instance ..  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
55  | 
end  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
56  | 
|
| 
25784
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
57  | 
instance "*" :: (po, po) po  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
58  | 
proof  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
59  | 
fix x :: "'a \<times> 'b"  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
60  | 
show "x \<sqsubseteq> x"  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
61  | 
unfolding less_cprod_def by simp  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
62  | 
next  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
63  | 
fix x y :: "'a \<times> 'b"  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
64  | 
assume "x \<sqsubseteq> y" "y \<sqsubseteq> x" thus "x = y"  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
65  | 
unfolding less_cprod_def Pair_fst_snd_eq  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
66  | 
by (fast intro: antisym_less)  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
67  | 
next  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
68  | 
fix x y z :: "'a \<times> 'b"  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
69  | 
assume "x \<sqsubseteq> y" "y \<sqsubseteq> z" thus "x \<sqsubseteq> z"  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
70  | 
unfolding less_cprod_def  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
71  | 
by (fast intro: trans_less)  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
72  | 
qed  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
73  | 
|
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
74  | 
|
| 
15593
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
75  | 
subsection {* Monotonicity of @{text "(_,_)"}, @{term fst}, @{term snd} *}
 | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
76  | 
|
| 
15593
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
77  | 
text {* Pair @{text "(_,_)"}  is monotone in both arguments *}
 | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
78  | 
|
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
79  | 
lemma monofun_pair1: "monofun (\<lambda>x. (x, y))"  | 
| 
16210
 
5d1b752cacc1
changed to use new contlubI, monofun_def; renamed cfst2, csnd2 to cfst_cpair, csnd_cpair; added lemma cpair_strict
 
huffman 
parents: 
16093 
diff
changeset
 | 
80  | 
by (simp add: monofun_def less_cprod_def)  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
81  | 
|
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
82  | 
lemma monofun_pair2: "monofun (\<lambda>y. (x, y))"  | 
| 
16210
 
5d1b752cacc1
changed to use new contlubI, monofun_def; renamed cfst2, csnd2 to cfst_cpair, csnd_cpair; added lemma cpair_strict
 
huffman 
parents: 
16093 
diff
changeset
 | 
83  | 
by (simp add: monofun_def less_cprod_def)  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
84  | 
|
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
85  | 
lemma monofun_pair:  | 
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
86  | 
"\<lbrakk>x1 \<sqsubseteq> x2; y1 \<sqsubseteq> y2\<rbrakk> \<Longrightarrow> (x1, y1) \<sqsubseteq> (x2, y2)"  | 
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
87  | 
by (simp add: less_cprod_def)  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
88  | 
|
| 
15593
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
89  | 
text {* @{term fst} and @{term snd} are monotone *}
 | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
90  | 
|
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
91  | 
lemma monofun_fst: "monofun fst"  | 
| 
16210
 
5d1b752cacc1
changed to use new contlubI, monofun_def; renamed cfst2, csnd2 to cfst_cpair, csnd_cpair; added lemma cpair_strict
 
huffman 
parents: 
16093 
diff
changeset
 | 
92  | 
by (simp add: monofun_def less_cprod_def)  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
93  | 
|
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
94  | 
lemma monofun_snd: "monofun snd"  | 
| 
16210
 
5d1b752cacc1
changed to use new contlubI, monofun_def; renamed cfst2, csnd2 to cfst_cpair, csnd_cpair; added lemma cpair_strict
 
huffman 
parents: 
16093 
diff
changeset
 | 
95  | 
by (simp add: monofun_def less_cprod_def)  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
96  | 
|
| 18289 | 97  | 
subsection {* Product type is a cpo *}
 | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
98  | 
|
| 
25784
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
99  | 
lemma lub_cprod:  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
100  | 
  fixes S :: "nat \<Rightarrow> ('a::cpo \<times> 'b::cpo)"
 | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
101  | 
assumes S: "chain S"  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
102  | 
shows "range S <<| (\<Squnion>i. fst (S i), \<Squnion>i. snd (S i))"  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
103  | 
apply (rule is_lubI)  | 
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
104  | 
apply (rule ub_rangeI)  | 
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
105  | 
apply (rule_tac t = "S i" in surjective_pairing [THEN ssubst])  | 
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
106  | 
apply (rule monofun_pair)  | 
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
107  | 
apply (rule is_ub_thelub)  | 
| 
25784
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
108  | 
apply (rule ch2ch_monofun [OF monofun_fst S])  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
109  | 
apply (rule is_ub_thelub)  | 
| 
25784
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
110  | 
apply (rule ch2ch_monofun [OF monofun_snd S])  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
111  | 
apply (rule_tac t = "u" in surjective_pairing [THEN ssubst])  | 
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
112  | 
apply (rule monofun_pair)  | 
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
113  | 
apply (rule is_lub_thelub)  | 
| 
25784
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
114  | 
apply (rule ch2ch_monofun [OF monofun_fst S])  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
115  | 
apply (erule monofun_fst [THEN ub2ub_monofun])  | 
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
116  | 
apply (rule is_lub_thelub)  | 
| 
25784
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
117  | 
apply (rule ch2ch_monofun [OF monofun_snd S])  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
118  | 
apply (erule monofun_snd [THEN ub2ub_monofun])  | 
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
119  | 
done  | 
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
120  | 
|
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
121  | 
lemma thelub_cprod:  | 
| 
25784
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
122  | 
"chain (S::nat \<Rightarrow> 'a::cpo \<times> 'b::cpo)  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
123  | 
\<Longrightarrow> lub (range S) = (\<Squnion>i. fst (S i), \<Squnion>i. snd (S i))"  | 
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
124  | 
by (rule lub_cprod [THEN thelubI])  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
125  | 
|
| 
25784
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
126  | 
instance "*" :: (cpo, cpo) cpo  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
127  | 
proof  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
128  | 
  fix S :: "nat \<Rightarrow> ('a \<times> 'b)"
 | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
129  | 
assume "chain S"  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
130  | 
hence "range S <<| (\<Squnion>i. fst (S i), \<Squnion>i. snd (S i))"  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
131  | 
by (rule lub_cprod)  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
132  | 
thus "\<exists>x. range S <<| x" ..  | 
| 
 
71157f7e671e
update instance proofs for sq_ord, po; new instance proofs for dcpo
 
huffman 
parents: 
25131 
diff
changeset
 | 
133  | 
qed  | 
| 
15593
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
134  | 
|
| 
25827
 
c2adeb1bae5c
new instance proofs for classes finite_po, chfin, flat
 
huffman 
parents: 
25815 
diff
changeset
 | 
135  | 
instance "*" :: (finite_po, finite_po) finite_po ..  | 
| 
 
c2adeb1bae5c
new instance proofs for classes finite_po, chfin, flat
 
huffman 
parents: 
25815 
diff
changeset
 | 
136  | 
|
| 18289 | 137  | 
subsection {* Product type is pointed *}
 | 
| 
15593
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
138  | 
|
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
139  | 
lemma minimal_cprod: "(\<bottom>, \<bottom>) \<sqsubseteq> p"  | 
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
140  | 
by (simp add: less_cprod_def)  | 
| 
15593
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
141  | 
|
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
142  | 
lemma least_cprod: "EX x::'a::pcpo * 'b::pcpo. ALL y. x \<sqsubseteq> y"  | 
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
143  | 
apply (rule_tac x = "(\<bottom>, \<bottom>)" in exI)  | 
| 
15593
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
144  | 
apply (rule minimal_cprod [THEN allI])  | 
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
145  | 
done  | 
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
146  | 
|
| 15609 | 147  | 
instance "*" :: (pcpo, pcpo) pcpo  | 
| 
15593
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
148  | 
by intro_classes (rule least_cprod)  | 
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
149  | 
|
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
150  | 
text {* for compatibility with old HOLCF-Version *}
 | 
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
151  | 
lemma inst_cprod_pcpo: "UU = (UU,UU)"  | 
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
152  | 
by (rule minimal_cprod [THEN UU_I, symmetric])  | 
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
153  | 
|
| 
15593
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
154  | 
|
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
155  | 
subsection {* Continuity of @{text "(_,_)"}, @{term fst}, @{term snd} *}
 | 
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
156  | 
|
| 16916 | 157  | 
lemma contlub_pair1: "contlub (\<lambda>x. (x, y))"  | 
| 
16210
 
5d1b752cacc1
changed to use new contlubI, monofun_def; renamed cfst2, csnd2 to cfst_cpair, csnd_cpair; added lemma cpair_strict
 
huffman 
parents: 
16093 
diff
changeset
 | 
158  | 
apply (rule contlubI)  | 
| 
15593
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
159  | 
apply (subst thelub_cprod)  | 
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
160  | 
apply (erule monofun_pair1 [THEN ch2ch_monofun])  | 
| 
18077
 
f1f4f951ec8d
make cpair_less, cpair_defined_iff into iff rules; add lemma csplit1
 
huffman 
parents: 
17837 
diff
changeset
 | 
161  | 
apply simp  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
162  | 
done  | 
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
163  | 
|
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
164  | 
lemma contlub_pair2: "contlub (\<lambda>y. (x, y))"  | 
| 
16210
 
5d1b752cacc1
changed to use new contlubI, monofun_def; renamed cfst2, csnd2 to cfst_cpair, csnd_cpair; added lemma cpair_strict
 
huffman 
parents: 
16093 
diff
changeset
 | 
165  | 
apply (rule contlubI)  | 
| 
15593
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
166  | 
apply (subst thelub_cprod)  | 
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
167  | 
apply (erule monofun_pair2 [THEN ch2ch_monofun])  | 
| 
18077
 
f1f4f951ec8d
make cpair_less, cpair_defined_iff into iff rules; add lemma csplit1
 
huffman 
parents: 
17837 
diff
changeset
 | 
168  | 
apply simp  | 
| 
15593
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
169  | 
done  | 
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
170  | 
|
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
171  | 
lemma cont_pair1: "cont (\<lambda>x. (x, y))"  | 
| 
15593
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
172  | 
apply (rule monocontlub2cont)  | 
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
173  | 
apply (rule monofun_pair1)  | 
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
174  | 
apply (rule contlub_pair1)  | 
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
175  | 
done  | 
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
176  | 
|
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
177  | 
lemma cont_pair2: "cont (\<lambda>y. (x, y))"  | 
| 
15593
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
178  | 
apply (rule monocontlub2cont)  | 
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
179  | 
apply (rule monofun_pair2)  | 
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
180  | 
apply (rule contlub_pair2)  | 
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
181  | 
done  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
182  | 
|
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
183  | 
lemma contlub_fst: "contlub fst"  | 
| 
16210
 
5d1b752cacc1
changed to use new contlubI, monofun_def; renamed cfst2, csnd2 to cfst_cpair, csnd_cpair; added lemma cpair_strict
 
huffman 
parents: 
16093 
diff
changeset
 | 
184  | 
apply (rule contlubI)  | 
| 
 
5d1b752cacc1
changed to use new contlubI, monofun_def; renamed cfst2, csnd2 to cfst_cpair, csnd_cpair; added lemma cpair_strict
 
huffman 
parents: 
16093 
diff
changeset
 | 
185  | 
apply (simp add: thelub_cprod)  | 
| 
15593
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
186  | 
done  | 
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
187  | 
|
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
188  | 
lemma contlub_snd: "contlub snd"  | 
| 
16210
 
5d1b752cacc1
changed to use new contlubI, monofun_def; renamed cfst2, csnd2 to cfst_cpair, csnd_cpair; added lemma cpair_strict
 
huffman 
parents: 
16093 
diff
changeset
 | 
189  | 
apply (rule contlubI)  | 
| 
 
5d1b752cacc1
changed to use new contlubI, monofun_def; renamed cfst2, csnd2 to cfst_cpair, csnd_cpair; added lemma cpair_strict
 
huffman 
parents: 
16093 
diff
changeset
 | 
190  | 
apply (simp add: thelub_cprod)  | 
| 
15593
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
191  | 
done  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
192  | 
|
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
193  | 
lemma cont_fst: "cont fst"  | 
| 
15593
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
194  | 
apply (rule monocontlub2cont)  | 
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
195  | 
apply (rule monofun_fst)  | 
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
196  | 
apply (rule contlub_fst)  | 
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
197  | 
done  | 
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
198  | 
|
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
199  | 
lemma cont_snd: "cont snd"  | 
| 
15593
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
200  | 
apply (rule monocontlub2cont)  | 
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
201  | 
apply (rule monofun_snd)  | 
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
202  | 
apply (rule contlub_snd)  | 
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
203  | 
done  | 
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
204  | 
|
| 
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
205  | 
subsection {* Continuous versions of constants *}
 | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
206  | 
|
| 
25131
 
2c8caac48ade
modernized specifications ('definition', 'abbreviation', 'notation');
 
wenzelm 
parents: 
18289 
diff
changeset
 | 
207  | 
definition  | 
| 
 
2c8caac48ade
modernized specifications ('definition', 'abbreviation', 'notation');
 
wenzelm 
parents: 
18289 
diff
changeset
 | 
208  | 
  cpair :: "'a \<rightarrow> 'b \<rightarrow> ('a * 'b)"  -- {* continuous pairing *}  where
 | 
| 
 
2c8caac48ade
modernized specifications ('definition', 'abbreviation', 'notation');
 
wenzelm 
parents: 
18289 
diff
changeset
 | 
209  | 
"cpair = (\<Lambda> x y. (x, y))"  | 
| 
 
2c8caac48ade
modernized specifications ('definition', 'abbreviation', 'notation');
 
wenzelm 
parents: 
18289 
diff
changeset
 | 
210  | 
|
| 
 
2c8caac48ade
modernized specifications ('definition', 'abbreviation', 'notation');
 
wenzelm 
parents: 
18289 
diff
changeset
 | 
211  | 
definition  | 
| 
 
2c8caac48ade
modernized specifications ('definition', 'abbreviation', 'notation');
 
wenzelm 
parents: 
18289 
diff
changeset
 | 
212  | 
  cfst :: "('a * 'b) \<rightarrow> 'a" where
 | 
| 
 
2c8caac48ade
modernized specifications ('definition', 'abbreviation', 'notation');
 
wenzelm 
parents: 
18289 
diff
changeset
 | 
213  | 
"cfst = (\<Lambda> p. fst p)"  | 
| 17834 | 214  | 
|
| 
25131
 
2c8caac48ade
modernized specifications ('definition', 'abbreviation', 'notation');
 
wenzelm 
parents: 
18289 
diff
changeset
 | 
215  | 
definition  | 
| 
 
2c8caac48ade
modernized specifications ('definition', 'abbreviation', 'notation');
 
wenzelm 
parents: 
18289 
diff
changeset
 | 
216  | 
  csnd :: "('a * 'b) \<rightarrow> 'b" where
 | 
| 
 
2c8caac48ade
modernized specifications ('definition', 'abbreviation', 'notation');
 
wenzelm 
parents: 
18289 
diff
changeset
 | 
217  | 
"csnd = (\<Lambda> p. snd p)"  | 
| 17834 | 218  | 
|
| 
25131
 
2c8caac48ade
modernized specifications ('definition', 'abbreviation', 'notation');
 
wenzelm 
parents: 
18289 
diff
changeset
 | 
219  | 
definition  | 
| 
 
2c8caac48ade
modernized specifications ('definition', 'abbreviation', 'notation');
 
wenzelm 
parents: 
18289 
diff
changeset
 | 
220  | 
  csplit :: "('a \<rightarrow> 'b \<rightarrow> 'c) \<rightarrow> ('a * 'b) \<rightarrow> 'c" where
 | 
| 
 
2c8caac48ade
modernized specifications ('definition', 'abbreviation', 'notation');
 
wenzelm 
parents: 
18289 
diff
changeset
 | 
221  | 
"csplit = (\<Lambda> f p. f\<cdot>(cfst\<cdot>p)\<cdot>(csnd\<cdot>p))"  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
222  | 
|
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
223  | 
syntax  | 
| 17834 | 224  | 
  "_ctuple" :: "['a, args] \<Rightarrow> 'a * 'b"  ("(1<_,/ _>)")
 | 
225  | 
||
226  | 
syntax (xsymbols)  | 
|
227  | 
  "_ctuple" :: "['a, args] \<Rightarrow> 'a * 'b"  ("(1\<langle>_,/ _\<rangle>)")
 | 
|
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
228  | 
|
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
229  | 
translations  | 
| 
18078
 
20e5a6440790
change syntax for LAM to use expressions as patterns; define LAM pattern syntax for cpair, spair, sinl, sinr, up
 
huffman 
parents: 
18077 
diff
changeset
 | 
230  | 
"\<langle>x, y, z\<rangle>" == "\<langle>x, \<langle>y, z\<rangle>\<rangle>"  | 
| 
25131
 
2c8caac48ade
modernized specifications ('definition', 'abbreviation', 'notation');
 
wenzelm 
parents: 
18289 
diff
changeset
 | 
231  | 
"\<langle>x, y\<rangle>" == "CONST cpair\<cdot>x\<cdot>y"  | 
| 17834 | 232  | 
|
| 
17816
 
9942c5ed866a
new syntax translations for continuous lambda abstraction
 
huffman 
parents: 
16916 
diff
changeset
 | 
233  | 
translations  | 
| 
25131
 
2c8caac48ade
modernized specifications ('definition', 'abbreviation', 'notation');
 
wenzelm 
parents: 
18289 
diff
changeset
 | 
234  | 
"\<Lambda>(CONST cpair\<cdot>x\<cdot>y). t" == "CONST csplit\<cdot>(\<Lambda> x y. t)"  | 
| 
17816
 
9942c5ed866a
new syntax translations for continuous lambda abstraction
 
huffman 
parents: 
16916 
diff
changeset
 | 
235  | 
|
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
236  | 
|
| 
15593
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
237  | 
subsection {* Convert all lemmas to the continuous versions *}
 | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
238  | 
|
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
239  | 
lemma cpair_eq_pair: "<x, y> = (x, y)"  | 
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
240  | 
by (simp add: cpair_def cont_pair1 cont_pair2)  | 
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
241  | 
|
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
242  | 
lemma inject_cpair: "<a,b> = <aa,ba> \<Longrightarrow> a = aa \<and> b = ba"  | 
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
243  | 
by (simp add: cpair_eq_pair)  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
244  | 
|
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
245  | 
lemma cpair_eq [iff]: "(<a, b> = <a', b'>) = (a = a' \<and> b = b')"  | 
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
246  | 
by (simp add: cpair_eq_pair)  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
247  | 
|
| 
18077
 
f1f4f951ec8d
make cpair_less, cpair_defined_iff into iff rules; add lemma csplit1
 
huffman 
parents: 
17837 
diff
changeset
 | 
248  | 
lemma cpair_less [iff]: "(<a, b> \<sqsubseteq> <a', b'>) = (a \<sqsubseteq> a' \<and> b \<sqsubseteq> b')"  | 
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
249  | 
by (simp add: cpair_eq_pair less_cprod_def)  | 
| 
16057
 
e23a61b3406f
added lemma cpair_eq, made cfst_strict and csnd_strict into simp rules
 
huffman 
parents: 
16008 
diff
changeset
 | 
250  | 
|
| 
18077
 
f1f4f951ec8d
make cpair_less, cpair_defined_iff into iff rules; add lemma csplit1
 
huffman 
parents: 
17837 
diff
changeset
 | 
251  | 
lemma cpair_defined_iff [iff]: "(<x, y> = \<bottom>) = (x = \<bottom> \<and> y = \<bottom>)"  | 
| 16916 | 252  | 
by (simp add: inst_cprod_pcpo cpair_eq_pair)  | 
253  | 
||
| 
16210
 
5d1b752cacc1
changed to use new contlubI, monofun_def; renamed cfst2, csnd2 to cfst_cpair, csnd_cpair; added lemma cpair_strict
 
huffman 
parents: 
16093 
diff
changeset
 | 
254  | 
lemma cpair_strict: "<\<bottom>, \<bottom>> = \<bottom>"  | 
| 
18077
 
f1f4f951ec8d
make cpair_less, cpair_defined_iff into iff rules; add lemma csplit1
 
huffman 
parents: 
17837 
diff
changeset
 | 
255  | 
by simp  | 
| 
16210
 
5d1b752cacc1
changed to use new contlubI, monofun_def; renamed cfst2, csnd2 to cfst_cpair, csnd_cpair; added lemma cpair_strict
 
huffman 
parents: 
16093 
diff
changeset
 | 
256  | 
|
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
257  | 
lemma inst_cprod_pcpo2: "\<bottom> = <\<bottom>, \<bottom>>"  | 
| 16916 | 258  | 
by (rule cpair_strict [symmetric])  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
259  | 
|
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
260  | 
lemma defined_cpair_rev:  | 
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
261  | 
"<a,b> = \<bottom> \<Longrightarrow> a = \<bottom> \<and> b = \<bottom>"  | 
| 
18077
 
f1f4f951ec8d
make cpair_less, cpair_defined_iff into iff rules; add lemma csplit1
 
huffman 
parents: 
17837 
diff
changeset
 | 
262  | 
by simp  | 
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
263  | 
|
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
264  | 
lemma Exh_Cprod2: "\<exists>a b. z = <a, b>"  | 
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
265  | 
by (simp add: cpair_eq_pair)  | 
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
266  | 
|
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
267  | 
lemma cprodE: "\<lbrakk>\<And>x y. p = <x, y> \<Longrightarrow> Q\<rbrakk> \<Longrightarrow> Q"  | 
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
268  | 
by (cut_tac Exh_Cprod2, auto)  | 
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
269  | 
|
| 
16210
 
5d1b752cacc1
changed to use new contlubI, monofun_def; renamed cfst2, csnd2 to cfst_cpair, csnd_cpair; added lemma cpair_strict
 
huffman 
parents: 
16093 
diff
changeset
 | 
270  | 
lemma cfst_cpair [simp]: "cfst\<cdot><x, y> = x"  | 
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
271  | 
by (simp add: cpair_eq_pair cfst_def cont_fst)  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
272  | 
|
| 
16210
 
5d1b752cacc1
changed to use new contlubI, monofun_def; renamed cfst2, csnd2 to cfst_cpair, csnd_cpair; added lemma cpair_strict
 
huffman 
parents: 
16093 
diff
changeset
 | 
273  | 
lemma csnd_cpair [simp]: "csnd\<cdot><x, y> = y"  | 
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
274  | 
by (simp add: cpair_eq_pair csnd_def cont_snd)  | 
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
275  | 
|
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
276  | 
lemma cfst_strict [simp]: "cfst\<cdot>\<bottom> = \<bottom>"  | 
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
277  | 
by (simp add: inst_cprod_pcpo2)  | 
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
278  | 
|
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
279  | 
lemma csnd_strict [simp]: "csnd\<cdot>\<bottom> = \<bottom>"  | 
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
280  | 
by (simp add: inst_cprod_pcpo2)  | 
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
281  | 
|
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
282  | 
lemma surjective_pairing_Cprod2: "<cfst\<cdot>p, csnd\<cdot>p> = p"  | 
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
283  | 
apply (unfold cfst_def csnd_def)  | 
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
284  | 
apply (simp add: cont_fst cont_snd cpair_eq_pair)  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
285  | 
done  | 
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
286  | 
|
| 16750 | 287  | 
lemma less_cprod: "x \<sqsubseteq> y = (cfst\<cdot>x \<sqsubseteq> cfst\<cdot>y \<and> csnd\<cdot>x \<sqsubseteq> csnd\<cdot>y)"  | 
| 16315 | 288  | 
by (simp add: less_cprod_def cfst_def csnd_def cont_fst cont_snd)  | 
289  | 
||
| 16750 | 290  | 
lemma eq_cprod: "(x = y) = (cfst\<cdot>x = cfst\<cdot>y \<and> csnd\<cdot>x = csnd\<cdot>y)"  | 
291  | 
by (auto simp add: po_eq_conv less_cprod)  | 
|
292  | 
||
| 25879 | 293  | 
lemma cfst_less_iff: "cfst\<cdot>x \<sqsubseteq> y = x \<sqsubseteq> <y, csnd\<cdot>x>"  | 
294  | 
by (simp add: less_cprod)  | 
|
295  | 
||
296  | 
lemma csnd_less_iff: "csnd\<cdot>x \<sqsubseteq> y = x \<sqsubseteq> <cfst\<cdot>x, y>"  | 
|
297  | 
by (simp add: less_cprod)  | 
|
298  | 
||
299  | 
lemma compact_cfst: "compact x \<Longrightarrow> compact (cfst\<cdot>x)"  | 
|
300  | 
by (rule compactI, simp add: cfst_less_iff)  | 
|
301  | 
||
302  | 
lemma compact_csnd: "compact x \<Longrightarrow> compact (csnd\<cdot>x)"  | 
|
303  | 
by (rule compactI, simp add: csnd_less_iff)  | 
|
304  | 
||
305  | 
lemma compact_cpair: "\<lbrakk>compact x; compact y\<rbrakk> \<Longrightarrow> compact <x, y>"  | 
|
| 17837 | 306  | 
by (rule compactI, simp add: less_cprod)  | 
307  | 
||
| 25879 | 308  | 
lemma compact_cpair_iff [simp]: "compact <x, y> = (compact x \<and> compact y)"  | 
309  | 
apply (safe intro!: compact_cpair)  | 
|
310  | 
apply (drule compact_cfst, simp)  | 
|
311  | 
apply (drule compact_csnd, simp)  | 
|
312  | 
done  | 
|
313  | 
||
| 25905 | 314  | 
instance "*" :: (chfin, chfin) chfin  | 
315  | 
apply (intro_classes, clarify)  | 
|
316  | 
apply (erule compact_imp_max_in_chain)  | 
|
317  | 
apply (rule_tac p="\<Squnion>i. Y i" in cprodE, simp)  | 
|
318  | 
done  | 
|
319  | 
||
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
320  | 
lemma lub_cprod2:  | 
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
321  | 
"chain S \<Longrightarrow> range S <<| <\<Squnion>i. cfst\<cdot>(S i), \<Squnion>i. csnd\<cdot>(S i)>"  | 
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
322  | 
apply (simp add: cpair_eq_pair cfst_def csnd_def cont_fst cont_snd)  | 
| 
15593
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
323  | 
apply (erule lub_cprod)  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
324  | 
done  | 
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
325  | 
|
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
326  | 
lemma thelub_cprod2:  | 
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
327  | 
"chain S \<Longrightarrow> lub (range S) = <\<Squnion>i. cfst\<cdot>(S i), \<Squnion>i. csnd\<cdot>(S i)>"  | 
| 
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
328  | 
by (rule lub_cprod2 [THEN thelubI])  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
329  | 
|
| 
18077
 
f1f4f951ec8d
make cpair_less, cpair_defined_iff into iff rules; add lemma csplit1
 
huffman 
parents: 
17837 
diff
changeset
 | 
330  | 
lemma csplit1 [simp]: "csplit\<cdot>f\<cdot>\<bottom> = f\<cdot>\<bottom>\<cdot>\<bottom>"  | 
| 
 
f1f4f951ec8d
make cpair_less, cpair_defined_iff into iff rules; add lemma csplit1
 
huffman 
parents: 
17837 
diff
changeset
 | 
331  | 
by (simp add: csplit_def)  | 
| 
 
f1f4f951ec8d
make cpair_less, cpair_defined_iff into iff rules; add lemma csplit1
 
huffman 
parents: 
17837 
diff
changeset
 | 
332  | 
|
| 
16081
 
81a4b4a245b0
cleaned up, added cpair_less and cpair_eq_pair, removed some obsolete stuff
 
huffman 
parents: 
16070 
diff
changeset
 | 
333  | 
lemma csplit2 [simp]: "csplit\<cdot>f\<cdot><x,y> = f\<cdot>x\<cdot>y"  | 
| 
15593
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
334  | 
by (simp add: csplit_def)  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
335  | 
|
| 16553 | 336  | 
lemma csplit3 [simp]: "csplit\<cdot>cpair\<cdot>z = z"  | 
| 
15593
 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 
huffman 
parents: 
15577 
diff
changeset
 | 
337  | 
by (simp add: csplit_def surjective_pairing_Cprod2)  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
338  | 
|
| 
16210
 
5d1b752cacc1
changed to use new contlubI, monofun_def; renamed cfst2, csnd2 to cfst_cpair, csnd_cpair; added lemma cpair_strict
 
huffman 
parents: 
16093 
diff
changeset
 | 
339  | 
lemmas Cprod_rews = cfst_cpair csnd_cpair csplit2  | 
| 
15576
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
340  | 
|
| 
 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 
huffman 
parents:  
diff
changeset
 | 
341  | 
end  |