comparison OD.agda @ 400:48ea49494fd1

use induction
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 28 Jul 2020 08:35:58 +0900
parents 03a4e1b8f3fb
children 59152f16125a
comparison
equal deleted inserted replaced
399:03a4e1b8f3fb 400:48ea49494fd1
404 -- ωmax : Ordinal 404 -- ωmax : Ordinal
405 -- <ωmax : {y : Ordinal} → infinite-d y → y o< ωmax 405 -- <ωmax : {y : Ordinal} → infinite-d y → y o< ωmax
406 -- 406 --
407 -- infinite : HOD 407 -- infinite : HOD
408 -- infinite = record { od = record { def = λ x → infinite-d x } ; odmax = ωmax ; <odmax = <ωmax } 408 -- infinite = record { od = record { def = λ x → infinite-d x } ; odmax = ωmax ; <odmax = <ωmax }
409
410 odsuc : (y : HOD) → HOD
411 odsuc y = Union (y , (y , y))
409 412
410 infinite : HOD 413 infinite : HOD
411 infinite = record { od = record { def = λ x → infinite-d x } ; odmax = next o∅ ; <odmax = lemma } where 414 infinite = record { od = record { def = λ x → infinite-d x } ; odmax = next o∅ ; <odmax = lemma } where
412 u : (y : Ordinal ) → HOD 415 u : (y : Ordinal ) → HOD
413 u y = Union (ord→od y , (ord→od y , ord→od y)) 416 u y = Union (ord→od y , (ord→od y , ord→od y))
435 438
436 nat→ω : Nat → HOD 439 nat→ω : Nat → HOD
437 nat→ω Zero = od∅ 440 nat→ω Zero = od∅
438 nat→ω (Suc y) = Union (nat→ω y , (nat→ω y , nat→ω y)) 441 nat→ω (Suc y) = Union (nat→ω y , (nat→ω y , nat→ω y))
439 442
443 ω→nato : {y : Ordinal} → infinite-d y → Nat
444 ω→nato iφ = Zero
445 ω→nato (isuc lt) = Suc (ω→nato lt)
446
440 ω→nat : (n : HOD) → infinite ∋ n → Nat 447 ω→nat : (n : HOD) → infinite ∋ n → Nat
441 ω→nat n = lemma where 448 ω→nat n = ω→nato
442 lemma : {y : Ordinal} → infinite-d y → Nat
443 lemma iφ = Zero
444 lemma (isuc lt) = Suc (lemma lt)
445 449
446 ω∋nat→ω : {n : Nat} → def (od infinite) (od→ord (nat→ω n)) 450 ω∋nat→ω : {n : Nat} → def (od infinite) (od→ord (nat→ω n))
447 ω∋nat→ω {Zero} = subst (λ k → def (od infinite) k) (sym ord-od∅) iφ 451 ω∋nat→ω {Zero} = subst (λ k → def (od infinite) k) (sym ord-od∅) iφ
448 ω∋nat→ω {Suc n} = subst (λ k → def (od infinite) k) lemma (isuc ( ω∋nat→ω {n})) where 452 ω∋nat→ω {Suc n} = subst (λ k → def (od infinite) k) lemma (isuc ( ω∋nat→ω {n})) where
449 lemma : od→ord (Union (ord→od (od→ord (nat→ω n)) , (ord→od (od→ord (nat→ω n)) , ord→od (od→ord (nat→ω n))))) ≡ od→ord (nat→ω (Suc n)) 453 lemma : od→ord (Union (ord→od (od→ord (nat→ω n)) , (ord→od (od→ord (nat→ω n)) , ord→od (od→ord (nat→ω n))))) ≡ od→ord (nat→ω (Suc n))
450 lemma = subst (λ k → od→ord (Union (k , ( k , k ))) ≡ od→ord (nat→ω (Suc n))) (sym oiso) refl 454 lemma = subst (λ k → od→ord (Union (k , ( k , k ))) ≡ od→ord (nat→ω (Suc n))) (sym oiso) refl
451 455
452 _=h=_ : (x y : HOD) → Set n 456 _=h=_ : (x y : HOD) → Set n
453 x =h= y = od x == od y 457 x =h= y = od x == od y
454 458
455 open import Relation.Binary.HeterogeneousEquality as HE using (_≅_ ) 459 -- open import Relation.Binary.HeterogeneousEquality as HE using (_≅_ )
456 postulate f-extensionality : { n m : Level} → HE.Extensionality n m 460 -- postulate f-extensionality : { n m : Level} → HE.Extensionality n m
457
458
459 ord∋eq : {A i : HOD } → { f : (x : HOD ) → A ∋ x → Set (suc n)}
460 → ( ( x : Ordinal ) → ( lx : odef A x ) → f (ord→od x) (d→∋ A lx) )
461 → ( lt : A ∋ i ) → f i lt
462 ord∋eq {A} {i} {f} of lt = lemma oiso lt where
463 lemma2 : (j : Ordinal) → (ltj : odef A j )
464 → (i : HOD) → (lti : odef A (od→ord i) )
465 → (ord→od j ≡ i ) → d→∋ A ltj ≅ lti
466 lemma2 j _ i _ refl = HE.refl
467 lemma1 : (j : Ordinal) → (ltj : odef A j )
468 → (i : HOD) → (lti : odef A (od→ord i) )
469 → (ord→od j ≡ i ) → d→∋ A ltj ≅ lti
470 → f (ord→od j) (d→∋ A ltj) ≡ f i lti
471 lemma1 j _ i _ refl HE.refl = refl
472 lemma0 : (j : Ordinal) → (lt : odef A j ) → f (ord→od j) (d→∋ A lt)
473 lemma0 j lt = of j lt
474 lemma : {i : HOD } → {j : Ordinal} → ord→od j ≡ i → (lti : odef A (od→ord i)) → f i lti
475 lemma {i} {j} refl lt = subst (λ k → f (ord→od j) k ) {!!} ( of j (subst (λ k → odef A k ) diso lt ))
476 461
477 nat→ω-iso : {i : HOD} → (lt : infinite ∋ i ) → nat→ω ( ω→nat i lt ) ≡ i 462 nat→ω-iso : {i : HOD} → (lt : infinite ∋ i ) → nat→ω ( ω→nat i lt ) ≡ i
478 nat→ω-iso {i} lt = ord∋eq {infinite} {i} (λ x lx → lemma lx ) lt where 463 nat→ω-iso {i} lt = lemma lt i (sym oiso) od∅ iφ (sym o∅≡od∅) init where
479 lemma : {x : Ordinal} → (lx : infinite-d x ) → nat→ω ( ω→nat (ord→od x) (d→∋ infinite lx) ) ≡ ord→od x 464 init : nat→ω ( ω→nato iφ ) ≡ od∅
480 lemma {o∅} iφ = begin 465 init = refl
481 nat→ω (ω→nat (ord→od o∅) (d→∋ infinite iφ)) 466 lemma : {x y : Ordinal } → (ltd : infinite-d x ) → (xi : HOD) → xi ≡ ord→od x
482 ≡⟨ {!!} ⟩ 467 → (pi : HOD) → (prev : infinite-d y ) → pi ≡ ord→od y → nat→ω (ω→nato prev) ≡ pi
483 nat→ω Zero 468 → nat→ω (ω→nato ltd) ≡ xi
484 ≡⟨ sym o∅≡od∅ ⟩ 469 lemma {x} {y} ltd xi xi=x p pi prev pi=p = {!!}
485 ord→od o∅ 470
486 ∎ where open ≡-Reasoning 471 nat→ω-iso' : {i : HOD} → (lt : infinite ∋ i ) → nat→ω ( ω→nat i lt ) ≡ i
487 lemma {x1} (isuc lx) = {!!} 472 nat→ω-iso' {i} = ε-induction1 {λ i → (lt : infinite ∋ i ) → nat→ω ( ω→nat i lt ) ≡ i } ind i where
488 473 ind : {x : HOD} → ({y : HOD} → x ∋ y → (lt : infinite ∋ y) → nat→ω (ω→nat y lt) ≡ y) →
474 (lt : infinite ∋ x) → nat→ω (ω→nat x lt) ≡ x
475 ind {x} prev lt = ind1 lt oiso where
476 ind1 : {ox : Ordinal } → (ltd : infinite-d ox ) → ord→od ox ≡ x → nat→ω (ω→nato ltd) ≡ x
477 ind1 {o∅} iφ refl = sym o∅≡od∅
478 ind1 (isuc ltd) ox=x = trans (cong (λ k → odsuc k ) (prev {!!} {!!}) ) ?
479
489 480
490 infixr 200 _∈_ 481 infixr 200 _∈_
491 -- infixr 230 _∩_ _∪_ 482 -- infixr 230 _∩_ _∪_
492 483
493 pair→ : ( x y t : HOD ) → (x , y) ∋ t → ( t =h= x ) ∨ ( t =h= y ) 484 pair→ : ( x y t : HOD ) → (x , y) ∋ t → ( t =h= x ) ∨ ( t =h= y )