| author | wenzelm | 
| Wed, 22 Jun 2005 19:41:29 +0200 | |
| changeset 16541 | d539d47cce69 | 
| parent 16326 | 50a613925c4e | 
| child 16553 | aa36d41e4263 | 
| permissions | -rw-r--r-- | 
| 15599 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 1 | (* Title: HOLCF/Up.thy | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 2 | ID: $Id$ | 
| 16070 
4a83dd540b88
removed LICENCE note -- everything is subject to Isabelle licence as
 wenzelm parents: 
15599diff
changeset | 3 | Author: Franz Regensburger and Brian Huffman | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 4 | |
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 5 | Lifting. | 
| 
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 type of lifted values *}
 | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 9 | |
| 15577 | 10 | theory Up | 
| 11 | imports Cfun Sum_Type Datatype | |
| 12 | begin | |
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 13 | |
| 15599 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 14 | defaultsort cpo | 
| 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 15 | |
| 15593 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 16 | subsection {* Definition of new type for lifting *}
 | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 17 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 18 | typedef (Up) 'a u = "UNIV :: 'a option set" .. | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 19 | |
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 20 | consts | 
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 21 | Iup :: "'a \<Rightarrow> 'a u" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 22 |   Ifup        :: "('a \<rightarrow> 'b::pcpo) \<Rightarrow> 'a u \<Rightarrow> 'b"
 | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 23 | |
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 24 | defs | 
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 25 | Iup_def: "Iup x \<equiv> Abs_Up (Some x)" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 26 | Ifup_def: "Ifup f x \<equiv> case Rep_Up x of None \<Rightarrow> \<bottom> | Some z \<Rightarrow> f\<cdot>z" | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 27 | |
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 28 | lemma Abs_Up_inverse2: "Rep_Up (Abs_Up y) = y" | 
| 15593 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 29 | by (simp add: Up_def Abs_Up_inverse) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 30 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 31 | lemma Exh_Up: "z = Abs_Up None \<or> (\<exists>x. z = Iup x)" | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 32 | apply (unfold Iup_def) | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 33 | apply (rule Rep_Up_inverse [THEN subst]) | 
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 34 | apply (case_tac "Rep_Up z") | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 35 | apply auto | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 36 | done | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 37 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 38 | lemma inj_Abs_Up: "inj Abs_Up" (* worthless *) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 39 | apply (rule inj_on_inverseI) | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 40 | apply (rule Abs_Up_inverse2) | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 41 | done | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 42 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 43 | lemma inj_Rep_Up: "inj Rep_Up" (* worthless *) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 44 | apply (rule inj_on_inverseI) | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 45 | apply (rule Rep_Up_inverse) | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 46 | done | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 47 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 48 | lemma Iup_eq [simp]: "(Iup x = Iup y) = (x = y)" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 49 | by (simp add: Iup_def Abs_Up_inject Up_def) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 50 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 51 | lemma Iup_defined [simp]: "Iup x \<noteq> Abs_Up None" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 52 | by (simp add: Iup_def Abs_Up_inject Up_def) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 53 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 54 | lemma upE: "\<lbrakk>p = Abs_Up None \<Longrightarrow> Q; \<And>x. p = Iup x \<Longrightarrow> Q\<rbrakk> \<Longrightarrow> Q" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 55 | by (rule Exh_Up [THEN disjE], auto) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 56 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 57 | lemma Ifup1 [simp]: "Ifup f (Abs_Up None) = \<bottom>" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 58 | by (simp add: Ifup_def Abs_Up_inverse2) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 59 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 60 | lemma Ifup2 [simp]: "Ifup f (Iup x) = f\<cdot>x" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 61 | by (simp add: Ifup_def Iup_def Abs_Up_inverse2) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 62 | |
| 15593 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 63 | subsection {* Ordering on type @{typ "'a u"} *}
 | 
