Вот так, понятно, работает:
(%i199) matchdeclare(any_exp,true);
(%o199) done
(%i200) let([any_exp^2,p0(any_exp,any_exp)],oper);
2
(%o200) any_exp --> p0(any_exp, any_exp)
(%i203) exp0:p0(x^2,y);
2
(%o203) p0(x , y)
(%i204) letsimp(args(exp0),oper);
(%o204) [p0(x, x), y]
Однако почему letsimp не лезет в аргументы?
(%i205) letsimp(exp0,oper);
2
(%o205) p0(x , y)
Это баг или фича?