comparison Ordinals.agda @ 334:ba3ebb9a16c6 release

HOD
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 05 Jul 2020 16:59:13 +0900
parents 0faa7120e4b5
children bca043423554
comparison
equal deleted inserted replaced
289:9f926b2210bc 334:ba3ebb9a16c6
11 open import Data.Unit using ( ⊤ ) 11 open import Data.Unit using ( ⊤ )
12 open import Relation.Nullary 12 open import Relation.Nullary
13 open import Relation.Binary 13 open import Relation.Binary
14 open import Relation.Binary.Core 14 open import Relation.Binary.Core
15 15
16 record IsOrdinals {n : Level} (ord : Set n) (o∅ : ord ) (osuc : ord → ord ) (_o<_ : ord → ord → Set n) : Set (suc (suc n)) where 16 record IsOrdinals {n : Level} (ord : Set n) (o∅ : ord ) (osuc : ord → ord ) (_o<_ : ord → ord → Set n) (next : ord → ord ) : Set (suc (suc n)) where
17 field 17 field
18 Otrans : {x y z : ord } → x o< y → y o< z → x o< z 18 Otrans : {x y z : ord } → x o< y → y o< z → x o< z
19 OTri : Trichotomous {n} _≡_ _o<_ 19 OTri : Trichotomous {n} _≡_ _o<_
20 ¬x<0 : { x : ord } → ¬ ( x o< o∅ ) 20 ¬x<0 : { x : ord } → ¬ ( x o< o∅ )
21 <-osuc : { x : ord } → x o< osuc x 21 <-osuc : { x : ord } → x o< osuc x
22 osuc-≡< : { a x : ord } → x o< osuc a → (x ≡ a ) ∨ (x o< a) 22 osuc-≡< : { a x : ord } → x o< osuc a → (x ≡ a ) ∨ (x o< a)
23 TransFinite : { ψ : ord → Set (suc n) } 23 not-limit : ( x : ord ) → Dec ( ¬ ((y : ord) → ¬ (x ≡ osuc y) ))
24 next-limit : { y : ord } → (y o< next y ) ∧ ((x : ord) → x o< next y → osuc x o< next y )
25 TransFinite : { ψ : ord → Set n }
26 → ( (x : ord) → ( (y : ord ) → y o< x → ψ y ) → ψ x )
27 → ∀ (x : ord) → ψ x
28 TransFinite1 : { ψ : ord → Set (suc n) }
24 → ( (x : ord) → ( (y : ord ) → y o< x → ψ y ) → ψ x ) 29 → ( (x : ord) → ( (y : ord ) → y o< x → ψ y ) → ψ x )
25 → ∀ (x : ord) → ψ x 30 → ∀ (x : ord) → ψ x
26 31
27 32
28 record Ordinals {n : Level} : Set (suc (suc n)) where 33 record Ordinals {n : Level} : Set (suc (suc n)) where
29 field 34 field
30 ord : Set n 35 ord : Set n
31 o∅ : ord 36 o∅ : ord
32 osuc : ord → ord 37 osuc : ord → ord
33 _o<_ : ord → ord → Set n 38 _o<_ : ord → ord → Set n
34 isOrdinal : IsOrdinals ord o∅ osuc _o<_ 39 next : ord → ord
40 isOrdinal : IsOrdinals ord o∅ osuc _o<_ next
35 41
36 module inOrdinal {n : Level} (O : Ordinals {n} ) where 42 module inOrdinal {n : Level} (O : Ordinals {n} ) where
37 43
38 Ordinal : Set n 44 Ordinal : Set n
39 Ordinal = Ordinals.ord O 45 Ordinal = Ordinals.ord O
44 osuc : Ordinal → Ordinal 50 osuc : Ordinal → Ordinal
45 osuc = Ordinals.osuc O 51 osuc = Ordinals.osuc O
46 52
47 o∅ : Ordinal 53 o∅ : Ordinal
48 o∅ = Ordinals.o∅ O 54 o∅ = Ordinals.o∅ O
55
56 next : Ordinal → Ordinal
57 next = Ordinals.next O
49 58
50 ¬x<0 = IsOrdinals.¬x<0 (Ordinals.isOrdinal O) 59 ¬x<0 = IsOrdinals.¬x<0 (Ordinals.isOrdinal O)
51 osuc-≡< = IsOrdinals.osuc-≡< (Ordinals.isOrdinal O) 60 osuc-≡< = IsOrdinals.osuc-≡< (Ordinals.isOrdinal O)
52 <-osuc = IsOrdinals.<-osuc (Ordinals.isOrdinal O) 61 <-osuc = IsOrdinals.<-osuc (Ordinals.isOrdinal O)
53 TransFinite = IsOrdinals.TransFinite (Ordinals.isOrdinal O) 62 TransFinite = IsOrdinals.TransFinite (Ordinals.isOrdinal O)
54 63 TransFinite1 = IsOrdinals.TransFinite1 (Ordinals.isOrdinal O)
64 next-limit = IsOrdinals.next-limit (Ordinals.isOrdinal O)
65
55 o<-dom : { x y : Ordinal } → x o< y → Ordinal 66 o<-dom : { x y : Ordinal } → x o< y → Ordinal
56 o<-dom {x} _ = x 67 o<-dom {x} _ = x
57 68
58 o<-cod : { x y : Ordinal } → x o< y → Ordinal 69 o<-cod : { x y : Ordinal } → x o< y → Ordinal
59 o<-cod {_} {y} _ = y 70 o<-cod {_} {y} _ = y
102 proj1 (osuc2 x y) ox<ooy with osuc-≡< ox<ooy 113 proj1 (osuc2 x y) ox<ooy with osuc-≡< ox<ooy
103 proj1 (osuc2 x y) ox<ooy | case1 ox=oy = o<-subst <-osuc refl ox=oy 114 proj1 (osuc2 x y) ox<ooy | case1 ox=oy = o<-subst <-osuc refl ox=oy
104 proj1 (osuc2 x y) ox<ooy | case2 ox<oy = ordtrans <-osuc ox<oy 115 proj1 (osuc2 x y) ox<ooy | case2 ox<oy = ordtrans <-osuc ox<oy
105 116
106 _o≤_ : Ordinal → Ordinal → Set n 117 _o≤_ : Ordinal → Ordinal → Set n
107 a o≤ b = (a ≡ b) ∨ ( a o< b ) 118 a o≤ b = a o< osuc b -- (a ≡ b) ∨ ( a o< b )
108 119
109 120
110 xo<ab : {oa ob : Ordinal } → ( {ox : Ordinal } → ox o< oa → ox o< ob ) → oa o< osuc ob 121 xo<ab : {oa ob : Ordinal } → ( {ox : Ordinal } → ox o< oa → ox o< ob ) → oa o< osuc ob
111 xo<ab {oa} {ob} a→b with trio< oa ob 122 xo<ab {oa} {ob} a→b with trio< oa ob
112 xo<ab {oa} {ob} a→b | tri< a ¬b ¬c = ordtrans a <-osuc 123 xo<ab {oa} {ob} a→b | tri< a ¬b ¬c = ordtrans a <-osuc
117 maxα x y with trio< x y 128 maxα x y with trio< x y
118 maxα x y | tri< a ¬b ¬c = y 129 maxα x y | tri< a ¬b ¬c = y
119 maxα x y | tri> ¬a ¬b c = x 130 maxα x y | tri> ¬a ¬b c = x
120 maxα x y | tri≈ ¬a refl ¬c = x 131 maxα x y | tri≈ ¬a refl ¬c = x
121 132
122 minα : Ordinal → Ordinal → Ordinal 133 omin : Ordinal → Ordinal → Ordinal
123 minα x y with trio< x y 134 omin x y with trio< x y
124 minα x y | tri< a ¬b ¬c = x 135 omin x y | tri< a ¬b ¬c = x
125 minα x y | tri> ¬a ¬b c = y 136 omin x y | tri> ¬a ¬b c = y
126 minα x y | tri≈ ¬a refl ¬c = x 137 omin x y | tri≈ ¬a refl ¬c = x
127 138
128 min1 : {x y z : Ordinal } → z o< x → z o< y → z o< minα x y 139 min1 : {x y z : Ordinal } → z o< x → z o< y → z o< omin x y
129 min1 {x} {y} {z} z<x z<y with trio< x y 140 min1 {x} {y} {z} z<x z<y with trio< x y
130 min1 {x} {y} {z} z<x z<y | tri< a ¬b ¬c = z<x 141 min1 {x} {y} {z} z<x z<y | tri< a ¬b ¬c = z<x
131 min1 {x} {y} {z} z<x z<y | tri≈ ¬a refl ¬c = z<x 142 min1 {x} {y} {z} z<x z<y | tri≈ ¬a refl ¬c = z<x
132 min1 {x} {y} {z} z<x z<y | tri> ¬a ¬b c = z<y 143 min1 {x} {y} {z} z<x z<y | tri> ¬a ¬b c = z<y
133 144
174 omxxx : ( x : Ordinal ) → omax x (omax x x ) ≡ osuc (osuc x) 185 omxxx : ( x : Ordinal ) → omax x (omax x x ) ≡ osuc (osuc x)
175 omxxx x = trans ( cong ( λ k → omax x k ) (omxx x )) (sym ( omax< x (osuc x) <-osuc )) 186 omxxx x = trans ( cong ( λ k → omax x k ) (omxx x )) (sym ( omax< x (osuc x) <-osuc ))
176 187
177 open _∧_ 188 open _∧_
178 189
190 o≤-refl : { i j : Ordinal } → i ≡ j → i o≤ j
191 o≤-refl {i} {j} eq = subst (λ k → i o< osuc k ) eq <-osuc
179 OrdTrans : Transitive _o≤_ 192 OrdTrans : Transitive _o≤_
180 OrdTrans (case1 refl) (case1 refl) = case1 refl 193 OrdTrans a≤b b≤c with osuc-≡< a≤b | osuc-≡< b≤c
181 OrdTrans (case1 refl) (case2 lt2) = case2 lt2 194 OrdTrans a≤b b≤c | case1 refl | case1 refl = <-osuc
182 OrdTrans (case2 lt1) (case1 refl) = case2 lt1 195 OrdTrans a≤b b≤c | case1 refl | case2 a≤c = ordtrans a≤c <-osuc
183 OrdTrans (case2 x) (case2 y) = case2 (ordtrans x y) 196 OrdTrans a≤b b≤c | case2 a≤c | case1 refl = ordtrans a≤c <-osuc
197 OrdTrans a≤b b≤c | case2 a<b | case2 b<c = ordtrans (ordtrans a<b b<c) <-osuc
184 198
185 OrdPreorder : Preorder n n n 199 OrdPreorder : Preorder n n n
186 OrdPreorder = record { Carrier = Ordinal 200 OrdPreorder = record { Carrier = Ordinal
187 ; _≈_ = _≡_ 201 ; _≈_ = _≡_
188 ; _∼_ = _o≤_ 202 ; _∼_ = _o≤_
189 ; isPreorder = record { 203 ; isPreorder = record {
190 isEquivalence = record { refl = refl ; sym = sym ; trans = trans } 204 isEquivalence = record { refl = refl ; sym = sym ; trans = trans }
191 ; reflexive = case1 205 ; reflexive = o≤-refl
192 ; trans = OrdTrans 206 ; trans = OrdTrans
193 } 207 }
194 } 208 }
195 209
196 FExists : {m l : Level} → ( ψ : Ordinal → Set m ) 210 FExists : {m l : Level} → ( ψ : Ordinal → Set m )
197 → {p : Set l} ( P : { y : Ordinal } → ψ y → ¬ p ) 211 → {p : Set l} ( P : { y : Ordinal } → ψ y → ¬ p )
198 → (exists : ¬ (∀ y → ¬ ( ψ y ) )) 212 → (exists : ¬ (∀ y → ¬ ( ψ y ) ))
199 → ¬ p 213 → ¬ p
200 FExists {m} {l} ψ {p} P = contra-position ( λ p y ψy → P {y} ψy p ) 214 FExists {m} {l} ψ {p} P = contra-position ( λ p y ψy → P {y} ψy p )
201 215
216 record OrdinalSubset (maxordinal : Ordinal) : Set (suc n) where
217 field
218 os→ : (x : Ordinal) → x o< maxordinal → Ordinal
219 os← : Ordinal → Ordinal
220 os←limit : (x : Ordinal) → os← x o< maxordinal
221 os-iso← : {x : Ordinal} → os→ (os← x) (os←limit x) ≡ x
222 os-iso→ : {x : Ordinal} → (lt : x o< maxordinal ) → os← (os→ x lt) ≡ x
223