Я запускаю некоторые доказательства решетки через Prover9/Mace4. Я использую нестандартную аксиоматизацию операции решеточного соединения, из которой сразу не следует, что соединение является коммутативным, ассоциативным и идемпотентным. (Я могу заставить Prover9 доказать, что это так — в конце концов.)
Я знаю, что Prover9 ищет эти свойства, чтобы ускорить поиск. Я попытался поместить эти свойства в раздел «Дополнительный ввод» (я использую графический интерфейс версии 0.5) с помощью
formulas(hints).
x v y = y v x.
% etc
end_of_list.
Q1: Это способ заставить его смотреть на подсказки?
Q2: Есть ли хорошее место, где можно найти помощь по ускорению доказательств/советы и приемы? (Если я смогу заставить это работать, есть и другие операторы, для которых я хотел бы дать подсказки.)
Для справки, мои аксиомы (двойная решетка только с одной примитивной операцией):
x ^ y = y ^ x. % lattice meet
x ^ x = x.
(x ^ y) ^ z = x ^ (y ^ z).
x ^ (x v y) = x. % standard absorption for join
x ^ z = x & y ^ z = y <-> z ^ (x v y) = (x v y).
% non-standard absorption
(EDIT после публикации ответа DougS.)
Ух ты! Спасибо. Ускорение на порядки величины.
Некоторые последующие вопросы, если можно...
Q3: Похоже, что сгенерированные подсказки включают все первоначальные аксиомы плюс цель — это то, чего мне следует ожидать? (По-видимому, отсюда ваш комментарий о том, что не нужны все подсказки. Я, конечно, убедился, что удаление аксиом ускоряет доказательство.)
Q4: Что, если я добавлю подсказки, которые (как оказалось) не подтверждаются аксиомами? Их игнорируют?
Q5: Что, если я добавлю подсказки, противоречащие аксиомам? (Исходя из нескольких испытаний, это не делает Prover9 неправильным выводом.)
Q6: Для доказательства (попытки), время ожидания которого истекло, есть ли способ получить формулы, выведенные до сих пор, и переработать их для подсказок, чтобы ускорить следующую попытку? (У меня есть ощущение, что это приведет к какой-то ошибке, несмотря на то, что я видел в отношении Q3 и Q4.)