Логика предикатов: как вы самостоятельно проверяете логическую структуру своих собственных аргументов?

В логике высказываний есть таблицы истинности. Таким образом, вы можете проверить, является ли логическая структура вашего аргумента неправильной сама по себе, но является ли она такой, какой вы ее задумали.

В логике предикатов я не видел ни ссылок на таблицы истинности, ни какого-либо использования (буквального использования) таблиц истинности при поиске примеров, где таблицы истинности используются в PL.

Было бы неплохо проверить логическую структуру моих собственных аргументов, так как у меня не всегда будет кто-то, кто будет проверять мою собственную работу. Я планирую использовать свои навыки в логике, но мне нужен верный способ убедиться, что моя форма верна :)

Есть известные правила вывода .
Существует несколько пакетов программного обеспечения для проверки доказательств, которые доступны бесплатно в Интернете.
Начав с набора аксиом, вы можете провести доказательство в некоторой системе вывода в стиле Гильберта . На самом деле «естественные» доказательства (те, которые мы используем ежедневно) можно рассматривать как инструкции для построения формального вывода в гильбертовом исчислении...

Ответы (1)

Таблиц истинности недостаточно для захвата логики первого порядка (с квантификаторами), поэтому вместо этого мы используем правила вывода. Каждое правило вывода выбрано так, чтобы оно было верным, а это означает, что если вы начнете с истинных утверждений и будете использовать правило, вы получите только истинные утверждения. Мы говорим, что эти правила сохраняют истину. Если вы выбираете достаточно тщательно, вы можете сделать так, чтобы правила не только сохраняли истинность, но и позволяли вам вывести каждое (правильно построенное) утверждение, которое обязательно истинно (во всех ситуациях).

То, что вы, вероятно, ищете (а именно, практический способ строго проверить логическую обоснованность ваших аргументов), — это естественная дедукция. Существует множество различных стилей, наиболее интуитивно понятным из которых является стиль Fitch , который отмечает подконтексты с помощью отступов или соответствующих визуальных разграничений. Следующая система использует отступы и, на мой взгляд, наиболее точно следует интуиции.


Контексты

Каждая строка является либо заголовком, либо оператором. Мы будем ставить двоеточие после каждого заголовка и точку после каждого утверждения. Каждый заголовок определяет некоторый подконтекст (содержащийся в текущем контексте), а строки, управляемые этим заголовком, обозначаются отступом. Полный контекст каждой строки определяется всеми управляющими ею заголовками (т. е. всеми ближайшими заголовками над ней на каждом более низком уровне отступа).

Например, вложенный анализ случаев может выглядеть так:

Если  А :   Если  Б :   . . . Если  ¬ Б :   . . . Если  ¬ А :   . . .

И рассуждения о произвольном члене коллекции С будет выглядеть так:

Данный  Икс е С :   . . .

Обратите внимание, что то, что указано в одном контексте, может быть недействительным в другом контексте. Как только вы поймете принцип, лежащий в основе контекстов и отступов, следующие правила станут очень естественными. Также обратите внимание, что для логики первого порядка нужны только эти два типа заголовков контекста (для условных подконтекстов и универсальных подконтекстов соответственно).

Синтаксические правила

Утверждение должно быть атомарным (неделимым) предложением или составным утверждением, сформированным обычным образом с использованием логических операций или кванторов, с тем ограничением, что каждая переменная, связанная квантором, еще не используется для ссылки на какой-либо объект в текущем контексте. , и что нет вложенных квантификаторов, связывающих одну и ту же переменную.

Правила естественного вычета

Каждое правило вывода имеет вид:

Икс Д

это означает, что если последние строки, которые вы написали, совпадают с «X», вы можете написать «Y» сразу после этого на том же уровне отступа. Каждое применение правила вывода также привязано к текущему контексту, а именно к контексту «X». Мы не будем постоянно упоминать «текущий контекст».


Логические операции

Возьмите любые заявления А , Б , С (в текущем контексте).

