Обратимое отношение длины дерева

пытаюсь написать обратимые отношения вчистый» Пролог (нетis, вырезать или аналогичные вещи. Да, это'с домашней работой), и я должен признать, что я неПонятия не имею, как. Я неНе вижу никакого процесса, чтобы создать такую вещь.

Нам данонедостаточная чистота» но обратимые арифметические отношения (сложение, многовариантность, равенство, меньше, ...), которые мы должны использовать для создания этих отношений.

Прямо сейчас яЯ пытаюсь понять, как создавать обратимые функции путем создания отношенияtree(List,Tree) что верно, еслиList список листьев двоичного дереваTree

Чтобы добиться такого, яя пытаюсь создатьtree_size(Tree,N) отношение, которое верно, когдаTree имеетN листья. Вот мой наивныйве, необратимое отношение:

tree_len(n(_,leaf,leaf),1).
tree_len(n(op,G,D),N) :-
    tree_len(G,TG),
    tree_len(D,TD),
    add(TG,TD,N).

Я могу сделать запросtree_len(some tree, N)но не, скажем,tree_len(X,3), так что'не обратимо. Пока яЯ попробовал несколько вещей, но я должен признать, что я чувствую себя обескураженным, потому что я не знаю, где и что искать. Есть ли на самом деле способ сделать это?

Ответы на вопрос(2)

Ваш ответ на вопрос