Я прочитал руководство от swi-prolog:
union(+Set1, +Set2, -Set3)
что означает + и - означает?
Они указывают, должен ли каждый аргумент создаваться при вводе или создается при возврате из этого предиката.
Для предиката объединения вы должны вызывать его с экземплярами Set1 и Set2, а по возвращении Set3 будет создан экземпляр.