restate : если мы что-то доказываем, мы можем подтвердить это снова в том же контексте.

А . . . . А .

Обратите внимание, что " . . . " обозначают любое количество строк, которые находятся не менее чем на изображенном уровне отступа. В приведенном выше правиле это означает, что все строки, написанные с момента более раннего написания " А . " должен быть в том же контексте (или в каком-то подконтексте).

На практике мы никогда не пишем одну и ту же строку дважды. Чтобы указать, что мы можем опустить строку в доказательстве, я отмечу ее квадратными скобками следующим образом:

А . . . . [ А . ]

⇒sub       ⇒restate     (мы можем создать условный подконтекст, где А держит.)

Если  А :   [ А . ] Б . . . . Если  А :   . . .   [ Б . ]

⇒вступление       ⇒элим

Если  А :   . . . Б . [ А Б . ] А Б . А . Б .

∧вступление     ∧елим

А . Б . А Б . А Б . [ А . ] [ Б . ]

∨вступление     ∨элим

А . [ А Б . ] [ Б А . ] А Б . А С . Б С . С .

¬intro     ¬элим     ¬¬элим

А . ¬ А . А . ¬ А . . ¬ ¬ А . А .

Обратите внимание, что, используя ¬intro и ¬¬elim, мы можем получить следующее дополнительное правило вывода:

¬ А . А .

что соответствует тому, как можно было бы попытаться доказать А от противного , а именно показать, что, полагая ¬ А подразумевает ложь.

⇔интро     ⇔елим

А Б . Б А . А Б . А Б . [ А Б . ] [ Б А . ]

Кванторы и равенство

Правила здесь предназначены для ограниченных кванторов, потому что обычно мы думаем в их терминах. Сначала нам понадобятся некоторые определения.

Используемая переменная : переменная, которая объявлена ​​в заголовке некоторого содержащего ∀-контекста или объявлена ​​на каком-то предыдущем шаге ∃-исключения ("let") в некотором содержащем контексте.

Неиспользуемая переменная : переменная, которая не используется.

Свежая переменная : переменная, которая не появляется ни в одном предыдущем операторе ни в одном содержащем контексте.

Объектное выражение : выражение, которое ссылается на объект (например, используемую переменную или функциональный символ, применяемый к объектным выражениям).

Недвижимость с к параметры : строка п с некоторыми пробелами, где каждый пробел имеет некоторую метку из 1 к к , так что заменяя каждый пробел в п некоторым выражением объекта дает оператор. Если к "=" 2 , затем п ( Е , Ф ) является результатом замены каждого пробела с пометкой 1 к Е и заменяя каждый пробел помеченным 2 к Ф . Аналогично для других к .

В этой секции, Е , Ф (если задействовано) может быть любым выражением объекта (в текущем контексте).

Начнем со следующих правил, которые определяют тип всех объектов.

вселенная : о б Дж является типом.

[ Е е о б Дж . ]

Теперь возьмите любой тип С и 1-параметрическое свойство п и неиспользуемая переменная Икс что не появляется в С или п .

∀sub           ∀restate         (мы можем создать ∀-подконтекст, в котором Икс имеет тип С .)

Данный  Икс е С :   [ Икс е С . ] А . . . . Данный  Икс е С :   . . .   [ А . ] ( Икс не должен появляться в А )

∀интро           ∀елим

Данный  Икс е С :   . . . п ( Икс ) . Икс е С   (   п ( Икс )   ) . Икс е С   (   п ( Икс )   ) . Е е С . п ( Е ) . ( Е не должны делиться никакими неиспользуемыми переменными с п )

∃интро           ∃елим

Е е С . п ( Е ) . Икс е С   (   п ( Икс )   ) . Икс е С   (   п ( Икс )   ) . Позволять  у е С  такой, что  п ( у ) . [ у е С . ] [ п ( у ) . ] (где у это новая переменная)

= вступление       = элим

