# HG changeset patch # User Shinji KONO # Date 1560128025 -32400 # Node ID 02d421f1cc06b67696f501d92719ee3a36a7f7b4 # Parent 9829ba02877fb5bfcc79640db703f2b2dae3e5e0# Parent 52a82415dfc8292480723af41f16cf6bc6c7db0c ZF Set Theory in Agda diff -r 9829ba02877f -r 02d421f1cc06 .hgtags --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgtags Mon Jun 10 09:53:45 2019 +0900 @@ -0,0 +1,7 @@ +264784731a67c6781c7aa95f24feabe5c38629ea current +264784731a67c6781c7aa95f24feabe5c38629ea current +92a11dc6425c89c9a19c6377571db0755c71492e current +92a11dc6425c89c9a19c6377571db0755c71492e current +b4742cf4ef978434d98a6f0a2f891a944dea5906 current +b4742cf4ef978434d98a6f0a2f891a944dea5906 current +a402881cc341fb6499f60bd0f55795dbef5efc70 current diff -r 9829ba02877f -r 02d421f1cc06 ordinal-definable.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ordinal-definable.agda Mon Jun 10 09:53:45 2019 +0900 @@ -0,0 +1,459 @@ +open import Level +module ordinal-definable where + +open import zf +open import ordinal + +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 + +-- Ordinal Definable Set + +record OD {n : Level} : Set (suc n) where + field + def : (x : Ordinal {n} ) → Set n + +open OD +open import Data.Unit + +open Ordinal + +record _==_ {n : Level} ( a b : OD {n} ) : Set n where + field + eq→ : ∀ { x : Ordinal {n} } → def a x → def b x + eq← : ∀ { x : Ordinal {n} } → def b x → def a x + +id : {n : Level} {A : Set n} → A → A +id x = x + +eq-refl : {n : Level} { x : OD {n} } → x == x +eq-refl {n} {x} = record { eq→ = id ; eq← = id } + +open _==_ + +eq-sym : {n : Level} { x y : OD {n} } → x == y → y == x +eq-sym eq = record { eq→ = eq← eq ; eq← = eq→ eq } + +eq-trans : {n : Level} { x y z : OD {n} } → x == y → y == z → x == z +eq-trans x=y y=z = record { eq→ = λ t → eq→ y=z ( eq→ x=y t) ; eq← = λ t → eq← x=y ( eq← y=z t) } + +od∅ : {n : Level} → OD {n} +od∅ {n} = record { def = λ _ → Lift n ⊥ } + + +postulate + -- OD can be iso to a subset of Ordinal ( by means of Godel Set ) + od→ord : {n : Level} → OD {n} → Ordinal {n} + ord→od : {n : Level} → Ordinal {n} → OD {n} + c<→o< : {n : Level} {x y : OD {n} } → def y ( od→ord x ) → od→ord x o< od→ord y + o<→c< : {n : Level} {x y : Ordinal {n} } → x o< y → def (ord→od y) x + oiso : {n : Level} {x : OD {n}} → ord→od ( od→ord x ) ≡ x + diso : {n : Level} {x : Ordinal {n}} → od→ord ( ord→od x ) ≡ x + -- supermum as Replacement Axiom + sup-o : {n : Level } → ( Ordinal {n} → Ordinal {n}) → Ordinal {n} + sup-o< : {n : Level } → { ψ : Ordinal {n} → Ordinal {n}} → ∀ {x : Ordinal {n}} → ψ x o< sup-o ψ + -- a property of supermum required in Power Set Axiom + sup-x : {n : Level } → ( Ordinal {n} → Ordinal {n}) → Ordinal {n} + sup-lb : {n : Level } → { ψ : Ordinal {n} → Ordinal {n}} → {z : Ordinal {n}} → z o< sup-o ψ → z o< osuc (ψ (sup-x ψ)) + -- sup-lb : {n : Level } → ( ψ : Ordinal {n} → Ordinal {n}) → ( ∀ {x : Ordinal {n}} → ψx o< z ) → z o< osuc ( sup-o ψ ) + +_∋_ : { n : Level } → ( a x : OD {n} ) → Set n +_∋_ {n} a x = def a ( od→ord x ) + +_c<_ : { n : Level } → ( x a : OD {n} ) → Set n +x c< a = a ∋ x + +_c≤_ : {n : Level} → OD {n} → OD {n} → Set (suc n) +a c≤ b = (a ≡ b) ∨ ( b ∋ a ) + +def-subst : {n : Level } {Z : OD {n}} {X : Ordinal {n} }{z : OD {n}} {x : Ordinal {n} }→ def Z X → Z ≡ z → X ≡ x → def z x +def-subst df refl refl = df + +sup-od : {n : Level } → ( OD {n} → OD {n}) → OD {n} +sup-od ψ = ord→od ( sup-o ( λ x → od→ord (ψ (ord→od x ))) ) + +sup-c< : {n : Level } → ( ψ : OD {n} → OD {n}) → ∀ {x : OD {n}} → def ( sup-od ψ ) (od→ord ( ψ x )) +sup-c< {n} ψ {x} = def-subst {n} {_} {_} {sup-od ψ} {od→ord ( ψ x )} + ( o<→c< sup-o< ) refl (cong ( λ k → od→ord (ψ k) ) oiso) + +∅1 : {n : Level} → ( x : OD {n} ) → ¬ ( x c< od∅ {n} ) +∅1 {n} x (lift ()) + +∅3 : {n : Level} → { x : Ordinal {n}} → ( ∀(y : Ordinal {n}) → ¬ (y o< x ) ) → x ≡ o∅ {n} +∅3 {n} {x} = TransFinite {n} c2 c3 x where + c0 : Nat → Ordinal {n} → Set n + c0 lx x = (∀(y : Ordinal {n}) → ¬ (y o< x)) → x ≡ o∅ {n} + c2 : (lx : Nat) → c0 lx (record { lv = lx ; ord = Φ lx } ) + c2 Zero not = refl + c2 (Suc lx) not with not ( record { lv = lx ; ord = Φ lx } ) + ... | t with t (case1 ≤-refl ) + c2 (Suc lx) not | t | () + c3 : (lx : Nat) (x₁ : OrdinalD lx) → c0 lx (record { lv = lx ; ord = x₁ }) → c0 lx (record { lv = lx ; ord = OSuc lx x₁ }) + c3 lx (Φ .lx) d not with not ( record { lv = lx ; ord = Φ lx } ) + ... | t with t (case2 Φ< ) + c3 lx (Φ .lx) d not | t | () + c3 lx (OSuc .lx x₁) d not with not ( record { lv = lx ; ord = OSuc lx x₁ } ) + ... | t with t (case2 (s< s→¬< : {x y : Nat } → (x < y ) → ¬ ( y < x ) +>→¬< (s≤s x→¬< x : {n : Level} → { x y : OD {n} } → (x == y) → (od→ord x ) o< ( od→ord y) → ⊥ +o<→o> {n} {x} {y} record { eq→ = xy ; eq← = yx } (case1 lt) with + yx (def-subst {n} {ord→od (od→ord y)} {od→ord x} (o<→c< (case1 lt )) oiso refl ) +... | oyx with o<¬≡ (od→ord x) (od→ord x) refl (c<→o< oyx ) +... | () +o<→o> {n} {x} {y} record { eq→ = xy ; eq← = yx } (case2 lt) with + yx (def-subst {n} {ord→od (od→ord y)} {od→ord x} (o<→c< (case2 lt )) oiso refl ) +... | oyx with o<¬≡ (od→ord x) (od→ord x) refl (c<→o< oyx ) +... | () + +==→o≡ : {n : Level} → { x y : Ordinal {suc n} } → ord→od x == ord→od y → x ≡ y +==→o≡ {n} {x} {y} eq with trio< {n} x y +==→o≡ {n} {x} {y} eq | tri< a ¬b ¬c = ⊥-elim ( o<→o> eq (o<-subst a (sym ord-iso) (sym ord-iso ))) +==→o≡ {n} {x} {y} eq | tri≈ ¬a b ¬c = b +==→o≡ {n} {x} {y} eq | tri> ¬a ¬b c = ⊥-elim ( o<→o> (eq-sym eq) (o<-subst c (sym ord-iso) (sym ord-iso ))) + +≡-def : {n : Level} → { x : Ordinal {suc n} } → x ≡ od→ord (record { def = λ z → z o< x } ) +≡-def {n} {x} = ==→o≡ {n} (subst (λ k → ord→od x == k ) (sym oiso) lemma ) where + lemma : ord→od x == record { def = λ z → z o< x } + eq→ lemma {w} z = subst₂ (λ k j → k o< j ) diso refl (subst (λ k → (od→ord ( ord→od w)) o< k ) diso t ) where + t : (od→ord ( ord→od w)) o< (od→ord (ord→od x)) + t = c<→o< {suc n} {ord→od w} {ord→od x} (def-subst {suc n} {_} {_} {ord→od x} {_} z refl (sym diso)) + eq← lemma {w} z = def-subst {suc n} {_} {_} {ord→od x} {w} ( o<→c< {suc n} {_} {_} z ) refl refl + +od≡-def : {n : Level} → { x : Ordinal {suc n} } → ord→od x ≡ record { def = λ z → z o< x } +od≡-def {n} {x} = subst (λ k → ord→od x ≡ k ) oiso (cong ( λ k → ord→od k ) (≡-def {n} {x} )) + +==→o≡1 : {n : Level} → { x y : OD {suc n} } → x == y → od→ord x ≡ od→ord y +==→o≡1 eq = ==→o≡ (subst₂ (λ k j → k == j ) (sym oiso) (sym oiso) eq ) + +==-def-l : {n : Level } {x y : Ordinal {suc n} } { z : OD {suc n} }→ (ord→od x == ord→od y) → def z x → def z y +==-def-l {n} {x} {y} {z} eq z>x = subst ( λ k → def z k ) (==→o≡ eq) z>x + +==-def-r : {n : Level } {x y : OD {suc n} } { z : Ordinal {suc n} }→ (x == y) → def x z → def y z +==-def-r {n} {x} {y} {z} eq z>x = subst (λ k → def k z ) (subst₂ (λ j k → j ≡ k ) oiso oiso (cong (λ k → ord→od k) (==→o≡1 eq))) z>x + +∋→o< : {n : Level} → { a x : OD {suc n} } → a ∋ x → od→ord x o< od→ord a +∋→o< {n} {a} {x} lt = t where + t : (od→ord x) o< (od→ord a) + t = c<→o< {suc n} {x} {a} lt + +o<∋→ : {n : Level} → { a x : OD {suc n} } → od→ord x o< od→ord a → a ∋ x +o<∋→ {n} {a} {x} lt = subst₂ (λ k j → def k j ) oiso refl t where + t : def (ord→od (od→ord a)) (od→ord x) + t = o<→c< {suc n} {od→ord x} {od→ord a} lt + +o∅≡od∅ : {n : Level} → ord→od (o∅ {suc n}) ≡ od∅ {suc n} +o∅≡od∅ {n} with trio< {n} (o∅ {suc n}) (od→ord (od∅ {suc n} )) +o∅≡od∅ {n} | tri< a ¬b ¬c = ⊥-elim (lemma a) where + lemma : o∅ {suc n } o< (od→ord (od∅ {suc n} )) → ⊥ + lemma lt with def-subst (o<→c< lt) oiso refl + lemma lt | lift () +o∅≡od∅ {n} | tri≈ ¬a b ¬c = trans (cong (λ k → ord→od k ) b ) oiso +o∅≡od∅ {n} | tri> ¬a ¬b c = ⊥-elim (¬x<0 c) + +o<→¬== : {n : Level} → { x y : OD {n} } → (od→ord x ) o< ( od→ord y) → ¬ (x == y ) +o<→¬== {n} {x} {y} lt eq = o<→o> eq lt + +o<→¬c> : {n : Level} → { x y : OD {n} } → (od→ord x ) o< ( od→ord y) → ¬ (y c< x ) +o<→¬c> {n} {x} {y} olt clt = o<> olt (c<→o< clt ) where + +o≡→¬c< : {n : Level} → { x y : OD {n} } → (od→ord x ) ≡ ( od→ord y) → ¬ x c< y +o≡→¬c< {n} {x} {y} oeq lt = o<¬≡ (od→ord x) (od→ord y) (orefl oeq ) (c<→o< lt) + +tri-c< : {n : Level} → Trichotomous _==_ (_c<_ {suc n}) +tri-c< {n} x y with trio< {n} (od→ord x) (od→ord y) +tri-c< {n} x y | tri< a ¬b ¬c = tri< (def-subst (o<→c< a) oiso refl) (o<→¬== a) ( o<→¬c> a ) +tri-c< {n} x y | tri≈ ¬a b ¬c = tri≈ (o≡→¬c< b) (ord→== b) (o≡→¬c< (sym b)) +tri-c< {n} x y | tri> ¬a ¬b c = tri> ( o<→¬c> c) (λ eq → o<→¬== c (eq-sym eq ) ) (def-subst (o<→c< c) oiso refl) + +c<> : {n : Level } { x y : OD {suc n}} → x c< y → y c< x → ⊥ +c<> {n} {x} {y} x {n} {x} {y} x {n} {x} {y} x b ( c<→o< x {n} {x} {y} x ¬a ¬b c = ¬a x {n} {x} {x} x∋x x∋x + +def-iso : {n : Level} {A B : OD {n}} {x y : Ordinal {n}} → x ≡ y → (def A y → def B y) → def A x → def B x +def-iso refl t = t + +is-∋ : {n : Level} → ( x y : OD {suc n} ) → Dec ( x ∋ y ) +is-∋ {n} x y with tri-c< x y +is-∋ {n} x y | tri< a ¬b ¬c = no ¬c +is-∋ {n} x y | tri≈ ¬a b ¬c = no ¬c +is-∋ {n} x y | tri> ¬a ¬b c = yes c + +is-o∅ : {n : Level} → ( x : Ordinal {suc n} ) → Dec ( x ≡ o∅ {suc n} ) +is-o∅ {n} record { lv = Zero ; ord = (Φ .0) } = yes refl +is-o∅ {n} record { lv = Zero ; ord = (OSuc .0 ord₁) } = no ( λ () ) +is-o∅ {n} record { lv = (Suc lv₁) ; ord = ord } = no (λ()) + +open _∧_ + +¬∅=→∅∈ : {n : Level} → { x : OD {suc n} } → ¬ ( x == od∅ {suc n} ) → x ∋ od∅ {suc n} +¬∅=→∅∈ {n} {x} ne = def-subst (lemma (od→ord x) (subst (λ k → ¬ (k == od∅ {suc n} )) (sym oiso) ne )) oiso refl where + lemma : (ox : Ordinal {suc n}) → ¬ (ord→od ox == od∅ {suc n} ) → ord→od ox ∋ od∅ {suc n} + lemma ox ne with is-o∅ ox + lemma ox ne | yes refl with ne ( ord→== lemma1 ) where + lemma1 : od→ord (ord→od o∅) ≡ od→ord od∅ + lemma1 = cong ( λ k → od→ord k ) o∅≡od∅ + lemma o∅ ne | yes refl | () + lemma ox ne | no ¬p = subst ( λ k → def (ord→od ox) (od→ord k) ) o∅≡od∅ (o<→c< (subst (λ k → k o< ox ) (sym diso) (∅5 ¬p)) ) + +-- open import Relation.Binary.HeterogeneousEquality as HE using (_≅_ ) +-- postulate f-extensionality : { n : Level} → Relation.Binary.PropositionalEquality.Extensionality (suc n) (suc (suc n)) + +csuc : {n : Level} → OD {suc n} → OD {suc n} +csuc x = ord→od ( osuc ( od→ord x )) + +-- Power Set of X ( or constructible by λ y → def X (od→ord y ) + +ZFSubset : {n : Level} → (A x : OD {suc n} ) → OD {suc n} +ZFSubset A x = record { def = λ y → def A y ∧ def x y } + +Def : {n : Level} → (A : OD {suc n}) → OD {suc n} +Def {n} A = ord→od ( sup-o ( λ x → od→ord ( ZFSubset A (ord→od x )) ) ) + +-- Constructible Set on α +L : {n : Level} → (α : Ordinal {suc n}) → OD {suc n} +L {n} record { lv = Zero ; ord = (Φ .0) } = od∅ +L {n} record { lv = lx ; ord = (OSuc lv ox) } = Def ( L {n} ( record { lv = lx ; ord = ox } ) ) +L {n} record { lv = (Suc lx) ; ord = (Φ (Suc lx)) } = -- Union ( L α ) + record { def = λ y → osuc y o< (od→ord (L {n} (record { lv = lx ; ord = Φ lx }) )) } + +OD→ZF : {n : Level} → ZF {suc (suc n)} {suc n} +OD→ZF {n} = record { + ZFSet = OD {suc n} + ; _∋_ = _∋_ + ; _≈_ = _==_ + ; ∅ = od∅ + ; _,_ = _,_ + ; Union = Union + ; Power = Power + ; Select = Select + ; Replace = Replace + ; infinite = ord→od ( record { lv = Suc Zero ; ord = Φ 1 } ) + ; isZF = isZF + } where + Replace : OD {suc n} → (OD {suc n} → OD {suc n} ) → OD {suc n} + Replace X ψ = sup-od ψ + Select : OD {suc n} → (OD {suc n} → Set (suc n) ) → OD {suc n} + Select X ψ = record { def = λ x → ( def X x ∧ ψ ( ord→od x )) } + _,_ : OD {suc n} → OD {suc n} → OD {suc n} + x , y = record { def = λ z → z o< (omax (od→ord x) (od→ord y)) } + Union : OD {suc n} → OD {suc n} + Union U = record { def = λ y → osuc y o< (od→ord U) } + -- power : ∀ X ∃ A ∀ t ( t ∈ A ↔ ( ∀ {x} → t ∋ x → X ∋ x ) + Power : OD {suc n} → OD {suc n} + Power A = Def A + ZFSet = OD {suc n} + _∈_ : ( A B : ZFSet ) → Set (suc n) + A ∈ B = B ∋ A + _⊆_ : ( A B : ZFSet ) → ∀{ x : ZFSet } → Set (suc n) + _⊆_ A B {x} = A ∋ x → B ∋ x + -- _∩_ : ( A B : ZFSet ) → ZFSet + -- A ∩ B = Select (A , B) ( λ x → ( A ∋ x ) ∧ (B ∋ x) ) + -- _∪_ : ( A B : ZFSet ) → ZFSet + -- A ∪ B = Select (A , B) ( λ x → (A ∋ x) ∨ ( B ∋ x ) ) + infixr 200 _∈_ + -- infixr 230 _∩_ _∪_ + infixr 220 _⊆_ + isZF : IsZF (OD {suc n}) _∋_ _==_ od∅ _,_ Union Power Select Replace (ord→od ( record { lv = Suc Zero ; ord = Φ 1} )) + isZF = record { + isEquivalence = record { refl = eq-refl ; sym = eq-sym; trans = eq-trans } + ; pair = pair + ; union-u = λ _ z _ → csuc z + ; union→ = union→ + ; union← = union← + ; empty = empty + ; power→ = power→ + ; power← = power← + ; extensionality = extensionality + ; minimul = minimul + ; regularity = regularity + ; infinity∅ = infinity∅ + ; infinity = λ _ → infinity + ; selection = λ {ψ} {X} {y} → selection {ψ} {X} {y} + ; replacement = replacement + } where + open _∧_ + open Minimumo + pair : (A B : OD {suc n} ) → ((A , B) ∋ A) ∧ ((A , B) ∋ B) + proj1 (pair A B ) = omax-x {n} (od→ord A) (od→ord B) + proj2 (pair A B ) = omax-y {n} (od→ord A) (od→ord B) + empty : (x : OD {suc n} ) → ¬ (od∅ ∋ x) + empty x () + --- + --- ZFSubset A x = record { def = λ y → def A y ∧ def x y } subset of A + --- Power X = ord→od ( sup-o ( λ x → od→ord ( ZFSubset A (ord→od x )) ) ) Power X is a sup of all subset of A + -- + -- if Power A ∋ t, from a propertiy of minimum sup there is osuc ZFSubset A ∋ t + -- then ZFSubset A ≡ t or ZFSubset A ∋ t. In the former case ZFSubset A ∋ x implies A ∋ x + -- In case of later, ZFSubset A ∋ t and t ∋ x implies ZFSubset A ∋ x by transitivity + -- + power→ : (A t : OD) → Power A ∋ t → {x : OD} → t ∋ x → A ∋ x + power→ A t P∋t {x} t∋x = proj1 lemma-s where + minsup : OD + minsup = ZFSubset A ( ord→od ( sup-x (λ x → od→ord ( ZFSubset A (ord→od x))))) + lemma-t : csuc minsup ∋ t + lemma-t = o<→c< (o<-subst (sup-lb (o<-subst (c<→o< P∋t) refl diso )) refl refl ) + lemma-s : ZFSubset A ( ord→od ( sup-x (λ x → od→ord ( ZFSubset A (ord→od x))))) ∋ x + lemma-s with osuc-≡< ( o<-subst (c<→o< lemma-t ) refl diso ) + lemma-s | case1 eq = def-subst ( ==-def-r (o≡→== eq) (subst (λ k → def k (od→ord x)) (sym oiso) t∋x ) ) oiso refl + lemma-s | case2 lt = transitive {n} {minsup} {t} {x} (def-subst (o<→c< lt) oiso refl ) t∋x + -- + -- we have t ∋ x → A ∋ x means t is a subset of A, that is ZFSubset A t == t + -- Power A is a sup of ZFSubset A t, so Power A ∋ t + -- + power← : (A t : OD) → ({x : OD} → (t ∋ x → A ∋ x)) → Power A ∋ t + power← A t t→A = def-subst {suc n} {_} {_} {Power A} {od→ord t} + ( o<→c< {suc n} {od→ord (ZFSubset A (ord→od (od→ord t)) )} {sup-o (λ x → od→ord (ZFSubset A (ord→od x)))} + lemma ) refl lemma1 where + lemma-eq : ZFSubset A t == t + eq→ lemma-eq {z} w = proj2 w + eq← lemma-eq {z} w = record { proj2 = w ; + proj1 = def-subst {suc n} {_} {_} {A} {z} ( t→A (def-subst {suc n} {_} {_} {t} {od→ord (ord→od z)} w refl (sym diso) )) refl diso } + lemma1 : od→ord (ZFSubset A (ord→od (od→ord t))) ≡ od→ord t + lemma1 = subst (λ k → od→ord (ZFSubset A k) ≡ od→ord t ) (sym oiso) (==→o≡1 (lemma-eq)) + lemma : od→ord (ZFSubset A (ord→od (od→ord t)) ) o< sup-o (λ x → od→ord (ZFSubset A (ord→od x))) + lemma = sup-o< + union-lemma-u : {X z : OD {suc n}} → (U>z : Union X ∋ z ) → csuc z ∋ z + union-lemma-u {X} {z} U>z = lemma <-osuc where + lemma : {oz ooz : Ordinal {suc n}} → oz o< ooz → def (ord→od ooz) oz + lemma {oz} {ooz} lt = def-subst {suc n} {ord→od ooz} (o<→c< lt) refl refl + union→ : (X z u : OD) → (X ∋ u) ∧ (u ∋ z) → Union X ∋ z + union→ X y u xx with trio< ( od→ord u ) ( osuc ( od→ord y )) + union→ X y u xx | tri< a ¬b ¬c with osuc-< a (c<→o< (proj2 xx)) + union→ X y u xx | tri< a ¬b ¬c | () + union→ X y u xx | tri≈ ¬a b ¬c = lemma b (c<→o< (proj1 xx )) where + lemma : {oX ou ooy : Ordinal {suc n}} → ou ≡ ooy → ou o< oX → ooy o< oX + lemma refl lt = lt + union→ X y u xx | tri> ¬a ¬b c = ordtrans {suc n} {osuc ( od→ord y )} {od→ord u} {od→ord X} c ( c<→o< (proj1 xx )) + union← : (X z : OD) (X∋z : Union X ∋ z) → (X ∋ csuc z) ∧ (csuc z ∋ z ) + union← X z X∋z = record { proj1 = def-subst {suc n} {_} {_} {X} {od→ord (csuc z )} (o<→c< X∋z) oiso (sym diso) ; proj2 = union-lemma-u X∋z } + ψiso : {ψ : OD {suc n} → Set (suc n)} {x y : OD {suc n}} → ψ x → x ≡ y → ψ y + ψiso {ψ} t refl = t + selection : {ψ : OD → Set (suc n)} {X y : OD} → ((X ∋ y) ∧ ψ y) ⇔ (Select X ψ ∋ y) + selection {ψ} {X} {y} = record { + proj1 = λ cond → record { proj1 = proj1 cond ; proj2 = ψiso {ψ} (proj2 cond) (sym oiso) } + ; proj2 = λ select → record { proj1 = proj1 select ; proj2 = ψiso {ψ} (proj2 select) oiso } + } + replacement : {ψ : OD → OD} (X x : OD) → Replace X ψ ∋ ψ x + replacement {ψ} X x = sup-c< ψ {x} + ∅-iso : {x : OD} → ¬ (x == od∅) → ¬ ((ord→od (od→ord x)) == od∅) + ∅-iso {x} neq = subst (λ k → ¬ k) (=-iso {n} ) neq + minimul : (x : OD {suc n} ) → ¬ (x == od∅ )→ OD {suc n} + minimul x not = od∅ + regularity : (x : OD) (not : ¬ (x == od∅)) → + (x ∋ minimul x not) ∧ (Select (minimul x not) (λ x₁ → (minimul x not ∋ x₁) ∧ (x ∋ x₁)) == od∅) + proj1 (regularity x not ) = ¬∅=→∅∈ not + proj2 (regularity x not ) = record { eq→ = reg ; eq← = λ () } where + reg : {y : Ordinal} → def (Select (minimul x not) (λ x₂ → (minimul x not ∋ x₂) ∧ (x ∋ x₂))) y → def od∅ y + reg {y} t with proj1 t + ... | x∈∅ = x∈∅ + extensionality : {A B : OD {suc n}} → ((z : OD) → (A ∋ z) ⇔ (B ∋ z)) → A == B + eq→ (extensionality {A} {B} eq ) {x} d = def-iso {suc n} {A} {B} (sym diso) (proj1 (eq (ord→od x))) d + eq← (extensionality {A} {B} eq ) {x} d = def-iso {suc n} {B} {A} (sym diso) (proj2 (eq (ord→od x))) d + xx-union : {x : OD {suc n}} → (x , x) ≡ record { def = λ z → z o< osuc (od→ord x) } + xx-union {x} = cong ( λ k → record { def = λ z → z o< k } ) (omxx (od→ord x)) + xxx-union : {x : OD {suc n}} → (x , (x , x)) ≡ record { def = λ z → z o< osuc (osuc (od→ord x))} + xxx-union {x} = cong ( λ k → record { def = λ z → z o< k } ) lemma where + lemma1 : {x : OD {suc n}} → od→ord x o< od→ord (x , x) + lemma1 {x} = c<→o< ( proj1 (pair x x ) ) + lemma2 : {x : OD {suc n}} → od→ord (x , x) ≡ osuc (od→ord x) + lemma2 = trans ( cong ( λ k → od→ord k ) xx-union ) (sym ≡-def) + lemma : {x : OD {suc n}} → omax (od→ord x) (od→ord (x , x)) ≡ osuc (osuc (od→ord x)) + lemma {x} = trans ( sym ( omax< (od→ord x) (od→ord (x , x)) lemma1 ) ) ( cong ( λ k → osuc k ) lemma2 ) + uxxx-union : {x : OD {suc n}} → Union (x , (x , x)) ≡ record { def = λ z → osuc z o< osuc (osuc (od→ord x)) } + uxxx-union {x} = cong ( λ k → record { def = λ z → osuc z o< k } ) lemma where + lemma : od→ord (x , (x , x)) ≡ osuc (osuc (od→ord x)) + lemma = trans ( cong ( λ k → od→ord k ) xxx-union ) (sym ≡-def ) + uxxx-2 : {x : OD {suc n}} → record { def = λ z → osuc z o< osuc (osuc (od→ord x)) } == record { def = λ z → z o< osuc (od→ord x) } + eq→ ( uxxx-2 {x} ) {m} lt = proj1 (osuc2 m (od→ord x)) lt + eq← ( uxxx-2 {x} ) {m} lt = proj2 (osuc2 m (od→ord x)) lt + uxxx-ord : {x : OD {suc n}} → od→ord (Union (x , (x , x))) ≡ osuc (od→ord x) + uxxx-ord {x} = trans (cong (λ k → od→ord k ) uxxx-union) (==→o≡ (subst₂ (λ j k → j == k ) (sym oiso) (sym od≡-def ) uxxx-2 )) + omega = record { lv = Suc Zero ; ord = Φ 1 } + infinite : OD {suc n} + infinite = ord→od ( omega ) + infinity∅ : ord→od ( omega ) ∋ od∅ {suc n} + infinity∅ = def-subst {suc n} {_} {o∅} {infinite} {od→ord od∅} + (o<→c< ( case1 (s≤s z≤n ))) refl (subst ( λ k → ( k ≡ od→ord od∅ )) diso (cong (λ k → od→ord k) o∅≡od∅ )) + infinite∋x : (x : OD) → infinite ∋ x → od→ord x o< omega + infinite∋x x lt = subst (λ k → od→ord x o< k ) diso t where + t : od→ord x o< od→ord (ord→od (omega)) + t = ∋→o< {n} {infinite} {x} lt + infinite∋uxxx : (x : OD) → osuc (od→ord x) o< omega → infinite ∋ Union (x , (x , x )) + infinite∋uxxx x lt = o<∋→ t where + t : od→ord (Union (x , (x , x))) o< od→ord (ord→od (omega)) + t = subst (λ k → od→ord (Union (x , (x , x))) o< k ) (sym diso ) ( subst ( λ k → k o< omega ) ( sym (uxxx-ord {x} ) ) lt ) + infinity : (x : OD) → infinite ∋ x → infinite ∋ Union (x , (x , x )) + infinity x lt = infinite∋uxxx x ( lemma (od→ord x) (infinite∋x x lt )) where + lemma : (ox : Ordinal {suc n} ) → ox o< omega → osuc ox o< omega + lemma record { lv = Zero ; ord = (Φ .0) } (case1 (s≤s x)) = case1 (s≤s z≤n) + lemma record { lv = Zero ; ord = (OSuc .0 ord₁) } (case1 (s≤s x)) = case1 (s≤s z≤n) + lemma record { lv = (Suc lv₁) ; ord = (Φ .(Suc lv₁)) } (case1 (s≤s ())) + lemma record { lv = (Suc lv₁) ; ord = (OSuc .(Suc lv₁) ord₁) } (case1 (s≤s ())) + lemma record { lv = 1 ; ord = (Φ 1) } (case2 c2) with d<→lv c2 + lemma record { lv = (Suc Zero) ; ord = (Φ .1) } (case2 ()) | refl + diff -r 9829ba02877f -r 02d421f1cc06 ordinal.agda --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ordinal.agda Mon Jun 10 09:53:45 2019 +0900 @@ -0,0 +1,292 @@ +{-# OPTIONS --allow-unsolved-metas #-} +open import Level +module ordinal where + +open import zf + +open import Data.Nat renaming ( zero to Zero ; suc to Suc ; ℕ to Nat ; _⊔_ to _n⊔_ ) +open import Data.Empty +open import Relation.Binary.PropositionalEquality + +data OrdinalD {n : Level} : (lv : Nat) → Set n where + Φ : (lv : Nat) → OrdinalD lv + OSuc : (lv : Nat) → OrdinalD {n} lv → OrdinalD lv + +record Ordinal {n : Level} : Set n where + field + lv : Nat + ord : OrdinalD {n} lv + +-- +-- Φ (Suc lv) < ℵ lv < OSuc (Suc lv) (ℵ lv) < OSuc ... < OSuc (Suc lv) (Φ (Suc lv)) < OSuc ... < ℵ (Suc lv) +-- +data _d<_ {n : Level} : {lx ly : Nat} → OrdinalD {n} lx → OrdinalD {n} ly → Set n where + Φ< : {lx : Nat} → {x : OrdinalD {n} lx} → Φ lx d< OSuc lx x + s< : {lx : Nat} → {x y : OrdinalD {n} lx} → x d< y → OSuc lx x d< OSuc lx y + +open Ordinal + +_o<_ : {n : Level} ( x y : Ordinal ) → Set n +_o<_ x y = (lv x < lv y ) ∨ ( ord x d< ord y ) + +s : {n : Level} → {lx : Nat} {x : OrdinalD {n} lx } { y : OrdinalD lx } → y d< x → x d< y → ⊥ +trio<> {n} {lx} {.(OSuc lx _)} {.(OSuc lx _)} (s< s) (s< t) = trio<> s t +trio<> {n} {lx} {.(OSuc lx _)} {.(Φ lx)} Φ< () + +d<→lv : {n : Level} {x y : Ordinal {n}} → ord x d< ord y → lv x ≡ lv y +d<→lv Φ< = refl +d<→lv (s< lt) = refl + +o<-subst : {n : Level } {Z X z x : Ordinal {n}} → Z o< X → Z ≡ z → X ≡ x → z o< x +o<-subst df refl refl = df + +open import Data.Nat.Properties +open import Data.Unit using ( ⊤ ) +open import Relation.Nullary + +open import Relation.Binary +open import Relation.Binary.Core + +o∅ : {n : Level} → Ordinal {n} +o∅ = record { lv = Zero ; ord = Φ Zero } + +open import Relation.Binary.HeterogeneousEquality using (_≅_;refl) + +ordinal-cong : {n : Level} {x y : Ordinal {n}} → + lv x ≡ lv y → ord x ≅ ord y → x ≡ y +ordinal-cong refl refl = refl + +ordinal-lv : {n : Level} {x y : Ordinal {n}} → x ≡ y → lv x ≡ lv y +ordinal-lv refl = refl + +ordinal-d : {n : Level} {x y : Ordinal {n}} → x ≡ y → ord x ≅ ord y +ordinal-d refl = refl + +≡→¬d< : {n : Level} → {lv : Nat} → {x : OrdinalD {n} lv } → x d< x → ⊥ +≡→¬d< {n} {lx} {OSuc lx y} (s< t) = ≡→¬d< t + +trio<≡ : {n : Level} → {lx : Nat} {x : OrdinalD {n} lx } { y : OrdinalD lx } → x ≡ y → x d< y → ⊥ +trio<≡ refl = ≡→¬d< + +trio>≡ : {n : Level} → {lx : Nat} {x : OrdinalD {n} lx } { y : OrdinalD lx } → x ≡ y → y d< x → ⊥ +trio>≡ refl = ≡→¬d< + +triO : {n : Level} → {lx ly : Nat} → OrdinalD {n} lx → OrdinalD {n} ly → Tri (lx < ly) ( lx ≡ ly ) ( lx > ly ) +triO {n} {lx} {ly} x y = <-cmp lx ly + +triOrdd : {n : Level} → {lx : Nat} → Trichotomous _≡_ ( _d<_ {n} {lx} {lx} ) +triOrdd {_} {lv} (Φ lv) (Φ lv) = tri≈ ≡→¬d< refl ≡→¬d< +triOrdd {_} {lv} (Φ lv) (OSuc lv y) = tri< Φ< (λ ()) ( λ lt → trio<> lt Φ< ) +triOrdd {_} {lv} (OSuc lv x) (Φ lv) = tri> (λ lt → trio<> lt Φ<) (λ ()) Φ< +triOrdd {_} {lv} (OSuc lv x) (OSuc lv y) with triOrdd x y +triOrdd {_} {lv} (OSuc lv x) (OSuc lv y) | tri< a ¬b ¬c = tri< (s< a) (λ tx=ty → trio<≡ tx=ty (s< a) ) ( λ lt → trio<> lt (s< a) ) +triOrdd {_} {lv} (OSuc lv x) (OSuc lv x) | tri≈ ¬a refl ¬c = tri≈ ≡→¬d< refl ≡→¬d< +triOrdd {_} {lv} (OSuc lv x) (OSuc lv y) | tri> ¬a ¬b c = tri> ( λ lt → trio<> lt (s< c) ) (λ tx=ty → trio>≡ tx=ty (s< c) ) (s< c) + +osuc : {n : Level} ( x : Ordinal {n} ) → Ordinal {n} +osuc record { lv = lx ; ord = ox } = record { lv = lx ; ord = OSuc lx ox } + +<-osuc : {n : Level} { x : Ordinal {n} } → x o< osuc x +<-osuc {n} {record { lv = lx ; ord = Φ .lx }} = case2 Φ< +<-osuc {n} {record { lv = lx ; ord = OSuc .lx ox }} = case2 ( s< s : { x y : Nat } → x < y → y < x → ⊥ +nat-<> (s≤s x x : {n : Level} → {x y : Ordinal {n} } → y o< x → x o< y → ⊥ +o<> {n} {x} {y} (case1 x₁) (case1 x₂) = nat-<> x₁ x₂ +o<> {n} {x} {y} (case1 x₁) (case2 x₂) = nat-≡< (sym (d<→lv x₂)) x₁ +o<> {n} {x} {y} (case2 x₁) (case1 x₂) = nat-≡< (sym (d<→lv x₁)) x₂ +o<> {n} {record { lv = lv₁ ; ord = .(OSuc lv₁ _) }} {record { lv = .lv₁ ; ord = .(Φ lv₁) }} (case2 Φ<) (case2 ()) +o<> {n} {record { lv = lv₁ ; ord = .(OSuc lv₁ _) }} {record { lv = .lv₁ ; ord = .(OSuc lv₁ _) }} (case2 (s< y (case2 y x₂ x₁ +osuc-< {n} {x} {y} y (case2 x ¬a ¬b c = x + +_o≤_ : {n : Level} → Ordinal → Ordinal → Set (suc n) +a o≤ b = (a ≡ b) ∨ ( a o< b ) + +ordtrans : {n : Level} {x y z : Ordinal {n} } → x o< y → y o< z → x o< z +ordtrans {n} {x} {y} {z} (case1 x₁) (case1 x₂) = case1 ( <-trans x₁ x₂ ) +ordtrans {n} {x} {y} {z} (case1 x₁) (case2 x₂) with d<→lv x₂ +... | refl = case1 x₁ +ordtrans {n} {x} {y} {z} (case2 x₁) (case1 x₂) with d<→lv x₁ +... | refl = case1 x₂ +ordtrans {n} {x} {y} {z} (case2 x₁) (case2 x₂) with d<→lv x₁ | d<→lv x₂ +... | refl | refl = case2 ( orddtrans x₁ x₂ ) + +trio< : {n : Level } → Trichotomous {suc n} _≡_ _o<_ +trio< a b with <-cmp (lv a) (lv b) +trio< a b | tri< a₁ ¬b ¬c = tri< (case1 a₁) (λ refl → ¬b (cong ( λ x → lv x ) refl ) ) lemma1 where + lemma1 : ¬ (Suc (lv b) ≤ lv a) ∨ (ord b d< ord a) + lemma1 (case1 x) = ¬c x + lemma1 (case2 x) = ⊥-elim (nat-≡< (sym ( d<→lv x )) a₁ ) +trio< a b | tri> ¬a ¬b c = tri> lemma1 (λ refl → ¬b (cong ( λ x → lv x ) refl ) ) (case1 c) where + lemma1 : ¬ (Suc (lv a) ≤ lv b) ∨ (ord a d< ord b) + lemma1 (case1 x) = ¬a x + lemma1 (case2 x) = ⊥-elim (nat-≡< (sym ( d<→lv x )) c ) +trio< a b | tri≈ ¬a refl ¬c with triOrdd ( ord a ) ( ord b ) +trio< record { lv = .(lv b) ; ord = x } b | tri≈ ¬a refl ¬c | tri< a ¬b ¬c₁ = tri< (case2 a) (λ refl → ¬b (lemma1 refl )) lemma2 where + lemma1 : (record { lv = _ ; ord = x }) ≡ b → x ≡ ord b + lemma1 refl = refl + lemma2 : ¬ (Suc (lv b) ≤ lv b) ∨ (ord b d< x) + lemma2 (case1 x) = ¬a x + lemma2 (case2 x) = trio<> x a +trio< record { lv = .(lv b) ; ord = x } b | tri≈ ¬a refl ¬c | tri> ¬a₁ ¬b c = tri> lemma2 (λ refl → ¬b (lemma1 refl )) (case2 c) where + lemma1 : (record { lv = _ ; ord = x }) ≡ b → x ≡ ord b + lemma1 refl = refl + lemma2 : ¬ (Suc (lv b) ≤ lv b) ∨ (x d< ord b) + lemma2 (case1 x) = ¬a x + lemma2 (case2 x) = trio<> x c +trio< record { lv = .(lv b) ; ord = x } b | tri≈ ¬a refl ¬c | tri≈ ¬a₁ refl ¬c₁ = tri≈ lemma1 refl lemma1 where + lemma1 : ¬ (Suc (lv b) ≤ lv b) ∨ (ord b d< ord b) + lemma1 (case1 x) = ¬a x + lemma1 (case2 x) = ≡→¬d< x + +maxα : {n : Level} → Ordinal {n} → Ordinal → Ordinal +maxα x y with <-cmp (lv x) (lv y) +maxα x y | tri< a ¬b ¬c = x +maxα x y | tri> ¬a ¬b c = y +maxα x y | tri≈ ¬a refl ¬c = record { lv = lv x ; ord = maxαd (ord x) (ord y) } + +-- +-- max ( osuc x , osuc y ) +-- + +omax : {n : Level} ( x y : Ordinal {suc n} ) → Ordinal {suc n} +omax {n} x y with trio< x y +omax {n} x y | tri< a ¬b ¬c = osuc y +omax {n} x y | tri> ¬a ¬b c = osuc x +omax {n} x y | tri≈ ¬a refl ¬c = osuc x + +omax< : {n : Level} ( x y : Ordinal {suc n} ) → x o< y → osuc y ≡ omax x y +omax< {n} x y lt with trio< x y +omax< {n} x y lt | tri< a ¬b ¬c = refl +omax< {n} x y lt | tri≈ ¬a b ¬c = ⊥-elim (¬a lt ) +omax< {n} x y lt | tri> ¬a ¬b c = ⊥-elim (¬a lt ) + +omax≡ : {n : Level} ( x y : Ordinal {suc n} ) → x ≡ y → osuc y ≡ omax x y +omax≡ {n} x y eq with trio< x y +omax≡ {n} x y eq | tri< a ¬b ¬c = ⊥-elim (¬b eq ) +omax≡ {n} x y eq | tri≈ ¬a refl ¬c = refl +omax≡ {n} x y eq | tri> ¬a ¬b c = ⊥-elim (¬b eq ) + +omax-x : {n : Level} ( x y : Ordinal {suc n} ) → x o< omax x y +omax-x {n} x y with trio< x y +omax-x {n} x y | tri< a ¬b ¬c = ordtrans a <-osuc +omax-x {n} x y | tri> ¬a ¬b c = <-osuc +omax-x {n} x y | tri≈ ¬a refl ¬c = <-osuc + +omax-y : {n : Level} ( x y : Ordinal {suc n} ) → y o< omax x y +omax-y {n} x y with trio< x y +omax-y {n} x y | tri< a ¬b ¬c = <-osuc +omax-y {n} x y | tri> ¬a ¬b c = ordtrans c <-osuc +omax-y {n} x y | tri≈ ¬a refl ¬c = <-osuc + +omxx : {n : Level} ( x : Ordinal {suc n} ) → omax x x ≡ osuc x +omxx {n} x with trio< x x +omxx {n} x | tri< a ¬b ¬c = ⊥-elim (¬b refl ) +omxx {n} x | tri> ¬a ¬b c = ⊥-elim (¬b refl ) +omxx {n} x | tri≈ ¬a refl ¬c = refl + +omxxx : {n : Level} ( x : Ordinal {suc n} ) → omax x (omax x x ) ≡ osuc (osuc x) +omxxx {n} x = trans ( cong ( λ k → omax x k ) (omxx x )) (sym ( omax< x (osuc x) <-osuc )) + +open _∧_ + +osuc2 : {n : Level} ( x y : Ordinal {suc n} ) → ( osuc x o< osuc (osuc y )) ⇔ (x o< osuc y) +proj1 (osuc2 {n} x y) (case1 lt) = case1 lt +proj1 (osuc2 {n} x y) (case2 (s< lt)) = case2 lt +proj2 (osuc2 {n} x y) (case1 lt) = case1 lt +proj2 (osuc2 {n} x y) (case2 lt) with d<→lv lt +... | refl = case2 (s< lt) + +-- omax≡ (omax x x ) (osuc x) (omxx x) + +OrdTrans : {n : Level} → Transitive {suc n} _o≤_ +OrdTrans (case1 refl) (case1 refl) = case1 refl +OrdTrans (case1 refl) (case2 lt2) = case2 lt2 +OrdTrans (case2 lt1) (case1 refl) = case2 lt1 +OrdTrans (case2 x) (case2 y) = case2 (ordtrans x y) + +OrdPreorder : {n : Level} → Preorder (suc n) (suc n) (suc n) +OrdPreorder {n} = record { Carrier = Ordinal + ; _≈_ = _≡_ + ; _∼_ = _o≤_ + ; isPreorder = record { + isEquivalence = record { refl = refl ; sym = sym ; trans = trans } + ; reflexive = case1 + ; trans = OrdTrans + } + } + +TransFinite : {n : Level} → { ψ : Ordinal {n} → Set n } + → ( ∀ (lx : Nat ) → ψ ( record { lv = lx ; ord = Φ lx } ) ) + → ( ∀ (lx : Nat ) → (x : OrdinalD lx ) → ψ ( record { lv = lx ; ord = x } ) → ψ ( record { lv = lx ; ord = OSuc lx x } ) ) + → ∀ (x : Ordinal) → ψ x +TransFinite caseΦ caseOSuc record { lv = lv ; ord = (Φ (lv)) } = caseΦ lv +TransFinite caseΦ caseOSuc record { lv = lx ; ord = (OSuc lx ox) } = + caseOSuc lx ox (TransFinite caseΦ caseOSuc record { lv = lx ; ord = ox }) + diff -r 9829ba02877f -r 02d421f1cc06 set-of-agda.agda --- a/set-of-agda.agda Sat May 11 11:11:40 2019 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,104 +0,0 @@ -module set-of-agda where - -open import Level -open import Data.Bool - --- infix 50 _∧_ - --- record _∧_ {n m : Level} (A : Set n) ( B : Set m ) : Set (n ⊔ m) where --- constructor _×_ --- field --- proj1 : A --- proj2 : B - --- open _∧_ - --- infix 50 _∨_ - --- data _∨_ {n m : Level} (A : Set n) ( B : Set m ) : Set (n ⊔ m) where --- case1 : A → A ∨ B --- case2 : B → A ∨ B - -data ZFSet {n : Level} : Set (suc (suc n)) where - elem : { A : Set n } ( a : A ) → ZFSet - ∅ : ZFSet {n} - pair : {A B : Set n} (a : A ) (b : B ) → ZFSet - union : (A : Set (suc n) ) → ZFSet - -- repl : ( ψ : ZFSet {n} → Set zero ) → ZFSet - infinite : ZFSet - power : (A : ZFSet {n}) → ZFSet - -infix 60 _∋_ _∈_ - -open import Relation.Binary.PropositionalEquality - -data _∈_ {n : Level} : {A : Set n} ( a : A ) ( Z : ZFSet {n} ) → Set (suc n) where - ∈-elm : {A : Set n } {a : A} → a ∈ (elem a) - ∈-pair-1 : {A : Set n } {B : Set n} {b : B} {a : A} → a ∈ (pair a b) - ∈-pair-2 : {A : Set n } {B : Set n} {b : A} {a : B} → b ∈ (pair a b) --- ∈-union : {Z : Set (suc n)} {A : Z } → {a : {!!} } → a ∈ (union Z) --- ∈-repl : {A : Set n } { B : Set n} → { ψ : B → A } → { b : B } → ψ b ∈ {!!} -- (repl {!!}) - -- ∈-infinite-1 : ∅ ∈ infinite --- ∈-infinite : {A : Set n} {a : A} → _∈_ infinite {A} a - ∈-power : {A B : Set n} {Z : ZFSet {n}} {a : A → B } → a ∈ (power Z) - --- _∈_ : {n : Level} { A : ZFSet {n} } → {B : Set n} → (a : B ) → Set n → Bool --- _∈_ {_} {A} a _ = A ∋ a - -infix 40 _⇔_ - --- _⇔_ : {n : Level} (A B : Set n) → Set n --- A ⇔ B = ( ∀ {x : A } → x ∈ B ) ∧ ( ∀ {x : B } → x ∈ A ) - --- Axiom of extentionality --- ∀ x ∀ y [ ∀ z ( z ∈ x ⇔ z ∈ y ) ⇒ ∀ w ( x ∈ w ⇔ y ∈ w ) ] - --- set-extentionality : {n : Level } {x y : Set n } → { z : x } → ( z ∈ x ⇔ z ∈ y ) → ∀ (w : Set (suc n)) → ( x ∈ w ⇔ y ∈ w ) --- proj1 (set-extentionality {n} {x} {y} {z} (z∈x→z∈y × z∈x←z∈y) w) {elem .x} = elem ( elem x ) --- proj2 (set-extentionality {n} {x} {y} {z} (z∈x→z∈y × z∈x←z∈y) w) {elem .y} = elem ( elem y ) - - -open import Relation.Nullary -open import Data.Empty - --- data ∅ : Set where - -infix 50 _∩_ - --- record _∩_ {n m : Level} (A : Set n) ( B : Set m) : Set (n ⊔ m) where --- field --- inL : {x : A } → x ∈ A --- inR : {x : B } → x ∈ B - --- open _∩_ - --- lemma : {n m : Level} (A : Set n) ( B : Set m) → (a : A ) → a ∈ (A ∩ B) --- lemma A B a A∩B = inL A∩B - --- Axiom of regularity --- ∀ x ( x ≠ ∅ → ∃ y ∈ x ( y ∩ x = ∅ ) ) - --- set-regularity : {n : Level } → ( x : Set n) → ( ¬ ( x ⇔ ∅ ) ) → { y : x } → ( y ∩ x ⇔ ∅ ) --- set-regularity = {!!} - --- Axiom of pairing --- ∀ x ∀ y ∃ z(x ∈ z ∧ y ∈ z). - --- pair : {n m : Level} ( x : Set n ) ( y : Set m ) → Set (n ⊔ m) --- pair x y = {!!} -- ( x × y ) - --- Axiom of Union --- ∀ X ∃ A∀ t(t ∈ A ⇔ ∃ x ∈ X(t ∈ x)) - --- axiom of infinity --- ∃ A ( ∅ ∈ A ∧ ∀ x ∈ A ( x ∪ { x } ∈ A ) ) - --- axiom of replacement --- ∀ x ∀ y ∀ z ( ( ψ ( x , y ) ∧ ψ ( x , z ) ) → y = z ) → ∀ X ∃ A ∀ y ( y ∈ A ↔ ∃ x ∈ X ψ ( x , y ) ) - --- axiom of power set --- ∀ X ∃ A ∀ t ( t ∈ A ↔ t ⊆ X ) ) - - - - diff -r 9829ba02877f -r 02d421f1cc06 zf.agda --- a/zf.agda Sat May 11 11:11:40 2019 +0900 +++ b/zf.agda Mon Jun 10 09:53:45 2019 +0900 @@ -2,77 +2,94 @@ open import Level +data Bool : Set where + true : Bool + false : Bool record _∧_ {n m : Level} (A : Set n) ( B : Set m ) : Set (n ⊔ m) where field proj1 : A proj2 : B -open _∧_ - - data _∨_ {n m : Level} (A : Set n) ( B : Set m ) : Set (n ⊔ m) where case1 : A → A ∨ B case2 : B → A ∨ B -open import Relation.Binary.PropositionalEquality +_⇔_ : {n : Level } → ( A B : Set n ) → Set n +_⇔_ A B = ( A → B ) ∧ ( B → A ) -_⇔_ : {n : Level } → ( A B : Set n ) → Set n -_⇔_ A B = ( A → B ) ∧ ( B → A ) +open import Relation.Nullary +open import Relation.Binary infixr 130 _∧_ infixr 140 _∨_ infixr 150 _⇔_ -open import Data.Empty -open import Relation.Nullary +record IsZF {n m : Level } + (ZFSet : Set n) + (_∋_ : ( A x : ZFSet ) → Set m) + (_≈_ : Rel ZFSet m) + (∅ : ZFSet) + (_,_ : ( A B : ZFSet ) → ZFSet) + (Union : ( A : ZFSet ) → ZFSet) + (Power : ( A : ZFSet ) → ZFSet) + (Select : ZFSet → ( ZFSet → Set m ) → ZFSet ) + (Replace : ZFSet → ( ZFSet → ZFSet ) → ZFSet ) + (infinite : ZFSet) + : Set (suc (n ⊔ m)) where + field + isEquivalence : IsEquivalence {n} {m} {ZFSet} _≈_ + -- ∀ x ∀ y ∃ z(x ∈ z ∧ y ∈ z) + pair : ( A B : ZFSet ) → ( (A , B) ∋ A ) ∧ ( (A , B) ∋ B ) + -- ∀ x ∃ y ∀ z (z ∈ y ⇔ ∃ u ∈ x ∧ (z ∈ u)) + union-u : ( X z : ZFSet ) → Union X ∋ z → ZFSet + union→ : ( X z u : ZFSet ) → ( X ∋ u ) ∧ (u ∋ z ) → Union X ∋ z + union← : ( X z : ZFSet ) → (X∋z : Union X ∋ z ) → (X ∋ union-u X z X∋z) ∧ (union-u X z X∋z ∋ z ) + _∈_ : ( A B : ZFSet ) → Set m + A ∈ B = B ∋ A + _⊆_ : ( A B : ZFSet ) → ∀{ x : ZFSet } → Set m + _⊆_ A B {x} = A ∋ x → B ∋ x + _∩_ : ( A B : ZFSet ) → ZFSet + A ∩ B = Select A ( λ x → ( A ∋ x ) ∧ ( B ∋ x ) ) + _∪_ : ( A B : ZFSet ) → ZFSet + A ∪ B = Union (A , B) + {_} : ZFSet → ZFSet + { x } = ( x , x ) + infixr 200 _∈_ + infixr 230 _∩_ _∪_ + infixr 220 _⊆_ + field + empty : ∀( x : ZFSet ) → ¬ ( ∅ ∋ x ) + -- power : ∀ X ∃ A ∀ t ( t ∈ A ↔ t ⊆ X ) ) + power→ : ∀( A t : ZFSet ) → Power A ∋ t → ∀ {x} → _⊆_ t A {x} + power← : ∀( A t : ZFSet ) → ( ∀ {x} → _⊆_ t A {x}) → Power A ∋ t + -- extensionality : ∀ z ( z ∈ x ⇔ z ∈ y ) ⇒ ∀ w ( x ∈ w ⇔ y ∈ w ) + extensionality : { A B : ZFSet } → ( (z : ZFSet) → ( A ∋ z ) ⇔ (B ∋ z) ) → A ≈ B + -- regularity : ∀ x ( x ≠ ∅ → ∃ y ∈ x ( y ∩ x = ∅ ) ) + minimul : (x : ZFSet ) → ¬ (x ≈ ∅) → ZFSet + regularity : ∀( x : ZFSet ) → (not : ¬ (x ≈ ∅)) → ( minimul x not ∈ x ∧ ( minimul x not ∩ x ≈ ∅ ) ) + -- infinity : ∃ A ( ∅ ∈ A ∧ ∀ x ∈ A ( x ∪ { x } ∈ A ) ) + infinity∅ : ∅ ∈ infinite + infinity : ∀( X x : ZFSet ) → x ∈ infinite → ( x ∪ { x }) ∈ infinite + selection : { ψ : ZFSet → Set m } → ∀ { X y : ZFSet } → ( ( y ∈ X ) ∧ ψ y ) ⇔ (y ∈ Select X ψ ) + -- replacement : ∀ x ∀ y ∀ z ( ( ψ ( x , y ) ∧ ψ ( x , z ) ) → y = z ) → ∀ X ∃ A ∀ y ( y ∈ A ↔ ∃ x ∈ X ψ ( x , y ) ) + replacement : {ψ : ZFSet → ZFSet} → ∀ ( X x : ZFSet ) → ( ψ x ∈ Replace X ψ ) -record ZF (n m : Level ) : Set (suc (n ⊔ m)) where - coinductive +record ZF {n m : Level } : Set (suc (n ⊔ m)) where + infixr 210 _,_ + infixl 200 _∋_ + infixr 220 _≈_ field ZFSet : Set n _∋_ : ( A x : ZFSet ) → Set m _≈_ : ( A B : ZFSet ) → Set m -- ZF Set constructor ∅ : ZFSet - _×_ : ( A B : ZFSet ) → ZFSet + _,_ : ( A B : ZFSet ) → ZFSet Union : ( A : ZFSet ) → ZFSet Power : ( A : ZFSet ) → ZFSet - Restrict : ( ZFSet → Set m ) → ZFSet - infixl 200 _∋_ - infixr 210 _×_ - infixr 220 _≈_ - field - -- ∀ x ∀ y ∃ z(x ∈ z ∧ y ∈ z) - pair : ( A B : ZFSet ) → A × B ∋ A ∧ A × B ∋ B - -- ∀ X ∃ A∀ t(t ∈ A ⇔ ∃ x ∈ X(t ∈ x)) - union→ : ( X x y : ZFSet ) → X ∋ x → x ∋ y → Union X ∋ y - union← : ( X x y : ZFSet ) → Union X ∋ y → X ∋ x → x ∋ y - _∈_ : ( A B : ZFSet ) → Set m - A ∈ B = B ∋ A - _⊆_ : ( A B : ZFSet ) → { x : ZFSet } → { A∋x : Set m } → Set m - _⊆_ A B {x} {A∋x} = B ∋ x - _∩_ : ( A B : ZFSet ) → ZFSet - A ∩ B = Restrict ( λ x → ( A ∋ x ) ∧ ( B ∋ x ) ) - _∪_ : ( A B : ZFSet ) → ZFSet - A ∪ B = Restrict ( λ x → ( A ∋ x ) ∨ ( B ∋ x ) ) - infixr 200 _∈_ - infixr 230 _∩_ _∪_ - infixr 220 _⊆_ - field - empty : ∀( x : ZFSet ) → ¬ ( ∅ ∋ x ) - -- power : ∀ X ∃ A ∀ t ( t ∈ A ↔ t ⊆ X ) ) - power→ : ( A t : ZFSet ) → Power A ∋ t → ∀ {x} {y} → _⊆_ t A {x} {y} - power← : ( A t : ZFSet ) → ∀ {x} {y} → _⊆_ t A {x} {y} → Power A ∋ t - -- extentionality : ∀ z ( z ∈ x ⇔ z ∈ y ) ⇒ ∀ w ( x ∈ w ⇔ y ∈ w ) - extentionality : ( A B z : ZFSet ) → A ∋ z ⇔ B ∋ z → A ≈ B - -- regularity : ∀ x ( x ≠ ∅ → ∃ y ∈ x ( y ∩ x = ∅ ) ) - -- smaller : ZFSet → ZFSet - -- regularity : ( x : ZFSet ) → ¬ (x ≈ ∅) → smaller x ∩ x ≈ ∅ - -- infinity : ∃ A ( ∅ ∈ A ∧ ∀ x ∈ A ( x ∪ { x } ∈ A ) ) + Select : ZFSet → ( ZFSet → Set m ) → ZFSet + Replace : ZFSet → ( ZFSet → ZFSet ) → ZFSet infinite : ZFSet - infinity∅ : ∅ ∈ infinite - infinity : ( x : ZFSet ) → x ∈ infinite → ( x ∪ Restrict ( λ y → x ≈ y )) ∈ infinite - -- replacement : ∀ x ∀ y ∀ z ( ( ψ ( x , y ) ∧ ψ ( x , z ) ) → y = z ) → ∀ X ∃ A ∀ y ( y ∈ A ↔ ∃ x ∈ X ψ ( x , y ) ) - replacement : ( ψ : ZFSet → Set m ) → ( y : ZFSet ) → y ∈ Restrict ψ → ψ y + isZF : IsZF ZFSet _∋_ _≈_ ∅ _,_ Union Power Select Replace infinite