comparison OD.agda @ 423:9984cdd88da3

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 01 Aug 2020 18:05:23 +0900
parents 44a484f17f26
children cc7909f86841
comparison
equal deleted inserted replaced
422:44a484f17f26 423:9984cdd88da3
32 record _==_ ( a b : OD ) : Set n where 32 record _==_ ( a b : OD ) : Set n where
33 field 33 field
34 eq→ : ∀ { x : Ordinal } → def a x → def b x 34 eq→ : ∀ { x : Ordinal } → def a x → def b x
35 eq← : ∀ { x : Ordinal } → def b x → def a x 35 eq← : ∀ { x : Ordinal } → def b x → def a x
36 36
37 id : {A : Set n} → A → A
38 id x = x
39
40 ==-refl : { x : OD } → x == x 37 ==-refl : { x : OD } → x == x
41 ==-refl {x} = record { eq→ = id ; eq← = id } 38 ==-refl {x} = record { eq→ = λ x → x ; eq← = λ x → x }
42 39
43 open _==_ 40 open _==_
44 41
45 ==-trans : { x y z : OD } → x == y → y == z → x == z 42 ==-trans : { x y z : OD } → x == y → y == z → x == z
46 ==-trans x=y y=z = record { eq→ = λ {m} t → eq→ y=z (eq→ x=y t) ; eq← = λ {m} t → eq← x=y (eq← y=z t) } 43 ==-trans x=y y=z = record { eq→ = λ {m} t → eq→ y=z (eq→ x=y t) ; eq← = λ {m} t → eq← x=y (eq← y=z t) }
146 x c< a = a ∋ x 143 x c< a = a ∋ x
147 144
148 d→∋ : ( a : HOD ) { x : Ordinal} → odef a x → a ∋ (* x) 145 d→∋ : ( a : HOD ) { x : Ordinal} → odef a x → a ∋ (* x)
149 d→∋ a lt = subst (λ k → odef a k ) (sym &iso) lt 146 d→∋ a lt = subst (λ k → odef a k ) (sym &iso) lt
150 147
151 cseq : HOD → HOD 148 -- odef-subst : {Z : HOD } {X : Ordinal }{z : HOD } {x : Ordinal }→ odef Z X → Z ≡ z → X ≡ x → odef z x
152 cseq x = record { od = record { def = λ y → odef x (osuc y) } ; odmax = osuc (odmax x) ; <odmax = lemma } where 149 -- odef-subst df refl refl = df
153 lemma : {y : Ordinal} → def (od x) (osuc y) → y o< osuc (odmax x)
154 lemma {y} lt = ordtrans <-osuc (ordtrans (<odmax x lt) <-osuc )
155
156 odef-subst : {Z : HOD } {X : Ordinal }{z : HOD } {x : Ordinal }→ odef Z X → Z ≡ z → X ≡ x → odef z x
157 odef-subst df refl refl = df
158 150
159 otrans : {a x y : Ordinal } → odef (Ord a) x → odef (Ord x) y → odef (Ord a) y 151 otrans : {a x y : Ordinal } → odef (Ord a) x → odef (Ord x) y → odef (Ord a) y
160 otrans x<a y<x = ordtrans y<x x<a 152 otrans x<a y<x = ordtrans y<x x<a
161
162 odef→o< : {X : HOD } → {x : Ordinal } → odef X x → x o< & X
163 odef→o< {X} {x} lt = o<-subst {_} {_} {x} {& X} ( c<→o< ( odef-subst {X} {x} lt (sym *iso) (sym &iso) )) &iso &iso
164
165 odefo→o< : {X y : Ordinal } → odef (* X) y → y o< X
166 odefo→o< {X} {y} lt = subst₂ (λ j k → j o< k ) &iso &iso ( c<→o< (subst (λ k → odef (* X) k ) (sym &iso ) lt ))
167 153
168 -- If we have reverse of c<→o<, everything becomes Ordinal 154 -- If we have reverse of c<→o<, everything becomes Ordinal
169 o<→c<→HOD=Ord : ( o<→c< : {x y : Ordinal } → x o< y → odef (* y) x ) → {x : HOD } → x ≡ Ord (& x) 155 o<→c<→HOD=Ord : ( o<→c< : {x y : Ordinal } → x o< y → odef (* y) x ) → {x : HOD } → x ≡ Ord (& x)
170 o<→c<→HOD=Ord o<→c< {x} = ==→o≡ ( record { eq→ = lemma1 ; eq← = lemma2 } ) where 156 o<→c<→HOD=Ord o<→c< {x} = ==→o≡ ( record { eq→ = lemma1 ; eq← = lemma2 } ) where
171 lemma1 : {y : Ordinal} → odef x y → odef (Ord (& x)) y 157 lemma1 : {y : Ordinal} → odef x y → odef (Ord (& x)) y
177 orefl : { x : HOD } → { y : Ordinal } → & x ≡ y → & x ≡ y 163 orefl : { x : HOD } → { y : Ordinal } → & x ≡ y → & x ≡ y
178 orefl refl = refl 164 orefl refl = refl
179 165
180 ==-iso : { x y : HOD } → od (* (& x)) == od (* (& y)) → od x == od y 166 ==-iso : { x y : HOD } → od (* (& x)) == od (* (& y)) → od x == od y
181 ==-iso {x} {y} eq = record { 167 ==-iso {x} {y} eq = record {
182 eq→ = λ d → lemma ( eq→ eq (odef-subst d (sym *iso) refl )) ; 168 eq→ = λ {z} d → lemma ( eq→ eq (subst (λ k → odef k z ) (sym *iso) d )) ;
183 eq← = λ d → lemma ( eq← eq (odef-subst d (sym *iso) refl )) } 169 eq← = λ {z} d → lemma ( eq← eq (subst (λ k → odef k z ) (sym *iso) d )) }
184 where 170 where
185 lemma : {x : HOD } {z : Ordinal } → odef (* (& x)) z → odef x z 171 lemma : {x : HOD } {z : Ordinal } → odef (* (& x)) z → odef x z
186 lemma {x} {z} d = odef-subst d *iso refl 172 lemma {x} {z} d = subst (λ k → odef k z) (*iso) d
187 173
188 =-iso : {x y : HOD } → (od x == od y) ≡ (od (* (& x)) == od y) 174 =-iso : {x y : HOD } → (od x == od y) ≡ (od (* (& x)) == od y)
189 =-iso {_} {y} = cong ( λ k → od k == od y ) (sym *iso) 175 =-iso {_} {y} = cong ( λ k → od k == od y ) (sym *iso)
190 176
191 ord→== : { x y : HOD } → & x ≡ & y → od x == od y 177 ord→== : { x y : HOD } → & x ≡ & y → od x == od y
197 o≡→== {x} {.x} refl = ==-refl 183 o≡→== {x} {.x} refl = ==-refl
198 184
199 o∅≡od∅ : * (o∅ ) ≡ od∅ 185 o∅≡od∅ : * (o∅ ) ≡ od∅
200 o∅≡od∅ = ==→o≡ lemma where 186 o∅≡od∅ = ==→o≡ lemma where
201 lemma0 : {x : Ordinal} → odef (* o∅) x → odef od∅ x 187 lemma0 : {x : Ordinal} → odef (* o∅) x → odef od∅ x
202 lemma0 {x} lt = o<-subst (c<→o< {* x} {* o∅} (odef-subst {* o∅} {x} lt refl (sym &iso)) ) &iso &iso 188 lemma0 {x} lt with c<→o< {* x} {* o∅} (subst (λ k → odef (* o∅) k ) (sym &iso) lt)
189 ... | t = subst₂ (λ j k → j o< k ) &iso &iso t
203 lemma1 : {x : Ordinal} → odef od∅ x → odef (* o∅) x 190 lemma1 : {x : Ordinal} → odef od∅ x → odef (* o∅) x
204 lemma1 {x} lt = ⊥-elim (¬x<0 lt) 191 lemma1 {x} lt = ⊥-elim (¬x<0 lt)
205 lemma : od (* o∅) == od od∅ 192 lemma : od (* o∅) == od od∅
206 lemma = record { eq→ = lemma0 ; eq← = lemma1 } 193 lemma = record { eq→ = lemma0 ; eq← = lemma1 }
207 194
233 x , y = record { od = record { def = λ t → (t ≡ & x ) ∨ ( t ≡ & y ) } ; odmax = omax (& x) (& y) ; <odmax = lemma } where 220 x , y = record { od = record { def = λ t → (t ≡ & x ) ∨ ( t ≡ & y ) } ; odmax = omax (& x) (& y) ; <odmax = lemma } where
234 lemma : {t : Ordinal} → (t ≡ & x) ∨ (t ≡ & y) → t o< omax (& x) (& y) 221 lemma : {t : Ordinal} → (t ≡ & x) ∨ (t ≡ & y) → t o< omax (& x) (& y)
235 lemma {t} (case1 refl) = omax-x _ _ 222 lemma {t} (case1 refl) = omax-x _ _
236 lemma {t} (case2 refl) = omax-y _ _ 223 lemma {t} (case2 refl) = omax-y _ _
237 224
238 pair-xx<xy : {x y : HOD} → & (x , x) o< osuc (& (x , y) )
239 pair-xx<xy {x} {y} = ⊆→o≤ lemma where
240 lemma : {z : Ordinal} → def (od (x , x)) z → def (od (x , y)) z
241 lemma {z} (case1 refl) = case1 refl
242 lemma {z} (case2 refl) = case1 refl
243
244 pair-<xy : {x y : HOD} → {n : Ordinal} → & x o< next n → & y o< next n → & (x , y) o< next n
245 pair-<xy {x} {y} {o} x<nn y<nn with trio< (& x) (& y) | inspect (omax (& x)) (& y)
246 ... | tri< a ¬b ¬c | record { eq = eq1 } = next< (subst (λ k → k o< next o ) (sym eq1) (osuc<nx y<nn)) ho<
247 ... | tri> ¬a ¬b c | record { eq = eq1 } = next< (subst (λ k → k o< next o ) (sym eq1) (osuc<nx x<nn)) ho<
248 ... | tri≈ ¬a b ¬c | record { eq = eq1 } = next< (subst (λ k → k o< next o ) (omax≡ _ _ b) (subst (λ k → osuc k o< next o) b (osuc<nx x<nn))) ho<
249
250 -- another form of infinite
251 -- pair-ord< : {x : Ordinal } → Set n
252 pair-ord< : {x : HOD } → ( {y : HOD } → & y o< next (odmax y) ) → & ( x , x ) o< next (& x)
253 pair-ord< {x} ho< = subst (λ k → & (x , x) o< k ) lemmab0 lemmab1 where
254 lemmab0 : next (odmax (x , x)) ≡ next (& x)
255 lemmab0 = trans (cong (λ k → next k) (omxx _)) (sym nexto≡)
256 lemmab1 : & (x , x) o< next ( odmax (x , x))
257 lemmab1 = ho<
258
259 pair<y : {x y : HOD } → y ∋ x → & (x , x) o< osuc (& y) 225 pair<y : {x y : HOD } → y ∋ x → & (x , x) o< osuc (& y)
260 pair<y {x} {y} y∋x = ⊆→o≤ lemma where 226 pair<y {x} {y} y∋x = ⊆→o≤ lemma where
261 lemma : {z : Ordinal} → def (od (x , x)) z → def (od y) z 227 lemma : {z : Ordinal} → def (od (x , x)) z → def (od y) z
262 lemma (case1 refl) = y∋x 228 lemma (case1 refl) = y∋x
263 lemma (case2 refl) = y∋x 229 lemma (case2 refl) = y∋x
277 field 243 field
278 incl : { x : HOD } → A ∋ x → B ∋ x 244 incl : { x : HOD } → A ∋ x → B ∋ x
279 245
280 open _⊆_ 246 open _⊆_
281 infixr 220 _⊆_ 247 infixr 220 _⊆_
282
283 trans-⊆ : { A B C : HOD} → A ⊆ B → B ⊆ C → A ⊆ C
284 trans-⊆ A⊆B B⊆C = record { incl = λ x → incl B⊆C (incl A⊆B x) }
285
286 refl-⊆ : {A : HOD} → A ⊆ A
287 refl-⊆ {A} = record { incl = λ x → x }
288
289 od⊆→o≤ : {x y : HOD } → x ⊆ y → & x o< osuc (& y)
290 od⊆→o≤ {x} {y} lt = ⊆→o≤ {x} {y} (λ {z} x>z → subst (λ k → def (od y) k ) &iso (incl lt (d→∋ x x>z)))
291 248
292 -- if we have & (x , x) ≡ osuc (& x), ⊆→o≤ → c<→o< 249 -- if we have & (x , x) ≡ osuc (& x), ⊆→o≤ → c<→o<
293 ⊆→o≤→c<→o< : ({x : HOD} → & (x , x) ≡ osuc (& x) ) 250 ⊆→o≤→c<→o< : ({x : HOD} → & (x , x) ≡ osuc (& x) )
294 → ({y z : HOD } → ({x : Ordinal} → def (od y) x → def (od z) x ) → & y o< osuc (& z) ) 251 → ({y z : HOD } → ({x : Ordinal} → def (od y) x → def (od z) x ) → & y o< osuc (& z) )
295 → {x y : HOD } → def (od y) ( & x ) → & x o< & y 252 → {x y : HOD } → def (od y) ( & x ) → & x o< & y
303 lemma (case2 refl) = refl 260 lemma (case2 refl) = refl
304 y⊆x,x : {z : Ordinals.ord O} → def (od (x , x)) z → def (od y) z 261 y⊆x,x : {z : Ordinals.ord O} → def (od (x , x)) z → def (od y) z
305 y⊆x,x {z} lt = subst (λ k → def (od y) k ) (lemma lt) y∋x 262 y⊆x,x {z} lt = subst (λ k → def (od y) k ) (lemma lt) y∋x
306 lemma1 : osuc (& y) o< & (x , x) 263 lemma1 : osuc (& y) o< & (x , x)
307 lemma1 = subst (λ k → osuc (& y) o< k ) (sym (peq {x})) (osucc c ) 264 lemma1 = subst (λ k → osuc (& y) o< k ) (sym (peq {x})) (osucc c )
308
309 subset-lemma : {A x : HOD } → ( {y : HOD } → x ∋ y → (A ∩ x ) ∋ y ) ⇔ ( x ⊆ A )
310 subset-lemma {A} {x} = record {
311 proj1 = λ lt → record { incl = λ x∋z → proj1 (lt x∋z) }
312 ; proj2 = λ x⊆A lt → ⟪ incl x⊆A lt , lt ⟫
313 }
314
315 power< : {A x : HOD } → x ⊆ A → Ord (osuc (& A)) ∋ x
316 power< {A} {x} x⊆A = ⊆→o≤ (λ {y} x∋y → subst (λ k → def (od A) k) &iso (lemma y x∋y ) ) where
317 lemma : (y : Ordinal) → def (od x) y → def (od A) (& (* y))
318 lemma y x∋y = incl x⊆A (d→∋ x x∋y)
319
320 open import Data.Unit
321 265
322 ε-induction : { ψ : HOD → Set n} 266 ε-induction : { ψ : HOD → Set n}
323 → ( {x : HOD } → ({ y : HOD } → x ∋ y → ψ y ) → ψ x ) 267 → ( {x : HOD } → ({ y : HOD } → x ∋ y → ψ y ) → ψ x )
324 → (x : HOD ) → ψ x 268 → (x : HOD ) → ψ x
325 ε-induction {ψ} ind x = subst (λ k → ψ k ) *iso (ε-induction-ord (osuc (& x)) <-osuc ) where 269 ε-induction {ψ} ind x = subst (λ k → ψ k ) *iso (ε-induction-ord (osuc (& x)) <-osuc ) where
412 -- ωmax : Ordinal 356 -- ωmax : Ordinal
413 -- <ωmax : {y : Ordinal} → infinite-d y → y o< ωmax 357 -- <ωmax : {y : Ordinal} → infinite-d y → y o< ωmax
414 -- 358 --
415 -- infinite : HOD 359 -- infinite : HOD
416 -- infinite = record { od = record { def = λ x → infinite-d x } ; odmax = ωmax ; <odmax = <ωmax } 360 -- infinite = record { od = record { def = λ x → infinite-d x } ; odmax = ωmax ; <odmax = <ωmax }
417
418 odsuc : (y : HOD) → HOD
419 odsuc y = Union (y , (y , y))
420 361
421 infinite : HOD 362 infinite : HOD
422 infinite = record { od = record { def = λ x → infinite-d x } ; odmax = next o∅ ; <odmax = lemma } where 363 infinite = record { od = record { def = λ x → infinite-d x } ; odmax = next o∅ ; <odmax = lemma } where
423 u : (y : Ordinal ) → HOD 364 u : (y : Ordinal ) → HOD
424 u y = Union (* y , (* y , * y)) 365 u y = Union (* y , (* y , * y))
439 --- main recursion 380 --- main recursion
440 lemma : {y : Ordinal} → infinite-d y → y o< next o∅ 381 lemma : {y : Ordinal} → infinite-d y → y o< next o∅
441 lemma {o∅} iφ = x<nx 382 lemma {o∅} iφ = x<nx
442 lemma (isuc {y} x) = next< (lemma x) (next< (subst (λ k → & (* y , (* y , * y)) o< next k) &iso lemma71 ) (nexto=n lemma1)) 383 lemma (isuc {y} x) = next< (lemma x) (next< (subst (λ k → & (* y , (* y , * y)) o< next k) &iso lemma71 ) (nexto=n lemma1))
443 384
444 ω<next-o∅ : {y : Ordinal} → infinite-d y → y o< next o∅ 385 empty : (x : HOD ) → ¬ (od∅ ∋ x)
445 ω<next-o∅ {y} lt = <odmax infinite lt 386 empty x = ¬x<0
446
447 nat→ω : Nat → HOD
448 nat→ω Zero = od∅
449 nat→ω (Suc y) = Union (nat→ω y , (nat→ω y , nat→ω y))
450
451 ω→nato : {y : Ordinal} → infinite-d y → Nat
452 ω→nato iφ = Zero
453 ω→nato (isuc lt) = Suc (ω→nato lt)
454
455 ω→nat : (n : HOD) → infinite ∋ n → Nat
456 ω→nat n = ω→nato
457
458 ω∋nat→ω : {n : Nat} → def (od infinite) (& (nat→ω n))
459 ω∋nat→ω {Zero} = subst (λ k → def (od infinite) k) (sym ord-od∅) iφ
460 ω∋nat→ω {Suc n} = subst (λ k → def (od infinite) k) lemma (isuc ( ω∋nat→ω {n})) where
461 lemma : & (Union (* (& (nat→ω n)) , (* (& (nat→ω n)) , * (& (nat→ω n))))) ≡ & (nat→ω (Suc n))
462 lemma = subst (λ k → & (Union (k , ( k , k ))) ≡ & (nat→ω (Suc n))) (sym *iso) refl
463 387
464 _=h=_ : (x y : HOD) → Set n 388 _=h=_ : (x y : HOD) → Set n
465 x =h= y = od x == od y 389 x =h= y = od x == od y
466
467 infixr 200 _∈_
468 -- infixr 230 _∩_ _∪_
469 390
470 pair→ : ( x y t : HOD ) → (x , y) ∋ t → ( t =h= x ) ∨ ( t =h= y ) 391 pair→ : ( x y t : HOD ) → (x , y) ∋ t → ( t =h= x ) ∨ ( t =h= y )
471 pair→ x y t (case1 t≡x ) = case1 (subst₂ (λ j k → j =h= k ) *iso *iso (o≡→== t≡x )) 392 pair→ x y t (case1 t≡x ) = case1 (subst₂ (λ j k → j =h= k ) *iso *iso (o≡→== t≡x ))
472 pair→ x y t (case2 t≡y ) = case2 (subst₂ (λ j k → j =h= k ) *iso *iso (o≡→== t≡y )) 393 pair→ x y t (case2 t≡y ) = case2 (subst₂ (λ j k → j =h= k ) *iso *iso (o≡→== t≡y ))
473 394
474 pair← : ( x y t : HOD ) → ( t =h= x ) ∨ ( t =h= y ) → (x , y) ∋ t 395 pair← : ( x y t : HOD ) → ( t =h= x ) ∨ ( t =h= y ) → (x , y) ∋ t
475 pair← x y t (case1 t=h=x) = case1 (cong (λ k → & k ) (==→o≡ t=h=x)) 396 pair← x y t (case1 t=h=x) = case1 (cong (λ k → & k ) (==→o≡ t=h=x))
476 pair← x y t (case2 t=h=y) = case2 (cong (λ k → & k ) (==→o≡ t=h=y)) 397 pair← x y t (case2 t=h=y) = case2 (cong (λ k → & k ) (==→o≡ t=h=y))
477
478 pair1 : { x y : HOD } → (x , y ) ∋ x
479 pair1 = case1 refl
480
481 pair2 : { x y : HOD } → (x , y ) ∋ y
482 pair2 = case2 refl
483
484 single : {x y : HOD } → (x , x ) ∋ y → x ≡ y
485 single (case1 eq) = ==→o≡ ( ord→== (sym eq) )
486 single (case2 eq) = ==→o≡ ( ord→== (sym eq) )
487
488 empty : (x : HOD ) → ¬ (od∅ ∋ x)
489 empty x = ¬x<0
490 398
491 o<→c< : {x y : Ordinal } → x o< y → (Ord x) ⊆ (Ord y) 399 o<→c< : {x y : Ordinal } → x o< y → (Ord x) ⊆ (Ord y)
492 o<→c< lt = record { incl = λ z → ordtrans z lt } 400 o<→c< lt = record { incl = λ z → ordtrans z lt }
493 401
494 ⊆→o< : {x y : Ordinal } → (Ord x) ⊆ (Ord y) → x o< osuc y 402 ⊆→o< : {x y : Ordinal } → (Ord x) ⊆ (Ord y) → x o< osuc y
495 ⊆→o< {x} {y} lt with trio< x y 403 ⊆→o< {x} {y} lt with trio< x y
496 ⊆→o< {x} {y} lt | tri< a ¬b ¬c = ordtrans a <-osuc 404 ⊆→o< {x} {y} lt | tri< a ¬b ¬c = ordtrans a <-osuc
497 ⊆→o< {x} {y} lt | tri≈ ¬a b ¬c = subst ( λ k → k o< osuc y) (sym b) <-osuc 405 ⊆→o< {x} {y} lt | tri≈ ¬a b ¬c = subst ( λ k → k o< osuc y) (sym b) <-osuc
498 ⊆→o< {x} {y} lt | tri> ¬a ¬b c with (incl lt) (o<-subst c (sym &iso) refl ) 406 ⊆→o< {x} {y} lt | tri> ¬a ¬b c with (incl lt) (o<-subst c (sym &iso) refl )
499 ... | ttt = ⊥-elim ( o<¬≡ refl (o<-subst ttt &iso refl )) 407 ... | ttt = ⊥-elim ( o<¬≡ refl (o<-subst ttt &iso refl ))
500
501 open import Relation.Binary.HeterogeneousEquality as HE using (_≅_ )
502 -- postulate f-extensionality : { n m : Level} → HE.Extensionality n m
503
504 ω-prev-eq1 : {x y : Ordinal} → & (Union (* y , (* y , * y))) ≡ & (Union (* x , (* x , * x))) → ¬ (x o< y)
505 ω-prev-eq1 {x} {y} eq x<y = eq→ (ord→== eq) {& (* y)} (λ not2 → not2 (& (* y , * y))
506 ⟪ case2 refl , subst (λ k → odef k (& (* y))) (sym *iso) (case1 refl)⟫ ) (λ u → lemma u ) where
507 lemma : (u : Ordinal) → ¬ def (od (* x , (* x , * x))) u ∧ def (od (* u)) (& (* y))
508 lemma u t with proj1 t
509 lemma u t | case1 u=x = o<> (c<→o< {* y} {* u} (proj2 t)) (subst₂ (λ j k → j o< k )
510 (trans (sym &iso) (trans (sym u=x) (sym &iso)) ) (sym &iso) x<y ) -- x ≡ & (* u)
511 lemma u t | case2 u=xx = o<¬≡ (lemma1 (subst (λ k → odef k (& (* y)) ) (trans (cong (λ k → * k ) u=xx) *iso ) (proj2 t))) x<y where
512 lemma1 : {x y : Ordinal } → (* x , * x ) ∋ * y → x ≡ y -- y = x ∈ ( x , x ) = u
513 lemma1 (case1 eq) = subst₂ (λ j k → j ≡ k ) &iso &iso (sym eq)
514 lemma1 (case2 eq) = subst₂ (λ j k → j ≡ k ) &iso &iso (sym eq)
515
516 ω-prev-eq : {x y : Ordinal} → & (Union (* y , (* y , * y))) ≡ & (Union (* x , (* x , * x))) → x ≡ y
517 ω-prev-eq {x} {y} eq with trio< x y
518 ω-prev-eq {x} {y} eq | tri< a ¬b ¬c = ⊥-elim (ω-prev-eq1 eq a)
519 ω-prev-eq {x} {y} eq | tri≈ ¬a b ¬c = b
520 ω-prev-eq {x} {y} eq | tri> ¬a ¬b c = ⊥-elim (ω-prev-eq1 (sym eq) c)
521
522 ω-∈s : (x : HOD) → Union ( x , (x , x)) ∋ x
523 ω-∈s x not = not (& (x , x)) ⟪ case2 refl , subst (λ k → odef k (& x) ) (sym *iso) (case1 refl) ⟫
524
525 ωs≠0 : (x : HOD) → ¬ ( Union ( x , (x , x)) ≡ od∅ )
526 ωs≠0 y eq = ⊥-elim ( ¬x<0 (subst (λ k → & y o< k ) ord-od∅ (c<→o< (subst (λ k → odef k (& y )) eq (ω-∈s y) ))) )
527
528 nat→ω-iso : {i : HOD} → (lt : infinite ∋ i ) → nat→ω ( ω→nat i lt ) ≡ i
529 nat→ω-iso {i} = ε-induction1 {λ i → (lt : infinite ∋ i ) → nat→ω ( ω→nat i lt ) ≡ i } ind i where
530 ind : {x : HOD} → ({y : HOD} → x ∋ y → (lt : infinite ∋ y) → nat→ω (ω→nat y lt) ≡ y) →
531 (lt : infinite ∋ x) → nat→ω (ω→nat x lt) ≡ x
532 ind {x} prev lt = ind1 lt *iso where
533 ind1 : {ox : Ordinal } → (ltd : infinite-d ox ) → * ox ≡ x → nat→ω (ω→nato ltd) ≡ x
534 ind1 {o∅} iφ refl = sym o∅≡od∅
535 ind1 (isuc {x₁} ltd) ox=x = begin
536 nat→ω (ω→nato (isuc ltd) )
537 ≡⟨⟩
538 Union (nat→ω (ω→nato ltd) , (nat→ω (ω→nato ltd) , nat→ω (ω→nato ltd)))
539 ≡⟨ cong (λ k → Union (k , (k , k ))) lemma ⟩
540 Union (* x₁ , (* x₁ , * x₁))
541 ≡⟨ trans ( sym *iso) ox=x ⟩
542 x
543 ∎ where
544 open ≡-Reasoning
545 lemma0 : x ∋ * x₁
546 lemma0 = subst (λ k → odef k (& (* x₁))) (trans (sym *iso) ox=x) (λ not → not
547 (& (* x₁ , * x₁)) ⟪ pair2 , subst (λ k → odef k (& (* x₁))) (sym *iso) pair1 ⟫ )
548 lemma1 : infinite ∋ * x₁
549 lemma1 = subst (λ k → odef infinite k) (sym &iso) ltd
550 lemma3 : {x y : Ordinal} → (ltd : infinite-d x ) (ltd1 : infinite-d y ) → y ≡ x → ltd ≅ ltd1
551 lemma3 iφ iφ refl = HE.refl
552 lemma3 iφ (isuc {y} ltd1) eq = ⊥-elim ( ¬x<0 (subst₂ (λ j k → j o< k ) &iso eq (c<→o< (ω-∈s (* y)) )))
553 lemma3 (isuc {y} ltd) iφ eq = ⊥-elim ( ¬x<0 (subst₂ (λ j k → j o< k ) &iso (sym eq) (c<→o< (ω-∈s (* y)) )))
554 lemma3 (isuc {x} ltd) (isuc {y} ltd1) eq with lemma3 ltd ltd1 (ω-prev-eq (sym eq))
555 ... | t = HE.cong₂ (λ j k → isuc {j} k ) (HE.≡-to-≅ (ω-prev-eq eq)) t
556 lemma2 : {x y : Ordinal} → (ltd : infinite-d x ) (ltd1 : infinite-d y ) → y ≡ x → ω→nato ltd ≡ ω→nato ltd1
557 lemma2 {x} {y} ltd ltd1 eq = lemma6 eq (lemma3 {x} {y} ltd ltd1 eq) where
558 lemma6 : {x y : Ordinal} → {ltd : infinite-d x } {ltd1 : infinite-d y } → y ≡ x → ltd ≅ ltd1 → ω→nato ltd ≡ ω→nato ltd1
559 lemma6 refl HE.refl = refl
560 lemma : nat→ω (ω→nato ltd) ≡ * x₁
561 lemma = trans (cong (λ k → nat→ω k) (lemma2 {x₁} {_} ltd (subst (λ k → infinite-d k ) (sym &iso) ltd) &iso ) ) ( prev {* x₁} lemma0 lemma1 )
562
563 ω→nat-iso : {i : Nat} → ω→nat ( nat→ω i ) (ω∋nat→ω {i}) ≡ i
564 ω→nat-iso {i} = lemma i (ω∋nat→ω {i}) *iso where
565 lemma : {x : Ordinal } → ( i : Nat ) → (ltd : infinite-d x ) → * x ≡ nat→ω i → ω→nato ltd ≡ i
566 lemma {x} Zero iφ eq = refl
567 lemma {x} (Suc i) iφ eq = ⊥-elim ( ωs≠0 (nat→ω i) (trans (sym eq) o∅≡od∅ )) -- Union (nat→ω i , (nat→ω i , nat→ω i)) ≡ od∅
568 lemma Zero (isuc {x} ltd) eq = ⊥-elim ( ωs≠0 (* x) (subst (λ k → k ≡ od∅ ) *iso eq ))
569 lemma (Suc i) (isuc {x} ltd) eq = cong (λ k → Suc k ) (lemma i ltd (lemma1 eq) ) where -- * x ≡ nat→ω i
570 lemma1 : * (& (Union (* x , (* x , * x)))) ≡ Union (nat→ω i , (nat→ω i , nat→ω i)) → * x ≡ nat→ω i
571 lemma1 eq = subst (λ k → * x ≡ k ) *iso (cong (λ k → * k)
572 ( ω-prev-eq (subst (λ k → _ ≡ k ) &iso (cong (λ k → & k ) (sym
573 (subst (λ k → _ ≡ Union ( k , ( k , k ))) (sym *iso ) eq ))))))
574 408
575 ψiso : {ψ : HOD → Set n} {x y : HOD } → ψ x → x ≡ y → ψ y 409 ψiso : {ψ : HOD → Set n} {x y : HOD } → ψ x → x ≡ y → ψ y
576 ψiso {ψ} t refl = t 410 ψiso {ψ} t refl = t
577 selection : {ψ : HOD → Set n} {X y : HOD} → ((X ∋ y) ∧ ψ y) ⇔ (Select X ψ ∋ y) 411 selection : {ψ : HOD → Set n} {X y : HOD} → ((X ∋ y) ∧ ψ y) ⇔ (Select X ψ ∋ y)
578 selection {ψ} {X} {y} = ⟪ 412 selection {ψ} {X} {y} = ⟪
586 sup-c< : (ψ : HOD → HOD) → {X x : HOD} → X ∋ x → & (ψ x) o< (sup-o X (λ y X∋y → & (ψ (* y)))) 420 sup-c< : (ψ : HOD → HOD) → {X x : HOD} → X ∋ x → & (ψ x) o< (sup-o X (λ y X∋y → & (ψ (* y))))
587 sup-c< ψ {X} {x} lt = subst (λ k → & (ψ k) o< _ ) *iso (sup-o< X lt ) 421 sup-c< ψ {X} {x} lt = subst (λ k → & (ψ k) o< _ ) *iso (sup-o< X lt )
588 replacement← : {ψ : HOD → HOD} (X x : HOD) → X ∋ x → Replace X ψ ∋ ψ x 422 replacement← : {ψ : HOD → HOD} (X x : HOD) → X ∋ x → Replace X ψ ∋ ψ x
589 replacement← {ψ} X x lt = ⟪ sup-c< ψ {X} {x} lt , lemma ⟫ where 423 replacement← {ψ} X x lt = ⟪ sup-c< ψ {X} {x} lt , lemma ⟫ where
590 lemma : def (in-codomain X ψ) (& (ψ x)) 424 lemma : def (in-codomain X ψ) (& (ψ x))
591 lemma not = ⊥-elim ( not ( & x ) (⟪ lt , cong (λ k → & (ψ k)) (sym *iso)⟫ )) 425 lemma not = ⊥-elim ( not ( & x ) ⟪ lt , cong (λ k → & (ψ k)) (sym *iso)⟫ )
592 replacement→ : {ψ : HOD → HOD} (X x : HOD) → (lt : Replace X ψ ∋ x) → ¬ ( (y : HOD) → ¬ (x =h= ψ y)) 426 replacement→ : {ψ : HOD → HOD} (X x : HOD) → (lt : Replace X ψ ∋ x) → ¬ ( (y : HOD) → ¬ (x =h= ψ y))
593 replacement→ {ψ} X x lt = contra-position lemma (lemma2 (proj2 lt)) where 427 replacement→ {ψ} X x lt = contra-position lemma (lemma2 (proj2 lt)) where
594 lemma2 : ¬ ((y : Ordinal) → ¬ odef X y ∧ ((& x) ≡ & (ψ (* y)))) 428 lemma2 : ¬ ((y : Ordinal) → ¬ odef X y ∧ ((& x) ≡ & (ψ (* y))))
595 → ¬ ((y : Ordinal) → ¬ odef X y ∧ (* (& x) =h= ψ (* y))) 429 → ¬ ((y : Ordinal) → ¬ odef X y ∧ (* (& x) =h= ψ (* y)))
596 lemma2 not not2 = not ( λ y d → not2 y (⟪ proj1 d , lemma3 (proj2 d)⟫)) where 430 lemma2 not not2 = not ( λ y d → not2 y ⟪ proj1 d , lemma3 (proj2 d)⟫) where
597 lemma3 : {y : Ordinal } → (& x ≡ & (ψ (* y))) → (* (& x) =h= ψ (* y)) 431 lemma3 : {y : Ordinal } → (& x ≡ & (ψ (* y))) → (* (& x) =h= ψ (* y))
598 lemma3 {y} eq = subst (λ k → * (& x) =h= k ) *iso (o≡→== eq ) 432 lemma3 {y} eq = subst (λ k → * (& x) =h= k ) *iso (o≡→== eq )
599 lemma : ( (y : HOD) → ¬ (x =h= ψ y)) → ( (y : Ordinal) → ¬ odef X y ∧ (* (& x) =h= ψ (* y)) ) 433 lemma : ( (y : HOD) → ¬ (x =h= ψ y)) → ( (y : Ordinal) → ¬ odef X y ∧ (* (& x) =h= ψ (* y)) )
600 lemma not y not2 = not (* y) (subst (λ k → k =h= ψ (* y)) *iso ( proj2 not2 )) 434 lemma not y not2 = not (* y) (subst (λ k → k =h= ψ (* y)) *iso ( proj2 not2 ))
601 435
607 --- A ∩ x = record { def = λ y → odef A y ∧ odef x y } subset of A 441 --- A ∩ x = record { def = λ y → odef A y ∧ odef x y } subset of A
608 -- 442 --
609 -- 443 --
610 ∩-≡ : { a b : HOD } → ({x : HOD } → (a ∋ x → b ∋ x)) → a =h= ( b ∩ a ) 444 ∩-≡ : { a b : HOD } → ({x : HOD } → (a ∋ x → b ∋ x)) → a =h= ( b ∩ a )
611 ∩-≡ {a} {b} inc = record { 445 ∩-≡ {a} {b} inc = record {
612 eq→ = λ {x} x<a → ⟪ odef-subst {_} {_} {b} {x} (inc (d→∋ a x<a)) refl &iso , x<a ⟫ ; 446 eq→ = λ {x} x<a → ⟪ (subst (λ k → odef b k ) &iso (inc (d→∋ a x<a))) , x<a ⟫ ;
613 eq← = λ {x} x<a∩b → proj2 x<a∩b } 447 eq← = λ {x} x<a∩b → proj2 x<a∩b }
614 -- 448 --
615 -- Transitive Set case 449 -- Transitive Set case
616 -- we have t ∋ x → Ord a ∋ x means t is a subset of Ord a, that is (Ord a) ∩ t =h= t 450 -- we have t ∋ x → Ord a ∋ x means t is a subset of Ord a, that is (Ord a) ∩ t =h= t
617 -- OPwr (Ord a) is a sup of (Ord a) ∩ t, so OPwr (Ord a) ∋ t 451 -- OPwr (Ord a) is a sup of (Ord a) ∩ t, so OPwr (Ord a) ∋ t
618 -- OPwr A = Ord ( sup-o ( λ x → & ( A ∩ (* x )) ) ) 452 -- OPwr A = Ord ( sup-o ( λ x → & ( A ∩ (* x )) ) )
619 -- 453 --
620 ord-power← : (a : Ordinal ) (t : HOD) → ({x : HOD} → (t ∋ x → (Ord a) ∋ x)) → OPwr (Ord a) ∋ t 454 ord-power← : (a : Ordinal ) (t : HOD) → ({x : HOD} → (t ∋ x → (Ord a) ∋ x)) → OPwr (Ord a) ∋ t
621 ord-power← a t t→A = odef-subst {_} {_} {OPwr (Ord a)} {& t} 455 ord-power← a t t→A = subst (λ k → odef (OPwr (Ord a)) k ) (lemma1 lemma-eq) lemma where
622 lemma refl (lemma1 lemma-eq )where
623 lemma-eq : ((Ord a) ∩ t) =h= t 456 lemma-eq : ((Ord a) ∩ t) =h= t
624 eq→ lemma-eq {z} w = proj2 w 457 eq→ lemma-eq {z} w = proj2 w
625 eq← lemma-eq {z} w = ⟪ odef-subst {_} {_} {(Ord a)} {z} ( t→A (d→∋ t w)) refl &iso , w ⟫ 458 eq← lemma-eq {z} w = ⟪ subst (λ k → odef (Ord a) k ) &iso ( t→A (d→∋ t w)) , w ⟫
626 lemma1 : {a : Ordinal } { t : HOD } 459 lemma1 : {a : Ordinal } { t : HOD }
627 → (eq : ((Ord a) ∩ t) =h= t) → & ((Ord a) ∩ (* (& t))) ≡ & t 460 → (eq : ((Ord a) ∩ t) =h= t) → & ((Ord a) ∩ (* (& t))) ≡ & t
628 lemma1 {a} {t} eq = subst (λ k → & ((Ord a) ∩ k) ≡ & t ) (sym *iso) (cong (λ k → & k ) (==→o≡ eq )) 461 lemma1 {a} {t} eq = subst (λ k → & ((Ord a) ∩ k) ≡ & t ) (sym *iso) (cong (λ k → & k ) (==→o≡ eq ))
629 lemma2 : (& t) o< (osuc (& (Ord a))) 462 lemma2 : (& t) o< (osuc (& (Ord a)))
630 lemma2 = ⊆→o≤ {t} {Ord a} (λ {x} x<t → subst (λ k → def (od (Ord a)) k) &iso (t→A (d→∋ t x<t))) 463 lemma2 = ⊆→o≤ {t} {Ord a} (λ {x} x<t → subst (λ k → def (od (Ord a)) k) &iso (t→A (d→∋ t x<t)))
716 lemmaj = subst₂ (λ j k → j o< k ) &iso lemmak lt 549 lemmaj = subst₂ (λ j k → j o< k ) &iso lemmak lt
717 lemma1 : & t o< sup-o (OPwr (Ord (& A))) (λ x lt → & (A ∩ (* x))) 550 lemma1 : & t o< sup-o (OPwr (Ord (& A))) (λ x lt → & (A ∩ (* x)))
718 lemma1 = subst (λ k → & k o< sup-o (OPwr (Ord (& A))) (λ x lt → & (A ∩ (* x)))) 551 lemma1 = subst (λ k → & k o< sup-o (OPwr (Ord (& A))) (λ x lt → & (A ∩ (* x))))
719 lemma4 (sup-o< (OPwr (Ord (& A))) lemma7 ) 552 lemma4 (sup-o< (OPwr (Ord (& A))) lemma7 )
720 lemma2 : def (in-codomain (OPwr (Ord (& A))) (_∩_ A)) (& t) 553 lemma2 : def (in-codomain (OPwr (Ord (& A))) (_∩_ A)) (& t)
721 lemma2 not = ⊥-elim ( not (& t) (⟪ lemma3 , lemma6 ⟫) ) where 554 lemma2 not = ⊥-elim ( not (& t) ⟪ lemma3 , lemma6 ⟫ ) where
722 lemma6 : & t ≡ & (A ∩ * (& t)) 555 lemma6 : & t ≡ & (A ∩ * (& t))
723 lemma6 = cong ( λ k → & k ) (==→o≡ (subst (λ k → t =h= (A ∩ k)) (sym *iso) ( ∩-≡ {t} {A} t→A ))) 556 lemma6 = cong ( λ k → & k ) (==→o≡ (subst (λ k → t =h= (A ∩ k)) (sym *iso) ( ∩-≡ {t} {A} t→A )))
724 557
725
726 ord⊆power : (a : Ordinal) → (Ord (osuc a)) ⊆ (Power (Ord a))
727 ord⊆power a = record { incl = λ {x} lt → power← (Ord a) x (lemma lt) } where
728 lemma : {x y : HOD} → & x o< osuc a → x ∋ y → Ord a ∋ y
729 lemma lt y<x with osuc-≡< lt
730 lemma lt y<x | case1 refl = c<→o< y<x
731 lemma lt y<x | case2 x<a = ordtrans (c<→o< y<x) x<a
732
733 continuum-hyphotheis : (a : Ordinal) → Set (suc n)
734 continuum-hyphotheis a = Power (Ord a) ⊆ Ord (osuc a)
735 558
736 extensionality0 : {A B : HOD } → ((z : HOD) → (A ∋ z) ⇔ (B ∋ z)) → A =h= B 559 extensionality0 : {A B : HOD } → ((z : HOD) → (A ∋ z) ⇔ (B ∋ z)) → A =h= B
737 eq→ (extensionality0 {A} {B} eq ) {x} d = odef-iso {A} {B} (sym &iso) (proj1 (eq (* x))) d 560 eq→ (extensionality0 {A} {B} eq ) {x} d = odef-iso {A} {B} (sym &iso) (proj1 (eq (* x))) d
738 eq← (extensionality0 {A} {B} eq ) {x} d = odef-iso {B} {A} (sym &iso) (proj2 (eq (* x))) d 561 eq← (extensionality0 {A} {B} eq ) {x} d = odef-iso {B} {A} (sym &iso) (proj2 (eq (* x))) d
739 562
740 extensionality : {A B w : HOD } → ((z : HOD ) → (A ∋ z) ⇔ (B ∋ z)) → (w ∋ A) ⇔ (w ∋ B) 563 extensionality : {A B w : HOD } → ((z : HOD ) → (A ∋ z) ⇔ (B ∋ z)) → (w ∋ A) ⇔ (w ∋ B)
741 proj1 (extensionality {A} {B} {w} eq ) d = subst (λ k → w ∋ k) ( ==→o≡ (extensionality0 {A} {B} eq) ) d 564 proj1 (extensionality {A} {B} {w} eq ) d = subst (λ k → w ∋ k) ( ==→o≡ (extensionality0 {A} {B} eq) ) d
742 proj2 (extensionality {A} {B} {w} eq ) d = subst (λ k → w ∋ k) (sym ( ==→o≡ (extensionality0 {A} {B} eq) )) d 565 proj2 (extensionality {A} {B} {w} eq ) d = subst (λ k → w ∋ k) (sym ( ==→o≡ (extensionality0 {A} {B} eq) )) d
743 566
744 infinity∅ : infinite ∋ od∅ 567 infinity∅ : infinite ∋ od∅
745 infinity∅ = odef-subst {_} {_} {infinite} {& (od∅ )} iφ refl lemma where 568 infinity∅ = subst (λ k → odef infinite k ) lemma iφ where
746 lemma : o∅ ≡ & od∅ 569 lemma : o∅ ≡ & od∅
747 lemma = let open ≡-Reasoning in begin 570 lemma = let open ≡-Reasoning in begin
748 o∅ 571 o∅
749 ≡⟨ sym &iso ⟩ 572 ≡⟨ sym &iso ⟩
750 & ( * o∅ ) 573 & ( * o∅ )
751 ≡⟨ cong ( λ k → & k ) o∅≡od∅ ⟩ 574 ≡⟨ cong ( λ k → & k ) o∅≡od∅ ⟩
752 & od∅ 575 & od∅
753 576
754 infinity : (x : HOD) → infinite ∋ x → infinite ∋ Union (x , (x , x )) 577 infinity : (x : HOD) → infinite ∋ x → infinite ∋ Union (x , (x , x ))
755 infinity x lt = odef-subst {_} {_} {infinite} {& (Union (x , (x , x )))} ( isuc {& x} lt ) refl lemma where 578 infinity x lt = subst (λ k → odef infinite k ) lemma (isuc {& x} lt) where
756 lemma : & (Union (* (& x) , (* (& x) , * (& x)))) 579 lemma : & (Union (* (& x) , (* (& x) , * (& x))))
757 ≡ & (Union (x , (x , x))) 580 ≡ & (Union (x , (x , x)))
758 lemma = cong (λ k → & (Union ( k , ( k , k ) ))) *iso 581 lemma = cong (λ k → & (Union ( k , ( k , k ) ))) *iso
759 582
760 isZF : IsZF (HOD ) _∋_ _=h=_ od∅ _,_ Union Power Select Replace infinite 583 isZF : IsZF (HOD ) _∋_ _=h=_ od∅ _,_ Union Power Select Replace infinite
772 ; infinity∅ = infinity∅ 595 ; infinity∅ = infinity∅
773 ; infinity = infinity 596 ; infinity = infinity
774 ; selection = λ {X} {ψ} {y} → selection {X} {ψ} {y} 597 ; selection = λ {X} {ψ} {y} → selection {X} {ψ} {y}
775 ; replacement← = replacement← 598 ; replacement← = replacement←
776 ; replacement→ = λ {ψ} → replacement→ {ψ} 599 ; replacement→ = λ {ψ} → replacement→ {ψ}
777 -- ; choice-func = choice-func
778 -- ; choice = choice
779 } 600 }
780 601
781 HOD→ZF : ZF 602 HOD→ZF : ZF
782 HOD→ZF = record { 603 HOD→ZF = record {
783 ZFSet = HOD 604 ZFSet = HOD