comparison constructible-set.agda @ 24:3186bbee99dd

separte level
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 18 May 2019 16:03:10 +0900
parents 7293a151d949
children 0f3d98e97593
comparison
equal deleted inserted replaced
23:7293a151d949 24:3186bbee99dd
1 open import Level 1 open import Level
2 module constructible-set (n : Level) where 2 module constructible-set where
3 3
4 open import zf 4 open import zf
5 5
6 open import Data.Nat renaming ( zero to Zero ; suc to Suc ; ℕ to Nat ; _⊔_ to _n⊔_ ) 6 open import Data.Nat renaming ( zero to Zero ; suc to Suc ; ℕ to Nat ; _⊔_ to _n⊔_ )
7 7
8 open import Relation.Binary.PropositionalEquality 8 open import Relation.Binary.PropositionalEquality
9 9
10 data OrdinalD : (lv : Nat) → Set n where 10 data OrdinalD {n : Level} : (lv : Nat) → Set n where
11 Φ : {lv : Nat} → OrdinalD lv 11 Φ : (lv : Nat) → OrdinalD lv
12 OSuc : {lv : Nat} → OrdinalD lv → OrdinalD lv 12 OSuc : (lv : Nat) → OrdinalD {n} lv → OrdinalD lv
13 ℵ_ : (lv : Nat) → OrdinalD (Suc lv) 13 ℵ_ : (lv : Nat) → OrdinalD (Suc lv)
14 14
15 record Ordinal : Set n where 15 record Ordinal {n : Level} : Set n where
16 field 16 field
17 lv : Nat 17 lv : Nat
18 ord : OrdinalD lv 18 ord : OrdinalD {n} lv
19 19
20 data _d<_ : {lx ly : Nat} → OrdinalD lx → OrdinalD ly → Set n where 20 data _d<_ {n : Level} : {lx ly : Nat} → OrdinalD {n} lx → OrdinalD {n} ly → Set n where
21 Φ< : {lx : Nat} → {x : OrdinalD lx} → Φ {lx} d< OSuc {lx} x 21 Φ< : {lx : Nat} → {x : OrdinalD {n} lx} → Φ lx d< OSuc lx x
22 s< : {lx : Nat} → {x y : OrdinalD lx} → x d< y → OSuc {lx} x d< OSuc {lx} y 22 s< : {lx : Nat} → {x y : OrdinalD {n} lx} → x d< y → OSuc lx x d< OSuc lx y
23 ℵΦ< : {lx : Nat} → {x : OrdinalD (Suc lx) } → Φ {Suc lx} d< (ℵ lx) 23 ℵΦ< : {lx : Nat} → {x : OrdinalD {n} (Suc lx) } → Φ (Suc lx) d< (ℵ lx)
24 ℵ< : {lx : Nat} → {x : OrdinalD (Suc lx) } → OSuc {Suc lx} x d< (ℵ lx) 24 ℵ< : {lx : Nat} → {x : OrdinalD {n} (Suc lx) } → OSuc (Suc lx) x d< (ℵ lx)
25 25
26 open Ordinal 26 open Ordinal
27 27
28 _o<_ : ( x y : Ordinal ) → Set n 28 _o<_ : {n : Level} ( x y : Ordinal ) → Set (suc n)
29 _o<_ x y = (lv x < lv y ) ∨ ( ord x d< ord y ) 29 _o<_ x y = (lv x < lv y ) ∨ ( ord x d< ord y )
30 30
31 open import Data.Nat.Properties 31 open import Data.Nat.Properties
32 open import Data.Empty 32 open import Data.Empty
33 open import Relation.Nullary 33 open import Relation.Nullary
34 34
35 open import Relation.Binary 35 open import Relation.Binary
36 open import Relation.Binary.Core 36 open import Relation.Binary.Core
37 37
38 o∅ : Ordinal 38 o∅ : {n : Level} → Ordinal {n}
39 o∅ = record { lv = Zero ; ord = Φ } 39 o∅ = record { lv = Zero ; ord = Φ Zero }
40 40
41 41
42 ≡→¬d< : {lv : Nat} → {x : OrdinalD lv } → x d< x → ⊥ 42 ≡→¬d< : {n : Level} → {lv : Nat} → {x : OrdinalD {n} lv } → x d< x → ⊥
43 ≡→¬d< {lx} {OSuc y} (s< t) = ≡→¬d< t 43 ≡→¬d< {n} {lx} {OSuc lx y} (s< t) = ≡→¬d< t
44 44
45 trio<> : {lx : Nat} {x : OrdinalD lx } { y : OrdinalD lx } → y d< x → x d< y → ⊥ 45 trio<> : {n : Level} → {lx : Nat} {x : OrdinalD {n} lx } { y : OrdinalD lx } → y d< x → x d< y → ⊥
46 trio<> {lx} {.(OSuc _)} {.(OSuc _)} (s< s) (s< t) = 46 trio<> {n} {lx} {.(OSuc lx _)} {.(OSuc lx _)} (s< s) (s< t) =
47 trio<> s t 47 trio<> s t
48 48
49 trio<≡ : {lx : Nat} {x : OrdinalD lx } { y : OrdinalD lx } → x ≡ y → x d< y → ⊥ 49 trio<≡ : {n : Level} → {lx : Nat} {x : OrdinalD {n} lx } { y : OrdinalD lx } → x ≡ y → x d< y → ⊥
50 trio<≡ refl = ≡→¬d< 50 trio<≡ refl = ≡→¬d<
51 51
52 trio>≡ : {lx : Nat} {x : OrdinalD lx } { y : OrdinalD lx } → x ≡ y → y d< x → ⊥ 52 trio>≡ : {n : Level} → {lx : Nat} {x : OrdinalD {n} lx } { y : OrdinalD lx } → x ≡ y → y d< x → ⊥
53 trio>≡ refl = ≡→¬d< 53 trio>≡ refl = ≡→¬d<
54 54
55 triO : {lx ly : Nat} → OrdinalD lx → OrdinalD ly → Tri (lx < ly) ( lx ≡ ly ) ( lx > ly ) 55 triO : {n : Level} → {lx ly : Nat} → OrdinalD {n} lx → OrdinalD {n} ly → Tri (lx < ly) ( lx ≡ ly ) ( lx > ly )
56 triO {lx} {ly} x y = <-cmp lx ly 56 triO {n} {lx} {ly} x y = <-cmp lx ly
57 57
58 triOrdd : {lx : Nat} → Trichotomous _≡_ ( _d<_ {lx} {lx} ) 58 triOrdd : {n : Level} → {lx : Nat} → Trichotomous _≡_ ( _d<_ {n} {lx} {lx} )
59 triOrdd {lv} Φ Φ = tri≈ ≡→¬d< refl ≡→¬d< 59 triOrdd {_} {lv} (Φ lv) (Φ lv) = tri≈ ≡→¬d< refl ≡→¬d<
60 triOrdd {Suc lv} (ℵ lv) (ℵ lv) = tri≈ ≡→¬d< refl ≡→¬d< 60 triOrdd {_} {Suc lv} (ℵ lv) (ℵ lv) = tri≈ ≡→¬d< refl ≡→¬d<
61 triOrdd {lv} Φ (OSuc y) = tri< Φ< (λ ()) ( λ lt → trio<> lt Φ< ) 61 triOrdd {_} {lv} (Φ lv) (OSuc lv y) = tri< Φ< (λ ()) ( λ lt → trio<> lt Φ< )
62 triOrdd {.(Suc lv)} Φ (ℵ lv) = tri< (ℵΦ< {lv} {Φ} ) (λ ()) ( λ lt → trio<> lt ((ℵΦ< {lv} {Φ} )) ) 62 triOrdd {_} {.(Suc lv)} (Φ (Suc lv)) (ℵ lv) = tri< (ℵΦ< {_} {lv} {Φ (Suc lv)} ) (λ ()) ( λ lt → trio<> lt ((ℵΦ< {_} {lv} {Φ (Suc lv)} )) )
63 triOrdd {Suc lv} (ℵ lv) Φ = tri> ( λ lt → trio<> lt (ℵΦ< {lv} {Φ} ) ) (λ ()) (ℵΦ< {lv} {Φ} ) 63 triOrdd {_} {Suc lv} (ℵ lv) (Φ (Suc lv)) = tri> ( λ lt → trio<> lt (ℵΦ< {_} {lv} {Φ (Suc lv)} ) ) (λ ()) (ℵΦ< {_} {lv} {Φ (Suc lv)} )
64 triOrdd {Suc lv} (ℵ lv) (OSuc y) = tri> ( λ lt → trio<> lt (ℵ< {lv} {y} ) ) (λ ()) (ℵ< {lv} {y} ) 64 triOrdd {_} {Suc lv} (ℵ lv) (OSuc (Suc lv) y) = tri> ( λ lt → trio<> lt (ℵ< {_} {lv} {y} ) ) (λ ()) (ℵ< {_} {lv} {y} )
65 triOrdd {lv} (OSuc x) Φ = tri> (λ lt → trio<> lt Φ<) (λ ()) Φ< 65 triOrdd {_} {lv} (OSuc lv x) (Φ lv) = tri> (λ lt → trio<> lt Φ<) (λ ()) Φ<
66 triOrdd {.(Suc lv)} (OSuc x) (ℵ lv) = tri< ℵ< (λ ()) (λ lt → trio<> lt ℵ< ) 66 triOrdd {_} {.(Suc lv)} (OSuc (Suc lv) x) (ℵ lv) = tri< ℵ< (λ ()) (λ lt → trio<> lt ℵ< )
67 triOrdd {lv} (OSuc x) (OSuc y) with triOrdd x y 67 triOrdd {_} {lv} (OSuc lv x) (OSuc lv y) with triOrdd x y
68 triOrdd {lv} (OSuc x) (OSuc y) | tri< a ¬b ¬c = tri< (s< a) (λ tx=ty → trio<≡ tx=ty (s< a) ) ( λ lt → trio<> lt (s< a) ) 68 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) )
69 triOrdd {lv} (OSuc x) (OSuc x) | tri≈ ¬a refl ¬c = tri≈ ≡→¬d< refl ≡→¬d< 69 triOrdd {_} {lv} (OSuc lv x) (OSuc lv x) | tri≈ ¬a refl ¬c = tri≈ ≡→¬d< refl ≡→¬d<
70 triOrdd {lv} (OSuc x) (OSuc y) | tri> ¬a ¬b c = tri> ( λ lt → trio<> lt (s< c) ) (λ tx=ty → trio>≡ tx=ty (s< c) ) (s< c) 70 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)
71 71
72 d<→lv : {x y : Ordinal } → ord x d< ord y → lv x ≡ lv y 72 d<→lv : {n : Level} {x y : Ordinal {n}} → ord x d< ord y → lv x ≡ lv y
73 d<→lv Φ< = refl 73 d<→lv Φ< = refl
74 d<→lv (s< lt) = refl 74 d<→lv (s< lt) = refl
75 d<→lv ℵΦ< = refl 75 d<→lv ℵΦ< = refl
76 d<→lv ℵ< = refl 76 d<→lv ℵ< = refl
77 77
78 orddtrans : {lx : Nat} {x y z : OrdinalD lx } → x d< y → y d< z → x d< z 78 orddtrans : {n : Level} {lx : Nat} {x y z : OrdinalD {n} lx } → x d< y → y d< z → x d< z
79 orddtrans {lx} {.Φ} {.(OSuc _)} {.(OSuc _)} Φ< (s< y<z) = Φ< 79 orddtrans {_} {lx} {.(Φ lx)} {.(OSuc lx _)} {.(OSuc lx _)} Φ< (s< y<z) = Φ<
80 orddtrans {Suc lx} {Φ {Suc lx}} {OSuc y} {ℵ lx} Φ< ℵ< = ℵΦ< {lx} {y} 80 orddtrans {_} {Suc lx} {Φ (Suc lx)} {OSuc (Suc lx) y} {ℵ lx} Φ< ℵ< = ℵΦ< {_} {lx} {y}
81 orddtrans {lx} {.(OSuc _)} {.(OSuc _)} {.(OSuc _)} (s< x<y) (s< y<z) = s< ( orddtrans x<y y<z ) 81 orddtrans {_} {lx} {.(OSuc lx _)} {.(OSuc lx _)} {.(OSuc lx _)} (s< x<y) (s< y<z) = s< ( orddtrans x<y y<z )
82 orddtrans {.(Suc _)} {.(OSuc _)} {.(OSuc _)} {.(ℵ _)} (s< x<y) ℵ< = ℵ< 82 orddtrans {_} {Suc lx} {.(OSuc (Suc lx) _)} {.(OSuc (Suc lx) _)} {.(ℵ _)} (s< x<y) ℵ< = ℵ<
83 orddtrans {.(Suc _)} {.Φ} {.(ℵ _)} {z} ℵΦ< () 83 orddtrans {_} {Suc lx} {Φ (Suc lx)} {.(ℵ _)} {z} ℵΦ< ()
84 orddtrans {.(Suc _)} {.(OSuc _)} {.(ℵ _)} {z} ℵ< () 84 orddtrans {_} {Suc lx} {OSuc (Suc lx) _} {.(ℵ _)} {z} ℵ< ()
85 85
86 max : (x y : Nat) → Nat 86 max : (x y : Nat) → Nat
87 max Zero Zero = Zero 87 max Zero Zero = Zero
88 max Zero (Suc x) = (Suc x) 88 max Zero (Suc x) = (Suc x)
89 max (Suc x) Zero = (Suc x) 89 max (Suc x) Zero = (Suc x)
90 max (Suc x) (Suc y) = Suc ( max x y ) 90 max (Suc x) (Suc y) = Suc ( max x y )
91 91
92 maxαd : { lx : Nat } → OrdinalD lx → OrdinalD lx → OrdinalD lx 92 maxαd : {n : Level} → { lx : Nat } → OrdinalD {n} lx → OrdinalD lx → OrdinalD lx
93 maxαd x y with triOrdd x y 93 maxαd x y with triOrdd x y
94 maxαd x y | tri< a ¬b ¬c = y 94 maxαd x y | tri< a ¬b ¬c = y
95 maxαd x y | tri≈ ¬a b ¬c = x 95 maxαd x y | tri≈ ¬a b ¬c = x
96 maxαd x y | tri> ¬a ¬b c = x 96 maxαd x y | tri> ¬a ¬b c = x
97 97
98 maxα : Ordinal → Ordinal → Ordinal 98 maxα : {n : Level} → Ordinal {n} → Ordinal → Ordinal
99 maxα x y with <-cmp (lv x) (lv y) 99 maxα x y with <-cmp (lv x) (lv y)
100 maxα x y | tri< a ¬b ¬c = x 100 maxα x y | tri< a ¬b ¬c = x
101 maxα x y | tri> ¬a ¬b c = y 101 maxα x y | tri> ¬a ¬b c = y
102 maxα x y | tri≈ ¬a refl ¬c = record { lv = lv x ; ord = maxαd (ord x) (ord y) } 102 maxα x y | tri≈ ¬a refl ¬c = record { lv = lv x ; ord = maxαd (ord x) (ord y) }
103 103
104 _o≤_ : Ordinal → Ordinal → Set n 104 _o≤_ : {n : Level} → Ordinal → Ordinal → Set (suc n)
105 a o≤ b = (a ≡ b) ∨ ( a o< b ) 105 a o≤ b = (a ≡ b) ∨ ( a o< b )
106 106
107 trio< : Trichotomous _≡_ _o<_ 107 trio< : {n : Level } → Trichotomous {suc n} _≡_ _o<_
108 trio< a b with <-cmp (lv a) (lv b) 108 trio< a b with <-cmp (lv a) (lv b)
109 trio< a b | tri< a₁ ¬b ¬c = tri< (case1 a₁) (λ refl → ¬b (cong ( λ x → lv x ) refl ) ) {!!} 109 trio< a b | tri< a₁ ¬b ¬c = tri< (case1 a₁) (λ refl → ¬b (cong ( λ x → lv x ) refl ) ) lemma1 where
110 trio< a b | tri> ¬a ¬b c = tri> {!!} (λ refl → ¬b (cong ( λ x → lv x ) refl ) ) (case1 c) 110 lemma1 : ¬ (Suc (lv b) ≤ lv a) ∨ (ord b d< ord a)
111 lemma1 (case1 x) = ¬c x
112 lemma1 (case2 x) with d<→lv x
113 lemma1 (case2 x) | refl = ¬b refl
114 trio< a b | tri> ¬a ¬b c = tri> lemma1 (λ refl → ¬b (cong ( λ x → lv x ) refl ) ) (case1 c) where
115 lemma1 : ¬ (Suc (lv a) ≤ lv b) ∨ (ord a d< ord b)
116 lemma1 (case1 x) = ¬a x
117 lemma1 (case2 x) with d<→lv x
118 lemma1 (case2 x) | refl = ¬b refl
111 trio< a b | tri≈ ¬a refl ¬c with triOrdd ( ord a ) ( ord b ) 119 trio< a b | tri≈ ¬a refl ¬c with triOrdd ( ord a ) ( ord b )
112 trio< record { lv = .(lv b) ; ord = x } b | tri≈ ¬a refl ¬c | tri< a ¬b ¬c₁ = tri< (case2 a) (λ refl → ¬b {!!} ) {!!} 120 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
113 trio< record { lv = .(lv b) ; ord = x } b | tri≈ ¬a refl ¬c | tri≈ ¬a₁ refl ¬c₁ = tri≈ {!!} refl {!!} 121 lemma1 : (record { lv = _ ; ord = x }) ≡ b → x ≡ ord b
114 trio< record { lv = .(lv b) ; ord = x } b | tri≈ ¬a refl ¬c | tri> ¬a₁ ¬b c = tri> {!!} {!!} (case2 c) 122 lemma1 refl = refl
115 123 lemma2 : ¬ (Suc (lv b) ≤ lv b) ∨ (ord b d< x)
116 OrdTrans : Transitive _o≤_ 124 lemma2 (case1 x) = ¬a x
125 lemma2 (case2 x) = trio<> x a
126 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
127 lemma1 : (record { lv = _ ; ord = x }) ≡ b → x ≡ ord b
128 lemma1 refl = refl
129 lemma2 : ¬ (Suc (lv b) ≤ lv b) ∨ (x d< ord b)
130 lemma2 (case1 x) = ¬a x
131 lemma2 (case2 x) = trio<> x c
132 trio< record { lv = .(lv b) ; ord = x } b | tri≈ ¬a refl ¬c | tri≈ ¬a₁ refl ¬c₁ = tri≈ lemma1 refl lemma1 where
133 lemma1 : ¬ (Suc (lv b) ≤ lv b) ∨ (ord b d< ord b)
134 lemma1 (case1 x) = ¬a x
135 lemma1 (case2 x) = ≡→¬d< x
136
137 OrdTrans : {n : Level} → Transitive {suc n} _o≤_
117 OrdTrans (case1 refl) (case1 refl) = case1 refl 138 OrdTrans (case1 refl) (case1 refl) = case1 refl
118 OrdTrans (case1 refl) (case2 lt2) = case2 lt2 139 OrdTrans (case1 refl) (case2 lt2) = case2 lt2
119 OrdTrans (case2 lt1) (case1 refl) = case2 lt1 140 OrdTrans (case2 lt1) (case1 refl) = case2 lt1
120 OrdTrans (case2 (case1 x)) (case2 (case1 y)) = case2 (case1 ( <-trans x y ) ) 141 OrdTrans (case2 (case1 x)) (case2 (case1 y)) = case2 (case1 ( <-trans x y ) )
121 OrdTrans (case2 (case1 x)) (case2 (case2 y)) with d<→lv y 142 OrdTrans (case2 (case1 x)) (case2 (case2 y)) with d<→lv y
123 OrdTrans (case2 (case2 x)) (case2 (case1 y)) with d<→lv x 144 OrdTrans (case2 (case2 x)) (case2 (case1 y)) with d<→lv x
124 OrdTrans (case2 (case2 x)) (case2 (case1 y)) | refl = case2 (case1 y) 145 OrdTrans (case2 (case2 x)) (case2 (case1 y)) | refl = case2 (case1 y)
125 OrdTrans (case2 (case2 x)) (case2 (case2 y)) with d<→lv x | d<→lv y 146 OrdTrans (case2 (case2 x)) (case2 (case2 y)) with d<→lv x | d<→lv y
126 OrdTrans (case2 (case2 x)) (case2 (case2 y)) | refl | refl = case2 (case2 (orddtrans x y )) 147 OrdTrans (case2 (case2 x)) (case2 (case2 y)) | refl | refl = case2 (case2 (orddtrans x y ))
127 148
128 OrdPreorder : Preorder n n n 149 OrdPreorder : {n : Level} → Preorder (suc n) (suc n) (suc n)
129 OrdPreorder = record { Carrier = Ordinal 150 OrdPreorder {n} = record { Carrier = Ordinal
130 ; _≈_ = _≡_ 151 ; _≈_ = _≡_
131 ; _∼_ = _o≤_ 152 ; _∼_ = _o≤_
132 ; isPreorder = record { 153 ; isPreorder = record {
133 isEquivalence = record { refl = refl ; sym = sym ; trans = trans } 154 isEquivalence = record { refl = refl ; sym = sym ; trans = trans }
134 ; reflexive = case1 155 ; reflexive = case1
135 ; trans = OrdTrans 156 ; trans = OrdTrans
136 } 157 }
137 } 158 }
138 159
139 TransFinite : ( ψ : Ordinal → Set n ) 160 TransFinite : {n : Level} → ( ψ : Ordinal {n} → Set n )
140 → ( ∀ (lx : Nat ) → ψ ( record { lv = Suc lx ; ord = ℵ lx } )) 161 → ( ∀ (lx : Nat ) → ψ ( record { lv = Suc lx ; ord = ℵ lx } ))
141 → ( ∀ (lx : Nat ) → ψ ( record { lv = lx ; ord = Φ } ) ) 162 → ( ∀ (lx : Nat ) → ψ ( record { lv = lx ; ord = Φ lx } ) )
142 → ( ∀ (lx : Nat ) → (x : OrdinalD lx ) → ψ ( record { lv = lx ; ord = x } ) → ψ ( record { lv = lx ; ord = OSuc x } ) ) 163 → ( ∀ (lx : Nat ) → (x : OrdinalD lx ) → ψ ( record { lv = lx ; ord = x } ) → ψ ( record { lv = lx ; ord = OSuc lx x } ) )
143 → ∀ (x : Ordinal) → ψ x 164 → ∀ (x : Ordinal) → ψ x
144 TransFinite ψ caseℵ caseΦ caseOSuc record { lv = lv ; ord = Φ } = caseΦ lv 165 TransFinite ψ caseℵ caseΦ caseOSuc record { lv = lv ; ord = Φ lv } = caseΦ lv
145 TransFinite ψ caseℵ caseΦ caseOSuc record { lv = lv ; ord = OSuc ord₁ } = caseOSuc lv ord₁ 166 TransFinite ψ caseℵ caseΦ caseOSuc record { lv = lv ; ord = OSuc lv ord₁ } = caseOSuc lv ord₁
146 ( TransFinite ψ caseℵ caseΦ caseOSuc (record { lv = lv ; ord = ord₁ } )) 167 ( TransFinite ψ caseℵ caseΦ caseOSuc (record { lv = lv ; ord = ord₁ } ))
147 TransFinite ψ caseℵ caseΦ caseOSuc record { lv = Suc lv₁ ; ord = ℵ lv₁ } = caseℵ lv₁ 168 TransFinite ψ caseℵ caseΦ caseOSuc record { lv = Suc lv₁ ; ord = ℵ lv₁ } = caseℵ lv₁
148 169
149 -- X' = { x ∈ X | ψ x } ∪ X , Mα = ( ∪ (β < α) Mβ ) ' 170 -- X' = { x ∈ X | ψ x } ∪ X , Mα = ( ∪ (β < α) Mβ ) '
150 171
151 record ConstructibleSet : Set (suc (suc n)) where 172 record ConstructibleSet {n : Level} : Set (suc n) where
152 field 173 field
153 α : Ordinal 174 α : Ordinal {suc n}
154 constructible : Ordinal → Set (suc n) 175 constructible : Ordinal {suc n} → Set n
155 176
156 open ConstructibleSet 177 open ConstructibleSet
157 178
158 _∋_ : (ConstructibleSet ) → (ConstructibleSet ) → Set (suc n) 179 _∋_ : {n : Level} → (ConstructibleSet {n}) → (ConstructibleSet {n} ) → Set (suc n)
159 a ∋ x = ( α x o< α a ) ∧ constructible a ( α x ) 180 a ∋ x = ( α x o< α a ) ∧ constructible a ( α x )
160 181
161 c∅ : ConstructibleSet 182 c∅ : {n : Level} → ConstructibleSet
162 c∅ = record {α = o∅ ; constructible = λ x → Lift (suc n) ⊥ } 183 c∅ {n} = record {α = o∅ ; constructible = λ x → Lift n ⊥ }
163 184
164 record SupR {n m : Level} {S : Set n} ( _≤_ : S → S → Set m ) (ψ : S → S ) (X : S) : Set (n ⊔ m) where 185 record SupR {n m : Level} {S : Set n} ( _≤_ : S → S → Set m ) (ψ : S → S ) (X : S) : Set (n ⊔ m) where
165 field 186 field
166 sup : S 187 sup : S
167 smax : ∀ { x : S } → x ≤ X → ψ x ≤ sup 188 smax : ∀ { x : S } → x ≤ X → ψ x ≤ sup
168 suniq : {max : S} → ( ∀ { x : S } → x ≤ X → ψ x ≤ max ) → max ≤ sup 189 suniq : {max : S} → ( ∀ { x : S } → x ≤ X → ψ x ≤ max ) → max ≤ sup
169 190
170 open SupR 191 open SupR
171 192
172 _⊆_ : ( A B : ConstructibleSet ) → ∀{ x : ConstructibleSet } → Set (suc n) 193 _⊆_ : {n : Level} → ( A B : ConstructibleSet ) → ∀{ x : ConstructibleSet } → Set (suc n)
173 _⊆_ A B {x} = A ∋ x → B ∋ x 194 _⊆_ A B {x} = A ∋ x → B ∋ x
174 195
175 suptraverse : (X : ConstructibleSet ) ( max : ConstructibleSet) ( ψ : ConstructibleSet → ConstructibleSet ) → ConstructibleSet 196 suptraverse : {n : Level} → (X : ConstructibleSet {n}) ( max : ConstructibleSet {n}) ( ψ : ConstructibleSet {n} → ConstructibleSet {n}) → ConstructibleSet {n}
176 suptraverse X max ψ = {!!} 197 suptraverse X max ψ = {!!}
177 198
178 Sup : (ψ : ConstructibleSet → ConstructibleSet ) → (X : ConstructibleSet) → SupR (λ x a → (α a ≡ α x) ∨ (a ∋ x)) ψ X 199 Sup : {n : Level } → (ψ : ConstructibleSet → ConstructibleSet ) → (X : ConstructibleSet) → SupR (λ x a → (α a ≡ α x) ∨ (a ∋ x)) ψ X
179 sup (Sup ψ X ) = suptraverse X c∅ ψ 200 sup (Sup {n} ψ X ) = suptraverse X (c∅ {n}) ψ
180 smax (Sup ψ X ) = {!!} -- TransFinite {!!} {!!} {!!} {!!} {!!} 201 smax (Sup ψ X ) = {!!}
181 suniq (Sup ψ X ) = {!!} 202 suniq (Sup ψ X ) = {!!}
182 203
183
184 -- transitiveness : (a b c : ConstructibleSet ) → a ∋ b → b ∋ c → a ∋ c
185 -- transitiveness a b c a∋b b∋c with constructible a c∋ constructible b | constructible b c∋ constructible c
186 -- ... | t1 | t2 = {!!}
187
188 open import Data.Unit 204 open import Data.Unit
189 open SupR 205 open SupR
190 206
191 ConstructibleSet→ZF : ZF {suc (suc n)} {suc (suc n)} 207 ConstructibleSet→ZF : {n : Level} → ZF {suc n} {suc n}
192 ConstructibleSet→ZF = record { 208 ConstructibleSet→ZF {n} = record {
193 ZFSet = ConstructibleSet 209 ZFSet = ConstructibleSet
194 ; _∋_ = λ a b → Lift (suc (suc n)) ( a ∋ b ) 210 ; _∋_ = _∋_
195 ; _≈_ = _≡_ 211 ; _≈_ = _≡_
196 ; ∅ = c∅ 212 ; ∅ = c∅
197 ; _,_ = _,_ 213 ; _,_ = _,_
198 ; Union = Union 214 ; Union = Union
199 ; Power = {!!} 215 ; Power = {!!}
200 ; Select = Select 216 ; Select = Select
201 ; Replace = Replace 217 ; Replace = {!!}
202 ; infinite = {!!} 218 ; infinite = {!!}
203 ; isZF = {!!} 219 ; isZF = {!!}
204 } where 220 } where
205 conv : (ConstructibleSet → Set (suc (suc n))) → ConstructibleSet → Set (suc n) 221 conv : {n : Level} → (ConstructibleSet {n} → Set (suc (suc n))) → ConstructibleSet → Set (suc n)
206 conv ψ x with ψ x 222 conv {n} ψ x with ψ x
207 ... | t = Lift ( suc n ) ⊤ 223 ... | t = Lift ( suc n ) ⊤
208 Select : (X : ConstructibleSet) → (ConstructibleSet → Set (suc (suc n))) → ConstructibleSet 224 Select : (X : ConstructibleSet {n}) → (ConstructibleSet {n} → Set (suc n)) → ConstructibleSet {n}
209 Select X ψ = record { α = α X ; constructible = λ x → (conv ψ) (record { α = x ; constructible = λ x → constructible X x } ) } 225 Select X ψ = record { α = α X ; constructible = λ x → {!!} } -- ψ (record { α = x ; constructible = λ x → constructible X x } ) }
210 Replace : (X : ConstructibleSet) → (ConstructibleSet → ConstructibleSet) → ConstructibleSet 226 Replace : (X : ConstructibleSet {n} ) → (ConstructibleSet → ConstructibleSet) → ConstructibleSet
211 Replace X ψ = record { α = α (sup (Sup ψ X)) ; constructible = λ x → {!!} } 227 Replace X ψ = record { α = α (sup supψ) ; constructible = λ x → {!!} } where
212 _,_ : ConstructibleSet → ConstructibleSet → ConstructibleSet 228 supψ : SupR (λ x a → (α a ≡ α x) ∨ (a ∋ x)) ψ X
213 a , b = record { α = maxα (α a) (α b) ; constructible = λ x → {!!} } 229 supψ = Sup ψ X
230 repl : Ordinal {n} → Set (suc n)
231 repl x = {!!}
232 conv1 : (Ordinal {n} → Set n) → Ordinal {n} → Set n
233 conv1 ψ x with ψ
234 ... | t = Lift n ⊤
235 _,_ : ConstructibleSet {n} → ConstructibleSet → ConstructibleSet
236 a , b = record { α = maxα (α a) (α b) ; constructible = λ x → {!!} } -- ((x ≡ α a ) ∨ ( x ≡ α b )) }
214 Union : ConstructibleSet → ConstructibleSet 237 Union : ConstructibleSet → ConstructibleSet
215 Union a = {!!} 238 Union a = {!!}