Odwracalna relacja długości drzewa

Próbuję pisać odwracalne relacje w „czystym” Prologu (nieis, cięte lub podobne rzeczy. Tak, to zadanie domowe) i muszę przyznać, że nie mam pojęcia, jak to zrobić. Nie widzę żadnego procesu tworzenia takiej rzeczy.

Otrzymujemy „unpure”, ale odwracalne relacje arytmetyczne (add, mult, equal, less, ...), których musimy użyć do stworzenia tych relacji.

Obecnie próbuję zrozumieć, jak tworzyć funkcje odwracalne, tworząc relacjętree(List,Tree) co jest prawdą, jeśliList jest listą liści drzewa binarnegoTree.

Aby osiągnąć coś takiego, próbuję stworzyćtree_size(Tree,N) relacja, która jest prawdziwa, gdyTree maN odchodzi. Oto moja naiwna, nieodwracalna relacja:

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).

Mogę wykonać zapytanietree_len(some tree, N), ale nie powiedzmytree_len(X,3), więc nie jest odwracalne. Do tej pory wypróbowałem kilka rzeczy, ale muszę przyznać, że czuję się zniechęcony, ponieważ nie wiem, gdzie i czego szukać. Czy jest na to sposób?

questionAnswers(2)

yourAnswerToTheQuestion