# HG changeset patch # User Shinji KONO # Date 1689559219 -32400 # Node ID 4456eebbd1bcd49c5ce786a0c91d0d703ac27aa4 # Parent bcf3ca6ba87b96a3f5fe3149d2d3c375eaa5e2a4 copying countable bijection may not easy diff -r bcf3ca6ba87b -r 4456eebbd1bc automaton-in-agda/src/finiteSetUtil.agda --- a/automaton-in-agda/src/finiteSetUtil.agda Mon Jul 17 08:14:57 2023 +0900 +++ b/automaton-in-agda/src/finiteSetUtil.agda Mon Jul 17 11:00:19 2023 +0900 @@ -3,8 +3,8 @@ module finiteSetUtil where open import Data.Nat hiding ( _≟_ ) -open import Data.Fin renaming ( _<_ to _<<_ ; _>_ to _f>_ ; _≟_ to _f≟_ ) hiding (_≤_ ) -open import Data.Fin.Properties hiding ( <-trans ) renaming ( <-cmp to <-fcmp ) +open import Data.Fin renaming ( _<_ to _<<_ ; _>_ to _f>_ ; _≟_ to _f≟_ ) hiding (_≤_ ; pred ) +open import Data.Fin.Properties hiding ( <-trans ) renaming ( <-cmp to <-fcmp ) hiding (≤-refl ; ≤-trans ) open import Data.Empty open import Relation.Nullary open import Relation.Binary.Definitions @@ -572,44 +572,190 @@ open import bijection using ( InjectiveF ; Is ) -record countB (B : Set) : Set where - field - cb : ℕ - ib : {i : ℕ} → i < cb → B - ib-inject : {i j : ℕ} → (i ¬a ¬b c = Q←F fa (fromℕ< pfa 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 (h 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 + lem12 : (cb1 : ℕ) → Is B C g (h 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 (h (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 : ℕ) → Is B C g (h 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 + + -- 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 (h 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)) + 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 (h (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 + + bton : B → ℕ + bton b = pred (count-B (h⁻¹ (g b))) + + lem22 : {n : ℕ } → n < maxb → suc n ≤ count-B n + lem22 {n} n