changeset 800:06eedb0d26a0

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 08 Aug 2022 14:20:26 +0900
parents c8a166abcae0
children 8373b130ba41
files src/zorn.agda
diffstat 1 files changed, 112 insertions(+), 121 deletions(-) [+]
line wrap: on
line diff
--- a/src/zorn.agda	Sun Aug 07 18:39:18 2022 +0900
+++ b/src/zorn.agda	Mon Aug 08 14:20:26 2022 +0900
@@ -124,28 +124,89 @@
 ... | case1 s≡x = case2 ( subst₂ (λ j k → j < k ) (sym s≡x) refl x<fx )
 ... | case2 s<x = case2 ( IsStrictPartialOrder.trans PO s<x x<fx )
 
+fcn : {A : HOD} (s : Ordinal) { x : Ordinal} {f : Ordinal → Ordinal} → (mf : ≤-monotonic-f A f) → FClosure A f s x → ℕ
+fcn s mf (init as refl) = zero
+fcn {A} s {x} {f} mf (fsuc y p) with proj1 (mf y (A∋fc s f mf p))
+... | case1 eq = fcn s mf p
+... | case2 y<fy = suc (fcn s mf p )
+
+fcn-inject : {A : HOD} (s : Ordinal) { x y : Ordinal} {f : Ordinal → Ordinal} → (mf : ≤-monotonic-f A f) 
+     → (cx : FClosure A f s x ) (cy : FClosure A f s y ) → fcn s mf cx  ≡ fcn s mf cy → * x ≡ * y
+fcn-inject {A} s {x} {y} {f} mf cx cy eq = fc00 (fcn s mf cx) (fcn s mf cy) eq cx cy refl refl where
+     fc06 : {y : Ordinal } { as : odef A s } (eq : s ≡ y  ) { j : ℕ } →  ¬ suc j ≡ fcn {A} s {y} {f} mf (init as eq )
+     fc06 {x} {y} refl {j} not = fc08 not where
+        fc08 :  {j : ℕ} → ¬ suc j ≡ 0 
+        fc08 ()
+     fc07 : {x : Ordinal } (cx : FClosure A f s x ) → 0 ≡ fcn s mf cx → * s ≡ * x
+     fc07 {x} (init as refl) eq = refl
+     fc07 {.(f x)} (fsuc x cx) eq with proj1 (mf x (A∋fc s f mf cx ) )
+     ... | case1 x=fx = subst (λ k → * s ≡  k ) x=fx ( fc07 cx eq )
+     -- ... | case2 x<fx = ?
+     fc00 :  (i j : ℕ ) → i ≡ j  →  {x y : Ordinal } → (cx : FClosure A f s x ) (cy : FClosure A f s y ) → i ≡ fcn s mf cx  → j ≡ fcn s mf cy → * x ≡ * y
+     fc00 (suc i) (suc j) x cx (init x₃ x₄) x₁ x₂ = ⊥-elim ( fc06 x₄ x₂ )
+     fc00 (suc i) (suc j) x (init x₃ x₄) (fsuc x₅ cy) x₁ x₂ = ⊥-elim ( fc06 x₄ x₁ )
+     fc00 zero zero refl (init _ refl) (init x₁ refl) i=x i=y = refl
+     fc00 zero zero refl (init as refl) (fsuc y cy) i=x i=y with proj1 (mf y (A∋fc s f mf cy ) )
+     ... | case1 y=fy = subst (λ k → * s ≡ k ) y=fy (fc07 cy i=y) -- ( fc00 zero zero refl (init as refl) cy i=x i=y )
+     fc00 zero zero refl (fsuc x cx) (init as refl) i=x i=y with proj1 (mf x (A∋fc s f mf cx ) )
+     ... | case1 x=fx = subst (λ k → k ≡ * s ) x=fx (sym (fc07 cx i=x)) -- ( fc00 zero zero refl cx (init as refl) i=x i=y )
+     fc00 zero zero refl (fsuc x cx) (fsuc y cy) i=x i=y with proj1 (mf x (A∋fc s f mf cx ) ) | proj1 (mf y (A∋fc s f mf cy ) )
+     ... | case1 x=fx  | case1 y=fy = subst₂ (λ j k → j ≡ k ) x=fx y=fy ( fc00 zero zero refl cx cy  i=x i=y )
+     fc00 (suc i) (suc j) i=j {.(f x)} {.(f y)} (fsuc x cx) (fsuc y cy) i=x j=y with proj1 (mf x (A∋fc s f mf cx ) ) | proj1 (mf y (A∋fc s f mf cy ) )
+     ... | case1 x=fx | case1 y=fy = subst₂ (λ j k → j ≡ k ) x=fx y=fy ( fc00 (suc i) (suc j) i=j cx cy  i=x j=y )
+     ... | case1 x=fx | case2 y<fy = subst (λ k → k ≡ * (f y)) x=fx (fc02 x cx i=x) where
+          fc02 : (x1 : Ordinal) → (cx1 : FClosure A f s x1 ) →  suc i ≡ fcn s mf cx1 → * x1 ≡ * (f y)
+          fc02 x1 (init x₁ x₂) x = ⊥-elim (fc06 x₂ x)
+          fc02 .(f x1) (fsuc x1 cx1) i=x1 with proj1 (mf x1 (A∋fc s f mf cx1 ) )
+          ... | case1 eq = trans (sym eq) ( fc02  x1 cx1 i=x1 )  -- derefence while f x ≡ x
+          ... | case2 lt = subst₂ (λ j k → * (f j) ≡ * (f k )) &iso &iso ( cong (λ k → * ( f (& k ))) fc04) where
+               fc04 : * x1 ≡ * y
+               fc04 = fc00 i j (cong pred i=j) cx1 cy (cong pred i=x1) (cong pred j=y)
+     ... | case2 x<fx | case1 y=fy = subst (λ k → * (f x) ≡ k ) y=fy (fc03 y cy j=y) where
+          fc03 : (y1 : Ordinal) → (cy1 : FClosure A f s y1 ) →  suc j ≡ fcn s mf cy1 → * (f x)  ≡ * y1
+          fc03 y1 (init x₁ x₂) x = ⊥-elim (fc06 x₂ x)
+          fc03 .(f y1) (fsuc y1 cy1) j=y1 with proj1 (mf y1 (A∋fc s f mf cy1 ) )
+          ... | case1 eq = trans ( fc03  y1 cy1 j=y1 ) eq 
+          ... | case2 lt = subst₂ (λ j k → * (f j) ≡ * (f k )) &iso &iso ( cong (λ k → * ( f (& k ))) fc05) where
+               fc05 : * x ≡ * y1
+               fc05 = fc00 i j (cong pred i=j) cx cy1 (cong pred i=x) (cong pred j=y1)
+     ... | case2 x₁ | case2 x₂ = subst₂ (λ j k → * (f j) ≡ * (f k) ) &iso &iso (cong (λ k → * (f (& k))) (fc00 i j (cong pred i=j) cx cy (cong pred i=x) (cong pred j=y)))
+
+
+fcn-< : {A : HOD} (s : Ordinal ) { x y : Ordinal} {f : Ordinal → Ordinal} → (mf : ≤-monotonic-f A f)
+    → (cx : FClosure A f s x ) (cy : FClosure A f s y ) → fcn s mf cx Data.Nat.< fcn s mf cy  → * x < * y
+fcn-< {A} s {x} {y} {f} mf cx cy x<y = fc01 (fcn s mf cy) cx cy refl x<y where
+     fc06 : {y : Ordinal } { as : odef A s } (eq : s ≡ y  ) { j : ℕ } →  ¬ suc j ≡ fcn {A} s {y} {f} mf (init as eq )
+     fc06 {x} {y} refl {j} not = fc08 not where
+        fc08 :  {j : ℕ} → ¬ suc j ≡ 0 
+        fc08 ()
+     fc01 : (i : ℕ ) → {y : Ordinal } → (cx : FClosure A f s x ) (cy : FClosure A f s y ) → (i ≡ fcn s mf cy ) → fcn s mf cx Data.Nat.< i → * x < * y
+     fc01 (suc i) cx (init x₁ x₂) x (s≤s x₃) = ⊥-elim (fc06 x₂ x)
+     fc01 (suc i) {y} cx (fsuc y1 cy) i=y (s≤s x<i) with proj1 (mf y1 (A∋fc s f mf cy ) )
+     ... | case1 y=fy = subst (λ k → * x < k ) y=fy ( fc01 (suc i) {y1} cx cy i=y (s≤s x<i)  ) 
+     ... | case2 y<fy with <-cmp (fcn s mf cx ) i
+     ... | tri> ¬a ¬b c = ⊥-elim ( nat-≤> x<i c )
+     ... | tri≈ ¬a b ¬c = subst (λ k → k < * (f y1) ) (fcn-inject s mf cy cx (sym (trans b (cong pred i=y) ))) y<fy 
+     ... | tri< a ¬b ¬c = IsStrictPartialOrder.trans PO fc02 y<fy where
+          fc03 :  suc i ≡ suc (fcn s mf cy) → i ≡ fcn s mf cy
+          fc03 eq = cong pred eq 
+          fc02 :  * x < * y1 
+          fc02 =  fc01 i cx cy (fc03 i=y ) a
+
 
 fcn-cmp : {A : HOD} (s : Ordinal) { x y : Ordinal } (f : Ordinal → Ordinal) (mf : ≤-monotonic-f A f) 
     → (cx : FClosure A f s x) → (cy : FClosure A f s y ) → Tri (* x < * y) (* x ≡ * y) (* y < * x )
