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