[ Е "=" Е . ] Е "=" Ф . п ( Е ) . п ( Ф ) . ( Ф не должны делиться какой-либо неиспользуемой переменной с п )

Переименование переменных

Наконец, следующие правила переименования переменных являются излишними, но сокращают доказательства.

∀переименовать         ∃переименовать

Икс е С   (   п ( Икс )   ) . [ у е С   (   п ( у )   ) . ] Икс е С   (   п ( Икс )   ) . [ у е С   (   п ( у )   ) . ]

  (где у неиспользуемая переменная, которая не появляется в п )

Краткие формы

Для удобства пишем " Икс , у е С   (   п ( Икс , у )   ) "как краткая форма" Икс е С   (   у е С   (   п ( Икс , у )   )   ) ", и аналогично для большего количества переменных и для " ". Мы также будем сжимать вложенные заголовки ∀-подконтекста в следующем виде:

Данный  Икс е С :   Данный  у е С :   . . .

к:

Данный  Икс , у е С :   . . .

Кроме того, " ! Икс е С   (   п ( Икс )   ) "это краткая форма для" Икс е С   (   п ( Икс ) у е С   (   п ( у ) Икс "=" у   )   ) ".


Пример

Вот пример, где С , Т любые виды и п любое свойство с двумя параметрами.

Сначала показаны все строки:

  Если Икс е С   (   у е Т   (   п ( Икс , у )   )   ) : [⇒sub]
    Икс е С   (   у е Т   (   п ( Икс , у )   )   ) . [⇒sub]
    Пусть а е С такой, что у е Т   (   п ( а , у )   ) . [∃элим]
    а е С . [∃элим]
    у е Т   (   п ( а , у )   ) . [∃элим]
    г е Т   (   п ( а , г )   ) . [∀переименовать]
    Дано у е Т : [∀sub]
      у е Т . [∀sub]
      г е Т   (   п ( а , г )   ) . [∀переформулировать]
      у е Т . [переформулировать]
      п ( а , у ) . [∀элим]
      а е С . [∀переформулировать]
      Икс е С   (   п ( Икс , у )   ) . [∃интро]
    у е Т   (   Икс е С   (   п ( Икс , у )   )   ) . [∀введение]
Икс е С   (   у е Т   (   п ( Икс , у )   )   ) у е Т   (   Икс е С   (   п ( Икс , у )   )   ) . [⇒ введение]

Наконец, со всеми удаленными строками в квадратных скобках:

  Если Икс е С   (   у е Т   (   п ( Икс , у )   )   ) : [⇒sub]
    Пусть а е С такой, что у е Т   (   п ( а , у )   ) . [∃элим]
    Дано у е Т : [∀sub]
      п ( а , у ) . [∀элим]
      Икс е С   (   п ( Икс , у )   ) . [∃интро]
    у е Т   (   Икс е С   (   п ( Икс , у )   )   ) . [∀введение]
Икс е С   (   у е Т   (   п ( Икс , у )   )   ) у е Т   (   Икс е С   (   п ( Икс , у )   )   ) . [⇒ введение]

Это окончательное доказательство чистое, но все же легко поддается компьютерной проверке.

Дефиниторное расширение

Для облегчения определений , которые могут значительно сократить доказательства, у нас также есть следующие дефиниторные правила расширения.

Для каждого к - свойство параметра п и свежий предикат-символ Вопрос :

Позволять  Вопрос ( Икс 1 , . . . Икс к ) п ( Икс 1 , . . . Икс к )  для каждого  Икс 1 е С 1  и и  Икс к е С к . [ Икс 1 е С 1   Икс к е С к   (   Вопрос ( Икс 1 , . . . Икс к ) п ( Икс 1 , . . . Икс к )   ) . ]

Для каждого ( к + 1 ) - свойство параметра р и свежий функциональный символ ф :

Икс 1 е С 1 Икс к е С к   ! у е Т (   р ( Икс 1 , . . . Икс к , у )   ) Позволять  ф : С 1 × × С к Т  такой, что  р ( Икс 1 , . . . Икс к , ф ( Икс 1 , . . . Икс к ) )  для каждого  Икс 1 е С 1  и и  Икс к е С к . [ Икс 1 е С 1   Икс к е С к   (   ф ( Икс 1 , . . . Икс к ) е Т р ( Икс 1 , . . . Икс к , ф ( Икс 1 , . . . Икс к ) )   ) . ]

Эти правила избыточны в том смысле, что любое утверждение, которое вы можете доказать, не используя никаких новых символов, может быть доказано без использования дефиниторного расширения.

Примечания

Вышеупомянутые правила позволяют избежать обычных проблем, с которыми сталкиваются многие другие системы, когда переменные, используемые для свидетелей экзистенциальных утверждений, необходимо отличать от переменных, используемых для произвольных объектов. Причина в том, что каждая переменная здесь определяется либо ∀-подконтекстом, либо оператором "let"; другими словами, свободных переменных нет. Тот факт, что каждая переменная связана, тесно связан с тем фактом, что эта система допускает пустую вселенную, если нет других аксиом.

Кроме того, каждая переменная определяется уникальным заголовком или оператором «let» в текущем контексте; другими словами, нет переменного затенения. Это задумано, и в реальной математической практике мы также соблюдаем это, хотя большинство других формальных систем этого не делают. Как следствие, такие предложения, как « Икс   Икс   ( Икс "=" Икс ) .» просто не может быть записано в этой системе. Если вы хотите разрешить такие ужасные предложения, вам придется соответствующим образом изменить правила, но это, скорее всего, вызовет головную боль.

Наконец, были некоторые тонкие технические решения. Для правил квантификатора причина, по которой я требовал, чтобы Икс не появляется в С , п заключается в том, что если мы позже включим правила для указания типов, у нас обычно будут имена переменных в его синтаксисе, что вызовет проблемы. Например, если мы написали в текущем контексте " Икс е { у : у е С у е Т } " и " Икс е U ", будет неразумно разрешать писать" у е U   ( у е { у : у е С у е Т } ) ". Аналогично, если бы мы написали " Икс "=" { у : п ( у ) } " и " у е U   ( Вопрос ( Икс , у ) ) ", мы не хотим разрешать писать" у е U   ( Вопрос ( { у : п ( у ) } , у ) ) ".

Кроме того, чтобы позволить переменной снова стать свежей после выхода из подконтекста, в котором она была объявлена, я потребовал, чтобы правила ⇒intro и ∀intro могли применяться только сразу после соответствующего ⇒-подконтекста или ∀-подконтекста. Было бы проще просто определить новую переменную как переменную, которая не появляется ни в одной предыдущей строке, но тогда мы можем легко исчерпать новые имена переменных в длинном доказательстве.

~ ~ ~ ~ ~ ~ ~

Чтобы проиллюстрировать гибкость этой системы, я представлю и арифметику Пеано, и теорию множеств в виде дополнительных правил, которые можно просто добавить в систему.

Арифметика Пеано

Добавьте тип Н и символы PA, а именно символы-константы 0 , 1 и 2 -входные функции-символы + , · и 2 -input предикат-символ < .

Добавьте аксиомы PA , адаптировано отсюда :

  • Икс , у е Н   (   Икс + у е Н   ) .
  • Икс , у е Н   (   Икс · у е Н   ) .
  • Икс , у е Н   (   Икс + у "=" у + Икс   ) .
  • Икс , у е Н   (   Икс · у "=" у · Икс   ) .
  • Икс , у , г е Н   (   Икс + ( у + г ) "=" ( Икс + у ) + г   ) .
  • Икс , у , г е Н   (   Икс · ( у · г ) "=" ( Икс · у ) · г   ) .
  • Икс , у , г е Н   (   Икс · ( у + г ) "=" Икс · у + Икс · г   ) .
  • Икс е Н   (   Икс + 0 "=" Икс   ) .
  • Икс е Н   (   Икс · 1 "=" Икс   ) .
  • Икс е Н   (   ¬ Икс < Икс   ) .
  • Икс , у е Н   (   Икс < у у < Икс Икс "=" у   ) .
  • Икс , у , г е Н   (   Икс < у у < г Икс < г   ) .
  • Икс , у , г е Н   (   Икс < у Икс + г < у + г   ) .
  • Икс , у , г е Н   (   Икс < у 0 < г Икс · г < у · г   ) .
  • Икс , у е Н   (   Икс < у г е Н   (   Икс + г "=" у   )   ) .
  • 0 < 1 .
  • Икс е Н   (   0 "=" Икс 1 "=" Икс 1 < Икс   ) .