-fcn-cmp-1 : {A : HOD} (s : Ordinal) { x y : Ordinal } (f : Ordinal → Ordinal) (mf : ≤-monotonic-f A f) 
-    → (cx : FClosure A f s x) → (cy : FClosure A f s y ) → * x < * y → (* (f x) ≡ * y) ∨ ( * (f x) < * y )
-fcn-cmp-1 {A} s f mf (init x refl) (init x₁ refl) x<y = {!!}
-fcn-cmp-1 {A} s f mf (init x refl) (fsuc x₁ cy) x<y = {!!}
-fcn-cmp-1 {A} s f mf (fsuc x cx) (init ay refl) x<y = {!!}
-fcn-cmp-1 {A} s f mf (fsuc x cx) (fsuc y cy) x<y with proj1 (mf x (A∋fc s f mf cx)) | proj1 (mf y (A∋fc s f mf cy)) 
-... | case1 eqx | case1 eqy = {!!}
-... | case1 eqx | case2 lt = {!!}
-... | case2 lt  | case1 eqy = {!!}
-... | case2 ltx | case2 lty = {!!}
+fcn-cmp {A} s {x} {y} f mf cx cy with <-cmp ( fcn s mf cx ) (fcn s mf cy )
+... | tri< a ¬b ¬c = tri< fc11 (λ eq → <-irr (case1 (sym eq)) fc11) (λ lt → <-irr (case2 fc11) lt) where
+      fc11 : * x < * y
+      fc11 = fcn-< {A} s {x} {y} {f} mf cx cy a
+... | tri≈ ¬a b ¬c = tri≈ (λ lt → <-irr (case1 (sym fc10)) lt) fc10 (λ lt → <-irr (case1 fc10) lt) where
+      fc10 : * x ≡ * y
+      fc10 = fcn-inject {A} s {x} {y} {f} mf cx cy b
+... | tri> ¬a ¬b c = tri> (λ lt → <-irr (case2 fc12) lt) (λ eq → <-irr (case1 eq) fc12) fc12  where 
+      fc12 : * y < * x
+      fc12 = fcn-< {A} s {y} {x} {f} mf cy cx c
 
