9
9
10
10
module Data.Fin.Properties where
11
11
12
+ open import Axiom.Extensionality.Propositional
12
13
open import Category.Applicative using (RawApplicative)
13
14
open import Category.Functor using (RawFunctor)
14
15
open import Data.Bool.Base using (Bool; true; false; not; _∧_; _∨_)
15
16
open import Data.Empty using (⊥; ⊥-elim)
16
17
open import Data.Fin.Base
17
18
open import Data.Fin.Patterns
18
- open import Data.Nat.Base as ℕ using (ℕ; zero; suc; s≤s; z≤n; _∸_)
19
+ open import Data.Nat.Base as ℕ using (ℕ; zero; suc; s≤s; z≤n; _∸_; _^_ )
19
20
import Data.Nat.Properties as ℕₚ
20
21
open import Data.Unit using (⊤; tt)
21
- open import Data.Product using (Σ-syntax; ∃; ∃₂; ∄; _×_; _,_; map; proj₁; uncurry; <_,_>)
22
+ open import Data.Product using (Σ-syntax; ∃; ∃₂; ∄; _×_; _,_; map; proj₁; proj₂; uncurry; <_,_>)
22
23
open import Data.Sum.Base as Sum using (_⊎_; inj₁; inj₂; [_,_]; [_,_]′)
23
24
open import Data.Sum.Properties using ([,]-map-commute; [,]-∘-distr)
24
25
open import Function.Base using (_∘_; id; _$_; flip)
@@ -28,7 +29,7 @@ open import Function.Equivalence using (_⇔_; equivalence)
28
29
open import Function.Injection using (_↣_)
29
30
open import Relation.Binary as B hiding (Decidable; _⇔_)
30
31
open import Relation.Binary.PropositionalEquality as P
31
- using (_≡_; _≢_; refl; sym; trans; cong; subst; module ≡-Reasoning )
32
+ using (_≡_; _≢_; refl; sym; trans; cong; subst; _≗_; module ≡-Reasoning )
32
33
open import Relation.Nullary.Decidable as Dec using (map′)
33
34
open import Relation.Nullary.Reflects
34
35
open import Relation.Nullary.Negation using (contradiction)
@@ -572,8 +573,62 @@ combine-remQuot {suc n} k i with splitAt k i | P.inspect (splitAt k) i
572
573
573
574
------------------------------------------------------------------------
574
575
-- Bundles
576
+
575
577
*↔× : ∀ {m n} → Fin (m ℕ.* n) ↔ (Fin m × Fin n)
576
- *↔× {m} {n} = mk↔′ (remQuot {m} n) (uncurry combine) (uncurry remQuot-combine) (combine-remQuot {m} n)
578
+ *↔× {m} {n} = mk↔′ (remQuot {m} n) (uncurry combine)
579
+ (uncurry remQuot-combine)
580
+ (combine-remQuot {m} n)
581
+
582
+ ------------------------------------------------------------------------
583
+ -- fin→fun
584
+ ------------------------------------------------------------------------
585
+
586
+ funToFin-finToFin : ∀ {m n} → funToFin {m} {n} ∘ finToFun ≗ id
587
+ funToFin-finToFin {zero} {n} zero = refl
588
+ funToFin-finToFin {suc m} {n} k =
589
+ begin
590
+ combine (finToFun {suc m} {n} k zero) (funToFin (finToFun {suc m} {n} k ∘ suc))
591
+ ≡⟨⟩
592
+ combine (quotient {n} (n ^ m) k)
593
+ (funToFin (finToFun {m} (remainder {n} (n ^ m) k)))
594
+ ≡⟨ cong (combine (quotient {n} (n ^ m) k))
595
+ (funToFin-finToFin {m} (remainder {n} (n ^ m) k)) ⟩
596
+ combine (quotient {n} (n ^ m) k) (remainder {n} (n ^ m) k)
597
+ ≡⟨⟩
598
+ uncurry combine (remQuot {n} (n ^ m) k)
599
+ ≡⟨ combine-remQuot {n = n} (n ^ m) k ⟩
600
+ k
601
+ ∎ where open ≡-Reasoning
602
+
603
+ finToFun-funToFin : ∀ {m n} (f : Fin m → Fin n) → finToFun (funToFin f) ≗ f
604
+ finToFun-funToFin {suc m} {n} f zero =
605
+ begin
606
+ quotient (n ^ m) (combine (f zero) (funToFin (f ∘ suc)))
607
+ ≡⟨ cong proj₁ (remQuot-combine _ _) ⟩
608
+ proj₁ (f zero , funToFin (f ∘ suc))
609
+ ≡⟨⟩
610
+ f zero
611
+ ∎ where open ≡-Reasoning
612
+ finToFun-funToFin {suc m} {n} f (suc i) =
613
+ begin
614
+ finToFun (remainder {n} (n ^ m) (combine (f zero) (funToFin (f ∘ suc)))) i
615
+ ≡⟨ cong (λ rq → finToFun (proj₂ rq) i) (remQuot-combine {n} _ _) ⟩
616
+ finToFun (proj₂ (f zero , funToFin (f ∘ suc))) i
617
+ ≡⟨⟩
618
+ finToFun (funToFin (f ∘ suc)) i
619
+ ≡⟨ finToFun-funToFin (f ∘ suc) i ⟩
620
+ (f ∘ suc) i
621
+ ≡⟨⟩
622
+ f (suc i)
623
+ ∎ where open ≡-Reasoning
624
+
625
+ ------------------------------------------------------------------------
626
+ -- Bundles
627
+
628
+ ^↔→ : ∀ {m n} → Extensionality _ _ → Fin (n ^ m) ↔ (Fin m → Fin n)
629
+ ^↔→ {m} {n} ext = mk↔′ finToFun funToFin
630
+ (ext ∘ finToFun-funToFin)
631
+ (funToFin-finToFin {m} {n})
577
632
578
633
------------------------------------------------------------------------
579
634
-- lift
0 commit comments