Добавьте аксиомы индукции, а именно для каждого свойства п с участием только символов PA и кванторов над Н добавить следующую аксиому (где к не появляется в п ):

  • п ( 0 ) к е Н   (   п ( к ) п ( к + 1 )   ) к е Н   (   п ( к )   ) .

Теория множеств

Добавьте тип с е т и правило, согласно которому каждый член с е т тоже тип.

Добавьте унарные функциональные символы п , , бинарные функции-символы × , , а постоянный символ . Мы повторно используем бинарный предикат-символ е , так как не будет двусмысленности. Также добавьте следующие правила (в каждом контексте) для других обозначений:

  • Если Е , Ф е о б Дж , затем ( Е , Ф ) е о б Дж и { Е , Ф } е с е т .
  • Если С , Т е с е т , затем С × Т е с е т и ( С Т ) е с е т и п ( С ) е с е т .
  • Если С , Т е с е т и ф е ( С Т ) и Икс е С , затем ф ( Икс ) е Т .
  • Если С е с е т и Икс е С   (   Икс е с е т   ) , затем ( С ) е с е т .

Добавьте следующие аксиомы:

  • экстенсиональность :   С , Т е с е т   (   С "=" Т Икс е о б Дж   (   Икс е С Икс е Т   )   ) .
  • пустой набор :   Икс е о б Дж   (   ¬ Икс е   ) .
  • натуралы :   Н е с е т .
  • набор мощности :   С е с е т   (   п ( С ) "=" { Т : Т е с е т Икс е Т   (   Икс е С   ) } ) .
  • пара :   Икс , у е о б Дж   (   { Икс , у } "=" { г : г "=" Икс г "=" у } ) .
  • упорядоченная пара :   Икс , у е о б Дж   г , ш е о б Дж   (   ( Икс , у ) "=" ( г , ш ) Икс "=" г у "=" ш   ) .
  • тип продукта :   С , Т е с е т   (   С × Т "=" { т : Икс е С   у е Т   (   т "=" ( Икс , у )   ) }   ) .
  • тип функции :   С , Т е с е т   (   ( С Т ) "=" { Ф : Ф е п ( С × Т ) Икс е С   ! у е Т   (   ( Икс , у ) е Ф   ) }   ) .
  • функция-приложение :   С , Т е с е т   ф е ( С Т )   Икс е С   (   ( Икс , ф ( Икс ) ) е ф   ) .
  • союз :   С е с е т   (   ( С ) "=" { Икс : Т е с е т   (   Икс е Т Т е С   ) }   ) .
  • выбор :   С , Т е с е т   р е п ( С × Т )   (   Икс е С   у е Т   (   ( Икс , у ) е р   ) ф е ( С Т )   Икс е С   (   ( Икс , ф ( Икс ) ) е р   )   ) .

Добавьте следующие правила:

обозначение типа

Возьмите (в текущем контексте) любое свойство п и выражение объекта Е и неиспользуемая переменная Икс .

Затем { Икс : п ( Икс ) } является типом, и его членство регулируется:

Е е { Икс : п ( Икс ) } п ( Е ) . . ( Икс не должен появляться в Е или п )

понимание

Возьмите любое имущество п и неиспользуемая переменная Икс .

С е с е т . { Икс : Икс е С п ( Икс ) } е с е т . . ( Икс не должен появляться в С или п )