-fcn-cmp {A} s {.s} {y} f mf (init ax refl) (init ay refl) = {!!}
-fcn-cmp {A} s {.s} {.(f x)} f mf (init ax refl) (fsuc x cy) = {!!}
-fcn-cmp {A} s {.(f x)} {y} f mf (fsuc x cx) (init ay refl) = {!!}
-fcn-cmp {A} s {.(f x)} {.(f y)} f mf (fsuc x cx) (fsuc y cy) with proj1 (mf x (A∋fc s f mf cx)) | proj1 (mf y (A∋fc s f mf cy)) 
-... | case1 eqx | case1 eqy = {!!}
-... | case1 eqx | case2 lt = {!!}
-... | case2 lt  | case1 eqy = {!!}
-... | case2 ltx | case2 lty = {!!}
 
 
 -- open import Relation.Binary.Properties.Poset as Poset
@@ -190,7 +251,7 @@
 record ChainP (A : HOD ) ( f : Ordinal → Ordinal ) (mf : ≤-monotonic-f A f)  {y : Ordinal} (ay : odef A y) (supf : Ordinal → Ordinal) (u : Ordinal) : Set n where
    field
       fcy<sup  : {z : Ordinal } → FClosure A f y z → (z ≡ supf u) ∨ ( z << supf u ) 
-      order    : {s z1 : Ordinal} → (lt : supf s o< supf u ) → FClosure A f (supf s ) z1 → (z1 ≡ supf u ) ∨ ( z1 << supf u )
+      order    : {s z1 : Ordinal} → (lt : s o< u ) → FClosure A f (supf s ) z1 → (z1 ≡ supf u ) ∨ ( z1 << supf u )
       supu=u   : supf u ≡ u
 
 -- Union of supf z which o< x
@@ -235,62 +296,11 @@
    ... | case1 eq = case1 (subst (λ k → k ≡ supf u ) &iso  (trans (cong (&) eq) (sym (supf-is-sup u≤z ) ) ))
    ... | case2 lt = case2 (subst (λ k → * w < k ) (subst (λ k → k ≡ _ ) *iso (cong (*) (sym (supf-is-sup u≤z ))) ) lt )
 
