@@ -255,6 +255,30 @@ module _ (A : Set a) where
255
255
; ε-homo = refl
256
256
}
257
257
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
+
258
282
------------------------------------------------------------------------
259
283
-- alignWith
260
284
@@ -462,6 +486,10 @@ foldr-∷ʳ : ∀ (f : A → B → B) x y ys →
462
486
foldr-∷ʳ f x y [] = refl
463
487
foldr-∷ʳ f x y (z ∷ ys) = cong (f z) (foldr-∷ʳ f x y ys)
464
488
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
+
465
493
-- Interaction with predicates
466
494
467
495
module _ {P : Pred A p} {f : A → A → A} where
@@ -504,6 +532,10 @@ foldl-∷ʳ : ∀ (f : A → B → A) x y ys →
504
532
foldl-∷ʳ f x y [] = refl
505
533
foldl-∷ʳ f x y (z ∷ ys) = foldl-∷ʳ f (f x z) y ys
506
534
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
+
507
539
------------------------------------------------------------------------
508
540
-- concat
509
541
0 commit comments