:- use_module(library(clpfd)).

%Une liste est soit vide
%	soit un élément suivi d'une liste

% Concat
%  append existe deja btw
% 

% l1 vide
concat([],L2,L2).

%liste avec au moins un élément
concat([X1|L1],L2,[X1|NL]) :-
    concat(L1,L2,NL).


%insertion a toutes les positions
%	select existe deja

%on insere en tete
insertion(E,L1,[E|L1]).

%on insere n'importe ou sauf en tête
insertion(E,[X1|L1],[X1|L2]):-
    insertion(E,L1,L2).

%permutation
%vide
my_permutation([],[]).

%non vide

my_permutation([X|L],Perm):-
   	my_permutation(L,PermL),
    insertion(X,PermL,Perm).

   