Relación reversible de la longitud del árbol.

Estoy tratando de escribir relaciones reversibles en Prólogo "puro" (nois, corte, o cosas similares. Sí, es la tarea), y debo admitir que no tengo ni idea de cómo. No veo ningún proceso para crear tal cosa.

Nos dan "puras" pero relaciones aritméticas reversibles (sumar, mult, iguales, menos, ...) que debemos usar para crear esas relaciones.

En este momento estoy tratando de entender cómo crear funciones reversibles creando la relacióntree(List,Tree) lo cual es cierto siList Es la lista de las hojas del árbol binario.Tree.

Para lograr tal cosa estoy tratando de crear eltree_size(Tree,N) relación que es verdadera cuandoTree tieneN hojas. Aquí está mi relación ingenua, irreversible:

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

Puedo hacer la consultatree_len(some tree, N)pero no digamostree_len(X,3), por lo que no es reversible. Hasta ahora he intentado algunas cosas, pero debo admitir que me siento desanimado porque no sé dónde y qué buscar. ¿Hay realmente una manera de hacer esto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta