# HG changeset patch # User Shinji KONO # Date 1719051836 -32400 # Node ID d0b4be1cab0d66fda14643cf77bc022f22b57f52 # Parent e970149a6af54772483551e3e3f57669e0714f58 ... diff -r e970149a6af5 -r d0b4be1cab0d src/ZProduct.agda --- a/src/ZProduct.agda Sat Jun 22 12:39:58 2024 +0900 +++ b/src/ZProduct.agda Sat Jun 22 19:23:56 2024 +0900 @@ -424,10 +424,9 @@ record Injection (A B : Ordinal ) : Set n where field - i→ : (x : Ordinal ) → odef (* A) x → Ordinal - irr : (x : Ordinal ) → ( lt1 lt2 : odef (* A) x ) → i→ x lt1 ≡ i→ x lt2 - iB : (x : Ordinal ) → ( lt : odef (* A) x ) → odef (* B) ( i→ x lt ) - inject : (x y : Ordinal ) → ( ltx : odef (* A) x ) ( lty : odef (* A) y ) → i→ x ltx ≡ i→ y lty → x ≡ y + i→ : (x : Ordinal ) → Ordinal + iB : (x : Ordinal ) → ( lt : odef (* A) x ) → odef (* B) ( i→ x ) + inject : (x y : Ordinal ) → ( ltx : odef (* A) x ) ( lty : odef (* A) y ) → i→ x ≡ i→ y → x ≡ y record HODBijection (A B : HOD ) : Set n where field diff -r e970149a6af5 -r d0b4be1cab0d src/bijection.agda --- a/src/bijection.agda Sat Jun 22 12:39:58 2024 +0900 +++ b/src/bijection.agda Sat Jun 22 19:23:56 2024 +0900 @@ -1,4 +1,4 @@ -{-# OPTIONS --allow-unsolved-metas #-} +{-# OPTIONS --cubical-compatible --safe #-} module bijection where @@ -47,8 +47,8 @@ bi-inject→ : {n m : Level} {R : Set n} {S : Set m} → (rs : Bijection R S) → {x y : R} → fun→ rs x ≡ fun→ rs y → x ≡ y bi-inject→ rs {x} {y} eq = subst₂ (λ j k → j ≡ k ) (fiso← rs _) (fiso← rs _) (cong (fun← rs) eq) -bi-∨ : {n m n1 m1 : Level } {A : Set n} {B : Set m} {C : Set n1} {D : Set m1} → (ab : Bijection A B) → (cd : Bijection C D ) - → Bijection (A ∨ C) (B ∨ D) +bi-∨ : {n m n1 m1 : Level } {A : Set n} {B : Set m} {C : Set n1} {D : Set m1} → (ab : Bijection A B) → (cd : Bijection C D ) + → Bijection (A ∨ C) (B ∨ D) bi-∨ {_} {_} {_} {_} {A} {B} {C} {D} ab cd = record { fun→ = fun→1 ; fun← = fun←1 @@ -64,7 +64,7 @@ fiso→1 : (x : B ∨ D) → fun→1 (fun←1 x) ≡ x fiso→1 (case1 a) = cong case1 (fiso→ ab a) fiso→1 (case2 c) = cong case2 (fiso→ cd c) - fiso←1 : (x : A ∨ C) → fun←1 (fun→1 x) ≡ x + fiso←1 : (x : A ∨ C) → fun←1 (fun→1 x) ≡ x fiso←1 (case1 a) = cong case1 (fiso← ab a) fiso←1 (case2 c) = cong case2 (fiso← cd c) @@ -238,8 +238,8 @@ -- nn zero = record { j = 0 ; k = 0 ; k1 = refl ; nn-unique = λ {j0} {k0} eq → cong₂ (λ x y → ⟪ x , y ⟫) (sym (proj1 (nxn→n0 eq))) (sym (proj2 (nxn→n0 {j0} {k0} eq))) } - nn (suc i) with NN.k (nn i) | inspect NN.k (nn i) - ... | zero | record { eq = eq } = record { k = suc (sum ) ; j = 0 + nn (suc i) with NN.k (nn i) in eq + ... | zero = record { k = suc (sum ) ; j = 0 ; k1 = nn02 ; nn-unique = nn04 } where --- --- increment the stage @@ -283,7 +283,7 @@ i ∎ where open ≡-Reasoning nn06 : nxn→n j0 (suc k0) ≡ i → ⟪ NN.j (nn i) , NN.k (nn i) ⟫ ≡ ⟪ j0 , suc k0 ⟫ nn06 = NN.nn-unique (nn i) - ... | suc k | record {eq = eq} = record { k = k ; j = suc (NN.j (nn i)) ; k1 = nn11 ; nn-unique = nn13 } where + ... | suc k = record { k = k ; j = suc (NN.j (nn i)) ; k1 = nn11 ; nn-unique = nn13 } where --- --- increment in a stage --- @@ -459,8 +459,8 @@ lb zero = record { nlist = [] ; isBin = refl ; isUnique = lb05 } where lb05 : (x : List Bool) → lton x ≡ zero → [] ≡ x lb05 x eq = lb=b [] x (sym eq) - lb (suc n) with LB.nlist (lb n) | inspect LB.nlist (lb n) - ... | [] | record { eq = eq } = record { nlist = false ∷ [] ; isUnique = lb06 ; isBin = lb10 } where + lb (suc n) with LB.nlist (lb n) in eq + ... | [] = record { nlist = false ∷ [] ; isUnique = lb06 ; isBin = lb10 } where open ≡-Reasoning lb10 : lton1 (false ∷ []) ∸ 1 ≡ suc n lb10 = begin @@ -471,7 +471,7 @@ suc n ∎ lb06 : (x : List Bool) → pred (lton1 x ) ≡ suc n → false ∷ [] ≡ x lb06 x eq1 = lb=b (false ∷ []) x (trans lb10 (sym eq1)) -- lton (false ∷ []) ≡ lton x - ... | false ∷ t | record { eq = eq } = record { nlist = true ∷ t ; isBin = lb01 ; isUnique = lb09 } where + ... | false ∷ t = record { nlist = true ∷ t ; isBin = lb01 ; isUnique = lb09 } where lb01 : lton (true ∷ t) ≡ suc n lb01 = begin lton (true ∷ t) ≡⟨ refl ⟩ @@ -482,7 +482,7 @@ suc n ∎ where open ≡-Reasoning lb09 : (x : List Bool) → lton1 x ∸ 1 ≡ suc n → true ∷ t ≡ x lb09 x eq1 = lb=b (true ∷ t) x (trans lb01 (sym eq1) ) -- lton (true ∷ t) ≡ lton x - ... | true ∷ t | record { eq = eq } = record { nlist = lb+1 (true ∷ t) ; isBin = lb02 (true ∷ t) lb03 ; isUnique = lb07 } where + ... | true ∷ t = record { nlist = lb+1 (true ∷ t) ; isBin = lb02 (true ∷ t) lb03 ; isUnique = lb07 } where lb03 : lton (true ∷ t) ≡ n lb03 = begin lton (true ∷ t) ≡⟨ cong (λ k → lton k ) (sym eq ) ⟩ @@ -535,55 +535,55 @@ record IsImage0 (A B : Set ) (f : (x : A ) → B) (x : B ) : Set where field y : A - x=fy : x ≡ f y + x=fy : x ≡ f y -IsImage : (a b : Set) (iab : InjectiveF a b ) (x : b ) → Set +IsImage : (a b : Set) (iab : InjectiveF a b ) (x : b ) → Set IsImage a b iab x = IsImage0 a b (InjectiveF.f iab) x -Bernstein : (A B : Set) - → (fi : InjectiveF A B ) → (gi : InjectiveF B A ) - → (is-A : (b : B ) → Dec (Is A B (InjectiveF.f fi) b) ) - → (is-B : (a : A ) → Dec (Is B A (InjectiveF.f gi) a) ) - → Bijection A B -Bernstein A B fi gi isa isb = ? where - open InjectiveF - gfi : InjectiveF A A - gfi = record { f = λ x → f gi (f fi x) ; inject = λ {x} {y} eq → inject fi (inject gi eq) } - data gfImage : (x : A) → Set where - a-g : {x : A} → (¬ib : ¬ ( IsImage B A gi x )) → gfImage x - next-gf : {x : A} → (ix : IsImage A A gfi x) → (gfiy : gfImage (IsImage0.y ix) ) → gfImage x - data ¬gfImage : (x : A) → Set where - ngf : {x : A} → (¬gfiy : ¬ gfImage x) → ¬gfImage x - gf02 : {x : A} → IsImage B A gi x ∨ (¬ IsImage B A gi x) ∨ ((ix : IsImage A A gfi x) → ¬ gfImage (IsImage0.y ix) ) → ¬ gfImage x - gf02 {x} c gf = ? - gfi∨ : (x : A) → gfImage x ∨ ¬gfImage x - gfi∨ x with isb x - ... | no ¬ib = case1 ( a-g (λ ib → ¬ib (record { a = IsImage0.y ib ; fa=c = sym (IsImage0.x=fy ib) }))) - ... | yes ib with isa (f fi x) - ... | no ¬ia = case2 ( ngf ? ) - ... | yes ia = case1 ( next-gf record { y = f gi (Is.a ib) ; x=fy = br00 } (a-g br01 ) ) where - br00 : x ≡ f gi (f fi (f gi (Is.a ib))) - br00 = ? - br01 : ¬ IsImage B A gi (f gi (Is.a ib)) - br01 record { y = y ; x=fy = x=fy } = ? +-- Bernstein : (A B : Set) +-- → (fi : InjectiveF A B ) → (gi : InjectiveF B A ) +-- → (is-A : (b : B ) → Dec (Is A B (InjectiveF.f fi) b) ) +-- → (is-B : (a : A ) → Dec (Is B A (InjectiveF.f gi) a) ) +-- → Bijection A B +-- Bernstein A B fi gi isa isb = ? where +-- open InjectiveF +-- gfi : InjectiveF A A +-- gfi = record { f = λ x → f gi (f fi x) ; inject = λ {x} {y} eq → inject fi (inject gi eq) } +-- data gfImage : (x : A) → Set where +-- a-g : {x : A} → (¬ib : ¬ ( IsImage B A gi x )) → gfImage x +-- next-gf : {x : A} → (ix : IsImage A A gfi x) → (gfiy : gfImage (IsImage0.y ix) ) → gfImage x +-- data ¬gfImage : (x : A) → Set where +-- ngf : {x : A} → (¬gfiy : ¬ gfImage x) → ¬gfImage x +-- gf02 : {x : A} → IsImage B A gi x ∨ (¬ IsImage B A gi x) ∨ ((ix : IsImage A A gfi x) → ¬ gfImage (IsImage0.y ix) ) → ¬ gfImage x +-- gf02 {x} c gf = ? +-- gfi∨ : (x : A) → gfImage x ∨ ¬gfImage x +-- gfi∨ x with isb x +-- ... | no ¬ib = case1 ( a-g (λ ib → ¬ib (record { a = IsImage0.y ib ; fa=c = sym (IsImage0.x=fy ib) }))) +-- ... | yes ib with isa (f fi x) +-- ... | no ¬ia = case2 ( ngf ? ) +-- ... | yes ia = case1 ( next-gf record { y = f gi (Is.a ib) ; x=fy = br00 } (a-g br01 ) ) where +-- br00 : x ≡ f gi (f fi (f gi (Is.a ib))) +-- br00 = ? +-- br01 : ¬ IsImage B A gi (f gi (Is.a ib)) +-- br01 record { y = y ; x=fy = x=fy } = ? Countable-Bernstein : (A B C : Set) → Bijection A ℕ → Bijection C ℕ → (fi : InjectiveF A B ) → (gi : InjectiveF B C ) - → (is-A : (c : C ) → Dec (Is A C (λ x → (InjectiveF.f gi (InjectiveF.f fi x))) c )) + → (is-A : (c : C ) → Dec (Is A C (λ x → (InjectiveF.f gi (InjectiveF.f fi x))) c )) → (is-B : (c : C ) → Dec (Is B C (InjectiveF.f gi) c) ) → Bijection B ℕ Countable-Bernstein A B C an cn fi gi is-A is-B = record { fun→ = λ x → bton x ; fun← = λ n → ntob n ; fiso→ = biso - ; fiso← = biso1 + ; fiso← = biso1 } where -- -- an f g cn -- ℕ ↔ A → B → C ↔ ℕ -- B = Image A f ∪ (B \ Image A f ) - -- + -- open Bijection f = InjectiveF.f fi g = InjectiveF.f gi @@ -646,7 +646,7 @@ c-mono : (i j : ℕ ) → i ≤ j → c i ≤ c j c-mono i j i≤j with ≤-∨ i≤j ... | case1 refl = ≤-refl - c-mono zero (suc j) z≤n | case2 lt = ≤-trans (c-mono zero j z≤n ) (c-mono1 j) + c-mono zero (suc j) z≤n | case2 lt = ≤-trans (c-mono zero j z≤n ) (c-mono1 j) c-mono (suc i) (suc j) (s≤s i≤j) | case2 (s≤s lt) = ≤-trans (c-mono (suc i) j lt ) (c-mono1 j) inject-cgf : {i j : ℕ} → fun→ cn (g (f (fun← an i))) ≡ fun→ cn (g (f (fun← an j))) → i ≡ j @@ -693,7 +693,7 @@ lem02 zero (h ∷ t) refl with is-A (fun← cn zero) ... | yes _ = refl ... | no _ = refl - lem02 (suc n) (h ∷ t) refl with is-A (fun← cn (suc n)) + lem02 (suc n) (h ∷ t) refl with is-A (fun← cn (suc n)) ... | yes _ = cong suc (lem02 n t refl) ... | no _ = lem02 n t refl @@ -705,7 +705,7 @@ -- count of a in a-list is one step reduced -- - a-list-ca : (i : ℕ) → (cl : List C) → (a : Any (_≡_ (g (f (fun← an i)))) cl ) + a-list-ca : (i : ℕ) → (cl : List C) → (a : Any (_≡_ (g (f (fun← an i)))) cl ) → suc (ca-list (a-list i cl a)) ≡ ca-list cl a-list-ca i cl a = lem03 i cl _ a refl where lem03 : (i : ℕ) → (cl cal : List C) → (a : Any (_≡_ (g (f (fun← an i)))) cl ) → cal ≡ (a-list i cl a) → suc (ca-list cal) ≡ ca-list cl @@ -721,13 +721,13 @@ -- reduced list still have all ani j < i -- - a-list-any : (i : ℕ) → (cl : List C) → (a : Any (_≡_ (g (f (fun← an i)))) cl ) - → (j : ℕ) → j < i → Any (_≡_ (g (f (fun← an j)))) cl → Any (_≡_ (g (f (fun← an j)))) (a-list i cl a) + a-list-any : (i : ℕ) → (cl : List C) → (a : Any (_≡_ (g (f (fun← an i)))) cl ) + → (j : ℕ) → j < i → Any (_≡_ (g (f (fun← an j)))) cl → Any (_≡_ (g (f (fun← an j)))) (a-list i cl a) a-list-any i cl a j j lem25 a lem25 a ¬a ¬b c₁ = ⊥-elim ( lem20 j i c₁ bj bi eq ) + lem07 : (n i : ℕ) → count-B i ≡ suc n → CountB n - lem07 n 0 eq with is-B (fun← cn 0) | inspect count-B 0 - ... | yes isb | record { eq = eq1 } = record { b = Is.a isb ; cb = 0 ; b=cn = sym (Is.fa=c isb) ; cb=n = trans eq1 eq - ; cb-inject = λ cb1 iscb1 cb1eq → lem12 cb1 iscb1 (subst (λ k → k ≡ count-B cb1) eq1 cb1eq) } where + lem07 n 0 eq with is-B (fun← cn 0) + ... | yes isb = lem13 where + cb1 = count-B 0 + lem14 : count-B 0 ≡ 1 + lem14 with is-B (fun← cn 0) + ... | yes _ = refl + ... | no ne = ⊥-elim (ne isb) lem12 : (cb1 : ℕ) → Is B C g (fun← cn cb1) → 1 ≡ count-B cb1 → 0 ≡ cb1 - lem12 cb1 iscb1 cbeq = lem06 0 cb1 isb iscb1 (trans eq1 cbeq) - ... | no nisb | record { eq = eq1 } = ⊥-elim ( nat-≡< eq (s≤s z≤n ) ) - lem07 n (suc i) eq with is-B (fun← cn (suc i)) | inspect count-B (suc i) - ... | yes isb | record { eq = eq1 } = record { b = Is.a isb ; cb = suc i ; b=cn = sym (Is.fa=c isb) ; cb=n = trans eq1 eq - ; cb-inject = λ cb1 iscb1 cb1eq → lem12 cb1 iscb1 (subst (λ k → k ≡ count-B cb1) eq1 cb1eq) } where + lem12 cb1 iscb1 cbeq = lem06 0 cb1 isb iscb1 (trans lem14 cbeq) + lem13 : CountB n + lem13 = record { b = Is.a isb ; cb = 0 ; b=cn = sym (Is.fa=c isb) ; cb=n = trans lem14 eq + ; cb-inject = λ cb1 iscb1 cb1eq → lem12 cb1 iscb1 (subst (λ k → k ≡ count-B cb1) lem14 cb1eq) } + ... | no nisb = ⊥-elim ( nat-≡< eq (s≤s z≤n ) ) + lem07 n (suc i) eq with is-B (fun← cn (suc i)) + ... | yes isb = record { b = Is.a isb ; cb = suc i ; b=cn = sym (Is.fa=c isb) ; cb=n = trans lem14 eq + ; cb-inject = λ cb1 iscb1 cb1eq → lem12 cb1 iscb1 (subst (λ k → k ≡ count-B cb1) lem14 cb1eq) } where + cbs = count-B (suc i) + lem14 : count-B (suc i) ≡ suc (count-B i) + lem14 with is-B (fun← cn (suc i)) + ... | yes _ = refl + ... | no ne = ⊥-elim (ne isb) lem12 : (cb1 : ℕ) → Is B C g (fun← cn cb1) → suc (count-B i) ≡ count-B cb1 → suc i ≡ cb1 - lem12 cb1 iscb1 cbeq = lem06 (suc i) cb1 isb iscb1 (trans eq1 cbeq) - ... | no nisb | record { eq = eq1 } = lem07 n i eq + lem12 cb1 iscb1 cbeq = lem06 (suc i) cb1 isb iscb1 (trans lem14 cbeq) + ... | no nisb = lem07 n i eq -- starting from 0, if count B i ≡ suc n, this is it lem09 : (i j : ℕ) → suc n ≤ j → j ≡ count-B i → CountB n lem09 0 (suc j) (s≤s le) eq with ≤-∨ (s≤s le) ... | case1 eq1 = lem07 n 0 (sym (trans eq1 eq )) - ... | case2 (s≤s lt) with is-B (fun← cn 0) | inspect count-B 0 - ... | yes isb | record { eq = eq1 } = ⊥-elim ( nat-≤> (≤-trans (s≤s lt) (refl-≤≡ eq) ) (s≤s (s≤s z≤n)) ) - ... | no nisb | record { eq = eq1 } = ⊥-elim (nat-≡< (sym eq) (s≤s z≤n)) + ... | case2 (s≤s lt) with is-B (fun← cn 0) in eq1 + ... | yes isb = ⊥-elim ( nat-≤> (≤-trans (s≤s lt) (refl-≤≡ eq) ) (s≤s (s≤s z≤n)) ) + ... | no nisb = ⊥-elim (nat-≡< (sym eq) (s≤s z≤n)) lem09 (suc i) (suc j) (s≤s le) eq with ≤-∨ (s≤s le) ... | case1 eq1 = lem07 n (suc i) (sym (trans eq1 eq )) - ... | case2 (s≤s lt) with is-B (fun← cn (suc i)) | inspect count-B (suc i) - ... | yes isb | record { eq = eq1 } = lem09 i j lt (cong pred eq) - ... | no nisb | record { eq = eq1 } = lem09 i (suc j) (≤-trans lt a≤sa) eq + ... | case2 (s≤s lt) with is-B (fun← cn (suc i)) in eq1 + ... | yes isb = lem09 i j lt (cong pred eq) + ... | no nisb = lem09 i (suc j) (≤-trans lt a≤sa) eq bton : B → ℕ bton b = pred (count-B (fun→ cn (g b))) @@ -896,7 +909,7 @@ ntob n = CountB.b (lem01 n (maxAC.ac (lem02 n)) (≤-trans (maxAC.n