Reversible Baumlängenbeziehung

Ich versuche, reversible Relationen in "reinem" Prolog zu schreiben (Nris, schneiden oder ähnliches Zeug. Ja, es sind Hausaufgaben), und ich muss zugeben, dass ich keine Ahnung habe, wie. Ich sehe keinen Prozess, um so etwas zu erschaffen.

Wir erhalten "unreine", aber umkehrbare arithmetische Beziehungen (add, mult, equal, less, ...), die wir verwenden müssen, um diese Beziehungen zu erstellen.

Im Moment versuche ich zu verstehen, wie man reversible Funktionen durch Erstellen der Beziehung erzeugttree(List,Tree) was wahr ist, wennList ist die Liste der Blätter des binären BaumesTree.

Um so etwas zu erreichen versuche ich das zu schaffentree_size(Tree,N) Beziehung, die wahr ist, wennTree hatN Blätter. Hier ist meine naive, unumkehrbare Beziehung:

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

Ich kann die Abfrage machentree_len(some tree, N), aber nicht sagen,tree_len(X,3)Es ist also nicht umkehrbar. Bisher habe ich ein paar Dinge ausprobiert, aber ich muss zugeben, dass ich mich entmutigt fühle, da ich nicht weiß, wo und wonach ich suchen soll. Gibt es tatsächlich eine Möglichkeit, dies zu tun?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage