Mercurial > hg > Members > kono > Proof > ZF-in-agda
comparison src/zorn.agda @ 482:ce4f3f180b8e
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 06 Apr 2022 07:57:37 +0900 |
parents | 263d2d1a000e |
children | ed29002a02b6 |
comparison
equal
deleted
inserted
replaced
481:263d2d1a000e | 482:ce4f3f180b8e |
---|---|
90 someA : HOD | 90 someA : HOD |
91 someA = ODC.minimal O A (λ eq → ¬x<0 ( subst (λ k → o∅ o< k ) (=od∅→≡o∅ eq) 0<A )) | 91 someA = ODC.minimal O A (λ eq → ¬x<0 ( subst (λ k → o∅ o< k ) (=od∅→≡o∅ eq) 0<A )) |
92 isSomeA : A ∋ someA | 92 isSomeA : A ∋ someA |
93 isSomeA = ODC.x∋minimal O A (λ eq → ¬x<0 ( subst (λ k → o∅ o< k ) (=od∅→≡o∅ eq) 0<A )) | 93 isSomeA = ODC.x∋minimal O A (λ eq → ¬x<0 ( subst (λ k → o∅ o< k ) (=od∅→≡o∅ eq) 0<A )) |
94 HasMaximal : HOD | 94 HasMaximal : HOD |
95 HasMaximal = record { od = record { def = λ x → (m : Ordinal) → odef A m → odef A x ∧ (¬ (* x < * m))} ; odmax = & A ; <odmax = {!!} } where | 95 HasMaximal = record { od = record { def = λ y → odef A y ∧ ((m : Ordinal) → odef A m → ¬ (* y < * m))} ; odmax = & A ; <odmax = z08 } where |
96 z07 : {y : Ordinal} → ((m : Ordinal) → odef A y ∧ odef A m ∧ (¬ (* y < * m))) → y o< & A | 96 z08 : {y : Ordinal} → (odef A y ∧ ((m : Ordinal) → odef A m → ¬ (* y < * m))) → y o< & A |
97 z07 {y} p = subst (λ k → k o< & A) &iso ( c<→o< (subst (λ k → odef A k ) (sym &iso ) (proj1 (p (& someA)) ))) | 97 z08 {y} P = subst (λ k → k o< & A) &iso (c<→o< {* y} (subst (λ k → odef A k) (sym &iso) (proj1 P))) |
98 no-maximum : HasMaximal =h= od∅ → (x : Ordinal) → ((m : Ordinal) → odef A m → odef A x ∧ (¬ (* x < * m) )) → ⊥ | 98 no-maximal : HasMaximal =h= od∅ → (y : Ordinal) → (odef A y ∧ ((m : Ordinal) → odef A m → ¬ (* y < * m))) → ⊥ |
99 no-maximum nomx x P = ¬x<0 (eq→ nomx {x} (λ m am → P m am )) | 99 no-maximal nomx y P = ¬x<0 (eq→ nomx {y} ⟪ proj1 P , (λ m am → (proj2 P) m am ) ⟫ ) |
100 Gtx : { x : HOD} → A ∋ x → HOD | 100 Gtx : { x : HOD} → A ∋ x → HOD |
101 Gtx {x} ax = record { od = record { def = λ y → odef A y ∧ (x < (* y)) } ; odmax = & A ; <odmax = {!!} } | 101 Gtx {x} ax = record { od = record { def = λ y → odef A y ∧ (x < (* y)) } ; odmax = & A ; <odmax = z09 } where |
102 z09 : {y : Ordinal} → (odef A y ∧ (x < (* y))) → y o< & A | |
103 z09 {y} P = subst (λ k → k o< & A) &iso (c<→o< {* y} (subst (λ k → odef A k) (sym &iso) (proj1 P))) | |
102 z01 : {a b : HOD} → A ∋ a → A ∋ b → (a ≡ b ) ∨ (a < b ) → b < a → ⊥ | 104 z01 : {a b : HOD} → A ∋ a → A ∋ b → (a ≡ b ) ∨ (a < b ) → b < a → ⊥ |
103 z01 {a} {b} A∋a A∋b (case1 a=b) b<a = proj1 (proj2 (PO (me A∋b) (me A∋a)) (sym a=b)) b<a | 105 z01 {a} {b} A∋a A∋b (case1 a=b) b<a = proj1 (proj2 (PO (me A∋b) (me A∋a)) (sym a=b)) b<a |
104 z01 {a} {b} A∋a A∋b (case2 a<b) b<a = proj1 (PO (me A∋b) (me A∋a)) b<a ⟪ a<b , (λ b=a → proj1 (proj2 (PO (me A∋b) (me A∋a)) b=a ) b<a ) ⟫ | 106 z01 {a} {b} A∋a A∋b (case2 a<b) b<a = proj1 (PO (me A∋b) (me A∋a)) b<a ⟪ a<b , (λ b=a → proj1 (proj2 (PO (me A∋b) (me A∋a)) b=a ) b<a ) ⟫ |
105 -- ZChain is not compatible with the SUP condition | 107 -- ZChain is not compatible with the SUP condition |
106 ZChain→¬SUP : (z : ZChain A (& A) _<_ ) → ¬ (SUP A (ZChain.B z) _<_ ) | 108 ZChain→¬SUP : (z : ZChain A (& A) _<_ ) → ¬ (SUP A (ZChain.B z) _<_ ) |
130 px = Oprev.oprev op | 132 px = Oprev.oprev op |
131 zc1 : ZChain A px _<_ | 133 zc1 : ZChain A px _<_ |
132 zc1 = prev px (subst (λ k → px o< k) (Oprev.oprev=x op) <-osuc) | 134 zc1 = prev px (subst (λ k → px o< k) (Oprev.oprev=x op) <-osuc) |
133 z06 : ZChain A x _<_ | 135 z06 : ZChain A x _<_ |
134 z06 with is-o∅ (& (Gtx ax)) | 136 z06 with is-o∅ (& (Gtx ax)) |
135 ... | yes nogt = ⊥-elim (no-maximum nomx x x-is-maximal ) where -- no larger element, so it is maximal | 137 ... | yes nogt = ⊥-elim (no-maximal nomx x ⟪ subst (λ k → odef A k) &iso ax , x-is-maximal ⟫ ) where -- no larger element, so it is maximal |
136 x-is-maximal : (m : Ordinal) → odef A m → odef A x ∧ (¬ (* x < * m)) | 138 x-is-maximal : (m : Ordinal) → odef A m → ¬ (* x < * m) |
137 x-is-maximal m am = ⟪ subst (λ k → odef A k) &iso ax , ¬x<m ⟫ where | 139 x-is-maximal m am = ¬x<m where |
138 ¬x<m : ¬ (* x < * m) | 140 ¬x<m : ¬ (* x < * m) |
139 ¬x<m x<m = ∅< {Gtx ax} {* m} ⟪ subst (λ k → odef A k) (sym &iso) am , subst (λ k → * x < k ) (cong (*) (sym &iso)) x<m ⟫ (≡o∅→=od∅ nogt) | 141 ¬x<m x<m = ∅< {Gtx ax} {* m} ⟪ subst (λ k → odef A k) (sym &iso) am , subst (λ k → * x < k ) (cong (*) (sym &iso)) x<m ⟫ (≡o∅→=od∅ nogt) |
140 ... | no not = record { B = Bx -- we have larger element, let's create ZChain | 142 ... | no not = record { B = Bx -- we have larger element, let's create ZChain |
141 ; B⊆A = B⊆A ; total = total ; fb = fb ; B∋fb = {!!} ; ¬x≤sup = {!!} } where | 143 ; B⊆A = B⊆A ; total = total ; fb = fb ; B∋fb = {!!} ; ¬x≤sup = {!!} } where |
142 B = ZChain.B zc1 | 144 B = ZChain.B zc1 |
175 ... | tri> ¬a ¬b c with ODC.∋-p O A (* x) | 177 ... | tri> ¬a ¬b c with ODC.∋-p O A (* x) |
176 ... | no ¬Ax = {!!} where | 178 ... | no ¬Ax = {!!} where |
177 B : HOD -- Union (previous B) | 179 B : HOD -- Union (previous B) |
178 B = record { od = record { def = λ y → (y o< x) ∧ ((y<x : y o< x ) → odef (ZChain.B (prev y y<x)) y) } ; odmax = & A ; <odmax = {!!} } | 180 B = record { od = record { def = λ y → (y o< x) ∧ ((y<x : y o< x ) → odef (ZChain.B (prev y y<x)) y) } ; odmax = & A ; <odmax = {!!} } |
179 ... | yes ax with is-o∅ (& (Gtx ax)) | 181 ... | yes ax with is-o∅ (& (Gtx ax)) |
180 ... | yes nogt = ⊥-elim (no-maximum nomx x x-is-maximal ) where -- no larger element, so it is maximal | 182 ... | yes nogt = ⊥-elim (no-maximal nomx x ⟪ subst (λ k → odef A k) &iso ax , x-is-maximal ⟫ ) where -- no larger element, so it is maximal |
181 x-is-maximal : (m : Ordinal) → odef A m → odef A x ∧ (¬ (* x < * m)) | 183 x-is-maximal : (m : Ordinal) → odef A m → ¬ (* x < * m) |
182 x-is-maximal m am = ⟪ subst (λ k → odef A k) &iso ax , ¬x<m ⟫ where | 184 x-is-maximal m am = ¬x<m where |
183 ¬x<m : ¬ (* x < * m) | 185 ¬x<m : ¬ (* x < * m) |
184 ¬x<m x<m = ∅< {Gtx ax} {* m} ⟪ subst (λ k → odef A k) (sym &iso) am , subst (λ k → * x < k ) (cong (*) (sym &iso)) x<m ⟫ (≡o∅→=od∅ nogt) | 186 ¬x<m x<m = ∅< {Gtx ax} {* m} ⟪ subst (λ k → odef A k) (sym &iso) am , subst (λ k → * x < k ) (cong (*) (sym &iso)) x<m ⟫ (≡o∅→=od∅ nogt) |
185 ... | no not = {!!} where | 187 ... | no not = {!!} where |
186 B : HOD -- Union (x , previous B) | 188 B : HOD -- Union (x , previous B) |
187 B = record { od = record { def = λ y → (y o< osuc x) ∧ ((y<x : y o< x ) → odef (ZChain.B (prev y y<x)) y) } ; odmax = & A ; <odmax = {!!} } | 189 B = record { od = record { def = λ y → (y o< osuc x) ∧ ((y<x : y o< x ) → odef (ZChain.B (prev y y<x)) y) } ; odmax = & A ; <odmax = {!!} } |
190 ... | no not = record { maximal = ODC.minimal O HasMaximal (λ eq → not (=od∅→≡o∅ eq)) ; A∋maximal = zorn01 ; ¬maximal<x = zorn02 } where | 192 ... | no not = record { maximal = ODC.minimal O HasMaximal (λ eq → not (=od∅→≡o∅ eq)) ; A∋maximal = zorn01 ; ¬maximal<x = zorn02 } where |
191 -- yes we have the maximal | 193 -- yes we have the maximal |
192 zorn03 : odef HasMaximal ( & ( ODC.minimal O HasMaximal (λ eq → not (=od∅→≡o∅ eq)) ) ) | 194 zorn03 : odef HasMaximal ( & ( ODC.minimal O HasMaximal (λ eq → not (=od∅→≡o∅ eq)) ) ) |
193 zorn03 = ODC.x∋minimal O HasMaximal (λ eq → not (=od∅→≡o∅ eq)) | 195 zorn03 = ODC.x∋minimal O HasMaximal (λ eq → not (=od∅→≡o∅ eq)) |
194 zorn01 : A ∋ ODC.minimal O HasMaximal (λ eq → not (=od∅→≡o∅ eq)) | 196 zorn01 : A ∋ ODC.minimal O HasMaximal (λ eq → not (=od∅→≡o∅ eq)) |
195 zorn01 = proj1 (zorn03 (& someA) isSomeA ) | 197 zorn01 = proj1 zorn03 |
196 zorn02 : {x : HOD} → A ∋ x → ¬ (ODC.minimal O HasMaximal (λ eq → not (=od∅→≡o∅ eq)) < x) | 198 zorn02 : {x : HOD} → A ∋ x → ¬ (ODC.minimal O HasMaximal (λ eq → not (=od∅→≡o∅ eq)) < x) |
197 zorn02 {x} ax m<x = proj2 (zorn03 (& x) ax) (subst₂ (λ j k → j < k) (sym *iso) (sym *iso) m<x ) | 199 zorn02 {x} ax m<x = ((proj2 zorn03) (& x) ax) (subst₂ (λ j k → j < k) (sym *iso) (sym *iso) m<x ) |
198 ... | yes ¬Maximal = ⊥-elim ( ZChain→¬SUP (z (& A) (≡o∅→=od∅ ¬Maximal)) ( supP B (ZChain.B⊆A (z (& A) (≡o∅→=od∅ ¬Maximal))) (ZChain.total (z (& A) (≡o∅→=od∅ ¬Maximal))) )) where | 200 ... | yes ¬Maximal = ⊥-elim ( ZChain→¬SUP (z (& A) (≡o∅→=od∅ ¬Maximal)) ( supP B (ZChain.B⊆A (z (& A) (≡o∅→=od∅ ¬Maximal))) (ZChain.total (z (& A) (≡o∅→=od∅ ¬Maximal))) )) where |
199 -- if we have no maximal, make ZChain, which contradict SUP condition | 201 -- if we have no maximal, make ZChain, which contradict SUP condition |
200 z : (x : Ordinal) → HasMaximal =h= od∅ → ZChain A x _<_ | 202 z : (x : Ordinal) → HasMaximal =h= od∅ → ZChain A x _<_ |
201 z x nomx = TransFinite (ind nomx) x | 203 z x nomx = TransFinite (ind nomx) x |
202 B = ZChain.B (z (& A) (≡o∅→=od∅ ¬Maximal) ) | 204 B = ZChain.B (z (& A) (≡o∅→=od∅ ¬Maximal) ) |
203 | 205 |
206 _⊆'_ : ( A B : HOD ) → Set n | |
207 _⊆'_ A B = (x : Ordinal ) → odef A x → odef B x | |
208 | |
209 MaximumSubset : {L P : HOD} | |
210 → o∅ o< & L → o∅ o< & P → P ⊆ L | |
211 → PartialOrderSet P _⊆'_ | |
212 → ( (B : HOD) → B ⊆ P → TotalOrderSet B _⊆'_ → SUP P B _⊆'_ ) | |
213 → Maximal P (_⊆'_) | |
214 MaximumSubset {L} {P} 0<L 0<P P⊆L PO SP = Zorn-lemma {P} {_⊆'_} 0<P PO SP |