% Pol. Pref. avec l'arbre de dérivation et l'arbre d'expression

rS(A, Z, pref1(Op, Ag, Ad)) :- rOp(A, B, Op), rS(B, C, Ag), rS(C, Z, Ad).
rS(A, B, pref2(Cte)) :- rCte(A, B, Cte).
rS(A, B, pref3(Var)) :- rVbl(A, B, Var).
rOp([+|Z], Z, (+)).
rOp([*|Z], Z, (*)).
rCte([1|Z], Z, 1).
rCte([2|Z], Z, 2).
rVbl([x|Z], Z, x).
rVbl([y|Z], Z, y).

%rS([+,*,2,x,1], [], X).
%rS([*,+,x,*,y,+,x,2,+,y,1], [], X).

pref2exp(pref1(Op, G, D), E) :- pref2exp(G, Eg), pref2exp(D, Ed), E =.. [Op, Eg, Ed].
pref2exp(pref2(V), V).
pref2exp(pref3(V), V).

rTop(A, E) :- rS(A, [], D), pref2exp(D, E).