End Permutation_alt.
#[global]
Instance Permutation_list_sum : Proper (@Permutation nat ==> eq) list_sum | 10.
#[global]
Instance Permutation_list_max : Proper (@Permutation nat ==> eq) list_max | 10.
Section Permutation_transp.
Variable A:Type.
(** Permutation definition based on transpositions for induction with fixed length *)
Inductive Permutation_transp : list A -> list A -> Prop :=
| perm_t_refl : forall l, Permutation_transp l l
| perm_t_swap : forall x y l1 l2, Permutation_transp (l1 ++ y :: x :: l2) (l1 ++ x :: y :: l2)
| perm_t_trans l l' l'' :
Permutation_transp l l' -> Permutation_transp l' l'' -> Permutation_transp l l''.
Instance Permutation_transp_sym : Symmetric Permutation_transp.
Global Instance Permutation_transp_equiv : Equivalence Permutation_transp | 100.

Lemma Permutation_Permutation_transp : forall l1 l2 : list A,
Permutation l1 l2 <-> Permutation_transp l1 l2.