Section AllPairs.
Variables (S T R : Type) (f : S -> T -> R).
Implicit Types (s : seq S) (t : seq T).
Definition allpairs s t := foldr (fun x => cat (map (f x) t)) [::] s.

Lemma allpairs_catr R (f : S -> T -> R) s t1 t2 :
allpairs f s (t1 ++ t2) =i allpairs f s t1 ++ allpairs f s t2.