замена

Возьми любой 2 - свойство параметра п и неиспользуемые переменные Икс , у .

С е с е т . Икс е С   ! у е о б Дж   (   п ( Икс , у )   ) . { у : Икс е С   (   п ( Икс , у )   ) } е с е т . ( Икс , у не должен появляться в С или п )

индукция

Возьмите любое имущество п с 1 параметр из Н .

п ( 0 ) . к е Н   (   п ( к ) п ( к + 1 )   ) . к е Н   (   п ( к )   ) . ( к не должен появляться в п )

Правило индукции включает в себя аксиомы индукции для PA, и, по сути, единственное отличие состоит в том, что свойство п может включать операции над множествами и количественную оценку над множествами.

функция-обозначение

Это правило теоретически не нужно, но прагматически очень удобно (также известное как лямбда-выражения в информатике).

Возьми любой набор С и любое объектное выражение Е с 1 параметр из С и неиспользуемая переменная Икс .

Затем ( С   Икс Е ( Икс ) ) является объектом, и его поведение регулируется:

Икс е С   (   Е ( Икс ) е Т   ) . ф "=" ( С   Икс Е ( Икс ) ) . ф е ( С Т ) Икс е С (   ф ( Икс ) "=" Е ( Икс )   ) .

Фундаментальная система

Сочетание вышеупомянутой арифметики Пеано с теорией множеств дает фундаментальную систему, которая по существу не уступает ZFC, но гораздо более удобна для пользователя. Он также агностичен к существованию объектов, не являющихся множествами, и даже не предполагает, что члены Н являются множествами. Он также рассматривает декартовы произведения и упорядоченные пары как встроенные абстрактные понятия. Вот как мы используем их в реальной математике. (Точнее, приведенная выше система напрямую интерпретирует ZFC за вычетом регулярности.)

Эй, чувак, спасибо тебе большое за твою помощь :)
@ user108262: Добро пожаловать, и я надеюсь, что это поможет вам так же, как помогло мне! Когда я разрабатывал эти правила, на меня сильно повлияло программирование, в котором контекст каждого утверждения является явным. Это действительно ключ, потому что тогда легко построить правила вывода, основанные на интуиции. Как и в программировании, в одном контексте может быть несколько операторов, и это сводит к минимуму объем необходимой записи, в отличие от систем в стиле Гильберта. Я представил его здесь в стиле Fitch, но мы также можем использовать фигурные скобки или отступы, как в C или Python.
Я решил обновить свой пост со всеми правилами и перешел на стиль Python. Основная идея, безусловно, верна, поскольку я использовал ее в течение многих лет. Но это длинный пост, и в нем могут быть ошибки, поэтому, если у кого-то есть какие-либо вопросы, не стесняйтесь спрашивать меня по адресу chat.stackexchange.com/rooms/44058/logic .
Является ли система, которую вы описали, стилем fithch?
@Buraian: «fithch» ≠ «Fitch», и мой пост явно ссылается на статью в Википедии, описывающую стиль Fitch. Стиль — это не система, как и формат исполняемого файла — это не прикладное программное обеспечение. В любом случае, цель этого поста — представить полную и удобную для пользователя базовую систему математики, и для этого на самом деле неважно знать, какой стиль она использует. После того, как вы научитесь его использовать, станет тривиально очевидно, почему стиль Fitch лучше других стилей, но такое понимание приходит только после того, как вы его изучите и увидите, насколько непригодны альтернативные системы.
(Я цитирую Fitch исключительно ради признания заслуг, а не в педагогических целях.)
@Buraian: Если вы хотите научиться использовать эту систему, вы можете спросить меня об этом в чате Basic Math .
@kjo: используйте правила переформулирования , чтобы «вытащить» предыдущую теорему из содержащего контекста в подконтекст, где вы хотите ее использовать. Если у вас возникнут дополнительные вопросы, не стесняйтесь спрашивать в связанном чате, к которому я предоставил вам доступ.