Mercurial > hg > Members > kono > Proof > ZF-in-agda
comparison src/zorn.agda @ 543:f0b45446c7ea
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 27 Apr 2022 04:04:30 +0900 |
parents | 3826221c61a6 |
children | 27bb51b7f012 |
comparison
equal
deleted
inserted
replaced
542:3826221c61a6 | 543:f0b45446c7ea |
---|---|
160 field | 160 field |
161 maximal : HOD | 161 maximal : HOD |
162 A∋maximal : A ∋ maximal | 162 A∋maximal : A ∋ maximal |
163 ¬maximal<x : {x : HOD} → A ∋ x → ¬ maximal < x -- A is Partial, use negative | 163 ¬maximal<x : {x : HOD} → A ∋ x → ¬ maximal < x -- A is Partial, use negative |
164 | 164 |
165 | |
166 -- | 165 -- |
167 -- inductive maxmum tree from x | 166 -- inductive maxmum tree from x |
168 -- tree structure | 167 -- tree structure |
169 -- | 168 -- |
170 | 169 |
196 (sup : (C : Ordinal ) → (* C ⊆ A) → IsTotalOrderSet (* C) → Ordinal) (z : Ordinal) : Set (Level.suc n) where | 195 (sup : (C : Ordinal ) → (* C ⊆ A) → IsTotalOrderSet (* C) → Ordinal) (z : Ordinal) : Set (Level.suc n) where |
197 field | 196 field |
198 chain : HOD | 197 chain : HOD |
199 chain⊆A : chain ⊆ A | 198 chain⊆A : chain ⊆ A |
200 chain∋x : odef chain x | 199 chain∋x : odef chain x |
200 ¬chain∋x>z : { a : Ordinal } → z o< osuc a → ¬ odef chain a | |
201 f-total : IsTotalOrderSet chain | 201 f-total : IsTotalOrderSet chain |
202 f-next : {a : Ordinal } → odef chain a → a o< z → odef chain (f a) | 202 f-next : {a : Ordinal } → odef chain a → a o< z → odef chain (f a) |
203 f-immediate : { x y : Ordinal } → odef chain x → odef chain y → ¬ ( ( * x < * y ) ∧ ( * y < * (f x )) ) | 203 f-immediate : { x y : Ordinal } → odef chain x → odef chain y → ¬ ( ( * x < * y ) ∧ ( * y < * (f x )) ) |
204 is-max : {a b : Ordinal } → (ca : odef chain a ) → (ba : odef A b) → a o< z | 204 is-max : {a b : Ordinal } → (ca : odef chain a ) → (ba : odef A b) → a o< z |
205 → Prev< A chain ba f | 205 → Prev< A chain ba f |
235 ; ¬maximal<x = λ {y} ay → subst (λ k → ¬ (* x < k)) *iso (proj2 lt (& y) ay) } ) ; eq← = λ {y} lt → ⊥-elim ( ¬x<0 lt )} | 235 ; ¬maximal<x = λ {y} ay → subst (λ k → ¬ (* x < k)) *iso (proj2 lt (& y) ay) } ) ; eq← = λ {y} lt → ⊥-elim ( ¬x<0 lt )} |
236 x-is-maximal : ¬ Maximal A → {x : Ordinal} → (ax : odef A x) → & (Gtx (subst (λ k → odef A k ) (sym &iso) ax)) ≡ o∅ → (m : Ordinal) → odef A m → odef A x ∧ (¬ (* x < * m)) | 236 x-is-maximal : ¬ Maximal A → {x : Ordinal} → (ax : odef A x) → & (Gtx (subst (λ k → odef A k ) (sym &iso) ax)) ≡ o∅ → (m : Ordinal) → odef A m → odef A x ∧ (¬ (* x < * m)) |
237 x-is-maximal nmx {x} ax nogt m am = ⟪ subst (λ k → odef A k) &iso (subst (λ k → odef A k ) (sym &iso) ax) , ¬x<m ⟫ where | 237 x-is-maximal nmx {x} ax nogt m am = ⟪ subst (λ k → odef A k) &iso (subst (λ k → odef A k ) (sym &iso) ax) , ¬x<m ⟫ where |
238 ¬x<m : ¬ (* x < * m) | 238 ¬x<m : ¬ (* x < * m) |
239 ¬x<m x<m = ∅< {Gtx (subst (λ k → odef A k ) (sym &iso) ax)} {* m} ⟪ subst (λ k → odef A k) (sym &iso) am , subst (λ k → * x < k ) (cong (*) (sym &iso)) x<m ⟫ (≡o∅→=od∅ nogt) | 239 ¬x<m x<m = ∅< {Gtx (subst (λ k → odef A k ) (sym &iso) ax)} {* m} ⟪ subst (λ k → odef A k) (sym &iso) am , subst (λ k → * x < k ) (cong (*) (sym &iso)) x<m ⟫ (≡o∅→=od∅ nogt) |
240 | |
241 -- Uncountable acending chain by axiom of choice | |
240 cf : ¬ Maximal A → Ordinal → Ordinal | 242 cf : ¬ Maximal A → Ordinal → Ordinal |
241 cf nmx x with ODC.∋-p O A (* x) | 243 cf nmx x with ODC.∋-p O A (* x) |
242 ... | no _ = o∅ | 244 ... | no _ = o∅ |
243 ... | yes ax with is-o∅ (& ( Gtx ax )) | 245 ... | yes ax with is-o∅ (& ( Gtx ax )) |
244 ... | yes nogt = -- no larger element, so it is maximal | 246 ... | yes nogt = -- no larger element, so it is maximal |
252 ... | no not = ODC.x∋minimal O (Gtx ax) (λ eq → not (=od∅→≡o∅ eq)) | 254 ... | no not = ODC.x∋minimal O (Gtx ax) (λ eq → not (=od∅→≡o∅ eq)) |
253 cf-is-<-monotonic : (nmx : ¬ Maximal A ) → (x : Ordinal) → odef A x → ( * x < * (cf nmx x) ) ∧ odef A (cf nmx x ) | 255 cf-is-<-monotonic : (nmx : ¬ Maximal A ) → (x : Ordinal) → odef A x → ( * x < * (cf nmx x) ) ∧ odef A (cf nmx x ) |
254 cf-is-<-monotonic nmx x ax = ⟪ proj2 (is-cf nmx ax ) , proj1 (is-cf nmx ax ) ⟫ | 256 cf-is-<-monotonic nmx x ax = ⟪ proj2 (is-cf nmx ax ) , proj1 (is-cf nmx ax ) ⟫ |
255 cf-is-≤-monotonic : (nmx : ¬ Maximal A ) → ≤-monotonic-f A ( cf nmx ) | 257 cf-is-≤-monotonic : (nmx : ¬ Maximal A ) → ≤-monotonic-f A ( cf nmx ) |
256 cf-is-≤-monotonic nmx x ax = ⟪ case2 (proj1 ( cf-is-<-monotonic nmx x ax )) , proj2 ( cf-is-<-monotonic nmx x ax ) ⟫ | 258 cf-is-≤-monotonic nmx x ax = ⟪ case2 (proj1 ( cf-is-<-monotonic nmx x ax )) , proj2 ( cf-is-<-monotonic nmx x ax ) ⟫ |
259 | |
257 zsup : ( f : Ordinal → Ordinal ) → (mf : ≤-monotonic-f A f) → (zc : ZChain A sa f mf supO (& A)) → SUP A (ZChain.chain zc) | 260 zsup : ( f : Ordinal → Ordinal ) → (mf : ≤-monotonic-f A f) → (zc : ZChain A sa f mf supO (& A)) → SUP A (ZChain.chain zc) |
258 zsup f mf zc = supP (ZChain.chain zc) (ZChain.chain⊆A zc) ( ZChain.f-total zc ) | 261 zsup f mf zc = supP (ZChain.chain zc) (ZChain.chain⊆A zc) ( ZChain.f-total zc ) |
259 A∋zsup : (nmx : ¬ Maximal A ) (zc : ZChain A sa (cf nmx) (cf-is-≤-monotonic nmx) supO (& A)) | 262 A∋zsup : (nmx : ¬ Maximal A ) (zc : ZChain A sa (cf nmx) (cf-is-≤-monotonic nmx) supO (& A)) |
260 → A ∋ * ( & ( SUP.sup (zsup (cf nmx) (cf-is-≤-monotonic nmx) zc ) )) | 263 → A ∋ * ( & ( SUP.sup (zsup (cf nmx) (cf-is-≤-monotonic nmx) zc ) )) |
261 A∋zsup nmx zc = subst (λ k → odef A (& k )) (sym *iso) ( SUP.A∋maximal (zsup (cf nmx) (cf-is-≤-monotonic nmx) zc ) ) | 264 A∋zsup nmx zc = subst (λ k → odef A (& k )) (sym *iso) ( SUP.A∋maximal (zsup (cf nmx) (cf-is-≤-monotonic nmx) zc ) ) |
262 sp0 : ( f : Ordinal → Ordinal ) → (mf : ≤-monotonic-f A f ) (zc : ZChain A sa f mf supO (& A)) → SUP A (* (& (ZChain.chain zc))) | 265 sp0 : ( f : Ordinal → Ordinal ) → (mf : ≤-monotonic-f A f ) (zc : ZChain A sa f mf supO (& A)) → SUP A (* (& (ZChain.chain zc))) |
263 sp0 f mf zc = supP (* (& (ZChain.chain zc))) (subst (λ k → k ⊆ A) (sym *iso) (ZChain.chain⊆A zc)) | 266 sp0 f mf zc = supP (* (& (ZChain.chain zc))) (subst (λ k → k ⊆ A) (sym *iso) (ZChain.chain⊆A zc)) |
264 (subst (λ k → IsTotalOrderSet k) (sym *iso) (ZChain.f-total zc) ) | 267 (subst (λ k → IsTotalOrderSet k) (sym *iso) (ZChain.f-total zc) ) |
268 zc< : {x y z : Ordinal} → {P : Set n} → (x o< y → P) → x o< z → z o< y → P | |
269 zc< {x} {y} {z} {P} prev x<z z<y = prev (ordtrans x<z z<y) | |
270 | |
271 --- | |
272 --- sup is fix point in maximum chain | |
273 --- | |
265 z03 : ( f : Ordinal → Ordinal ) → (mf : ≤-monotonic-f A f ) (zc : ZChain A sa f mf supO (& A)) | 274 z03 : ( f : Ordinal → Ordinal ) → (mf : ≤-monotonic-f A f ) (zc : ZChain A sa f mf supO (& A)) |
266 → f (& (SUP.sup (sp0 f mf zc ))) ≡ & (SUP.sup (sp0 f mf zc )) | 275 → f (& (SUP.sup (sp0 f mf zc ))) ≡ & (SUP.sup (sp0 f mf zc )) |
267 z03 f mf zc = z14 where | 276 z03 f mf zc = z14 where |
268 chain = ZChain.chain zc | 277 chain = ZChain.chain zc |
269 sp1 = sp0 f mf zc | 278 sp1 = sp0 f mf zc |
270 z10 : {a b : Ordinal } → (ca : odef chain a ) → (ab : odef A b ) → a o< (& A) | 279 z10 : {a b : Ordinal } → (ca : odef chain a ) → (ab : odef A b ) → a o< (& A) |
271 → Prev< A chain ab f | 280 → Prev< A chain ab f |
272 ∨ (supO (& chain) (subst (λ k → k ⊆ A) (sym *iso) (ZChain.chain⊆A zc)) (subst (λ k → IsTotalOrderSet k) (sym *iso) (ZChain.f-total zc)) ≡ b ) | 281 ∨ (supO (& chain) (subst (λ k → k ⊆ A) (sym *iso) (ZChain.chain⊆A zc)) (subst (λ k → IsTotalOrderSet k) (sym *iso) (ZChain.f-total zc)) ≡ b ) |
273 → * a < * b → odef chain b | 282 → * a < * b → odef chain b |
274 z10 = ZChain.is-max zc | 283 z10 = ZChain.is-max zc |
284 z11 : & (SUP.sup sp1) o< & A | |
285 z11 = c<→o< ( SUP.A∋maximal sp1) | |
275 z12 : odef chain (& (SUP.sup sp1)) | 286 z12 : odef chain (& (SUP.sup sp1)) |
276 z12 with o≡? (& s) (& (SUP.sup sp1)) | 287 z12 with o≡? (& s) (& (SUP.sup sp1)) |
277 ... | yes eq = subst (λ k → odef chain k) eq ( ZChain.chain∋x zc ) | 288 ... | yes eq = subst (λ k → odef chain k) eq ( ZChain.chain∋x zc ) |
278 ... | no ne = z10 {& s} {& (SUP.sup sp1)} (ZChain.chain∋x zc) (SUP.A∋maximal sp1) (c<→o< (subst (λ k → odef A (& k) ) *iso sa) ) (case2 refl ) z13 where | 289 ... | no ne = z10 {& s} {& (SUP.sup sp1)} (ZChain.chain∋x zc) (SUP.A∋maximal sp1) (c<→o< (subst (λ k → odef A (& k) ) *iso sa) ) (case2 refl ) z13 where |
279 z13 : * (& s) < * (& (SUP.sup sp1)) | 290 z13 : * (& s) < * (& (SUP.sup sp1)) |
280 z13 with SUP.x<sup sp1 (subst (λ k → odef k (& s)) (sym *iso) ( ZChain.chain∋x zc )) | 291 z13 with SUP.x<sup sp1 (subst (λ k → odef k (& s)) (sym *iso) ( ZChain.chain∋x zc )) |
281 ... | case1 eq = ⊥-elim ( ne (cong (&) eq) ) | 292 ... | case1 eq = ⊥-elim ( ne (cong (&) eq) ) |
282 ... | case2 lt = subst₂ (λ j k → j < k ) (sym *iso) (sym *iso) lt | 293 ... | case2 lt = subst₂ (λ j k → j < k ) (sym *iso) (sym *iso) lt |
283 z14 : f (& (SUP.sup (sp0 f mf zc))) ≡ & (SUP.sup (sp0 f mf zc)) | 294 z14 : f (& (SUP.sup (sp0 f mf zc))) ≡ & (SUP.sup (sp0 f mf zc)) |
284 z14 with IsStrictTotalOrder.compare (ZChain.f-total zc ) (me (subst (λ k → odef chain k) (sym &iso) (ZChain.f-next zc z12 {!!} ))) (me z12 ) | 295 z14 with IsStrictTotalOrder.compare (ZChain.f-total zc ) (me (subst (λ k → odef chain k) (sym &iso) (ZChain.f-next zc z12 z11 ))) (me z12 ) |
285 ... | tri< a ¬b ¬c = ⊥-elim z16 where | 296 ... | tri< a ¬b ¬c = ⊥-elim z16 where |
286 z16 : ⊥ | 297 z16 : ⊥ |
287 z16 with proj1 (mf (& ( SUP.sup sp1)) ( SUP.A∋maximal sp1 )) | 298 z16 with proj1 (mf (& ( SUP.sup sp1)) ( SUP.A∋maximal sp1 )) |
288 ... | case1 eq = ⊥-elim (¬b (subst₂ (λ j k → j ≡ k ) refl *iso (sym eq) )) | 299 ... | case1 eq = ⊥-elim (¬b (subst₂ (λ j k → j ≡ k ) refl *iso (sym eq) )) |
289 ... | case2 lt = ⊥-elim (¬c (subst₂ (λ j k → k < j ) refl *iso lt )) | 300 ... | case2 lt = ⊥-elim (¬c (subst₂ (λ j k → k < j ) refl *iso lt )) |
290 ... | tri≈ ¬a b ¬c = subst ( λ k → k ≡ & (SUP.sup sp1) ) &iso ( cong (&) b ) | 301 ... | tri≈ ¬a b ¬c = subst ( λ k → k ≡ & (SUP.sup sp1) ) &iso ( cong (&) b ) |
291 ... | tri> ¬a ¬b c = ⊥-elim z17 where | 302 ... | tri> ¬a ¬b c = ⊥-elim z17 where |
292 z15 : (* (f ( & ( SUP.sup sp1 ))) ≡ SUP.sup sp1) ∨ (* (f ( & ( SUP.sup sp1 ))) < SUP.sup sp1) | 303 z15 : (* (f ( & ( SUP.sup sp1 ))) ≡ SUP.sup sp1) ∨ (* (f ( & ( SUP.sup sp1 ))) < SUP.sup sp1) |
293 z15 = SUP.x<sup sp1 (subst₂ (λ j k → odef j k ) (sym *iso) (sym &iso) (ZChain.f-next zc z12 {!!} ) ) | 304 z15 = SUP.x<sup sp1 (subst₂ (λ j k → odef j k ) (sym *iso) (sym &iso) (ZChain.f-next zc z12 z11 ) ) |
294 z17 : ⊥ | 305 z17 : ⊥ |
295 z17 with z15 | 306 z17 with z15 |
296 ... | case1 eq = ¬b eq | 307 ... | case1 eq = ¬b eq |
297 ... | case2 lt = ¬a lt | 308 ... | case2 lt = ¬a lt |
298 z04 : (nmx : ¬ Maximal A ) → (zc : ZChain A sa (cf nmx) (cf-is-≤-monotonic nmx) supO (& A)) → ⊥ | 309 z04 : (nmx : ¬ Maximal A ) → (zc : ZChain A sa (cf nmx) (cf-is-≤-monotonic nmx) supO (& A)) → ⊥ |
301 (subst (λ k → odef A (& k)) (sym *iso) (SUP.A∋maximal sp1) ) (case1 ( cong (*)( z03 (cf nmx) (cf-is-≤-monotonic nmx ) zc ))) | 312 (subst (λ k → odef A (& k)) (sym *iso) (SUP.A∋maximal sp1) ) (case1 ( cong (*)( z03 (cf nmx) (cf-is-≤-monotonic nmx ) zc ))) |
302 (proj1 (cf-is-<-monotonic nmx c (SUP.A∋maximal sp1))) where | 313 (proj1 (cf-is-<-monotonic nmx c (SUP.A∋maximal sp1))) where |
303 sp1 = sp0 (cf nmx) (cf-is-≤-monotonic nmx) zc | 314 sp1 = sp0 (cf nmx) (cf-is-≤-monotonic nmx) zc |
304 c = & (SUP.sup sp1) | 315 c = & (SUP.sup sp1) |
305 premax : {x y : Ordinal} → y o< x → ( f : Ordinal → Ordinal ) → (mf : ≤-monotonic-f A f ) (zc0 : ZChain A sa f mf supO y ) | 316 premax : {x y : Ordinal} → y o< x → ( f : Ordinal → Ordinal ) → (mf : ≤-monotonic-f A f ) (zc0 : ZChain A sa f mf supO y ) |
306 → {a b : Ordinal} (ca : odef (ZChain.chain zc0) a) | 317 → {a b : Ordinal} (ca : odef (ZChain.chain zc0) a) → (ab : odef A b) → a o< y |
307 → odef A b → a o< x → Prev< A (ZChain.chain zc0) (incl (ZChain.chain⊆A zc0) (subst (odef (ZChain.chain zc0)) (sym &iso) ca)) f | 318 → Prev< A (ZChain.chain zc0) ab f ∨ (supO (& (ZChain.chain zc0)) |
308 ∨ (supO (& (ZChain.chain zc0)) (subst (λ k → k ⊆ A) (sym *iso) (ZChain.chain⊆A zc0)) (subst IsTotalOrderSet (sym *iso) (ZChain.f-total zc0)) ≡ b) | 319 (subst (λ k → k ⊆ A) (sym *iso) (ZChain.chain⊆A zc0)) |
320 (subst IsTotalOrderSet (sym *iso) (ZChain.f-total zc0)) ≡ b) | |
309 → * a < * b → odef (ZChain.chain zc0) b | 321 → * a < * b → odef (ZChain.chain zc0) b |
310 premax {x} {y} y<x f mf zc0 {a} {b} ca ab a<x P a<b = ZChain.is-max zc0 ca ab {!!} {!!} a<b | 322 premax {x} {y} y<x f mf zc0 {a} {b} ca ab a<y P a<b = ZChain.is-max zc0 ca ab a<y P a<b |
311 -- Union of ZFChain | 323 -- Union of ZFChain |
312 UZFChain : ( f : Ordinal → Ordinal ) → (mf : ≤-monotonic-f A f ) → (B : Ordinal) | 324 UZFChain : ( f : Ordinal → Ordinal ) → (mf : ≤-monotonic-f A f ) → (B : Ordinal) |
313 → ( (y : Ordinal) → y o< B → ZChain A sa f mf supO y ) → HOD | 325 → ( (y : Ordinal) → y o< B → ZChain A sa f mf supO y ) → HOD |
314 UZFChain f mf B prev = record { od = record { def = λ y → odef A y ∧ (y o< B) ∧ ( (y<b : y o< B) → odef (ZChain.chain (prev y y<b)) y) } | 326 UZFChain f mf B prev = record { od = record { def = λ y → odef A y ∧ (y o< B) ∧ ( (y<b : y o< B) → odef (ZChain.chain (prev y y<b)) y) } |
315 ; odmax = & A ; <odmax = z07 } | 327 ; odmax = & A ; <odmax = z07 } |
322 -- we have previous ordinal and ¬ A ∋ x, use previous Zchain | 334 -- we have previous ordinal and ¬ A ∋ x, use previous Zchain |
323 px = Oprev.oprev op | 335 px = Oprev.oprev op |
324 zc0 : ZChain A sa f mf supO (Oprev.oprev op) | 336 zc0 : ZChain A sa f mf supO (Oprev.oprev op) |
325 zc0 = prev px (subst (λ k → px o< k) (Oprev.oprev=x op) <-osuc) | 337 zc0 = prev px (subst (λ k → px o< k) (Oprev.oprev=x op) <-osuc) |
326 zc1 : ZChain A sa f mf supO x | 338 zc1 : ZChain A sa f mf supO x |
327 zc1 = record { chain = ZChain.chain zc0 ; chain⊆A = ZChain.chain⊆A zc0 ; f-total = ZChain.f-total zc0 ; f-next = {!!} ; f-immediate = {!!} | 339 zc1 = record { chain = ZChain.chain zc0 ; chain⊆A = ZChain.chain⊆A zc0 ; f-total = ZChain.f-total zc0 |
328 ; chain∋x = ZChain.chain∋x zc0 ; is-max = {!!} } | 340 ; f-next = zc20 (ZChain.f-next zc0) ; f-immediate = ZChain.f-immediate zc0 |
341 ; ¬chain∋x>z = λ {a} x<oa → ZChain.¬chain∋x>z zc0 (ordtrans (subst (λ k → px o< k ) (Oprev.oprev=x op) <-osuc ) x<oa ) | |
342 ; chain∋x = ZChain.chain∋x zc0 ; is-max = λ za ba a<x → zc20 (λ za a<x → ZChain.is-max zc0 za ba a<x ) za a<x } where | |
343 zc20 : {P : Ordinal → Set n} → ({a : Ordinal} → odef (ZChain.chain zc0) a → a o< px → P a) | |
344 → {a : Ordinal} → (za : odef (ZChain.chain zc0) a ) → (a<x : a o< x) → P a | |
345 zc20 {P} prev {a} za a<x with trio< a px | |
346 ... | tri< a₁ ¬b ¬c = prev za a₁ | |
347 ... | tri≈ ¬a b ¬c = ⊥-elim ( ZChain.¬chain∋x>z zc0 (subst (λ k → k o< osuc a) b <-osuc ) za ) | |
348 ... | tri> ¬a ¬b c = ⊥-elim ( ZChain.¬chain∋x>z zc0 (ordtrans c <-osuc ) za ) | |
329 ... | yes ax = zc4 where -- we have previous ordinal and A ∋ x | 349 ... | yes ax = zc4 where -- we have previous ordinal and A ∋ x |
330 px = Oprev.oprev op | 350 px = Oprev.oprev op |
331 zc0 : ZChain A sa f mf supO (Oprev.oprev op) | 351 zc0 : ZChain A sa f mf supO (Oprev.oprev op) |
332 zc0 = prev px (subst (λ k → px o< k) (Oprev.oprev=x op) <-osuc) | 352 zc0 = prev px (subst (λ k → px o< k) (Oprev.oprev=x op) <-osuc) |
353 Afx : { x : Ordinal } → A ∋ * x → A ∋ * (f x) | |
354 Afx {x} ax = (subst (λ k → odef A k ) (sym &iso) (proj2 (mf x (subst (λ k → odef A k ) &iso ax)))) | |
333 -- x is in the previous chain, use the same | 355 -- x is in the previous chain, use the same |
334 -- x has some y which y < x ∧ f y ≡ x | 356 -- x has some y which y < x ∧ f y ≡ x |
335 -- x has no y which y < x | 357 -- x has no y which y < x |
336 zc4 : ZChain A sa f mf supO x | 358 zc4 : ZChain A sa f mf supO x |
337 zc4 with ODC.p∨¬p O ( Prev< A (ZChain.chain zc0) ax f ) | 359 zc4 with ODC.p∨¬p O ( Prev< A (ZChain.chain zc0) ax f ) |
345 ; f-total = zc6 ; f-next = {!!} ; f-immediate = {!!} ; chain∋x = case1 (ZChain.chain∋x zc0) ; is-max = {!!} } where | 367 ; f-total = zc6 ; f-next = {!!} ; f-immediate = {!!} ; chain∋x = case1 (ZChain.chain∋x zc0) ; is-max = {!!} } where |
346 -- extend with f x -- cahin ∋ y ∧ chain ∋ f y ∧ x ≡ f ( f y ) | 368 -- extend with f x -- cahin ∋ y ∧ chain ∋ f y ∧ x ≡ f ( f y ) |
347 zc5 : HOD | 369 zc5 : HOD |
348 zc5 = record { od = record { def = λ z → odef (ZChain.chain zc0) z ∨ (z ≡ f x) } ; odmax = & A ; <odmax = {!!} } | 370 zc5 = record { od = record { def = λ z → odef (ZChain.chain zc0) z ∨ (z ≡ f x) } ; odmax = & A ; <odmax = {!!} } |
349 ⊆-zc5 : zc5 ⊆ A | 371 ⊆-zc5 : zc5 ⊆ A |
350 ⊆-zc5 = record { incl = λ lt → {!!} } | 372 ⊆-zc5 = record { incl = λ {y} lt → zc15 lt } where |
373 zc15 : {z : Ordinal } → ( odef (ZChain.chain zc0) z ∨ (z ≡ f x) ) → odef A z | |
374 zc15 {z} (case1 zz) = subst (λ k → odef A k ) &iso ( incl (ZChain.chain⊆A zc0) (subst (λ k → odef chain k ) (sym &iso) zz ) ) | |
375 zc15 (case2 refl) = proj2 ( mf x (subst (λ k → odef A k ) &iso ax ) ) | |
351 IPO = ⊆-IsPartialOrderSet ⊆-zc5 PO | 376 IPO = ⊆-IsPartialOrderSet ⊆-zc5 PO |
352 zc8 : { A B x : HOD } → (ax : A ∋ x ) → (P : Prev< A B ax f ) → * (f (& (* (Prev<.y P)))) ≡ x | 377 zc8 : { A B x : HOD } → (ax : A ∋ x ) → (P : Prev< A B ax f ) → * (f (& (* (Prev<.y P)))) ≡ x |
353 zc8 {A} {B} {x} ax P = subst₂ (λ j k → * ( f j ) ≡ k ) (sym &iso) *iso (sym (cong (*) ( Prev<.x=fy P))) | 378 zc8 {A} {B} {x} ax P = subst₂ (λ j k → * ( f j ) ≡ k ) (sym &iso) *iso (sym (cong (*) ( Prev<.x=fy P))) |
354 fx=zc : odef (ZChain.chain zc0) x → Tri (* (f x) < * x ) (* (f x) ≡ * x) (* x < * (f x) ) | 379 fx=zc : odef (ZChain.chain zc0) x → Tri (* (f x) < * x ) (* (f x) ≡ * x) (* x < * (f x) ) |
355 fx=zc c with mf x (subst (λ k → odef A k) &iso ax ) | 380 fx=zc c with mf x (subst (λ k → odef A k) &iso ax ) |
356 ... | ⟪ case1 x=fx , afx ⟫ = tri≈ {!!} zc13 {!!} where | 381 ... | ⟪ case1 x=fx , afx ⟫ = tri≈ ( z01 ax (Afx ax) (case1 (sym zc13))) zc13 (z01 (Afx ax) ax (case1 zc13)) where |
357 zc13 : * (f x) ≡ * x | 382 zc13 : * (f x) ≡ * x |
358 zc13 = subst (λ k → k ≡ * x ) (subst (λ k → * (f x) ≡ k ) *iso (cong (*) (sym &iso))) (sym ( x=fx )) | 383 zc13 = subst (λ k → k ≡ * x ) (subst (λ k → * (f x) ≡ k ) *iso (cong (*) (sym &iso))) (sym ( x=fx )) |
359 ... | ⟪ case2 x<fx , afx ⟫ = tri> {!!} {!!} zc14 where | 384 ... | ⟪ case2 x<fx , afx ⟫ = tri> (z01 ax (Afx ax) (case2 zc14)) (λ lt → z01 (Afx ax) ax (case1 lt) zc14) zc14 where |
360 zc14 : * x < * (f x) | 385 zc14 : * x < * (f x) |
361 zc14 = subst₂ (λ j k → j < k ) {!!} (subst (λ k → * (f x) ≡ k ) *iso (cong (*) (sym &iso ))) x<fx | 386 zc14 = subst (λ k → * x < k ) (subst (λ k → * (f x) ≡ k ) *iso (cong (*) (sym &iso ))) x<fx |
362 cmp : Trichotomous _ _ | 387 cmp : Trichotomous _ _ |
363 cmp record { elm = a ; is-elm = aa } record { elm = b ; is-elm = ab } with aa | ab | 388 cmp record { elm = a ; is-elm = aa } record { elm = b ; is-elm = ab } with aa | ab |
364 ... | case1 x | case1 x₁ = IsStrictTotalOrder.compare (ZChain.f-total zc0) (me x) (me x₁) | 389 ... | case1 x | case1 x₁ = IsStrictTotalOrder.compare (ZChain.f-total zc0) (me x) (me x₁) |
365 ... | case2 fx | case2 fx₁ = tri≈ {!!} (subst₂ (λ j k → j ≡ k ) *iso *iso (trans (cong (*) fx) (sym (cong (*) fx₁ ) ))) {!!} | 390 ... | case2 fx | case2 fx₁ = tri≈ {!!} (subst₂ (λ j k → j ≡ k ) *iso *iso (trans (cong (*) fx) (sym (cong (*) fx₁ ) ))) {!!} |
366 ... | case1 c | case2 fx = {!!} -- subst₂ (λ j k → Tri ( j < k ) (j ≡ k) ( k < j ) ) {!!} {!!} ( fx>zc (subst (λ k → odef chain k) {!!} c )) | 391 ... | case1 c | case2 fx = {!!} -- subst₂ (λ j k → Tri ( j < k ) (j ≡ k) ( k < j ) ) {!!} {!!} ( fx>zc (subst (λ k → odef chain k) {!!} c )) |
367 ... | case2 fx | case1 c with ODC.p∨¬p O ( Prev< A chain (incl (ZChain.chain⊆A zc0) c) f ) | 392 ... | case2 fx | case1 c with ODC.p∨¬p O ( Prev< A chain (incl (ZChain.chain⊆A zc0) c) f ) |
368 ... | case2 n = {!!} | 393 ... | case2 n = {!!} |
369 ... | case1 fb with IsStrictTotalOrder.compare (ZChain.f-total zc0) (me (subst (λ k → odef chain k) (sym &iso) (Prev<.ay y))) (me (subst (λ k → odef chain k) (sym &iso) (Prev<.ay fb))) | 394 ... | case1 fb with IsStrictTotalOrder.compare (ZChain.f-total zc0) (me (subst (λ k → odef chain k) (sym &iso) (Prev<.ay y))) (me (subst (λ k → odef chain k) (sym &iso) (Prev<.ay fb))) |
370 ... | tri< a₁ ¬b ¬c = {!!} | 395 ... | tri< a₁ ¬b ¬c = {!!} |
371 ... | tri≈ ¬a b₁ ¬c = subst₂ (λ j k → Tri ( j < k ) (j ≡ k) ( k < j ) ) {!!} {!!} ( fx=zc (subst (λ k → odef chain k) {!!} c )) where | 396 ... | tri≈ ¬a b₁ ¬c = subst₂ (λ j k → Tri ( j < k ) (j ≡ k) ( k < j ) ) zc11 zc10 ( fx=zc zc12 ) where |
372 zc11 : & a ≡ f x | |
373 zc11 = fx | |
374 zc10 : * x ≡ b | 397 zc10 : * x ≡ b |
375 zc10 = subst₂ (λ j k → j ≡ k ) (zc8 ax y ) (zc8 (incl ( ZChain.chain⊆A zc0 ) c) fb) (cong (λ k → * ( f ( & k ))) b₁) | 398 zc10 = subst₂ (λ j k → j ≡ k ) (zc8 ax y ) (zc8 (incl ( ZChain.chain⊆A zc0 ) c) fb) (cong (λ k → * ( f ( & k ))) b₁) |
376 zc12 : Tri (a < b) (a ≡ b) (b < a) | 399 zc11 : * (f x) ≡ a |
377 zc12 with mf x (subst (λ k → odef A k) &iso ax ) | 400 zc11 = subst (λ k → * (f x) ≡ k ) *iso (cong (*) (sym fx)) |
378 ... | ⟪ case1 x=fx , afx ⟫ = tri≈ {!!} zc13 {!!} where | 401 zc12 : odef chain x |
379 zc13 : a ≡ b | 402 zc12 = subst (λ k → odef chain k ) (subst (λ k → & b ≡ k ) &iso (sym (cong (&) zc10))) c |
380 zc13 = subst₂ (λ j k → j ≡ k ) (subst (λ k → * (f x) ≡ k ) *iso (cong (*) (sym zc11))) zc10 (sym ( x=fx )) | |
381 ... | ⟪ case2 x<fx , afx ⟫ = tri> {!!} {!!} zc14 where | |
382 zc14 : b < a | |
383 zc14 = subst₂ (λ j k → j < k ) zc10 (subst (λ k → * (f x) ≡ k ) *iso (cong (*) (sym zc11))) x<fx | |
384 ... | tri> ¬a ¬b c₁ = {!!} | 403 ... | tri> ¬a ¬b c₁ = {!!} |
385 zc6 : IsTotalOrderSet zc5 | 404 zc6 : IsTotalOrderSet zc5 |
386 zc6 = record { isEquivalence = IsStrictPartialOrder.isEquivalence IPO ; trans = λ {x} {y} {z} → IsStrictPartialOrder.trans IPO {x} {y} {z} | 405 zc6 = record { isEquivalence = IsStrictPartialOrder.isEquivalence IPO ; trans = λ {x} {y} {z} → IsStrictPartialOrder.trans IPO {x} {y} {z} |
387 ; compare = cmp } | 406 ; compare = cmp } |
388 ... | case2 not with ODC.p∨¬p O ( x ≡ & ( SUP.sup ( supP ( ZChain.chain zc0 ) {!!} {!!} ) )) | 407 ... | case2 not with ODC.p∨¬p O ( x ≡ & ( SUP.sup ( supP ( ZChain.chain zc0 ) {!!} {!!} ) )) |
389 ... | case1 y = {!!} -- x is sup | 408 ... | case1 y = {!!} -- x is sup |
390 ... | case2 not = record { chain = ZChain.chain zc0 ; chain⊆A = ZChain.chain⊆A zc0 ; f-total = ZChain.f-total zc0 ; f-next = {!!} | 409 ... | case2 not = record { chain = ZChain.chain zc0 ; chain⊆A = ZChain.chain⊆A zc0 ; f-total = ZChain.f-total zc0 ; f-next = {!!} |
391 ; f-immediate = {!!} ; chain∋x = ZChain.chain∋x zc0 ; is-max = {!!} } -- no extention | 410 ; f-immediate = {!!} ; chain∋x = ZChain.chain∋x zc0 ; is-max = {!!} } -- no extention |
392 ind f mf x prev | no ¬ox with trio< (& A) x --- limit ordinal case | 411 ind f mf x prev | no ¬ox with trio< (& A) x --- limit ordinal case |
393 ... | tri< a ¬b ¬c = record { chain = ZChain.chain zc0 ; chain⊆A = ZChain.chain⊆A zc0 ; f-total = ZChain.f-total zc0 ; f-next = {!!} | 412 ... | tri< a ¬b ¬c = record { chain = ZChain.chain zc0 ; chain⊆A = ZChain.chain⊆A zc0 ; f-total = ZChain.f-total zc0 |
394 ; f-immediate = {!!} ; chain∋x = {!!} ; is-max = {!!} } where | 413 ; f-next = {!!} |
414 ; f-immediate = {!!} ; chain∋x = ZChain.chain∋x zc0 ; is-max = {!!} } where | |
395 zc0 = prev (& A) a | 415 zc0 = prev (& A) a |
396 ... | tri≈ ¬a b ¬c = {!!} | 416 ... | tri≈ ¬a b ¬c = {!!} |
397 ... | tri> ¬a ¬b c = {!!} | 417 ... | tri> ¬a ¬b c = record { chain = uzc ; chain⊆A = record { incl = λ {x} lt → proj1 lt } ; f-total = {!!} ; f-next = {!!} |
418 ; f-immediate = {!!} ; chain∋x = {!!} ; is-max = {!!} } where | |
419 uzc : HOD | |
420 uzc = UZFChain f mf x prev | |
398 zorn00 : Maximal A | 421 zorn00 : Maximal A |
399 zorn00 with is-o∅ ( & HasMaximal ) -- we have no Level (suc n) LEM | 422 zorn00 with is-o∅ ( & HasMaximal ) -- we have no Level (suc n) LEM |
400 ... | no not = record { maximal = ODC.minimal O HasMaximal (λ eq → not (=od∅→≡o∅ eq)) ; A∋maximal = zorn01 ; ¬maximal<x = zorn02 } where | 423 ... | no not = record { maximal = ODC.minimal O HasMaximal (λ eq → not (=od∅→≡o∅ eq)) ; A∋maximal = zorn01 ; ¬maximal<x = zorn02 } where |
401 -- yes we have the maximal | 424 -- yes we have the maximal |
402 zorn03 : odef HasMaximal ( & ( ODC.minimal O HasMaximal (λ eq → not (=od∅→≡o∅ eq)) ) ) | 425 zorn03 : odef HasMaximal ( & ( ODC.minimal O HasMaximal (λ eq → not (=od∅→≡o∅ eq)) ) ) |