| 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 64 | |
| 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 65 | instance u :: (sq_ord) sq_ord .. | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 66 | |
| 15593 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 67 | defs (overloaded) | 
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 68 | less_up_def: "(op \<sqsubseteq>) \<equiv> (\<lambda>x1 x2. case Rep_Up x1 of | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 69 | None \<Rightarrow> True | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 70 | | Some y1 \<Rightarrow> (case Rep_Up x2 of None \<Rightarrow> False | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 71 | | Some y2 \<Rightarrow> y1 \<sqsubseteq> y2))" | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 72 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 73 | lemma minimal_up [iff]: "Abs_Up None \<sqsubseteq> z" | 
| 15593 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 74 | by (simp add: less_up_def Abs_Up_inverse2) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 75 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 76 | lemma not_Iup_less [iff]: "\<not> Iup x \<sqsubseteq> Abs_Up None" | 
| 15593 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 77 | by (simp add: Iup_def less_up_def Abs_Up_inverse2) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 78 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 79 | lemma Iup_less [iff]: "(Iup x \<sqsubseteq> Iup y) = (x \<sqsubseteq> y)" | 
| 15593 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 80 | by (simp add: Iup_def less_up_def Abs_Up_inverse2) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 81 | |
| 15593 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 82 | subsection {* Type @{typ "'a u"} is a partial order *}
 | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 83 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 84 | lemma refl_less_up: "(p::'a u) \<sqsubseteq> p" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 85 | by (rule_tac p = "p" in upE, auto) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 86 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 87 | lemma antisym_less_up: "\<lbrakk>(p1::'a u) \<sqsubseteq> p2; p2 \<sqsubseteq> p1\<rbrakk> \<Longrightarrow> p1 = p2" | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 88 | apply (rule_tac p = "p1" in upE) | 
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 89 | apply (rule_tac p = "p2" in upE) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 90 | apply simp | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 91 | apply simp | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 92 | apply (rule_tac p = "p2" in upE) | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 93 | apply simp | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 94 | apply simp | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 95 | apply (drule antisym_less, assumption) | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 96 | apply simp | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 97 | done | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 98 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 99 | lemma trans_less_up: "\<lbrakk>(p1::'a u) \<sqsubseteq> p2; p2 \<sqsubseteq> p3\<rbrakk> \<Longrightarrow> p1 \<sqsubseteq> p3" | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 100 | apply (rule_tac p = "p1" in upE) | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 101 | apply simp | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 102 | apply (rule_tac p = "p2" in upE) | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 103 | apply simp | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 104 | apply (rule_tac p = "p3" in upE) | 
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 105 | apply simp | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 106 | apply (auto elim: trans_less) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 107 | done | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 108 | |
| 15599 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 109 | instance u :: (cpo) po | 
| 15593 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 110 | by intro_classes | 
| 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 111 | (assumption | rule refl_less_up antisym_less_up trans_less_up)+ | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 112 | |
| 15593 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 113 | subsection {* Type @{typ "'a u"} is a cpo *}
 | 
| 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 114 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 115 | lemma is_lub_Iup: | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 116 | "range S <<| x \<Longrightarrow> range (\<lambda>i. Iup (S i)) <<| Iup x" | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 117 | apply (rule is_lubI) | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 118 | apply (rule ub_rangeI) | 
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 119 | apply (subst Iup_less) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 120 | apply (erule is_ub_lub) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 121 | apply (rule_tac p="u" in upE) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 122 | apply (drule ub_rangeD) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 123 | apply simp | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 124 | apply simp | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 125 | apply (erule is_lub_lub) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 126 | apply (rule ub_rangeI) | 
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 127 | apply (drule_tac i=i in ub_rangeD) | 
| 15593 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 128 | apply simp | 
| 15599 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 129 | done | 
| 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 130 | |
| 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 131 | text {* Now some lemmas about chains of @{typ "'a u"} elements *}
 | 
