:- use_module(library(plammar/operators)).

'Merge of disjoint lists' :-
  Old = [op(400,fx,a), op(400,fx,b)],
  New = [op(600,fx,c), op(600,fx,d)],
  merge_operators(Old, New, Merged0),
  append(Old, New, Merged1),
  permutation(Merged0, Merged1), !.

'Merge of lists with shared operators' :-
  Old = [op(400,fx,a), op(400,fx,b)],
  New = [op(400,fx,a), op(600,fx,d)],
  merge_operators(Old, New, Merged0),
  Merged1 = [op(400,fx,a), op(400,fx,b), op(600,fx,d)],
  permutation(Merged0, Merged1), !.

'Duplicates in new list are removed' :-
  Old = [],
  New = [op(400,fx,a), op(400,fx,a)],
  merge_operators(Old, New, Merged0),
  Merged1 = [op(400,fx,a)],
  Merged1 = Merged0, !.

'Can not merge-in a list with self-conflicting operators' :-
  Old = [],
  New = [op(400,fx,a), op(600,fx,a)],
  \+ merge_operators(Old, New, _), !.