-   supf-mono : {x y1 : Ordinal } → x o< y1 → supf x o≤ supf y1
-   supf-mono {x} {y1} x<y1 = sf<sy1 where
-      --     supf x <<  supf y1 →   supf x o< supf y1
-      --     x o<  y1 →   supf x <= supf y1
-      --   z o≤ x → supf x ≡ supf y1 ≡ supf z
-      --   x o< z → z o< y1 → supf x ≡ supf y1 ≡ supf z
-      supy : {x : Ordinal } → x o≤ z → FClosure A f y (supf x) → supf x ≡ y
-      supy {x} x≤z fcx = ? where
-          zc06 : ( * y  ≡  SUP.sup (sup x≤z )) ∨ ( * y  < SUP.sup ( sup x≤z ) )
-          zc06 = SUP.x<sup (sup x≤z) ⟪ subst (λ k → odef A k ) (sym &iso)  ay , ch-init (init ay (sym &iso) ) ⟫
-      sf<sy1 : supf x o≤ supf y1
-      sf<sy1 with trio< x z
-      ... | tri> ¬a ¬b c = o≤-refl0 (( trans (sym (supf≤x (o<→≤ c))) (supf≤x (ordtrans (ordtrans c x<y1 ) <-osuc ) ) )) 
-      ... | tri≈ ¬a b ¬c = o≤-refl0 (trans (sym (supf≤x (o≤-refl0 (sym b)))) (supf≤x (subst (λ k → k o< osuc y1) b (o<→≤ x<y1)))) 
-      ... | tri< x<z ¬b ¬c with trio< (supf x) (supf y1)
-      ... | tri< a ¬b ¬c = o<→≤ a
-      ... | tri≈ ¬a b ¬c = o≤-refl0 b
-      ... | tri> ¬a ¬b sy1<sx with trio< z y1
-      ... | tri< a ¬b ¬c = ?
-      ... | tri≈ ¬a b ¬c = ?
-      ... | tri> ¬a ¬b y1<z = ?
-      zc04 : x o< z → y1 o≤ z → supf x o≤ supf y1
-      zc04 x<z y1≤z with csupf (o<→≤ x<z) | csupf y1≤z 
-      ... | ⟪ ax , ch-init fcx ⟫ | ⟪ ay1 , ch-init fcy1 ⟫ with fcy<sup (o<→≤ x<z) fcy1
-      ... | case1 eq = o≤-refl0 (sym eq)
-      ... | case2 lt with fcy<sup y1≤z fcx
-      ... | case1 eq = o≤-refl0 eq
-      ... | case2 lt1 = ⊥-elim ( <-irr (case2 lt) lt1 )
-      zc04 x<z y1≤z | ⟪ ax , ch-is-sup ux ux≤z is-sup-x fcx ⟫ | ⟪ ay1 , ch-init fcy1 ⟫ with fcy<sup (o<→≤ x<z) fcy1
-      ... | case1 eq = o≤-refl0 (sym eq)
-      ... | case2 lt with trio< (supf x) (supf y1)
-      ... | tri< a ¬b ¬c = o<→≤ a
-      ... | tri≈ ¬a b ¬c = o≤-refl0 b
-      ... | tri> ¬a ¬b y1<z = ? where
-           zc05 : ( supf y1 ≡ supf ux ) ∨ (supf y1 << supf ux )
-           zc05 = ChainP.fcy<sup is-sup-x fcy1
-      zc04 x<z y1≤z | ⟪ ax , ch-is-sup ux ux≤z is-sup-x fcx ⟫ | ⟪ ay1 , ch-init fcy1 ⟫ | case2 lt1 = ? -- sy1 << sx
-      zc04 x<z y1≤z | ⟪ ax , ch-init fcx ⟫ | ⟪ ay1 , ch-is-sup uy1 uy1≤z is-sup-y1 fcy1 ⟫ = ? 
-      zc04 x<z y1≤z | ⟪ ax , ch-is-sup ux ux≤z is-sup-x fcx ⟫ | ⟪ ay1 , ch-is-sup uy1 uy1≤z is-sup-y1 fcy1 ⟫ = ?
-      -- ... | tri< a ¬b ¬c = csupf (o<→≤ a)
-      -- ... | tri≈ ¬a b ¬c = csupf (o≤-refl0 b)
-      -- ... | tri> ¬a ¬b c = subst (λ k → odef (UnionCF A f mf ay1 supf x) k ) ? (csupf ? )
-      -- csy1 : odef (UnionCF A f mf ay1 supf y1) (supf y1) 
-      -- csy1 = csupf ?
        
-   order : {b s z1 : Ordinal} → b o< z → supf s o< supf b → FClosure A f (supf s) z1 → (z1 ≡ supf b) ∨ (z1 << supf b)
-   order {b} {s} {z1} b<z sf<sb fc = zc04 where
+   order : {b s z1 : Ordinal} → b o< z → s o< b → FClosure A f (supf s) z1 → (z1 ≡ supf b) ∨ (z1 << supf b)
+   order {b} {s} {z1} b<z s<b fc = zc04 where
       zc01 : {z1 : Ordinal } → FClosure A f (supf s) z1 → UnionCF A f mf ay supf b ∋ * z1
       zc01  (init x refl ) = subst (λ k → odef (UnionCF A f mf ay supf b) k ) (sym &iso) zc03  where
-            s<b : s o< b
-            s<b with trio< s b
-            ... | tri< a ¬b ¬c = a
-            ... | tri≈ ¬a b ¬c = ⊥-elim ( o<¬≡ (cong supf b) sf<sb )
-            ... | tri> ¬a ¬b c with osuc-≡< ( supf-mono c )
-            ... | case1 eq = ⊥-elim ( o<¬≡ (sym eq) sf<sb )
-            ... | case2 lt = ⊥-elim ( o<> lt  sf<sb   )
             s<z : s o< z
             s<z = ordtrans s<b b<z
             zc03 : odef (UnionCF A f mf ay supf b)  (supf s)
