def(b,[key,count,m,n,l,r]).

:- op(700,xfx, (:=)).

goal_expansion(b(A -  B,  D,E),Y is X - B) :- slot(b,A,X,Y,D,E).
goal_expansion(b(A +  B,  D,E),Y is X + B) :- slot(b,A,X,Y,D,E).
goal_expansion(b(A *  B,  D,E),Y is X * B) :- slot(b,A,X,Y,D,E).
goal_expansion(b(A /  B,  D,E),Y is X / B) :- slot(b,A,X,Y,D,E).
goal_expansion(b(A =  B,  D,D),      true) :- slot(b,A,B,B,D,D).
goal_expansion(b(A := B,  D,E),      true) :- slot(b,A,_,B,D,E).
goal_expansion(b([X],     D,E),      b(X,D,E)).
goal_expansion(b([X,Y|Z], D,F),      (b(X,D,E), b([Y|Z],E,F))).

newb(K,B) :- b([key=K,count=0,m=0,n=0],B,B).

addb(K) --> b(key,K1), {compare(Op,K,K1)}, addb1(Op,K).
   
addb1(=,_) --> b(count+1).
t(K,C0,M,N,L,R),
%          t(K,C, M,N,L,R)) :- C is C0 + 1.
%addt(<,K,t(K1,C0,M,
