Prover9 - Prover9

Prover9 - это автоматическое средство доказательства теорем для логики первого порядка и эквациональной логики, разработанное Уильямом МакКьюном .

Описание

Prover9 является преемником средства доказательства теорем Otter, также разработанного Уильямом МакКьюном . Prover9 известен тем, что дает относительно удобочитаемые доказательства и имеет мощную стратегию подсказок.

Prover9 намеренно объединен с Mace4 , который ищет конечные модели и контрпримеры. Оба могут быть запущены одновременно с одного и того же входа, при этом Prover9 пытается найти доказательство, а Mace4 пытается найти (опровергающий) контрпример. Prover9, Mace4 и многие другие инструменты построены на базовой библиотеке LADR («Библиотека для автоматизированного исследования дедукции»), чтобы упростить реализацию. Полученные доказательства могут быть перепроверены Ivy, инструментом проверки правок, который был отдельно проверен с помощью ACL2 .

В июле 2006 года язык ввода LADR / Prover9 / Mace4 претерпел серьезные изменения (что также отличает его от Otter). Ключевое различие между «предложениями» и «формулами» полностью исчезло; «формулы» теперь могут иметь свободные переменные ; и «пункты» теперь являются подмножеством «формул». Prover9 / Mace4 также поддерживает формулу «целевого» типа, которая автоматически отменяется для доказательства. Prover9 пытается автоматически сгенерировать доказательство по умолчанию; Напротив, автоматический режим Otter должен быть явно установлен.

Prover9 находился в стадии активной разработки, с выпуском новых выпусков каждый месяц или раз в два месяца до 2009 года. Prover9 - это бесплатное программное обеспечение и, следовательно, программное обеспечение с открытым исходным кодом ; он выпущен под лицензией GPL версии 2 или новее.

Примеры

Сократ

Традиционные выражения «все люди смертны», «Сократ - человек», доказательство того, что «Сократ смертен», можно выразить таким образом в Prover9:

formulas(assumptions).
  man(x) -> mortal(x).   % open formula with free variable x
  man(socrates).
end_of_list.
formulas(goals).
  mortal(socrates).
end_of_list.

Это будет автоматически преобразовано в форму клауза (которую также принимает Prover9):

formulas(sos).
  -man(x) | mortal(x).
  man(socrates).
  -mortal(socrates).
end_of_list.

Квадратный корень из 2 иррационально

Доказательство иррациональности квадратного корня из 2 можно выразить так:

formulas(assumptions).
  1*x = x.                            % identity
  x*y = y*x.                          % commutativity
  x*(y*z) = (x*y)*z.                  % associativity
  ( x*y = x*z ) -> y = z.             % cancellation (0 is not allowed, so x!=0).
  %
  % Now let's define divides(x,y): x divides y.
  %   Example: divides(2,6) is true because 2*3=6.
  %
  divides(x,y) <-> (exists z x*z = y).
  divides(2,x*x) -> divides(2,x).     % If 2 divides x*x, it divides x.
  a*a = 2*(b*b).                      % a/b = sqrt(2), so a^2 = 2 * b^2.
  (x != 1) ->  -(divides(x,a) &
                 divides(x,b)).       % a/b is in lowest terms
  2 != 1.                             % Original author almost forgot this.
end_of_list.

Рекомендации

Внешние ссылки