comparison src/zorn.agda @ 1069:99df080f4fdb

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 13 Dec 2022 09:31:11 +0900
parents f24f4de4d459
children 33d601c9ee96
comparison
equal deleted inserted replaced
1068:f24f4de4d459 1069:99df080f4fdb
1247 mf00 : * x < * (f x) 1247 mf00 : * x < * (f x)
1248 mf00 = proj1 ( mf< x ax ) 1248 mf00 = proj1 ( mf< x ax )
1249 ... | tri> ¬a ¬b 0<x = record { supf = supf1 ; asupf = asupf ; supf-mono = supf-mono ; order = ? ; 0<supfz = ? 1249 ... | tri> ¬a ¬b 0<x = record { supf = supf1 ; asupf = asupf ; supf-mono = supf-mono ; order = ? ; 0<supfz = ?
1250 ; zo≤sz = ? ; supfmax = ? ; is-minsup = ? ; cfcs = cfcs } where 1250 ; zo≤sz = ? ; supfmax = ? ; is-minsup = ? ; cfcs = cfcs } where
1251 1251
1252 -- mf : ≤-monotonic-f A f
1253 -- mf x ax = ? -- ⟪ case2 ( proj1 (mf< x ax)) , proj2 (mf< x ax ) ⟫ will result memory exhaust
1254
1255 mf : ≤-monotonic-f A f 1252 mf : ≤-monotonic-f A f
1256 mf x ax = ⟪ case2 mf00 , proj2 (mf< x ax ) ⟫ where 1253 mf x ax = ⟪ case2 mf00 , proj2 (mf< x ax ) ⟫ where
1257 mf00 : * x < * (f x) 1254 mf00 : * x < * (f x)
1258 mf00 = proj1 ( mf< x ax ) 1255 mf00 = proj1 ( mf< x ax )
1259 1256
1263 ysp = MinSUP.sup (ysup f mf ay) 1260 ysp = MinSUP.sup (ysup f mf ay)
1264 1261
1265 supfz : {z : Ordinal } → z o< x → Ordinal 1262 supfz : {z : Ordinal } → z o< x → Ordinal
1266 supfz {z} z<x = ZChain.supf (pzc (ob<x lim z<x)) z 1263 supfz {z} z<x = ZChain.supf (pzc (ob<x lim z<x)) z
1267 1264
1268 pchainx : HOD 1265 pchainU : HOD
1269 pchainx = UnionIC A f ay supfz 1266 pchainU = UnionIC A f ay supfz
1270 1267
1271 zeq : {xa xb z : Ordinal } 1268 zeq : {xa xb z : Ordinal }
1272 → (xa<x : xa o< x) → (xb<x : xb o< x) → xa o≤ xb → z o≤ xa 1269 → (xa<x : xa o< x) → (xb<x : xb o< x) → xa o≤ xb → z o≤ xa
1273 → ZChain.supf (pzc xa<x) z ≡ ZChain.supf (pzc xb<x) z 1270 → ZChain.supf (pzc xa<x) z ≡ ZChain.supf (pzc xb<x) z
1274 zeq {xa} {xb} {z} xa<x xb<x xa≤xb z≤xa = supf-unique A f mf< ay xa≤xb 1271 zeq {xa} {xb} {z} xa<x xb<x xa≤xb z≤xa = supf-unique A f mf< ay xa≤xb
1283 1280
1284 pic<x : {z : Ordinal } → (ic : IChain ay supfz z ) → osuc (IChain-i ic) o< x 1281 pic<x : {z : Ordinal } → (ic : IChain ay supfz z ) → osuc (IChain-i ic) o< x
1285 pic<x {z} (ic-init fc) = ob<x lim 0<x -- 0<x ∧ lim x → osuc o∅ o< x 1282 pic<x {z} (ic-init fc) = ob<x lim 0<x -- 0<x ∧ lim x → osuc o∅ o< x
1286 pic<x {z} (ic-isup ia ia<x sa<x fca) = ob<x lim ia<x 1283 pic<x {z} (ic-isup ia ia<x sa<x fca) = ob<x lim ia<x
1287 1284
1288 pchainx⊆chain : {z : Ordinal } → (pz : odef pchainx z) → odef (ZChain.chain (pzc (pic<x (proj2 pz)))) z 1285 pchainU⊆chain : {z : Ordinal } → (pz : odef pchainU z) → odef (ZChain.chain (pzc (pic<x (proj2 pz)))) z
1289 pchainx⊆chain {z} ⟪ aw , ic-init fc ⟫ = ⟪ aw , ch-init fc ⟫ 1286 pchainU⊆chain {z} ⟪ aw , ic-init fc ⟫ = ⟪ aw , ch-init fc ⟫
1290 pchainx⊆chain {z} ⟪ aw , (ic-isup ia ia<x sa<x fca) ⟫ = ZChain.cfcs (pzc (ob<x lim ia<x) ) <-osuc o≤-refl uz03 fca where 1287 pchainU⊆chain {z} ⟪ aw , (ic-isup ia ia<x sa<x fca) ⟫ = ZChain.cfcs (pzc (ob<x lim ia<x) ) <-osuc o≤-refl uz03 fca where
1291 uz02 : FClosure A f (ZChain.supf (pzc (ob<x lim ia<x)) ia ) z 1288 uz02 : FClosure A f (ZChain.supf (pzc (ob<x lim ia<x)) ia ) z
1292 uz02 = fca 1289 uz02 = fca
1293 uz03 : ZChain.supf (pzc (ob<x lim ia<x)) ia o≤ ia 1290 uz03 : ZChain.supf (pzc (ob<x lim ia<x)) ia o≤ ia
1294 uz03 = sa<x 1291 uz03 = sa<x
1295 1292
1296 chain⊆pchainx : {z w : Ordinal } → (oz<x : osuc z o< x) → odef (ZChain.chain (pzc oz<x)) w → odef pchainx w 1293 chain⊆pchainU : {z w : Ordinal } → (oz<x : osuc z o< x) → odef (ZChain.chain (pzc oz<x)) w → odef pchainU w
1297 chain⊆pchainx {z} {w} oz<x ⟪ aw , ch-init fc ⟫ = ⟪ aw , ic-init fc ⟫ 1294 chain⊆pchainU {z} {w} oz<x ⟪ aw , ch-init fc ⟫ = ⟪ aw , ic-init fc ⟫
1298 chain⊆pchainx {z} {w} oz<x ⟪ aw , ch-is-sup u u<oz su=u fc ⟫ 1295 chain⊆pchainU {z} {w} oz<x ⟪ aw , ch-is-sup u u<oz su=u fc ⟫
1299 = ⟪ aw , ic-isup u u<x (o≤-refl0 su≡u) (subst (λ k → FClosure A f k w ) su=su fc) ⟫ where 1296 = ⟪ aw , ic-isup u u<x (o≤-refl0 su≡u) (subst (λ k → FClosure A f k w ) su=su fc) ⟫ where
1300 u<x : u o< x 1297 u<x : u o< x
1301 u<x = ordtrans u<oz oz<x 1298 u<x = ordtrans u<oz oz<x
1302 su=su : ZChain.supf (pzc oz<x) u ≡ supfz u<x 1299 su=su : ZChain.supf (pzc oz<x) u ≡ supfz u<x
1303 su=su = sym ( zeq _ _ (osucc u<oz) (o<→≤ <-osuc) ) 1300 su=su = sym ( zeq _ _ (osucc u<oz) (o<→≤ <-osuc) )
1331 ic01 = ordtrans<-≤ ic02 sa<x 1328 ic01 = ordtrans<-≤ ic02 sa<x
1332 IC⊆ {a} {b} (ic-isup i i<x sa<x fc ) (ic-isup j j<x sb<x fcb ) ia≤ib 1329 IC⊆ {a} {b} (ic-isup i i<x sa<x fc ) (ic-isup j j<x sb<x fcb ) ia≤ib
1333 = ZChain.cfcs (pzc (ob<x lim j<x) ) ia≤ib o≤-refl (OrdTrans (ZChain.supf-mono (pzc (ob<x lim j<x)) ia≤ib) sb<x) 1330 = ZChain.cfcs (pzc (ob<x lim j<x) ) ia≤ib o≤-refl (OrdTrans (ZChain.supf-mono (pzc (ob<x lim j<x)) ia≤ib) sb<x)
1334 (subst (λ k → FClosure A f k a) (zeq _ _ (osucc ia≤ib) (o<→≤ <-osuc)) fc ) 1331 (subst (λ k → FClosure A f k a) (zeq _ _ (osucc ia≤ib) (o<→≤ <-osuc)) fc )
1335 1332
1336 ptotalx : IsTotalOrderSet pchainx 1333 ptotalU : IsTotalOrderSet pchainU
1337 ptotalx {a} {b} ia ib with trio< (IChain-i (proj2 ia)) (IChain-i (proj2 ib)) 1334 ptotalU {a} {b} ia ib with trio< (IChain-i (proj2 ia)) (IChain-i (proj2 ib))
1338 ... | tri< ia<ib ¬b ¬c = ZChain.f-total (pzc (pic<x (proj2 ib))) (IC⊆ (proj2 ia) (proj2 ib) (o<→≤ ia<ib)) (pchainx⊆chain ib) 1335 ... | tri< ia<ib ¬b ¬c = ZChain.f-total (pzc (pic<x (proj2 ib))) (IC⊆ (proj2 ia) (proj2 ib) (o<→≤ ia<ib)) (pchainU⊆chain ib)
1339 ... | tri≈ ¬a ia=ib ¬c = ZChain.f-total (pzc (pic<x (proj2 ib))) (IC⊆ (proj2 ia) (proj2 ib) (o≤-refl0 ia=ib)) (pchainx⊆chain ib) 1336 ... | tri≈ ¬a ia=ib ¬c = ZChain.f-total (pzc (pic<x (proj2 ib))) (IC⊆ (proj2 ia) (proj2 ib) (o≤-refl0 ia=ib)) (pchainU⊆chain ib)
1340 ... | tri> ¬a ¬b ib<ia = ZChain.f-total (pzc (pic<x (proj2 ia))) (pchainx⊆chain ia) (IC⊆ (proj2 ib) (proj2 ia) (o<→≤ ib<ia)) 1337 ... | tri> ¬a ¬b ib<ia = ZChain.f-total (pzc (pic<x (proj2 ia))) (pchainU⊆chain ia) (IC⊆ (proj2 ib) (proj2 ia) (o<→≤ ib<ia))
1341 1338
1342 usup : MinSUP A pchainx 1339 usup : MinSUP A pchainU
1343 usup = minsupP pchainx (λ ic → ? ) ptotalx 1340 usup = minsupP pchainU (λ ic → proj1 ic ) ptotalU
1344 spu = MinSUP.sup usup 1341 spu = MinSUP.sup usup
1342
1343
1344 pchainS : HOD
1345 pchainS = record { od = record { def = λ z → (odef A z ∧ IChain ay supfz z )
1346 ∨ (FClosure A f spu z ∧ (spu o< x)) } ; odmax = & A ; <odmax = zc00 } where
1347 zc00 : {z : Ordinal } → (odef A z ∧ IChain ay supfz z ) ∨ (FClosure A f spu z ∧ (spu o< x) )→ z o< & A
1348 zc00 {z} (case1 lt) = z07 lt
1349 zc00 {z} (case2 fc) = z09 ( A∋fc spu f mf (proj1 fc) )
1350
1351 zc02 : { a b : Ordinal } → odef A a ∧ IChain ay supfz a → FClosure A f spu b ∧ ( spu o< x) → a ≤ b
1352 zc02 {a} {b} ca fb = zc05 (proj1 fb) where
1353 zc05 : {b : Ordinal } → FClosure A f spu b → a ≤ b
1354 zc05 (fsuc b1 fb ) with proj1 ( mf b1 (A∋fc spu f mf fb ))
1355 ... | case1 eq = subst (λ k → a ≤ k ) eq (zc05 fb)
1356 ... | case2 lt = ≤-ftrans (zc05 fb) (case2 lt)
1357 zc05 (init b1 refl) = MinSUP.x≤sup usup ca
1358
1359 ptotalS : IsTotalOrderSet pchainS
1360 ptotalS (case1 a) (case1 b) = ptotalU a b
1361 ptotalS {a0} {b0} (case1 a) (case2 b) with zc02 a b
1362 ... | case1 eq = tri≈ (<-irr (case1 (sym eq1))) eq1 (<-irr (case1 eq1)) where
1363 eq1 : a0 ≡ b0
1364 eq1 = subst₂ (λ j k → j ≡ k ) *iso *iso (cong (*) eq )
1365 ... | case2 lt = tri< lt1 (λ eq → <-irr (case1 (sym eq)) lt1) (<-irr (case2 lt1)) where
1366 lt1 : a0 < b0
1367 lt1 = subst₂ (λ j k → j < k ) *iso *iso lt
1368 ptotalS {b0} {a0} (case2 b) (case1 a) with zc02 a b
1369 ... | case1 eq = tri≈ (<-irr (case1 eq1)) (sym eq1) (<-irr (case1 (sym eq1))) where
1370 eq1 : a0 ≡ b0
1371 eq1 = subst₂ (λ j k → j ≡ k ) *iso *iso (cong (*) eq )
1372 ... | case2 lt = tri> (<-irr (case2 lt1)) (λ eq → <-irr (case1 eq) lt1) lt1 where
1373 lt1 : a0 < b0
1374 lt1 = subst₂ (λ j k → j < k ) *iso *iso lt
1375 ptotalS (case2 a) (case2 b) = subst₂ (λ j k → Tri (j < k) (j ≡ k) (k < j)) *iso *iso (fcn-cmp spu f mf (proj1 a) (proj1 b))
1376
1377 S⊆A : pchainS ⊆' A
1378 S⊆A (case1 lt) = proj1 lt
1379 S⊆A (case2 fc) = A∋fc _ f mf (proj1 fc)
1380
1381 ssup : MinSUP A pchainS
1382 ssup = minsupP pchainS S⊆A ptotalS
1383
1384 sps = MinSUP.sup ssup
1345 1385
1346 supf1 : Ordinal → Ordinal 1386 supf1 : Ordinal → Ordinal
1347 supf1 z with trio< z x 1387 supf1 z with trio< z x
1348 ... | tri< a ¬b ¬c = ZChain.supf (pzc (ob<x lim a)) z 1388 ... | tri< a ¬b ¬c = ZChain.supf (pzc (ob<x lim a)) z -- each sup o< x
1349 ... | tri≈ ¬a b ¬c = spu 1389 ... | tri≈ ¬a b ¬c = spu -- sup of all sup o< x
1350 ... | tri> ¬a ¬b c = spu 1390 ... | tri> ¬a ¬b c = sps -- sup of spu which o< x
1391 -- if x o< spu, spu is not included in UnionCF x
1392 -- the chain
1351 1393
1352 pchain : HOD 1394 pchain : HOD
1353 pchain = UnionCF A f ay supf1 x 1395 pchain = UnionCF A f ay supf1 x
1354 1396
1355 -- pchain ⊆ pchainx 1397 -- pchain ⊆ pchainU ⊆ pchianS
1356
1357 ptotal : IsTotalOrderSet pchain
1358 ptotal {a} {b} ca cb = subst₂ (λ j k → Tri (j < k) (j ≡ k) (k < j)) *iso *iso uz01 where
1359 uz01 : Tri (* (& a) < * (& b)) (* (& a) ≡ * (& b)) (* (& b) < * (& a) )
1360 uz01 = ? -- chain-total A f mf ay supf1 ( (proj2 ca)) ( (proj2 cb))
1361 1398
1362 sf1=sf : {z : Ordinal } → (a : z o< x ) → supf1 z ≡ ZChain.supf (pzc (ob<x lim a)) z 1399 sf1=sf : {z : Ordinal } → (a : z o< x ) → supf1 z ≡ ZChain.supf (pzc (ob<x lim a)) z
1363 sf1=sf {z} z<x with trio< z x 1400 sf1=sf {z} z<x with trio< z x
1364 ... | tri< a ¬b ¬c = cong ( λ k → ZChain.supf (pzc (ob<x lim k)) z) o<-irr 1401 ... | tri< a ¬b ¬c = cong ( λ k → ZChain.supf (pzc (ob<x lim k)) z) o<-irr
1365 ... | tri≈ ¬a b ¬c = ⊥-elim (¬a z<x) 1402 ... | tri≈ ¬a b ¬c = ⊥-elim (¬a z<x)
1366 ... | tri> ¬a ¬b c = ⊥-elim (¬a z<x) 1403 ... | tri> ¬a ¬b c = ⊥-elim (¬a z<x)
1367 1404
1368 sf1=spu : {z : Ordinal } → (a : x o≤ z ) → supf1 z ≡ spu 1405 sf1=spu : {z : Ordinal } → (a : x o≤ z ) → spu o< x → supf1 z ≡ spu
1369 sf1=spu {z} x≤z with trio< z x 1406 sf1=spu {z} x≤z s<x with trio< z x
1370 ... | tri< a ¬b ¬c = ⊥-elim (o≤> x≤z a) 1407 ... | tri< a ¬b ¬c = ⊥-elim (o≤> x≤z a)
1371 ... | tri≈ ¬a b ¬c = refl 1408 ... | tri≈ ¬a b ¬c = refl
1372 ... | tri> ¬a ¬b c = refl 1409 ... | tri> ¬a ¬b c = ?
1373 1410
1374 zc11 : {z : Ordinal } → odef pchain z → odef pchainx z 1411 sf1=sps : {z : Ordinal } → (a : x o≤ z ) → x o≤ spu → supf1 z ≡ sps
1412 sf1=sps {z} x≤z x≤s with trio< z x
1413 ... | tri< a ¬b ¬c = ⊥-elim (o≤> x≤z a)
1414 ... | tri≈ ¬a b ¬c = ?
1415 ... | tri> ¬a ¬b c = ?
1416
1417 zc11 : {z : Ordinal } → odef pchain z → odef pchainS z
1375 zc11 {z} lt = ? 1418 zc11 {z} lt = ?
1376 1419
1377 sfpx≤spu : {z : Ordinal } → supf1 z ≤ spu 1420 sfpx≤spu : {z : Ordinal } → supf1 z ≤ sps
1378 sfpx≤spu {z} with trio< z x 1421 sfpx≤spu {z} with trio< z x
1379 ... | tri< a ¬b ¬c = MinSUP.x≤sup usup ? -- (init (ZChain.asupf (pzc (ob<x lim a)) ) refl ) 1422 ... | tri< a ¬b ¬c = ? -- MinSUP.x≤sup usup ? -- (init (ZChain.asupf (pzc (ob<x lim a)) ) refl )
1380 ... | tri≈ ¬a b ¬c = case1 refl 1423 ... | tri≈ ¬a b ¬c = case1 ?
1381 ... | tri> ¬a ¬b c = case1 refl 1424 ... | tri> ¬a ¬b c = case1 ?
1382 1425
1383 sfpxo≤spu : {z : Ordinal } → supf1 z o≤ spu 1426 sfpxo≤spu : {z : Ordinal } → supf1 z o≤ sps
1384 sfpxo≤spu {z} with trio< z x 1427 sfpxo≤spu {z} with trio< z x
1385 ... | tri< a ¬b ¬c = ? -- MinSUP.x≤sup usup ? -- (init (ZChain.asupf (pzc (ob<x lim a)) ) refl ) 1428 ... | tri< a ¬b ¬c = ? -- MinSUP.x≤sup usup ? -- (init (ZChain.asupf (pzc (ob<x lim a)) ) refl )
1386 ... | tri≈ ¬a b ¬c = o≤-refl0 ? 1429 ... | tri≈ ¬a b ¬c = o≤-refl0 ?
1387 ... | tri> ¬a ¬b c = o≤-refl0 ? 1430 ... | tri> ¬a ¬b c = o≤-refl0 ?
1388 1431
1389 asupf : {z : Ordinal } → odef A (supf1 z) 1432 asupf : {z : Ordinal } → odef A (supf1 z)
1390 asupf {z} with trio< z x 1433 asupf {z} with trio< z x
1391 ... | tri< a ¬b ¬c = ZChain.asupf (pzc (ob<x lim a)) 1434 ... | tri< a ¬b ¬c = ZChain.asupf (pzc (ob<x lim a))
1392 ... | tri≈ ¬a b ¬c = MinSUP.as usup 1435 ... | tri≈ ¬a b ¬c = MinSUP.as usup
1393 ... | tri> ¬a ¬b c = MinSUP.as usup 1436 ... | tri> ¬a ¬b c = MinSUP.as ssup
1394 1437
1395 supfmax : {z : Ordinal } → x o< z → supf1 z ≡ supf1 x 1438 supfmax : {z : Ordinal } → x o< z → supf1 z ≡ supf1 x
1396 supfmax {z} x<z with trio< z x 1439 supfmax {z} x<z with trio< z x
1397 ... | tri< a ¬b ¬c = ⊥-elim (o<> a x<z) 1440 ... | tri< a ¬b ¬c = ⊥-elim (o<> a x<z)
1398 ... | tri≈ ¬a b ¬c = ⊥-elim (o<¬≡ (sym b) x<z) 1441 ... | tri≈ ¬a b ¬c = ⊥-elim (o<¬≡ (sym b) x<z)
1399 ... | tri> ¬a ¬b c = sym (sf1=spu o≤-refl) 1442 ... | tri> ¬a ¬b c = sym ? -- (sf1=sps o≤-refl)
1400 1443
1401 supf-mono : {z y : Ordinal } → z o≤ y → supf1 z o≤ supf1 y 1444 supf-mono : {z y : Ordinal } → z o≤ y → supf1 z o≤ supf1 y
1402 supf-mono {z} {y} z≤y with trio< y x 1445 supf-mono {z} {y} z≤y with trio< y x
1403 ... | tri< y<x ¬b ¬c = ? where 1446 ... | tri< y<x ¬b ¬c = ? where
1404 open o≤-Reasoning O 1447 open o≤-Reasoning O
1499 z13 : * (& s) < * sp 1542 z13 : * (& s) < * sp
1500 z13 with MinSUP.x≤sup sp1 ( ZChain.chain∋init zc ) 1543 z13 with MinSUP.x≤sup sp1 ( ZChain.chain∋init zc )
1501 ... | case1 eq = ⊥-elim ( ne eq ) 1544 ... | case1 eq = ⊥-elim ( ne eq )
1502 ... | case2 lt = lt 1545 ... | case2 lt = lt
1503 z19 : IsSUP A (UnionCF A f ay (ZChain.supf zc) sp) sp 1546 z19 : IsSUP A (UnionCF A f ay (ZChain.supf zc) sp) sp
1504 z19 = record { ax = ? ; x≤sup = z20 } where 1547 z19 = record { ax = asp ; x≤sup = z20 } where
1505 z20 : {y : Ordinal} → odef (UnionCF A f ay (ZChain.supf zc) sp) y → (y ≡ sp) ∨ (y << sp) 1548 z20 : {y : Ordinal} → odef (UnionCF A f ay (ZChain.supf zc) sp) y → (y ≡ sp) ∨ (y << sp)
1506 z20 {y} zy with MinSUP.x≤sup sp1 1549 z20 {y} zy with MinSUP.x≤sup sp1
1507 (subst (λ k → odef chain k ) (sym &iso) (chain-mono f mf as0 supf (ZChain.supf-mono zc) (o<→≤ z22) zy )) 1550 (subst (λ k → odef chain k ) (sym &iso) (chain-mono f mf as0 supf (ZChain.supf-mono zc) (o<→≤ z22) zy ))
1508 ... | case1 y=p = case1 (subst (λ k → k ≡ _ ) &iso y=p ) 1551 ... | case1 y=p = case1 (subst (λ k → k ≡ _ ) &iso y=p )
1509 ... | case2 y<p = case2 (subst (λ k → * k < _ ) &iso y<p ) 1552 ... | case2 y<p = case2 (subst (λ k → * k < _ ) &iso y<p )