Relação de comprimento de árvore reversível

Estou tentando escrever relações reversíveis em Prolog "puro" (nãois, cortar ou coisas semelhantes. Sim, é lição de casa), e devo admitir que não tenho idéia de como. Eu não vejo nenhum processo para criar uma coisa dessas.

Nós recebemos relações aritméticas "não-puras" mas reversíveis (add, mult, equal, less, ...) que devemos usar para criar essas relações.

No momento, estou tentando entender como criar funções reversíveis criando a relaçãotree(List,Tree) o que é verdade seList é a lista das folhas da árvore bináriaTree.

Para conseguir isso, estou tentando criartree_size(Tree,N) relação que é verdade quandoTree temN sai. Aqui está minha relação ingênua e irreversível:

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

Eu posso fazer a consultatree_len(some tree, N)mas não digamostree_len(X,3), então não é reversível. Até agora eu tentei algumas coisas, mas devo admitir que me sinto desanimada, pois não sei onde e o que procurar. Existe realmente uma maneira de fazer isso?

questionAnswers(2)

yourAnswerToTheQuestion