@@ -360,7 +370,7 @@
           ct01 with s≤fc (supf ua) f mf fca
           ... | case1 eq =  subst (λ k → * b < k ) eq ct00
           ... | case2 lt =  IsStrictPartialOrder.trans POO ct00 lt
-     ct-ind xa xb {a} {b} (ch-is-sup ua ua<x supa fca) (ch-is-sup ub ub<x supb fcb) with trio< (supf ua) (supf ub)
+     ct-ind xa xb {a} {b} (ch-is-sup ua ua<x supa fca) (ch-is-sup ub ub<x supb fcb) with trio< ua ub
      ... | tri< a₁ ¬b ¬c with ChainP.order supb  a₁ fca 
      ... | case1 eq with s≤fc (supf ub) f mf fcb 
      ... | case1 eq1 = tri≈ (λ lt → ⊥-elim (<-irr (case1 (sym ct00)) lt)) ct00  (λ lt → ⊥-elim (<-irr (case1 ct00) lt)) where
@@ -377,7 +387,7 @@
           ... | case1 eq =  subst (λ k → * a < k ) eq ct03
           ... | case2 lt =  IsStrictPartialOrder.trans POO ct03 lt
      ct-ind xa xb {a} {b} (ch-is-sup ua ua<x supa fca) (ch-is-sup ub ub<x  supb fcb) | tri≈ ¬a  eq ¬c 
-         = fcn-cmp (supf ua) f mf fca (subst (λ k → FClosure A f k b ) (sym eq) fcb )
+         = fcn-cmp (supf ua) f mf fca (subst (λ k → FClosure A f k b ) (cong supf (sym eq)) fcb )
      ct-ind xa xb {a} {b} (ch-is-sup ua ua<x supa fca) (ch-is-sup ub ub<x supb fcb) | tri> ¬a ¬b c with ChainP.order supa c fcb 
      ... | case1 eq with s≤fc (supf ua) f mf fca 
      ... | case1 eq1 = tri≈ (λ lt → ⊥-elim (<-irr (case1 (sym ct00)) lt)) ct00  (λ lt → ⊥-elim (<-irr (case1 ct00) lt)) where
@@ -503,11 +513,13 @@
                       record { x<sup = λ {z} uz → IsSup.x<sup is-sup (chain-mono1 (osucc b<x) uz )  }  )
               m08 : {z : Ordinal} → (fcz : FClosure A f y z ) → z <= ZChain.supf zc b
               m08 {z} fcz = ZChain.fcy<sup zc (o<→≤ b<A) fcz
-              m09 : {sup1 z1 : Ordinal} → (ZChain.supf zc sup1) o< (ZChain.supf zc b) 
+              m09 : {sup1 z1 : Ordinal} → sup1 o< b 
                            → FClosure A f (ZChain.supf zc sup1) z1 → z1 <= ZChain.supf zc b
               m09 {sup1} {z} s<b fcz = ZChain.order zc b<A s<b fcz
+              m10 :  {y₁ : Ordinal} → odef (UnionCF A f mf ay (ZChain.supf zc) (osuc b)) y₁ → (y₁ ≡ b) ∨ (y₁ << b)
+              m10 = {!!}
               m06 : ChainP A f mf ay (ZChain.supf zc) b 
-              m06 = record {  fcy<sup = m08  ; order = m09 ; supu=u = ZChain.sup=u zc ab b<A {!!} } 
+              m06 = record {  fcy<sup = m08  ; order = m09 ; supu=u = ZChain.sup=u zc ab b<A record { x<sup = m10} } 
         ... | no lim = record { is-max = is-max }  where
            is-max :  {a : Ordinal} {b : Ordinal} → odef (UnionCF A f mf ay (ZChain.supf zc) x) a →
               b o< x → (ab : odef A b) →
@@ -522,14 +534,16 @@
               m09 = subst (λ k → k o< & A) &iso ( c<→o< (subst (λ k → odef A k ) (sym &iso ) ab))
               m07 : {z : Ordinal} → FClosure A f y z → z <= ZChain.supf zc b
               m07 {z} fc = ZChain.fcy<sup zc (o<→≤ m09) fc
-              m08 : {sup1 z1 : Ordinal} → (ZChain.supf zc sup1) o< (ZChain.supf zc b) 
+              m08 : {sup1 z1 : Ordinal} → sup1 o< b 
                        → FClosure A f (ZChain.supf zc sup1) z1 → z1 <= ZChain.supf zc b
               m08 {sup1} {z1} s<b fc = ZChain.order zc m09 s<b fc
               m05 : b ≡ ZChain.supf zc b
               m05 = sym (ZChain.sup=u zc ab m09
                       record { x<sup = λ lt → IsSup.x<sup is-sup (chain-mono1 (osucc b<x) lt )} )   -- ZChain on x
+              m10 :  {y₁ : Ordinal} → odef (UnionCF A f mf ay (ZChain.supf zc) (osuc b)) y₁ → (y₁ ≡ b) ∨ (y₁ << b)
+              m10 = {!!}
               m06 : ChainP A f mf ay (ZChain.supf zc) b 
-              m06 = record { fcy<sup = m07 ;  order = m08 ; supu=u = ZChain.sup=u zc ab m09 {!!} }
+              m06 = record { fcy<sup = m07 ;  order = m08 ; supu=u = ZChain.sup=u zc ab m09 record { x<sup = m10 } }
 
      ---
      --- the maximum chain  has fix point of any ≤-monotonic function
@@ -610,7 +624,7 @@
 
      initChain : ( f : Ordinal → Ordinal ) → (mf : ≤-monotonic-f A f ) {y : Ordinal} (ay : odef A y) → ZChain A f mf ay o∅
      initChain f mf {y} ay = record { supf = isupf ; chain⊆A = λ lt → proj1 lt ; chain∋init = cy  ; sup = {!!} ; supf-is-sup = {!!} 
-      ; initial = isy ; f-next = inext ; f-total = itotal ; sup=u = λ _ b<0 → ⊥-elim (¬x<0 b<0) ; supf-mono = mono ; csupf = {!!} } where
+      ; initial = isy ; f-next = inext ; f-total = itotal ; sup=u = λ _ b<0 → ⊥-elim (¬x<0 b<0) ; csupf = {!!} } where
           spi =  & (SUP.sup (ysup f mf ay))
           isupf : Ordinal → Ordinal
           isupf z = spi
@@ -634,8 +648,6 @@
           itotal {a} {b} ca cb = subst₂ (λ j k → Tri (j < k) (j ≡ k) (k < j)) *iso *iso uz01 where 
                uz01 : Tri (* (& a) < * (& b)) (* (& a) ≡ * (& b)) (* (& b) < * (& a) )
                uz01 = chain-total A f mf ay isupf (proj2 ca) (proj2 cb)  
-          mono : {x : Ordinal} {z : Ordinal} → x o< z → isupf x o≤ isupf z 
-          mono {x} {z} x<z = o≤-refl
           csupf : {z : Ordinal} → z o≤ o∅ → odef (UnionCF A f mf ay isupf z ) (isupf z)
           csupf {z} z≤0 = ⟪ asi , ch-is-sup o∅ o∅≤z uz02 (init asi refl) ⟫ where
                uz03 : {z : Ordinal } →  FClosure A f y z → (z ≡ isupf spi) ∨ (z << isupf spi)
@@ -648,7 +660,7 @@
                uz04 : {sup1 z1 : Ordinal} → isupf sup1 o< isupf spi → FClosure A f (isupf sup1) z1 → (z1 ≡ isupf spi) ∨ (z1 << isupf spi)
                uz04 {s} {z} s<spi fcz = ⊥-elim ( o<¬≡ refl s<spi )
                uz02 :  ChainP A f mf ay isupf o∅
-               uz02 = record { fcy<sup = uz03 ; order = λ {s} {z} → uz04 {s} {z} ; supu=u = ? }
+               uz02 = record { fcy<sup = uz03 ; order = λ {s} {z} → {!!} ; supu=u = {!!} }
 
      SUP⊆ : { B C : HOD } → B ⊆' C → SUP A C → SUP A B
      SUP⊆ {B} {C} B⊆C sup = record { sup = SUP.sup sup ; A∋maximal = SUP.A∋maximal sup ; x<sup = λ lt → SUP.x<sup sup (B⊆C lt)    }
@@ -707,28 +719,28 @@
           --
           --  supf0 px is sup of UnionCF px , supf0 x is sup of UnionCF x 
           no-extension : ¬  sp1 ≡ x → ZChain A f mf ay x
-          no-extension ¬sp=x = record { supf = supf1 ; supf-mono = {!!} ; sup = sup
+          no-extension ¬sp=x = record { supf = supf1 ;  sup = sup
                ; initial = {!!} ; chain∋init = {!!}  ; sup=u = {!!} ; supf-is-sup = {!!} ; csupf = {!!} 
               ;  chain⊆A = {!!} ;  f-next = {!!} ;  f-total = {!!} }  where
                  UnionCF⊆ : UnionCF A f mf ay supf1 x ⊆' UnionCF A f mf ay supf0 x 
-                 UnionCF⊆ ⟪ as , ch-init fc ⟫ = UnionCF⊆ ⟪ as , ch-init fc ⟫ 
+                 UnionCF⊆ ⟪ as , ch-init fc ⟫ = ⟪ as , ch-init fc ⟫ 
                  UnionCF⊆ ⟪ as , ch-is-sup u {z} u≤x record { fcy<sup = f1 ; order = o1 ; supu=u = su=u1 }  fc ⟫ with trio< u px
                  ... | tri< a ¬b ¬c = ⟪ as , ch-is-sup u {z} u≤x record { fcy<sup = f1 ; order = order0 ; supu=u = {!!} } fc ⟫  where
-                     order0 : {s z1 : Ordinal}  → supf0 s o< supf0 u → FClosure A f (supf0 s) z1 
+                     order0 : {s z1 : Ordinal}  → s o< u → FClosure A f (supf0 s) z1 
                         → (z1 ≡ supf0 u) ∨ (z1 << supf0 u)
                      order0 {s} {z1} ss<su fc with trio< s px | inspect supf1 s
-                     ... | tri< a ¬b ¬c | record {eq = eq1} = o1 {s} {z1} (subst (λ k → k o< supf0 u) (sym eq1) ss<su )  
+                     ... | tri< a ¬b ¬c | record {eq = eq1} = o1 {s} {z1} {!!}  
                                                                           (subst (λ k → FClosure A f k z1 ) (sym eq1) fc )
-                     ... | tri≈ ¬a b ¬c | record {eq = eq1} = o1 {s} {z1} (subst (λ k → k o< supf0 u) (sym eq1) ss<su )  
+                     ... | tri≈ ¬a b ¬c | record {eq = eq1} = o1 {s} {z1} {!!}  
                                                                           (subst (λ k → FClosure A f k z1 ) (sym eq1) fc )
                      ... | tri> ¬a ¬b c | record {eq = eq1} = {!!}
                  ... | tri≈ ¬a b ¬c = ⟪ as , ch-is-sup u {z} u≤x record { fcy<sup = f1 ; order = order0  ; supu=u = {!!}} fc ⟫ where
-                     order0 : {s z1 : Ordinal}  → supf0 s o< supf0 u → FClosure A f (supf0 s) z1 
+                     order0 : {s z1 : Ordinal}  → s o< u → FClosure A f (supf0 s) z1 
                         → (z1 ≡ supf0 u) ∨ (z1 << supf0 u)
                      order0 {s} {z1} ss<su fc with trio< s px | inspect supf1 s
-                     ... | tri< a ¬b ¬c | record {eq = eq1} = o1 {s} {z1} (subst (λ k → k o< supf0 u) (sym eq1) ss<su )  
+                     ... | tri< a ¬b ¬c | record {eq = eq1} = o1 {s} {z1} {!!}  
                                                                           (subst (λ k → FClosure A f k z1 ) (sym eq1) fc )
-                     ... | tri≈ ¬a b ¬c | record {eq = eq1} = o1 {s} {z1} (subst (λ k → k o< supf0 u) (sym eq1) ss<su )  
+                     ... | tri≈ ¬a b ¬c | record {eq = eq1} = o1 {s} {z1} {!!}  
                                                                           (subst (λ k → FClosure A f k z1 ) (sym eq1) fc )
                      ... | tri> ¬a ¬b px<s | record {eq = eq1} = ⊥-elim ( ¬sp=x (subst (λ k → sp1 ≡ k ) u=x {!!} )) where
                          s≤u : s o≤ u
@@ -759,7 +771,7 @@
           ... | case2 ¬fy<x with ODC.p∨¬p O (IsSup A (ZChain.chain zc ) ax )
           ... | case1 is-sup = -- x is a sup of zc 
                 record {  supf = psupf1 ; chain⊆A = {!!} ; f-next = {!!} ; f-total = {!!} ; csupf = {!!} ; sup=u = {!!} 
-                   ; supf-mono = {!!} ; initial = {!!} ; chain∋init  = {!!} ; sup = {!!} ; supf-is-sup = {!!} ; supf-mono = {!!} }  where
+                   ;  initial = {!!} ; chain∋init  = {!!} ; sup = {!!} ; supf-is-sup = {!!}   }  where
              supx : SUP A (UnionCF A f mf ay supf0 x)
              supx = record { sup = * x ; A∋maximal = subst (λ k → odef A k ) {!!} ax ; x<sup = {!!} }
              spx = & (SUP.sup supx )
@@ -837,7 +849,7 @@
           no-extension : ¬ spu ≡ x → ZChain A f mf ay x
           no-extension ¬sp=x  = record { initial = pinit ; chain∋init = pcy  ; supf = supf1  ; sup=u = {!!} 
                ; sup = sup ; supf-is-sup = sis
-               ; csupf = csupf ; chain⊆A = pchain⊆A ;  f-next = pnext ;  f-total = ptotal ; supf-mono = {!!} } where
+               ; csupf = csupf ; chain⊆A = pchain⊆A ;  f-next = pnext ;  f-total = ptotal } where
                  supfu : {u : Ordinal } → ( a : u o< x ) → (z : Ordinal) → Ordinal
                  supfu {u} a z = ZChain.supf (pzc (osuc u) (ob<x lim a)) z
                  UnionCF⊆ : {u : Ordinal} → (a : u o< x ) → UnionCF A f mf ay supf1 x ⊆' UnionCF A f mf ay (supfu a) x 
@@ -849,7 +861,7 @@
                  ... | tri> ¬a ¬b c = SUP⊆ {!!} usup
                  sis : {z : Ordinal} (x≤z : z o≤ x) → supf1 z ≡ & (SUP.sup (sup x≤z))
                  sis {z} z≤x with trio< z x
-                 ... | tri< a ¬b ¬c = ? where
+                 ... | tri< a ¬b ¬c = {!!} where
                      zc8 = ZChain.supf-is-sup (pzc z a) o≤-refl 
                  ... | tri≈ ¬a b ¬c = refl
                  ... | tri> ¬a ¬b c with osuc-≡< z≤x
