Как проверить анализ переменных SWI-Prolog
Есть ли какая-нибудь утилита для проверки анализа переменных предложения до того, как оно будет утверждено во время консультации. Я читал, что SWI-Prolog выполняет некоторый анализ переменных, но я новичок в этом. Интерес к этому анализу переменных вызван проблемой проверки возникновения . Доступный анализ переменных:
свежее (Bool)
одноэлементное (Bool)
имя (Name)
https://www.swi-prolog.org/pldoc/doc_for?object=var_property/2
Возможно, это свойство меняется от промежуточной цели к промежуточной цели. Таким образом, нам, возможно, потребуется перечислить цели предложения, и для каждого предложения отобразить текущее состояние анализа переменных или, возможно, более компактно только дельту состояния.
Пример из алгоритма Беккерта и Посегги. У вызова member / 2
есть A и B свежие, у copy_term / 2 есть C и D свежие:
prove(L, V, N, M) :- N > 0, H is N-1,
member(exist(A,B), L),
copy_term(exist(A,B)-V,exist(C,D)-V),
prove([D|L], [C|V], H, M).
Кто-нибудь уже разработал такой инструмент для SWI-Prolog?
Как работает анализ дизъюнкции?