(** Definition *)

Inductive CPermutation : list A -> list A -> Prop :=
| cperm : forall l1 l2, CPermutation (l1 ++ l2) (l2 ++ l1).(** Definition *)

Inductive CPermutation : list A -> list A -> Prop :=
| cperm : forall l1 l2, CPermutation (l1 ++ l2) (l2 ++ l1).Instance CPermutation_Permutation : Proper (CPermutation ==> (@Permutation A)) id.

(* Specifications: *)
Theorem CPermutation_nil : forall l, CPermutation [] l -> l = [].
Theorem CPermutation_nil_cons : forall l a, ~ CPermutation [] (a :: l).
Theorem CPermutation_nil_app_cons : forall l1 l2 a, ~ CPermutation [] (l1 ++ a ::l2).
Lemma CPermutation_split : forall l1 l2, CPermutation l1 l2 <-> exists n, l2 = skipn n l1 ++ firstn n l1.
Theorem CPermutation_refl : forall l, CPermutation l l.