@@ -857,39 +869,18 @@
                  ... | case2 lt = ⊥-elim ( ¬a lt )
                  sup=u : {b : Ordinal} (ab : odef A b) → b o< x → IsSup A (UnionCF A f mf ay supf1 (osuc b)) ab → supf1 b ≡ b
                  sup=u {b} ab b<x is-sup with trio< b x
-                 ... | tri< a ¬b ¬c = ZChain.sup=u (pzc (osuc b)  (ob<x lim a))  ab <-osuc record { x<sup = ? }
-                 ... | tri≈ ¬a b ¬c = ?
-                 ... | tri> ¬a ¬b c = ?
+                 ... | tri< a ¬b ¬c = ZChain.sup=u (pzc (osuc b)  (ob<x lim a))  ab <-osuc record { x<sup = {!!} }
+                 ... | tri≈ ¬a b ¬c = {!!}
+                 ... | tri> ¬a ¬b c = {!!}
                  csupf : {z : Ordinal} → z o≤ x → odef (UnionCF A f mf ay supf1 z) (supf1 z)
                  csupf {z} z<x with trio< z x
                  ... | tri< a ¬b ¬c = zc9 where
                      zc9 : odef (UnionCF A f mf ay supf1 z)  (ZChain.supf  (pzc (osuc z) (ob<x lim a)) z)
-                     zc9 = ?
+                     zc9 = {!!}
                      zc8 : odef (UnionCF A f mf ay (supfu a) z)  (ZChain.supf  (pzc (osuc z) (ob<x lim a)) z)
                      zc8 = ZChain.csupf  (pzc (osuc z) (ob<x lim a)) (o<→≤ <-osuc )
-                 ... | tri≈ ¬a b ¬c = ? -- ⊥-elim (¬a z<x)
-                 ... | tri> ¬a ¬b c = ? -- ⊥-elim (¬a z<x)
-                 supf-mono :  {a b : Ordinal}  → a o< b → supf1 a o≤ supf1 b
-                 supf-mono {a0} {b0} a<b = zc10 where
-                     --  x o≤ a → supf1 a ≡ supf1 b ≡ spu
-                     --  x o≤ b → supf1 b ≡ spu
-                     --  a o< x → b o≤ x →   supf1 (supf1 a) ≡ supf1 a
-                     --                      supf1 (supf1 b) ≡ supf1 b
-                     usa : odef (UnionCF A f mf ay (supfu ?) (osuc a0)) (supf1 a0)
-                     usa = ?
-                     usb : odef (UnionCF A f mf ay (supfu ?) (osuc b0)) (supf1 b0)
-                     usb = ?
-                     zc10 : supf1 a0 o≤ supf1 b0
-                     zc10 with trio< a0 x | trio< b0 x
-                     ... | tri< a ¬b ¬c | tri< a' ¬b' ¬c' = ? where
-                         zc11 = ZChain.supf-mono (pzc (osuc a0)  (ob<x lim a)) a<b  
-                         zc12 = ZChain.supf-mono (pzc (osuc b0)  (ob<x lim a')) a<b  
-                     ... | tri< a ¬b ¬c | tri≈ ¬a b ¬c' = ?
-                     ... | tri< a ¬b ¬c | tri> ¬a ¬b' c = ?
-                     ... | tri≈ ¬a b ¬c | tri< a ¬b ¬c' = ? 
-                     ... | tri≈ ¬a b ¬c | tri≈ ¬a' b' ¬c' = ?
-                     ... | tri≈ ¬a b ¬c | tri> ¬a' ¬b c = ?
-                     ... | tri> ¬a ¬b c | _ = ?
+                 ... | tri≈ ¬a b ¬c = {!!} -- ⊥-elim (¬a z<x)
+                 ... | tri> ¬a ¬b c = {!!} -- ⊥-elim (¬a z<x)
 
           zc5 : ZChain A f mf ay x 
           zc5 with ODC.∋-p O A (* x)
@@ -900,7 +891,7 @@
           ... | case2 ¬fy<x with ODC.p∨¬p O (IsSup A pchain ax )
           ... | case1 is-sup = record { initial = {!!} ; chain∋init = {!!}  ; supf = supf1  ; sup=u = {!!} 
                ; sup = {!!} ; supf-is-sup = {!!}
-               ;  chain⊆A = {!!} ;  f-next = {!!} ;  f-total = {!!} ; csupf = {!!} ; supf-mono = {!!} } where -- x is a sup of (zc ?) 
+               ;  chain⊆A = {!!} ;  f-next = {!!} ;  f-total = {!!} ; csupf = {!!}  } where -- x is a sup of (zc ?) 
           ... | case2 ¬x=sup =  no-extension {!!} -- x is not f y' nor sup of former ZChain from y -- no extention
          
      SZ : ( f : Ordinal → Ordinal ) → (mf : ≤-monotonic-f A f ) → {y : Ordinal} (ay : odef A y) → ZChain A f mf ay   (& A)