@@ -448,6 +448,12 @@ map-updateAt : ∀ {f : A → B} {g : A → A} {h : B → B}
448
448
map-updateAt (x ∷ xs) zero eq = cong (_∷ _) eq
449
449
map-updateAt (x ∷ xs) (suc i) eq = cong (_ ∷_) (map-updateAt xs i eq)
450
450
451
+ map-insert : ∀ (f : A → B) (x : A) (xs : Vec A n) (i : Fin (suc n)) →
452
+ map f (insert xs i x) ≡ insert (map f xs) i (f x)
453
+ map-insert f _ [] Fin.zero = refl
454
+ map-insert f _ (x' ∷ xs) Fin.zero = refl
455
+ map-insert f x (x' ∷ xs) (Fin.suc i) = cong (_ ∷_) (map-insert f x xs i)
456
+
451
457
map-[]≔ : ∀ (f : A → B) (xs : Vec A n) (i : Fin n) →
452
458
map f (xs [ i ]≔ x) ≡ map f xs [ i ]≔ f x
453
459
map-[]≔ f xs i = map-updateAt xs i refl
@@ -457,6 +463,11 @@ map-⊛ : ∀ (f : A → B → C) (g : A → B) (xs : Vec A n) →
457
463
map-⊛ f g [] = refl
458
464
map-⊛ f g (x ∷ xs) = cong (f x (g x) ∷_) (map-⊛ f g xs)
459
465
466
+ toList-map : ∀ (f : A → B) (xs : Vec A n) →
467
+ toList (map f xs) ≡ List.map f (toList xs)
468
+ toList-map f [] = refl
469
+ toList-map f (x ∷ xs) = cong (f x List.∷_) (toList-map f xs)
470
+
460
471
------------------------------------------------------------------------
461
472
-- _++_
462
473
@@ -509,6 +520,11 @@ lookup-splitAt (suc m) (x ∷ xs) ys (suc i) = trans
509
520
(lookup-splitAt m xs ys i)
510
521
(sym ([,]-map (Fin.splitAt m i)))
511
522
523
+ toList-++ : (xs : Vec A n) (ys : Vec A m) →
524
+ toList (xs ++ ys) ≡ toList xs List.++ toList ys
525
+ toList-++ [] ys = refl
526
+ toList-++ (x ∷ xs) ys = cong (x List.∷_) (toList-++ xs ys)
527
+
512
528
------------------------------------------------------------------------
513
529
-- concat
514
530
@@ -645,6 +661,15 @@ lookup-zipWith : ∀ (f : A → B → C) (i : Fin n) xs ys →
645
661
lookup-zipWith _ zero (x ∷ _) (y ∷ _) = refl
646
662
lookup-zipWith _ (suc i) (_ ∷ xs) (_ ∷ ys) = lookup-zipWith _ i xs ys
647
663
664
+ zipWith-++ : ∀ (f : A → B → C)
665
+ (xs : Vec A n) (ys : Vec A m)
666
+ (xs' : Vec B n) (ys' : Vec B m) →
667
+ zipWith f (xs ++ ys) (xs' ++ ys') ≡
668
+ zipWith f xs xs' ++ zipWith f ys ys'
669
+ zipWith-++ f [] ys [] ys' = refl
670
+ zipWith-++ f (x ∷ xs) ys (x' ∷ xs') ys' =
671
+ cong (_ ∷_) (zipWith-++ f xs ys xs' ys')
672
+
648
673
------------------------------------------------------------------------
649
674
-- zip
650
675
@@ -1002,6 +1027,11 @@ zipWith-replicate₂ _⊕_ [] y = refl
1002
1027
zipWith-replicate₂ _⊕_ (x ∷ xs) y =
1003
1028
cong (x ⊕ y ∷_) (zipWith-replicate₂ _⊕_ xs y)
1004
1029
1030
+ toList-replicate : ∀ (n : ℕ) (x : A) →
1031
+ toList (replicate {n = n} a) ≡ List.replicate n a
1032
+ toList-replicate zero x = refl
1033
+ toList-replicate (suc n) x = cong (_ List.∷_) (toList-replicate n x)
1034
+
1005
1035
------------------------------------------------------------------------
1006
1036
-- tabulate
1007
1037
0 commit comments