comparison ordinal.agda @ 256:6e1c60866788 release

orderd pair and product
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 29 Aug 2019 16:18:37 +0900
parents c10048d69614
children d9d178d1457c
comparison
equal deleted inserted replaced
232:fe8392f527eb 256:6e1c60866788
1 {-# OPTIONS --allow-unsolved-metas #-}
2 open import Level 1 open import Level
3 module ordinal where 2 module ordinal where
4 3
5 open import zf 4 open import zf
6 5
202 lemma : (y : Ordinal) → y o< ordinal lx (OSuc lx ox) → ψ y 201 lemma : (y : Ordinal) → y o< ordinal lx (OSuc lx ox) → ψ y
203 lemma y lt with osuc-≡< lt 202 lemma y lt with osuc-≡< lt
204 lemma y lt | case1 refl = proj1 ( TransFinite1 lx ox ) 203 lemma y lt | case1 refl = proj1 ( TransFinite1 lx ox )
205 lemma y lt | case2 lt1 = proj2 ( TransFinite1 lx ox ) y lt1 204 lemma y lt | case2 lt1 = proj2 ( TransFinite1 lx ox ) y lt1
206 205
207 -- we cannot prove this in intutionistic logic
208 -- (¬ (∀ y → ¬ ( ψ y ))) → (ψ y → p ) → p
209 -- postulate
210 -- TransFiniteExists : {n m l : Level} → ( ψ : Ordinal {n} → Set m )
211 -- → (exists : ¬ (∀ y → ¬ ( ψ y ) ))
212 -- → {p : Set l} ( P : { y : Ordinal {n} } → ψ y → p )
213 -- → p
214 --
215 -- Instead we prove
216 --
217 TransFiniteExists : {n m l : Level} → ( ψ : Ordinal {n} → Set m )
218 → {p : Set l} ( P : { y : Ordinal {n} } → ψ y → ¬ p )
219 → (exists : ¬ (∀ y → ¬ ( ψ y ) ))
220 → ¬ p
221 TransFiniteExists {n} {m} {l} ψ {p} P = contra-position ( λ p y ψy → P {y} ψy p )
222 206
223 open import Ordinals 207 open import Ordinals
224 208
225 C-Ordinal : {n : Level} → Ordinals {suc n} 209 C-Ordinal : {n : Level} → Ordinals {suc n}
226 C-Ordinal {n} = record { 210 C-Ordinal {n} = record {
320 dz : lv (od→ord z) ≡ lx → OrdinalD lx 304 dz : lv (od→ord z) ≡ lx → OrdinalD lx
321 dz refl = OSuc lx (ord (od→ord z)) 305 dz refl = OSuc lx (ord (od→ord z))
322 dz<dz : (z=x : lv (od→ord z) ≡ lx ) → ord (od→ord z) d< dz z=x 306 dz<dz : (z=x : lv (od→ord z) ≡ lx ) → ord (od→ord z) d< dz z=x
323 dz<dz refl = s<refl 307 dz<dz refl = s<refl
324 308
325 ---
326 --- With assuption of OD is ordered, p ∨ ( ¬ p ) <=> axiom of choice
327 ---
328 record choiced ( X : OD) : Set (suc (suc n)) where
329 field
330 a-choice : OD
331 is-in : X ∋ a-choice
332
333 choice-func' : (X : OD ) → (p∨¬p : { n : Level } → ( p : Set (suc n) ) → p ∨ ( ¬ p )) → ¬ ( X == od∅ ) → choiced X
334 choice-func' X p∨¬p not = have_to_find where
335 ψ : ( ox : Ordinal {suc n}) → Set (suc (suc n))
336 ψ ox = (( x : Ordinal {suc n}) → x o< ox → ( ¬ def X x )) ∨ choiced X
337 lemma-ord : ( ox : Ordinal {suc n} ) → ψ ox
338 lemma-ord ox = TransFinite {n} {suc (suc n)} {ψ} caseΦ caseOSuc1 ox where
339 ∋-p' : (A x : OD ) → Dec ( A ∋ x )
340 ∋-p' A x with p∨¬p ( A ∋ x )
341 ∋-p' A x | case1 t = yes t
342 ∋-p' A x | case2 t = no t
343 ∀-imply-or : {n : Level} {A : Ordinal {suc n} → Set (suc n) } {B : Set (suc (suc n)) }
344 → ((x : Ordinal {suc n}) → A x ∨ B) → ((x : Ordinal {suc n}) → A x) ∨ B
345 ∀-imply-or {n} {A} {B} ∀AB with p∨¬p ((x : Ordinal {suc n}) → A x)
346 ∀-imply-or {n} {A} {B} ∀AB | case1 t = case1 t
347 ∀-imply-or {n} {A} {B} ∀AB | case2 x = case2 (lemma x) where
348 lemma : ¬ ((x : Ordinal {suc n}) → A x) → B
349 lemma not with p∨¬p B
350 lemma not | case1 b = b
351 lemma not | case2 ¬b = ⊥-elim (not (λ x → dont-orb (∀AB x) ¬b ))
352 caseΦ : (lx : Nat) → ( (x : Ordinal {suc n} ) → x o< ordinal lx (Φ lx) → ψ x) → ψ (ordinal lx (Φ lx) )
353 caseΦ lx prev with ∋-p' X ( ord→od (ordinal lx (Φ lx) ))
354 caseΦ lx prev | yes p = case2 ( record { a-choice = ord→od (ordinal lx (Φ lx)) ; is-in = p } )
355 caseΦ lx prev | no ¬p = lemma where
356 lemma1 : (x : Ordinal) → (((Suc (lv x) ≤ lx) ∨ (ord x d< Φ lx) → def X x → ⊥) ∨ choiced X)
357 lemma1 x with trio< x (ordinal lx (Φ lx))
358 lemma1 x | tri< a ¬b ¬c with prev (osuc x) (lemma2 a) where
359 lemma2 : x o< (ordinal lx (Φ lx)) → osuc x o< ordinal lx (Φ lx)
360 lemma2 (case1 lt) = case1 lt
361 lemma1 x | tri< a ¬b ¬c | case2 found = case2 found
362 lemma1 x | tri< a ¬b ¬c | case1 not_found = case1 ( λ lt df → not_found x <-osuc df )
363 lemma1 x | tri≈ ¬a refl ¬c = case1 ( λ lt → ⊥-elim (o<¬≡ refl lt ))
364 lemma1 x | tri> ¬a ¬b c = case1 ( λ lt → ⊥-elim (o<> lt c ))
365 lemma : ((x : Ordinal) → (Suc (lv x) ≤ lx) ∨ (ord x d< Φ lx) → def X x → ⊥) ∨ choiced X
366 lemma = ∀-imply-or lemma1
367 caseOSuc : (lx : Nat) (x : OrdinalD lx) → ψ ( ordinal lx x ) → ψ ( ordinal lx (OSuc lx x) )
368 caseOSuc lx x prev with ∋-p' X (ord→od record { lv = lx ; ord = x } )
369 caseOSuc lx x prev | yes p = case2 (record { a-choice = ord→od record { lv = lx ; ord = x } ; is-in = p })
370 caseOSuc lx x (case1 not_found) | no ¬p = case1 lemma where
371 lemma : (y : Ordinal) → (Suc (lv y) ≤ lx) ∨ (ord y d< OSuc lx x) → def X y → ⊥
372 lemma y lt with trio< y (ordinal lx x )
373 lemma y lt | tri< a ¬b ¬c = not_found y a
374 lemma y lt | tri≈ ¬a refl ¬c = subst (λ k → def X k → ⊥ ) diso ¬p
375 lemma y lt | tri> ¬a ¬b c with osuc-≡< lt
376 lemma y lt | tri> ¬a ¬b c | case1 refl = ⊥-elim ( ¬b refl )
377 lemma y lt | tri> ¬a ¬b c | case2 lt1 = ⊥-elim (o<> c lt1 )
378 caseOSuc lx x (case2 found) | no ¬p = case2 found
379 caseOSuc1 : (lx : Nat) (x : OrdinalD lx) → ((y : Ordinal) → y o< ordinal lx (OSuc lx x) → ψ y) →
380 ψ (record { lv = lx ; ord = OSuc lx x })
381 caseOSuc1 lx x lt = caseOSuc lx x (lt ( ordinal lx x ) (case2 s<refl))
382 have_to_find : choiced X
383 have_to_find with lemma-ord (od→ord X )
384 have_to_find | t = dont-or t ¬¬X∋x where
385 ¬¬X∋x : ¬ ((x : Ordinal) → (Suc (lv x) ≤ lv (od→ord X)) ∨ (ord x d< ord (od→ord X)) → def X x → ⊥)
386 ¬¬X∋x nn = not record {
387 eq→ = λ {x} lt → ⊥-elim (nn x (def→o< lt) lt)
388 ; eq← = λ {x} lt → ⊥-elim ( ¬x<0 lt )
389 }
390