@@ -19,7 +19,7 @@ open import Data.Nat.Base as ℕ using (ℕ; zero; suc; s≤s; z≤n; _∸_)
19
19
import Data.Nat.Properties as ℕₚ
20
20
open import Data.Unit using (tt)
21
21
open import Data.Product using (∃; ∃₂; ∄; _×_; _,_; map; proj₁; uncurry; <_,_>)
22
- open import Data.Sum.Base as Sum using (_⊎_; inj₁; inj₂; [_,_])
22
+ open import Data.Sum.Base as Sum using (_⊎_; inj₁; inj₂; [_,_]; [_,_]′ )
23
23
open import Data.Sum.Properties using ([,]-map-commute; [,]-∘-distr)
24
24
open import Function.Base using (_∘_; id; _$_)
25
25
open import Function.Bundles using (_↔_; mk↔′)
@@ -488,7 +488,7 @@ pred< (suc i) p = ≤̄⇒inject₁< ℕₚ.≤-refl
488
488
-- splitAt
489
489
------------------------------------------------------------------------
490
490
491
- -- Fin (m + n) ≃ Fin m ⊎ Fin n
491
+ -- Fin (m + n) ↔ Fin m ⊎ Fin n
492
492
493
493
splitAt-inject+ : ∀ m n i → splitAt m (inject+ n i) ≡ inj₁ i
494
494
splitAt-inject+ (suc m) n zero = refl
@@ -498,14 +498,18 @@ splitAt-raise : ∀ m n i → splitAt m (raise {n} m i) ≡ inj₂ i
498
498
splitAt-raise zero n i = refl
499
499
splitAt-raise (suc m) n i rewrite splitAt-raise m n i = refl
500
500
501
- inject+-raise-splitAt : ∀ m n i → [ inject+ n , raise {n} m ] (splitAt m i) ≡ i
502
- inject+-raise-splitAt zero n i = refl
503
- inject+-raise-splitAt (suc m) n zero = refl
504
- inject+-raise-splitAt (suc m) n (suc i) = begin
505
- [ inject+ n , raise {n} (suc m) ] (splitAt (suc m) (suc i)) ≡⟨ [,]-map-commute (splitAt m i) ⟩
506
- [ suc ∘ (inject+ n) , suc ∘ (raise {n} m) ] (splitAt m i) ≡˘⟨ [,]-∘-distr suc (splitAt m i) ⟩
507
- suc ([ inject+ n , raise {n} m ] (splitAt m i)) ≡⟨ cong suc (inject+-raise-splitAt m n i) ⟩
508
- suc i ∎
501
+ splitAt-join : ∀ m n i → splitAt m (join m n i) ≡ i
502
+ splitAt-join m n (inj₁ x) = splitAt-inject+ m n x
503
+ splitAt-join m n (inj₂ y) = splitAt-raise m n y
504
+
505
+ join-splitAt : ∀ m n i → join m n (splitAt m i) ≡ i
506
+ join-splitAt zero n i = refl
507
+ join-splitAt (suc m) n zero = refl
508
+ join-splitAt (suc m) n (suc i) = begin
509
+ [ inject+ n , raise {n} (suc m) ]′ (splitAt (suc m) (suc i)) ≡⟨ [,]-map-commute (splitAt m i) ⟩
510
+ [ suc ∘ (inject+ n) , suc ∘ (raise {n} m) ]′ (splitAt m i) ≡˘⟨ [,]-∘-distr suc (splitAt m i) ⟩
511
+ suc ([ inject+ n , raise {n} m ]′ (splitAt m i)) ≡⟨ cong suc (join-splitAt m n i) ⟩
512
+ suc i ∎
509
513
where open ≡-Reasoning
510
514
511
515
-- splitAt "m" "i" ≡ inj₁ "i" if i < m
@@ -520,6 +524,12 @@ splitAt-≥ : ∀ m {n} i → (i≥m : toℕ i ℕ.≥ m) → splitAt m {n} i
520
524
splitAt-≥ zero i _ = refl
521
525
splitAt-≥ (suc m) (suc i) (s≤s i≥m) = cong (Sum.map suc id) (splitAt-≥ m i i≥m)
522
526
527
+ ------------------------------------------------------------------------
528
+ -- Bundles
529
+
530
+ +↔⊎ : ∀ {m n} → Fin (m ℕ.+ n) ↔ (Fin m ⊎ Fin n)
531
+ +↔⊎ {m} {n} = mk↔′ (splitAt m {n}) (join m n) (splitAt-join m n) (join-splitAt m n)
532
+
523
533
------------------------------------------------------------------------
524
534
-- lift
525
535
------------------------------------------------------------------------
@@ -896,3 +906,11 @@ decSetoid = ≡-decSetoid
896
906
"Warning: decSetoid was deprecated in v1.2.
897
907
Please use ≡-decSetoid instead."
898
908
#-}
909
+
910
+ -- Version 1.5
911
+
912
+ inject+-raise-splitAt = join-splitAt
913
+ {-# WARNING_ON_USAGE inject+-raise-splitAt
914
+ "Warning: decSetoid was deprecated in v1.5.
915
+ Please use join-splitAt instead."
916
+ #-}
0 commit comments