Je pensais au même problème et j'ai fini par écrire un petit programme Prolog pour générer les permutations, et j'ai "découvert" la relation avec les nombres catalans, puis j'ai trouvé votre question. Ce n'est donc pas vraiment une réponse à votre question mais voici le programme Prolog :
% Generate permutation counts
count_pushpop(N-K) :-
length(_, N),
findall(Seq, pushpop(N, Seq), Seqs),
length(Seqs, K).
% Create an integer sequence from 1 to N
% and permutate it using all possible push-pop
% operations starting with an empty stack.
pushpop(N, Seq) :-
numlist(1, N, List),
pushpop(List, [], Seq).
% Generate all the possible ways a list
% of items can be pushed into a stack
% and poped out of it.
pushpop([], [], []).
pushpop([H | List], Stack, Seq) :-
pushpop(List, [H | Stack], Seq).
pushpop(List, [H | Stack], [H | Seq]) :-
pushpop(List, Stack, Seq).
Preuve que tous les n!
permutations sont possibles :
?- findall(Seq, pushpop(3, Seq), Seqs).
Seqs = [[3, 2, 1], [2, 3, 1], [2, 1, 3], [1, 3, 2], [1, 2, 3]].
Preuve qu'il génère des nombres catalans (ou ce serait être une preuve si ce n'était pas pour le débordement de la pile ;)) :
?- count_pushpop(N-K).
N = K, K = 0 ;
N = K, K = 1 ;
N = K, K = 2 ;
N = 3,
K = 5 ;
N = 4,
K = 14 ;
N = 5,
K = 42 ;
N = 6,
K = 132 ;
N = 7,
K = 429 ;
N = 8,
K = 1430 ;
N = 9,
K = 4862 ;
N = 10,
K = 16796 ;
N = 11,
K = 58786 ;
N = 12,
K = 208012 ;
ERROR: Out of global stack