Definition two_lists_rect x y: P x y := two_lists_rect_pre (x, y).Instance Reflexive_Permutation T: Reflexive Permutation := @Permutation_refl T.Instance Reflexive_Symmetric T: Symmetric Permutation := @Permutation_sym T.Instance Reflexive_Transitive T: Transitive Permutation := @perm_trans T.

(* Specifications: *)
Lemma Permutation_concatMap T U (f g: T -> list U) l: (forall x, In x l -> Permutation (f x) (g x)) -> Permutation (concat (map f l)) (concat (map g l)).
Lemma Permutation_concat_map_app T A (f g: A -> list T) l: Permutation (concat (map (fun x => f x ++ g x) l)) (concat (map f l ++ map g l)).
Lemma concat_product T U V (f: U -> T -> list V) l l': Permutation (concat (map (fun x => concat (map (fun y => f y x) l')) l)) (concat (map (fun x => concat (map (f x) l)) l')).