matchdeclare(xx,true); defrule(tranorm,transpose(norm2(xx)),norm2(xx)); apply1(transpose(norm2(x.y)),tranorm ); -> transpose(norm2(x.y)) no change But defrule(tranorm3,mytranspose(norm2(xx)),norm2(xx)) apply1(mytranspose(norm2(x.y)),tranorm3) -> norm2(x.y)