| 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 132 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 133 | lemma up_lemma1: "z \<noteq> Abs_Up None \<Longrightarrow> Iup (THE a. Iup a = z) = z" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 134 | by (rule_tac p="z" in upE, simp_all) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 135 | |
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 136 | lemma up_lemma2: | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 137 | "\<lbrakk>chain Y; Y j \<noteq> Abs_Up None\<rbrakk> \<Longrightarrow> Y (i + j) \<noteq> Abs_Up None" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 138 | apply (erule contrapos_nn) | 
| 15599 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 139 | apply (drule_tac x="j" and y="i + j" in chain_mono3) | 
| 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 140 | apply (rule le_add2) | 
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 141 | apply (rule_tac p="Y j" in upE) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 142 | apply assumption | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 143 | apply simp | 
| 15599 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 144 | done | 
| 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 145 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 146 | lemma up_lemma3: | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 147 | "\<lbrakk>chain Y; Y j \<noteq> Abs_Up None\<rbrakk> \<Longrightarrow> Iup (THE a. Iup a = Y (i + j)) = Y (i + j)" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 148 | by (rule up_lemma1 [OF up_lemma2]) | 
| 15599 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 149 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 150 | lemma up_lemma4: | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 151 | "\<lbrakk>chain Y; Y j \<noteq> Abs_Up None\<rbrakk> \<Longrightarrow> chain (\<lambda>i. THE a. Iup a = Y (i + j))" | 
| 15599 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 152 | apply (rule chainI) | 
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 153 | apply (rule Iup_less [THEN iffD1]) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 154 | apply (subst up_lemma3, assumption+)+ | 
| 15599 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 155 | apply (simp add: chainE) | 
| 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 156 | done | 
| 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 157 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 158 | lemma up_lemma5: | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 159 | "\<lbrakk>chain Y; Y j \<noteq> Abs_Up None\<rbrakk> \<Longrightarrow> | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 160 | (\<lambda>i. Y (i + j)) = (\<lambda>i. Iup (THE a. Iup a = Y (i + j)))" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 161 | by (rule ext, rule up_lemma3 [symmetric]) | 
| 15599 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 162 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 163 | lemma up_lemma6: | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 164 | "\<lbrakk>chain Y; Y j \<noteq> Abs_Up None\<rbrakk> | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 165 | \<Longrightarrow> range Y <<| Iup (\<Squnion>i. THE a. Iup a = Y(i + j))" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 166 | apply (rule_tac j1="j" in is_lub_range_shift [THEN iffD1]) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 167 | apply assumption | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 168 | apply (subst up_lemma5, assumption+) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 169 | apply (rule is_lub_Iup) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 170 | apply (rule thelubE [OF _ refl]) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 171 | apply (rule up_lemma4, assumption+) | 
| 15599 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 172 | done | 
| 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 173 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 174 | lemma up_chain_cases: | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 175 | "chain Y \<Longrightarrow> | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 176 | (\<exists>A. chain A \<and> lub (range Y) = Iup (lub (range A)) \<and> | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 177 | (\<exists>j. \<forall>i. Y (i + j) = Iup (A i))) \<or> (Y = (\<lambda>i. Abs_Up None))" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 178 | apply (rule disjCI) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 179 | apply (simp add: expand_fun_eq) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 180 | apply (erule exE, rename_tac j) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 181 | apply (rule_tac x="\<lambda>i. THE a. Iup a = Y (i + j)" in exI) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 182 | apply (rule conjI) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 183 | apply (simp add: up_lemma4) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 184 | apply (rule conjI) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 185 | apply (simp add: up_lemma6 [THEN thelubI]) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 186 | apply (rule_tac x=j in exI) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 187 | apply (simp add: up_lemma3) | 
| 15599 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 188 | done | 
| 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 189 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 190 | lemma cpo_up: "chain (Y::nat \<Rightarrow> 'a u) \<Longrightarrow> \<exists>x. range Y <<| x" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 191 | apply (frule up_chain_cases, safe) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 192 | apply (rule_tac x="Iup (lub (range A))" in exI) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 193 | apply (erule_tac j1="j" in is_lub_range_shift [THEN iffD1]) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 194 | apply (simp add: is_lub_Iup thelubE) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 195 | apply (rule_tac x="Abs_Up None" in exI) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 196 | apply (rule lub_const) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 197 | done | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 198 | |
| 15599 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 199 | instance u :: (cpo) cpo | 
| 15593 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 200 | by intro_classes (rule cpo_up) | 
| 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 201 | |
| 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 202 | subsection {* Type @{typ "'a u"} is pointed *}
 | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 203 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 204 | lemma least_up: "EX x::'a u. ALL y. x\<sqsubseteq>y" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 205 | apply (rule_tac x = "Abs_Up None" in exI) | 
| 15593 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 206 | apply (rule minimal_up [THEN allI]) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 207 | done | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 208 | |
| 15599 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 209 | instance u :: (cpo) pcpo | 
| 15593 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 210 | by intro_classes (rule least_up) | 
| 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 211 | |
| 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 212 | text {* for compatibility with old HOLCF-Version *}
 | 
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 213 | lemma inst_up_pcpo: "\<bottom> = Abs_Up None" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 214 | by (rule minimal_up [THEN UU_I, symmetric]) | 
| 15593 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 215 | |
| 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 216 | text {* some lemmas restated for class pcpo *}
 | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 217 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 218 | lemma less_up3b: "~ Iup(x) \<sqsubseteq> \<bottom>" | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 219 | apply (subst inst_up_pcpo) | 
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 220 | apply simp | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 221 | done | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 222 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 223 | lemma defined_Iup2 [iff]: "Iup(x) ~= \<bottom>" | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 224 | apply (subst inst_up_pcpo) | 
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 225 | apply (rule Iup_defined) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 226 | done | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 227 | |
| 15593 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 228 | subsection {* Continuity of @{term Iup} and @{term Ifup} *}
 | 
| 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 229 | |
| 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 230 | text {* continuity for @{term Iup} *}
 | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 231 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 232 | lemma cont_Iup: "cont Iup" | 
| 16215 | 233 | apply (rule contI) | 
| 15599 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 234 | apply (rule is_lub_Iup) | 
| 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 235 | apply (erule thelubE [OF _ refl]) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 236 | done | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 237 | |
| 15593 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 238 | text {* continuity for @{term Ifup} *}
 | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 239 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 240 | lemma cont_Ifup1: "cont (\<lambda>f. Ifup f x)" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 241 | apply (rule contI) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 242 | apply (rule_tac p="x" in upE) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 243 | apply (simp add: lub_const) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 244 | apply (simp add: cont_cfun_fun) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 245 | done | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 246 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 247 | lemma monofun_Ifup2: "monofun (\<lambda>x. Ifup f x)" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 248 | apply (rule monofunI) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 249 | apply (rule_tac p="x" in upE) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 250 | apply simp | 
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 251 | apply (rule_tac p="y" in upE) | 
| 15599 
10cedbd5289e
instance u :: (cpo) pcpo -- argument type no longer needs to be pointed
 huffman parents: 
