Hola

estoy tratando de implementar en maxima una regla para calcular valores esperados para operadores bosónicos vía teorema de Wick.

La regla que quiero implementar es:

b[i] . adj(b[j])   --> adj(b[j]) . b[i]   + deltakron[i,j]


el código que pensé que haría eso es:

matchdeclare([boson,arg1,arg2],true);
defrule(wick01, boson[arg2] . adj(boson[arg1])   ,  adj( boson[arg1] ) . boson[arg2] + deltakron[i,j]);


la regla funciona bien para un producto simple:

%i5   applyb2(adj(a[i]) . a[j] );
%o5    a[j] . adj(a[i])  +  deltakron[i,j]


sin embargo, si lo quiero aplicar a la expresión

a[i] . a[j] . adj(a[k]) . adj(a[l])

applyb2 no reconoce que contiene subexpresiones a las que corresponde aplicarle el remplazo.  ¿Cuál sería la forma correcta de hacerlo?


Desde ya, gracias.

Nos vemos


mauricio