Skip to content

Commit 8d1d29d

Browse files
Add cartesianProductWith proofs to Data.List.Properties (#1885)
1 parent 7c9db12 commit 8d1d29d

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

CHANGELOG.md

+10
Original file line numberDiff line numberDiff line change
@@ -2545,6 +2545,16 @@ Other minor changes
25452545
flip′ : (A → B → C) → (B → A → C)
25462546
```
25472547

2548+
* Added new proofs to `Data.List.Properties`
2549+
```agda
2550+
cartesianProductWith-zeroˡ : cartesianProductWith f [] ys ≡ []
2551+
cartesianProductWith-zeroʳ : cartesianProductWith f xs [] ≡ []
2552+
cartesianProductWith-distribʳ-++ : cartesianProductWith f (xs ++ ys) zs ≡
2553+
cartesianProductWith f xs zs ++ cartesianProductWith f ys zs
2554+
foldr-map : foldr f x (map g xs) ≡ foldr (g -⟨ f ∣) x xs
2555+
foldl-map : foldl f x (map g xs) ≡ foldl (∣ f ⟩- g) x xs
2556+
```
2557+
25482558
NonZero/Positive/Negative changes
25492559
---------------------------------
25502560

src/Data/List/Properties.agda

+32
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,30 @@ module _ (A : Set a) where
255255
; ε-homo = refl
256256
}
257257

258+
------------------------------------------------------------------------
259+
-- cartesianProductWith
260+
261+
module _ (f : A B C) where
262+
263+
private
264+
prod = cartesianProductWith f
265+
266+
cartesianProductWith-zeroˡ : ys prod [] ys ≡ []
267+
cartesianProductWith-zeroˡ _ = refl
268+
269+
cartesianProductWith-zeroʳ : xs prod xs [] ≡ []
270+
cartesianProductWith-zeroʳ [] = refl
271+
cartesianProductWith-zeroʳ (x ∷ xs) = cartesianProductWith-zeroʳ xs
272+
273+
cartesianProductWith-distribʳ-++ : xs ys zs prod (xs ++ ys) zs ≡ prod xs zs ++ prod ys zs
274+
cartesianProductWith-distribʳ-++ [] ys zs = refl
275+
cartesianProductWith-distribʳ-++ (x ∷ xs) ys zs = begin
276+
prod (x ∷ xs ++ ys) zs ≡⟨⟩
277+
map (f x) zs ++ prod (xs ++ ys) zs ≡⟨ cong (map (f x) zs ++_) (cartesianProductWith-distribʳ-++ xs ys zs) ⟩
278+
map (f x) zs ++ prod xs zs ++ prod ys zs ≡˘⟨ ++-assoc (map (f x) zs) (prod xs zs) (prod ys zs) ⟩
279+
(map (f x) zs ++ prod xs zs) ++ prod ys zs ≡⟨⟩
280+
prod (x ∷ xs) zs ++ prod ys zs ∎
281+
258282
------------------------------------------------------------------------
259283
-- alignWith
260284

@@ -462,6 +486,10 @@ foldr-∷ʳ : ∀ (f : A → B → B) x y ys →
462486
foldr-∷ʳ f x y [] = refl
463487
foldr-∷ʳ f x y (z ∷ ys) = cong (f z) (foldr-∷ʳ f x y ys)
464488

489+
foldr-map : (f : A B B) (g : C A) x xs foldr f x (map g xs) ≡ foldr (g -⟨ f ∣) x xs
490+
foldr-map f g x [] = refl
491+
foldr-map f g x (y ∷ xs) = cong (f (g y)) (foldr-map f g x xs)
492+
465493
-- Interaction with predicates
466494

467495
module _ {P : Pred A p} {f : A A A} where
@@ -504,6 +532,10 @@ foldl-∷ʳ : ∀ (f : A → B → A) x y ys →
504532
foldl-∷ʳ f x y [] = refl
505533
foldl-∷ʳ f x y (z ∷ ys) = foldl-∷ʳ f (f x z) y ys
506534

535+
foldl-map : (f : A B A) (g : C B) x xs foldl f x (map g xs) ≡ foldl (∣ f ⟩- g) x xs
536+
foldl-map f g x [] = refl
537+
foldl-map f g x (y ∷ xs) = foldl-map f g (f x (g y)) xs
538+
507539
------------------------------------------------------------------------
508540
-- concat
509541

0 commit comments

Comments
 (0)