FacForm should accept \( (-2)\cdot (-x+1)\cdot (x+1)\), EqualComAss will not.
Of course you could use something like
is (safe_op(ans1)="*")
to determine if ans1
is a product and length(args(ans1))
to count the factors. But you would have to deal with many different cases if you want to implement this in your feedback variables (\(2\cdot \left(\frac 1 2\right) \cdot (2 x^2 - 2)\) is a product with 3 factors, too.). Depending on what you want, it's probably easier and more robust to use EqualComAss to first check on \( 2\cdot (x-1)\cdot (x+1)\) and if false also on \( (-2)\cdot (-x+1)\cdot (x+1)\).
Stephan