/*
 * @(#)$Id: term_cancel,v 1.1.2.1 1999/06/08 14:47:08 rjb Exp $
 *
 * $Log: term_cancel,v $
 * Revision 1.1.2.1  1999/06/08 14:47:08  rjb
 * Extensions and modifications to support hardware verification.
 *
 */

/* term_cancel is a method to cancel-out equal terms on each side of
 * an equation.
 */

method(term_cancel(NG),
       H==>G,
       [natural_type(Nat,Zero,_),
        matrix(V,LS = RS in Nat,G),
        \+ (LS=Zero v RS=Zero),                  % 17-sep-96
        only_sum(LS,LstPlusL),
        only_sum(RS,LstPlusR),
        cancel_eq(LstPlusL,LstPlusR,OtherL,OtherR),
        length(LstPlusL,X),
        length(OtherL,Y),
        X > Y
       ],
       [putPlus(OtherL,Left),
        putPlus(OtherR,Right),
        matrix(V,Left=Right in Nat,NG)
       ],
       [H==>NG],
       term_cancel(NG)).
