anchor.diff:                      end
                   end, {[], false, [], [], [], [], dict:new(), []}, TraceLines),
   
  -                % debug("PrefixMessageTypes: ~p~n", [PrefixMessageTypes]),
  -                % debug("OmittedMessageTypes: ~p~n", [OmittedMessageTypes]),
  -                % debug("ConditionalMessageTypes: ~p~n", [ConditionalMessageTypes]),
  +                debug("PrefixMessageTypes: ~p~n", [PrefixMessageTypes]),
  +                debug("OmittedMessageTypes: ~p~n", [OmittedMessageTypes]),
  +                debug("ConditionalMessageTypes: ~p~n", [ConditionalMessageTypes]),
                   % debug("length(MessageTypes): ~p~n", [length(PrefixMessageTypes ++ OmittedMessageTypes ++ ConditionalMessageTypes)]),
   
                   %% Is this schedule valid for these omissions?
  
positive.code: 
  %% @private
  classify_schedule(_N, CausalityAnnotations, PrefixSchedule, _OmittedSchedule, ConditionalSchedule) ->
      DerivedSchedule = PrefixSchedule ++ ConditionalSchedule,
  
      Classification = lists:foldl(fun({Type, Preconditions}, Dict0) ->
  
negative.code:             case Precondition of 
                  {PreconditionType, N} ->
                      Num = length(lists:filter(fun(T) -> T =:= PreconditionType end, DerivedSchedule)),
                      debug("=> * found ~p messages of type ~p~n", [Num, PreconditionType]),
                      Acc andalso Num >= N;
                  true ->
                      debug("=> * found true precondition", []),
                      Acc andalso true
              end
          end, true, Preconditions),
  
          debug("=> type: ~p, preconditions: ~p~n", [Type, Result]),
          dict:store(Type, Result, Dict0)
      end, dict:new(), dict:to_list(CausalityAnnotations)),
  
      debug("classification: ~p~n", [dict:to_list(Classification)]),
  
      Classification.
  
  %% @private
  classify_schedule(_N, CausalityAnnotations, CandidateTrace0) ->
      % debug("classifying schedule using causality annotations: ~p", [dict:to_list(CausalityAnnotations)]),
  
      CandidateTrace = message_types(CandidateTrace0),
  
      Classification = lists:foldl(fun({Type, Preconditions}, Dict0) ->
          Result = lists:foldl(fun(Precondition, Acc) ->
              % debug("checking precondition: ~p", [Precondition]),
  
              case Precondition of 
                  {{_, PreconditionType}, N} ->
                      Num = length(lists:filter(fun(T) -> T =:= {forward_message, PreconditionType} end, CandidateTrace)),
                      % debug("=> * found ~p messages of type ~p~n", [Num, PreconditionType]),
                      Acc andalso Num >= N;
                  true ->
                      % debug("=> * found true precondition", []),
                      Acc andalso true
              end
          end, true, Preconditions),
  