Mercurial > hg > Members > kono > Proof > ZF-in-agda
comparison src/zorn.agda @ 567:4d8a54e2861e
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 01 May 2022 05:35:36 +0900 |
parents | a64dad8d2e93 |
children | 666377324edd |
comparison
equal
deleted
inserted
replaced
566:a64dad8d2e93 | 567:4d8a54e2861e |
---|---|
203 -- open import Relation.Binary.Properties.Poset as Poset | 203 -- open import Relation.Binary.Properties.Poset as Poset |
204 | 204 |
205 IsTotalOrderSet : ( A : HOD ) → Set (Level.suc n) | 205 IsTotalOrderSet : ( A : HOD ) → Set (Level.suc n) |
206 IsTotalOrderSet A = {a b : HOD} → odef A (& a) → odef A (& b) → Tri (a < b) (a ≡ b) (b < a ) | 206 IsTotalOrderSet A = {a b : HOD} → odef A (& a) → odef A (& b) → Tri (a < b) (a ≡ b) (b < a ) |
207 | 207 |
208 | 208 ⊆-IsTotalOrderSet : { A B : HOD } → B ⊆ A → IsTotalOrderSet A → IsTotalOrderSet B |
209 ⊆-IsTotalOrderSet = {!!} | |
210 | |
209 record Maximal ( A : HOD ) : Set (Level.suc n) where | 211 record Maximal ( A : HOD ) : Set (Level.suc n) where |
210 field | 212 field |
211 maximal : HOD | 213 maximal : HOD |
212 A∋maximal : A ∋ maximal | 214 A∋maximal : A ∋ maximal |
213 ¬maximal<x : {x : HOD} → A ∋ x → ¬ maximal < x -- A is Partial, use negative | 215 ¬maximal<x : {x : HOD} → A ∋ x → ¬ maximal < x -- A is Partial, use negative |
215 -- | 217 -- |
216 -- inductive maxmum tree from x | 218 -- inductive maxmum tree from x |
217 -- tree structure | 219 -- tree structure |
218 -- | 220 -- |
219 | 221 |
220 record Prev< (A B : HOD) {x : Ordinal } (xa : odef A x) ( f : Ordinal → Ordinal ) : Set n where | 222 record HasPrev (A B : HOD) {x : Ordinal } (xa : odef A x) ( f : Ordinal → Ordinal ) : Set n where |
221 field | 223 field |
222 y : Ordinal | 224 y : Ordinal |
223 ay : odef B y | 225 ay : odef B y |
224 x=fy : x ≡ f y | 226 x=fy : x ≡ f y |
227 | |
228 _⊆'_ : ( A B : HOD ) → Set n | |
229 _⊆'_ A B = (x : Ordinal ) → odef A x → odef B x | |
230 | |
231 record IsSup (A : HOD) (T : IsTotalOrderSet A) {x : Ordinal } | |
232 (xa : odef A x) (sup : (C : HOD ) → ( C ⊆ A) → IsTotalOrderSet C → Ordinal) ( f : Ordinal → Ordinal ) : Set n where | |
233 field | |
234 chain : Ordinal | |
235 chain⊆A : (* chain) ⊆' A | |
236 -- ¬prev : ¬ HasPrev A (* chain) xa f | |
237 x=sup : x ≡ sup (* chain) record { incl = λ {x} → chain⊆A (& x) } ( ⊆-IsTotalOrderSet {A} {* chain} record { incl = λ {x} → chain⊆A (& x) } T ) | |
225 | 238 |
226 record SUP ( A B : HOD ) : Set (Level.suc n) where | 239 record SUP ( A B : HOD ) : Set (Level.suc n) where |
227 field | 240 field |
228 sup : HOD | 241 sup : HOD |
229 A∋maximal : A ∋ sup | 242 A∋maximal : A ∋ sup |
241 initial : {y : Ordinal } → odef chain y → * x ≤ * y | 254 initial : {y : Ordinal } → odef chain y → * x ≤ * y |
242 f-total : IsTotalOrderSet chain | 255 f-total : IsTotalOrderSet chain |
243 f-next : {a : Ordinal } → odef chain a → odef chain (f a) | 256 f-next : {a : Ordinal } → odef chain a → odef chain (f a) |
244 f-immediate : { x y : Ordinal } → odef chain x → odef chain y → ¬ ( ( * x < * y ) ∧ ( * y < * (f x )) ) | 257 f-immediate : { x y : Ordinal } → odef chain x → odef chain y → ¬ ( ( * x < * y ) ∧ ( * y < * (f x )) ) |
245 is-max : {a b : Ordinal } → (ca : odef chain a ) → b o< osuc z → (ba : odef A b) | 258 is-max : {a b : Ordinal } → (ca : odef chain a ) → b o< osuc z → (ba : odef A b) |
246 → Prev< A chain ba f ∨ ((sup chain chain⊆A f-total) ≡ b ) | 259 → HasPrev A chain ba f ∨ ((sup chain chain⊆A f-total) ≡ b ) |
247 → * a < * b → odef chain b | 260 → * a < * b → odef chain b |
248 | 261 |
249 Zorn-lemma : { A : HOD } | 262 Zorn-lemma : { A : HOD } |
250 → o∅ o< & A | 263 → o∅ o< & A |
251 → ( ( B : HOD) → (B⊆A : B ⊆ A) → IsTotalOrderSet B → SUP A B ) -- SUP condition | 264 → ( ( B : HOD) → (B⊆A : B ⊆ A) → IsTotalOrderSet B → SUP A B ) -- SUP condition |
313 → f (& (SUP.sup (sp0 f mf zc ))) ≡ & (SUP.sup (sp0 f mf zc )) | 326 → f (& (SUP.sup (sp0 f mf zc ))) ≡ & (SUP.sup (sp0 f mf zc )) |
314 z03 f mf zc = z14 where | 327 z03 f mf zc = z14 where |
315 chain = ZChain.chain zc | 328 chain = ZChain.chain zc |
316 sp1 = sp0 f mf zc | 329 sp1 = sp0 f mf zc |
317 z10 : {a b : Ordinal } → (ca : odef chain a ) → b o< osuc (& A) → (ab : odef A b ) | 330 z10 : {a b : Ordinal } → (ca : odef chain a ) → b o< osuc (& A) → (ab : odef A b ) |
318 → Prev< A chain ab f ∨ (supO chain (ZChain.chain⊆A zc) (ZChain.f-total zc) ≡ b ) | 331 → HasPrev A chain ab f ∨ (supO chain (ZChain.chain⊆A zc) (ZChain.f-total zc) ≡ b ) |
319 → * a < * b → odef chain b | 332 → * a < * b → odef chain b |
320 z10 = ZChain.is-max zc | 333 z10 = ZChain.is-max zc |
321 z11 : & (SUP.sup sp1) o< & A | 334 z11 : & (SUP.sup sp1) o< & A |
322 z11 = c<→o< ( SUP.A∋maximal sp1) | 335 z11 = c<→o< ( SUP.A∋maximal sp1) |
323 z12 : odef chain (& (SUP.sup sp1)) | 336 z12 : odef chain (& (SUP.sup sp1)) |
375 ... | no noapx = -- ¬ A ∋ p, just skip | 388 ... | no noapx = -- ¬ A ∋ p, just skip |
376 record { chain = ZChain.chain zc0 ; chain⊆A = ZChain.chain⊆A zc0 ; initial = ZChain.initial zc0 | 389 record { chain = ZChain.chain zc0 ; chain⊆A = ZChain.chain⊆A zc0 ; initial = ZChain.initial zc0 |
377 ; f-total = ZChain.f-total zc0 ; f-next = ZChain.f-next zc0 | 390 ; f-total = ZChain.f-total zc0 ; f-next = ZChain.f-next zc0 |
378 ; f-immediate = ZChain.f-immediate zc0 ; chain∋x = ZChain.chain∋x zc0 ; is-max = zc11 } where -- no extention | 391 ; f-immediate = ZChain.f-immediate zc0 ; chain∋x = ZChain.chain∋x zc0 ; is-max = zc11 } where -- no extention |
379 zc11 : {a b : Ordinal} → odef (ZChain.chain zc0) a → b o< osuc x → (ba : odef A b) → | 392 zc11 : {a b : Ordinal} → odef (ZChain.chain zc0) a → b o< osuc x → (ba : odef A b) → |
380 Prev< A (ZChain.chain zc0) ba f ∨ (& (SUP.sup (supP (ZChain.chain zc0) (ZChain.chain⊆A zc0) (ZChain.f-total zc0))) ≡ b) → | 393 HasPrev A (ZChain.chain zc0) ba f ∨ (& (SUP.sup (supP (ZChain.chain zc0) (ZChain.chain⊆A zc0) (ZChain.f-total zc0))) ≡ b) → |
381 * a < * b → odef (ZChain.chain zc0) b | 394 * a < * b → odef (ZChain.chain zc0) b |
382 zc11 {a} {b} za b<ox ba P a<b with osuc-≡< b<ox | 395 zc11 {a} {b} za b<ox ba P a<b with osuc-≡< b<ox |
383 ... | case1 eq = ⊥-elim ( noapx (subst (λ k → odef A k) (trans eq (sym &iso)) ba ) ) | 396 ... | case1 eq = ⊥-elim ( noapx (subst (λ k → odef A k) (trans eq (sym &iso)) ba ) ) |
384 ... | case2 lt = ZChain.is-max zc0 za (subst (λ k → b o< k ) (sym (Oprev.oprev=x op)) lt ) ba P a<b | 397 ... | case2 lt = ZChain.is-max zc0 za (subst (λ k → b o< k ) (sym (Oprev.oprev=x op)) lt ) ba P a<b |
385 ... | yes apx with ODC.p∨¬p O ( Prev< A (ZChain.chain zc0) apx f ) -- we have to check adding x preserve is-max ZChain A ay f mf supO x | 398 ... | yes apx with ODC.p∨¬p O ( HasPrev A (ZChain.chain zc0) apx f ) -- we have to check adding x preserve is-max ZChain A ay f mf supO x |
386 ... | case1 pr = zc9 where -- we have previous A ∋ z < x , f z ≡ x, so chain ∋ f z ≡ x because of f-next | 399 ... | case1 pr = zc9 where -- we have previous A ∋ z < x , f z ≡ x, so chain ∋ f z ≡ x because of f-next |
387 chain = ZChain.chain zc0 | 400 chain = ZChain.chain zc0 |
388 zc17 : {a b : Ordinal} → odef (ZChain.chain zc0) a → b o< osuc x → (ba : odef A b) → | 401 zc17 : {a b : Ordinal} → odef (ZChain.chain zc0) a → b o< osuc x → (ba : odef A b) → |
389 Prev< A (ZChain.chain zc0) ba f ∨ (supO (ZChain.chain zc0) (ZChain.chain⊆A zc0) (ZChain.f-total zc0) ≡ b) → | 402 HasPrev A (ZChain.chain zc0) ba f ∨ (supO (ZChain.chain zc0) (ZChain.chain⊆A zc0) (ZChain.f-total zc0) ≡ b) → |
390 * a < * b → odef (ZChain.chain zc0) b | 403 * a < * b → odef (ZChain.chain zc0) b |
391 zc17 {a} {b} za b<ox ba P a<b with osuc-≡< b<ox | 404 zc17 {a} {b} za b<ox ba P a<b with osuc-≡< b<ox |
392 ... | case2 lt = ZChain.is-max zc0 za (subst (λ k → b o< k ) (sym (Oprev.oprev=x op)) lt) ba P a<b | 405 ... | case2 lt = ZChain.is-max zc0 za (subst (λ k → b o< k ) (sym (Oprev.oprev=x op)) lt) ba P a<b |
393 ... | case1 b=x = subst (λ k → odef chain k ) (trans (sym (Prev<.x=fy pr )) (trans &iso (sym b=x)) ) ( ZChain.f-next zc0 (Prev<.ay pr)) | 406 ... | case1 b=x = subst (λ k → odef chain k ) (trans (sym (HasPrev.x=fy pr )) (trans &iso (sym b=x)) ) ( ZChain.f-next zc0 (HasPrev.ay pr)) |
394 zc9 : ZChain A ay f mf supO x | 407 zc9 : ZChain A ay f mf supO x |
395 zc9 = record { chain = ZChain.chain zc0 ; chain⊆A = ZChain.chain⊆A zc0 ; f-total = ZChain.f-total zc0 ; f-next = ZChain.f-next zc0 | 408 zc9 = record { chain = ZChain.chain zc0 ; chain⊆A = ZChain.chain⊆A zc0 ; f-total = ZChain.f-total zc0 ; f-next = ZChain.f-next zc0 |
396 ; initial = ZChain.initial zc0 ; f-immediate = ZChain.f-immediate zc0 ; chain∋x = ZChain.chain∋x zc0 ; is-max = zc17 } -- no extention | 409 ; initial = ZChain.initial zc0 ; f-immediate = ZChain.f-immediate zc0 ; chain∋x = ZChain.chain∋x zc0 ; is-max = zc17 } -- no extention |
397 ... | case2 ¬fy<x with ODC.p∨¬p O ( x ≡ & ( SUP.sup ( supP ( ZChain.chain zc0 ) (ZChain.chain⊆A zc0 ) (ZChain.f-total zc0) ) )) | 410 ... | case2 ¬fy<x with ODC.p∨¬p O ( x ≡ & ( SUP.sup ( supP ( ZChain.chain zc0 ) (ZChain.chain⊆A zc0 ) (ZChain.f-total zc0) ) )) |
398 ... | case1 x=sup = -- previous ordinal is a sup of a smaller ZChain | 411 ... | case1 x=sup = -- previous ordinal is a sup of a smaller ZChain |
461 ... | case1 sp=a | case2 b<sp = <-irr (case2 (subst (λ k → * b < k ) (trans (sym *iso) sp=a) b<sp ) ) (proj1 p ) | 474 ... | case1 sp=a | case2 b<sp = <-irr (case2 (subst (λ k → * b < k ) (trans (sym *iso) sp=a) b<sp ) ) (proj1 p ) |
462 ... | case2 sp<a | case1 b=sp = <-irr (case2 (subst ( λ k → k < * a ) (trans *iso (sym b=sp)) sp<a )) (proj1 p ) | 475 ... | case2 sp<a | case1 b=sp = <-irr (case2 (subst ( λ k → k < * a ) (trans *iso (sym b=sp)) sp<a )) (proj1 p ) |
463 ... | case2 sp<a | case2 b<sp = <-irr (case2 (ptrans b<sp (subst (λ k → k < * a) *iso sp<a ))) (proj1 p ) | 476 ... | case2 sp<a | case2 b<sp = <-irr (case2 (ptrans b<sp (subst (λ k → k < * a) *iso sp<a ))) (proj1 p ) |
464 simm {a} {b} (case2 sa) (case2 sb) p = fcn-imm {A} (& sp) {a} {b} f mf sa sb p | 477 simm {a} {b} (case2 sa) (case2 sb) p = fcn-imm {A} (& sp) {a} {b} f mf sa sb p |
465 s-ismax : {a b : Ordinal} → odef schain a → b o< osuc x → (ba : odef A b) → | 478 s-ismax : {a b : Ordinal} → odef schain a → b o< osuc x → (ba : odef A b) → |
466 Prev< A schain ba f ∨ (& (SUP.sup (supP schain record { incl = A∋schain } scmp)) ≡ b) | 479 HasPrev A schain ba f ∨ (& (SUP.sup (supP schain record { incl = A∋schain } scmp)) ≡ b) |
467 → * a < * b → odef schain b | 480 → * a < * b → odef schain b |
468 s-ismax {a} {b} (case1 za) b<x ba p a<b with osuc-≡< b<x | 481 s-ismax {a} {b} (case1 za) b<x ba (case1 p) a<b with osuc-≡< b<x |
469 ... | case2 b<x = case1 (ZChain.is-max zc0 za (subst (λ k → b o< k ) (sym ( Oprev.oprev=x op)) b<x ) ba ? a<b ) | 482 ... | case1 b=x = case2 (subst (λ k → FClosure A f (& sp) k ) (sym (trans b=x x=sup )) (init (SUP.A∋maximal sup0) )) |
470 ... | case1 b=x = {!!} | 483 ... | case2 b<x = z21 p where |
471 s-ismax {a} {b} (case2 sa) b<x ba p a<b = ? | 484 z21 : HasPrev A schain ba f → odef schain b |
485 z21 record { y = y ; ay = (case1 zy) ; x=fy = x=fy } = | |
486 case1 (ZChain.is-max zc0 za (subst (λ k → b o< k ) (sym ( Oprev.oprev=x op)) b<x ) ba (case1 record { y = y ; ay = zy ; x=fy = x=fy }) a<b ) | |
487 z21 record { y = y ; ay = (case2 sy) ; x=fy = x=fy } = subst (λ k → odef schain k) (sym x=fy) (case2 (fsuc y sy) ) | |
488 s-ismax {a} {b} (case1 za) b<x ba (case2 p) a<b with osuc-≡< b<x | |
489 ... | case1 b=x = case2 (subst (λ k → FClosure A f (& sp) k ) (sym (trans b=x x=sup )) (init (SUP.A∋maximal sup0) )) | |
490 ... | case2 b<x = z22 p where | |
491 z22 : & (SUP.sup (supP schain record { incl = A∋schain } scmp)) ≡ b → odef schain b | |
492 z22 p = {!!} | |
493 -- case1 (ZChain.is-max zc0 za (subst (λ k → b o< k ) (sym ( Oprev.oprev=x op)) b<x ) ba {!!} a<b ) | |
494 s-ismax {a} {b} (case2 sa) b<x ba p a<b = {!!} | |
472 ... | case2 ¬x=sup = -- x is not f y' nor sup of former ZChain from y | 495 ... | case2 ¬x=sup = -- x is not f y' nor sup of former ZChain from y |
473 record { chain = ZChain.chain zc0 ; chain⊆A = ZChain.chain⊆A zc0 ; f-total = ZChain.f-total zc0 ; f-next = ZChain.f-next zc0 | 496 record { chain = ZChain.chain zc0 ; chain⊆A = ZChain.chain⊆A zc0 ; f-total = ZChain.f-total zc0 ; f-next = ZChain.f-next zc0 |
474 ; initial = ZChain.initial zc0 ; f-immediate = ZChain.f-immediate zc0 ; chain∋x = ZChain.chain∋x zc0 ; is-max = z18 } where -- no extention | 497 ; initial = ZChain.initial zc0 ; f-immediate = ZChain.f-immediate zc0 ; chain∋x = ZChain.chain∋x zc0 ; is-max = z18 } where -- no extention |
475 z18 : {a b : Ordinal} → odef (ZChain.chain zc0) a → b o< osuc x → (ba : odef A b) → | 498 z18 : {a b : Ordinal} → odef (ZChain.chain zc0) a → b o< osuc x → (ba : odef A b) → |
476 Prev< A (ZChain.chain zc0) ba f ∨ (& (SUP.sup (supP (ZChain.chain zc0) (ZChain.chain⊆A zc0) (ZChain.f-total zc0))) ≡ b) → | 499 HasPrev A (ZChain.chain zc0) ba f ∨ (& (SUP.sup (supP (ZChain.chain zc0) (ZChain.chain⊆A zc0) (ZChain.f-total zc0))) ≡ b) → |
477 * a < * b → odef (ZChain.chain zc0) b | 500 * a < * b → odef (ZChain.chain zc0) b |
478 z18 {a} {b} za b<x ba p a<b with osuc-≡< b<x | 501 z18 {a} {b} za b<x ba p a<b with osuc-≡< b<x |
479 ... | case2 lt = ZChain.is-max zc0 za (subst (λ k → b o< k ) (sym ( Oprev.oprev=x op)) lt ) ba p a<b | 502 ... | case2 lt = ZChain.is-max zc0 za (subst (λ k → b o< k ) (sym ( Oprev.oprev=x op)) lt ) ba p a<b |
480 ... | case1 b=x with p | 503 ... | case1 b=x with p |
481 ... | case1 pr = ⊥-elim ( ¬fy<x record {y = Prev<.y pr ; ay = Prev<.ay pr ; x=fy = trans (trans &iso (sym b=x) ) (Prev<.x=fy pr ) } ) | 504 ... | case1 pr = ⊥-elim ( ¬fy<x record {y = HasPrev.y pr ; ay = HasPrev.ay pr ; x=fy = trans (trans &iso (sym b=x) ) (HasPrev.x=fy pr ) } ) |
482 ... | case2 b=sup = ⊥-elim ( ¬x=sup (sym (trans b=sup b=x )) ) | 505 ... | case2 b=sup = ⊥-elim ( ¬x=sup (sym (trans b=sup b=x )) ) |
483 ... | no ¬ox = {!!} where --- limit ordinal case | 506 ... | no ¬ox = {!!} where --- limit ordinal case |
484 record UZFChain (z : Ordinal) : Set n where -- Union of ZFChain from y which has maximality o< x | 507 record UZFChain (z : Ordinal) : Set n where -- Union of ZFChain from y which has maximality o< x |
485 field | 508 field |
486 u : Ordinal | 509 u : Ordinal |