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