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)) ) )