view cardinal.agda @ 227:a4cdfc84f65f

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 11 Aug 2019 18:37:33 +0900
parents 176ff97547b4
children 49736efc822b
line wrap: on
line source

open import Level
open import Ordinals
module cardinal {n : Level } (O : Ordinals {n}) where

open import zf
open import logic
import OD 
open import Data.Nat renaming ( zero to Zero ; suc to Suc ;  ℕ to Nat ; _⊔_ to _n⊔_ ) 
open import Relation.Binary.PropositionalEquality
open import Data.Nat.Properties 
open import Data.Empty
open import Relation.Nullary
open import Relation.Binary
open import Relation.Binary.Core

open inOrdinal O
open OD O
open OD.OD

open _∧_
open _∨_
open Bool


func : (f : Ordinal → Ordinal ) → ( dom : OD ) → OD 
func f dom = Replace dom ( λ x →  x , (ord→od (f (od→ord x) )))

record _⊗_  (A B : Ordinal) : Set n where
   field
      π1 : Ordinal
      π2 : Ordinal
      A∋π1 : def (ord→od A)  π1
      B∋π2 : def (ord→od B)  π2

Func :  ( A B : OD ) → OD
Func A B = record { def = λ x → (od→ord A) ⊗ (od→ord B) }

π1 :  { A B x : OD } → Func A B ∋ x → OD
π1 {A} {B} {x} p = ord→od (_⊗_.π1 p)

π2 :  { A B x : OD } → Func A B ∋ x → OD
π2 {A} {B} {x} p = ord→od (_⊗_.π2 p)

Func→func : { dom cod : OD } → (f : OD )  → Func dom cod ∋ f → (Ordinal → Ordinal )
Func→func {dom} {cod} f lt x = sup-o ( λ y → lemma  y ) where
   lemma : Ordinal → Ordinal
   lemma y with p∨¬p ( _⊗_.π1 lt ≡ x )
   lemma y | case1 refl = _⊗_.π2 lt
   lemma y | case2 not = o∅

-- contra position of sup-o<
--

record Sup ( ψ : Ordinal  →  Ordinal )  : Set n where
   field
        sup-x  : Ordinal 
        sup-lb : {z : Ordinal }  →  z o< sup-o ψ → z o< osuc (ψ sup-x )

sup-o> : ( ψ : Ordinal  →  Ordinal )  → Sup ψ
sup-o> ψ = record {
        sup-x = od→ord ( minimul (Ord (osuc (sup-o ψ))) lemma )
      ; sup-lb = λ {z} z<sψ → lemma1 z<sψ
   } where
       lemma0 : {x : Ordinal} → o∅ o< osuc x
       lemma0 {x} with trio< o∅ (osuc x)
       lemma0 {x} | tri< a ¬b ¬c = a
       lemma0 {x} | tri≈ ¬a refl ¬c = ⊥-elim (¬x<0 <-osuc )
       lemma0 {x} | tri> ¬a ¬b c = ⊥-elim (¬x<0 c)
       lemma : ¬ (Ord (osuc (sup-o ψ)) == od∅)
       lemma record { eq→ = eq→ ; eq← = eq← } = ¬x<0 {o∅} ( eq→  lemma0 )
       lemma1 :  {z : Ordinal} → z o< sup-o ψ → z o< osuc (ψ (od→ord (minimul (Ord (osuc (sup-o ψ))) lemma)))
       lemma1 {z} lt with trio< z (ψ (od→ord (minimul (Ord (osuc (sup-o ψ))) lemma)))
       lemma1 {z} lt | tri< a ¬b ¬c = ordtrans a <-osuc
       lemma1 {z} lt | tri≈ ¬a refl ¬c = <-osuc
       lemma1 {z} lt | tri> ¬a ¬b c = ⊥-elim (o<> c lemma2 ) where
           lemma2 :  z o< ψ (od→ord (minimul (Ord (osuc (sup-o ψ))) lemma))
           lemma2 = ordtrans sup-o< ( o<-subst (x∋minimul (Ord (osuc (sup-o ψ))) lemma ) ? ?)

------------
--
-- Onto map
--          def X x ->  xmap
--     X ---------------------------> Y
--          ymap   <-  def Y y
--
record Onto  (X Y : OD )  : Set n where
   field
       xmap : Ordinal 
       ymap : Ordinal 
       xfunc : def (Func X Y) xmap 
       yfunc : def (Func Y X) ymap 
       onto-iso   : {y :  Ordinal  } → (lty : def Y y ) → Func→func (ord→od xmap) xfunc ( Func→func (ord→od ymap) yfunc y )  ≡ y

record Cardinal  (X  : OD ) : Set n where
   field
       cardinal : Ordinal 
       conto : Onto (Ord cardinal) X 
       cmax : ( y : Ordinal  ) → cardinal o< y → ¬ Onto (Ord y) X 

cardinal :  (X  : OD ) → Cardinal X
cardinal  X = record {
       cardinal = sup-o ( λ x → proj1 ( cardinal-p x) )
     ; conto = onto
     ; cmax = cmax
   } where
    cardinal-p : (x  : Ordinal ) →  ( Ordinal  ∧ Dec (Onto (Ord x) X) )
    cardinal-p x with p∨¬p ( Onto (Ord x) X ) 
    cardinal-p x | case1 True = record { proj1 = x ; proj2 = yes True }
    cardinal-p x | case2 False = record { proj1 = o∅ ; proj2 = no False }
    onto : Onto (Ord (sup-o (λ x → proj1 (cardinal-p x)))) X
    onto = {!!}
    cmax : (y : Ordinal) → sup-o (λ x → proj1 (cardinal-p x)) o< y → ¬ Onto (Ord y) X
    cmax y lt ontoy = o<> lt (o<-subst  {_} {_} {y} {sup-o (λ x → proj1 (cardinal-p x))}
       (sup-o<  {λ x → proj1 ( cardinal-p x)}{y}  ) lemma refl ) where
          lemma : proj1 (cardinal-p y) ≡ y
          lemma with  p∨¬p ( Onto (Ord y) X )
          lemma | case1 x = refl
          lemma | case2 not = ⊥-elim ( not ontoy )


-----
--  All cardinal is ℵ0,  since we are working on Countable Ordinal, 
--  Power ω is larger than ℵ0, so it has no cardinal.