15593diff
changeset | 252 | apply simp | 
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 253 | apply (simp add: monofun_cfun_arg) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 254 | done | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 255 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 256 | lemma cont_Ifup2: "cont (\<lambda>x. Ifup f x)" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 257 | apply (rule contI) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 258 | apply (frule up_chain_cases, safe) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 259 | apply (rule_tac j1="j" in is_lub_range_shift [THEN iffD1]) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 260 | apply (erule monofun_Ifup2 [THEN ch2ch_monofun]) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 261 | apply (simp add: cont_cfun_arg) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 262 | apply (simp add: thelub_const lub_const) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 263 | done | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 264 | |
| 15593 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 265 | subsection {* Continuous versions of constants *}
 | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 266 | |
| 15593 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 267 | constdefs | 
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 268 | up :: "'a \<rightarrow> 'a u" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 269 | "up \<equiv> \<Lambda> x. Iup x" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 270 | |
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 271 |   fup :: "('a \<rightarrow> 'b::pcpo) \<rightarrow> 'a u \<rightarrow> 'b"
 | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 272 | "fup \<equiv> \<Lambda> f p. Ifup f p" | 
| 15593 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 273 | |
| 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 274 | translations | 
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 275 | "case l of up\<cdot>x => t1" == "fup\<cdot>(LAM x. t1)\<cdot>l" | 
| 15593 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 276 | |
| 
24d770bbc44a
reordered and arranged for document generation, cleaned up some proofs
 huffman parents: 
15577diff
changeset | 277 | text {* continuous versions of lemmas for @{typ "('a)u"} *}
 | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 278 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 279 | lemma Exh_Up1: "z = \<bottom> \<or> (\<exists>x. z = up\<cdot>x)" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 280 | apply (rule_tac p="z" in upE) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 281 | apply (simp add: inst_up_pcpo) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 282 | apply (simp add: up_def cont_Iup) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 283 | done | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 284 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 285 | lemma up_inject: "up\<cdot>x = up\<cdot>y \<Longrightarrow> x = y" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 286 | by (simp add: up_def cont_Iup) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 287 | |
| 16326 | 288 | lemma up_eq [simp]: "(up\<cdot>x = up\<cdot>y) = (x = y)" | 
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 289 | by (rule iffI, erule up_inject, simp) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 290 | |
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 291 | lemma up_defined [simp]: " up\<cdot>x \<noteq> \<bottom>" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 292 | by (simp add: up_def cont_Iup inst_up_pcpo) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 293 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 294 | lemma not_up_less_UU [simp]: "\<not> up\<cdot>x \<sqsubseteq> \<bottom>" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 295 | by (simp add: eq_UU_iff [symmetric]) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 296 | |
| 16326 | 297 | lemma up_less [simp]: "(up\<cdot>x \<sqsubseteq> up\<cdot>y) = (x \<sqsubseteq> y)" | 
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 298 | by (simp add: up_def cont_Iup) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 299 | |
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 300 | lemma upE1: "\<lbrakk>p = \<bottom> \<Longrightarrow> Q; \<And>x. p = up\<cdot>x \<Longrightarrow> Q\<rbrakk> \<Longrightarrow> Q" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 301 | apply (rule_tac p="p" in upE) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 302 | apply (simp add: inst_up_pcpo) | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 303 | apply (simp add: up_def cont_Iup) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 304 | done | 
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 305 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 306 | lemma fup1 [simp]: "fup\<cdot>f\<cdot>\<bottom> = \<bottom>" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 307 | by (simp add: fup_def cont_Ifup1 cont_Ifup2 inst_up_pcpo) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 308 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 309 | lemma fup2 [simp]: "fup\<cdot>f\<cdot>(up\<cdot>x) = f\<cdot>x" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 310 | by (simp add: up_def fup_def cont_Iup cont_Ifup1 cont_Ifup2 ) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 311 | |
| 16319 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 312 | lemma fup3: "fup\<cdot>up\<cdot>x = x" | 
| 
1ff2965cc2e7
major cleanup: rewrote cpo proofs, removed obsolete lemmas, renamed some lemmas
 huffman parents: 
16215diff
changeset | 313 | by (rule_tac p=x in upE1, simp_all) | 
| 15576 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 314 | |
| 
efb95d0d01f7
converted to new-style theories, and combined numbered files
 huffman parents: diff
changeset | 315 | end |