Skip to content

Commit f076d59

Browse files
authored
Proofs take/drop/head -map-commute added to Data.List.Properties (#1986)
1 parent 2aa1a76 commit f076d59

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -2200,6 +2200,10 @@ Other minor changes
22002200
22012201
length-isMagmaHomomorphism : (A : Set a) → IsMagmaHomomorphism (++-rawMagma A) +-rawMagma length
22022202
length-isMonoidHomomorphism : (A : Set a) → IsMonoidHomomorphism (++-[]-rawMonoid A) +-0-rawMonoid length
2203+
2204+
take-map : take n (map f xs) ≡ map f (take n xs)
2205+
drop-map : drop n (map f xs) ≡ map f (drop n xs)
2206+
head-map : head (map f xs) ≡ Maybe.map f (head xs)
22032207
22042208
take-suc : (o : Fin (length xs)) → let m = toℕ o in take (suc m) xs ≡ take m xs ∷ʳ lookup xs o
22052209
take-suc-tabulate : (f : Fin n → A) (o : Fin n) → let m = toℕ o in take (suc m) (tabulate f) ≡ take m (tabulate f) ∷ʳ f o

src/Data/List/Properties.agda

+25-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ open import Data.List.Base as List
2121
open import Data.List.Membership.Propositional using (_∈_)
2222
open import Data.List.Relation.Unary.All using (All; []; _∷_)
2323
open import Data.List.Relation.Unary.Any using (Any; here; there)
24-
open import Data.Maybe.Base using (Maybe; just; nothing)
24+
open import Data.Maybe.Base as Maybe using (Maybe; just; nothing)
2525
open import Data.Nat.Base
2626
open import Data.Nat.Divisibility
2727
open import Data.Nat.Properties
@@ -44,6 +44,7 @@ open import Relation.Nullary.Decidable as Decidable using (isYes; map′; ⌊_
4444
open import Relation.Unary using (Pred; Decidable; ∁)
4545
open import Relation.Unary.Properties using (∁?)
4646

47+
4748
open ≡-Reasoning
4849

4950
private
@@ -761,6 +762,12 @@ length-take zero xs = refl
761762
length-take (suc n) [] = refl
762763
length-take (suc n) (x ∷ xs) = cong suc (length-take n xs)
763764

765+
-- Take commutes with map.
766+
take-map : {f : A B} (n : ℕ) xs take n (map f xs) ≡ map f (take n xs)
767+
take-map zero xs = refl
768+
take-map (suc s) [] = refl
769+
take-map (suc s) (a ∷ xs) = cong (_ ∷_) (take-map s xs)
770+
764771
take-suc : (xs : List A) (i : Fin (length xs)) let m = toℕ i in
765772
take (suc m) xs ≡ take m xs ∷ʳ lookup xs i
766773
take-suc (x ∷ xs) zero = refl
@@ -791,12 +798,17 @@ length-drop zero xs = refl
791798
length-drop (suc n) [] = refl
792799
length-drop (suc n) (x ∷ xs) = length-drop n xs
793800

801+
-- Drop commutes with map.
802+
drop-map : {f : A B} (n : ℕ) xs drop n (map f xs) ≡ map f (drop n xs)
803+
drop-map zero xs = refl
804+
drop-map (suc n) [] = refl
805+
drop-map (suc n) (a ∷ xs) = drop-map n xs
806+
794807
-- Dropping from an empty list does nothing.
795808
drop-[] : m drop {A = A} m [] ≡ []
796809
drop-[] zero = refl
797810
drop-[] (suc m) = refl
798811

799-
800812
take++drop : n (xs : List A) take n xs ++ drop n xs ≡ xs
801813
take++drop zero xs = refl
802814
take++drop (suc n) [] = refl
@@ -1118,6 +1130,17 @@ module _ {x y : A} where
11181130

11191131

11201132

1133+
------------------------------------------------------------------------
1134+
-- head
1135+
1136+
-- 'commute' List.head and List.map to obtain a Maybe.map and List.head.
1137+
head-map : {f : A B} xs head (map f xs) ≡ Maybe.map f (head xs)
1138+
head-map [] = refl
1139+
head-map (_ ∷ _) = refl
1140+
1141+
1142+
1143+
11211144
------------------------------------------------------------------------
11221145
-- DEPRECATED
11231146
------------------------------------------------------------------------

0 commit comments

Comments
 (0)