anchor.diff:      {T,mv_and(L),mv_and(R)};
   mv_and(Q) ->
       Q.
  +
  +and_subs({or_q,L,R}) ->
  +    and_subs(L) ++ and_subs(R);
  +and_subs(Q) ->
  +    [Q].
  +
  +flatten({and_q,L,R}) ->
  +    lists:flatten([flatten(L),flatten(R)]);
  +flatten(Q) ->
  +    [Q].
   
   %%----------------------------------------------------------------------------
   %% PropErties
  
positive.code:     Q;
  dnf({Q,D}) ->
      dnf(mv_not(Q), D).
  
  %%----------------------------------------------------------------------------
  %% Internal functions
  
negative.code: 
  dnf(Q, 1) ->
      Q;
  dnf(Q, D) ->
      dnf(mv_and(Q), D-1).
  
  mv_not({T,L,R}) ->
  