В логике высказываний есть таблицы истинности. Таким образом, вы можете проверить, является ли логическая структура вашего аргумента неправильной сама по себе, но является ли она такой, какой вы ее задумали.
В логике предикатов я не видел ни ссылок на таблицы истинности, ни какого-либо использования (буквального использования) таблиц истинности при поиске примеров, где таблицы истинности используются в PL.
Было бы неплохо проверить логическую структуру моих собственных аргументов, так как у меня не всегда будет кто-то, кто будет проверять мою собственную работу. Я планирую использовать свои навыки в логике, но мне нужен верный способ убедиться, что моя форма верна :)
Таблиц истинности недостаточно для захвата логики первого порядка (с квантификаторами), поэтому вместо этого мы используем правила вывода. Каждое правило вывода выбрано так, чтобы оно было верным, а это означает, что если вы начнете с истинных утверждений и будете использовать правило, вы получите только истинные утверждения. Мы говорим, что эти правила сохраняют истину. Если вы выбираете достаточно тщательно, вы можете сделать так, чтобы правила не только сохраняли истинность, но и позволяли вам вывести каждое (правильно построенное) утверждение, которое обязательно истинно (во всех ситуациях).
То, что вы, вероятно, ищете (а именно, практический способ строго проверить логическую обоснованность ваших аргументов), — это естественная дедукция. Существует множество различных стилей, наиболее интуитивно понятным из которых является стиль Fitch , который отмечает подконтексты с помощью отступов или соответствующих визуальных разграничений. Следующая система использует отступы и, на мой взгляд, наиболее точно следует интуиции.
Каждая строка является либо заголовком, либо оператором. Мы будем ставить двоеточие после каждого заголовка и точку после каждого утверждения. Каждый заголовок определяет некоторый подконтекст (содержащийся в текущем контексте), а строки, управляемые этим заголовком, обозначаются отступом. Полный контекст каждой строки определяется всеми управляющими ею заголовками (т. е. всеми ближайшими заголовками над ней на каждом более низком уровне отступа).
Например, вложенный анализ случаев может выглядеть так:
И рассуждения о произвольном члене коллекции будет выглядеть так:
Обратите внимание, что то, что указано в одном контексте, может быть недействительным в другом контексте. Как только вы поймете принцип, лежащий в основе контекстов и отступов, следующие правила станут очень естественными. Также обратите внимание, что для логики первого порядка нужны только эти два типа заголовков контекста (для условных подконтекстов и универсальных подконтекстов соответственно).
Утверждение должно быть атомарным (неделимым) предложением или составным утверждением, сформированным обычным образом с использованием логических операций или кванторов, с тем ограничением, что каждая переменная, связанная квантором, еще не используется для ссылки на какой-либо объект в текущем контексте. , и что нет вложенных квантификаторов, связывающих одну и ту же переменную.
Каждое правило вывода имеет вид:
это означает, что если последние строки, которые вы написали, совпадают с «X», вы можете написать «Y» сразу после этого на том же уровне отступа. Каждое применение правила вывода также привязано к текущему контексту, а именно к контексту «X». Мы не будем постоянно упоминать «текущий контекст».
Возьмите любые заявления (в текущем контексте).
restate : если мы что-то доказываем, мы можем подтвердить это снова в том же контексте.
Обратите внимание, что " " обозначают любое количество строк, которые находятся не менее чем на изображенном уровне отступа. В приведенном выше правиле это означает, что все строки, написанные с момента более раннего написания " " должен быть в том же контексте (или в каком-то подконтексте).
На практике мы никогда не пишем одну и ту же строку дважды. Чтобы указать, что мы можем опустить строку в доказательстве, я отмечу ее квадратными скобками следующим образом:
⇒sub ⇒restate (мы можем создать условный подконтекст, где держит.)
⇒вступление ⇒элим
∧вступление ∧елим
∨вступление ∨элим
¬intro ¬элим ¬¬элим
Обратите внимание, что, используя ¬intro и ¬¬elim, мы можем получить следующее дополнительное правило вывода:
что соответствует тому, как можно было бы попытаться доказать от противного , а именно показать, что, полагая подразумевает ложь.
⇔интро ⇔елим
Правила здесь предназначены для ограниченных кванторов, потому что обычно мы думаем в их терминах. Сначала нам понадобятся некоторые определения.
Используемая переменная : переменная, которая объявлена в заголовке некоторого содержащего ∀-контекста или объявлена на каком-то предыдущем шаге ∃-исключения ("let") в некотором содержащем контексте.
Неиспользуемая переменная : переменная, которая не используется.
Свежая переменная : переменная, которая не появляется ни в одном предыдущем операторе ни в одном содержащем контексте.
Объектное выражение : выражение, которое ссылается на объект (например, используемую переменную или функциональный символ, применяемый к объектным выражениям).
Недвижимость с параметры : строка с некоторыми пробелами, где каждый пробел имеет некоторую метку из к , так что заменяя каждый пробел в некоторым выражением объекта дает оператор. Если , затем является результатом замены каждого пробела с пометкой к и заменяя каждый пробел помеченным к . Аналогично для других .
В этой секции, (если задействовано) может быть любым выражением объекта (в текущем контексте).
Начнем со следующих правил, которые определяют тип всех объектов.
вселенная : является типом.
Теперь возьмите любой тип и 1-параметрическое свойство и неиспользуемая переменная что не появляется в или .
∀sub ∀restate (мы можем создать ∀-подконтекст, в котором имеет тип .)
( не должен появляться в )
∀интро ∀елим
( не должны делиться никакими неиспользуемыми переменными с )
∃интро ∃елим
(где это новая переменная)
= вступление = элим
( не должны делиться какой-либо неиспользуемой переменной с )
Наконец, следующие правила переименования переменных являются излишними, но сокращают доказательства.
∀переименовать ∃переименовать
(где неиспользуемая переменная, которая не появляется в )
Для удобства пишем " "как краткая форма" ", и аналогично для большего количества переменных и для " ". Мы также будем сжимать вложенные заголовки ∀-подконтекста в следующем виде:
к:
Кроме того, " "это краткая форма для" ".
Вот пример, где любые виды и любое свойство с двумя параметрами.
Сначала показаны все строки:
Если
: [⇒sub]
. [⇒sub]
Пусть
такой, что
. [∃элим]
. [∃элим]
. [∃элим]
. [∀переименовать]
Дано
: [∀sub]
. [∀sub]
. [∀переформулировать]
. [переформулировать]
. [∀элим]
. [∀переформулировать]
. [∃интро]
. [∀введение]
. [⇒ введение]
Наконец, со всеми удаленными строками в квадратных скобках:
Если
: [⇒sub]
Пусть
такой, что
. [∃элим]
Дано
: [∀sub]
. [∀элим]
. [∃интро]
. [∀введение]
. [⇒ введение]
Это окончательное доказательство чистое, но все же легко поддается компьютерной проверке.
Для облегчения определений , которые могут значительно сократить доказательства, у нас также есть следующие дефиниторные правила расширения.
Для каждого - свойство параметра и свежий предикат-символ :
Для каждого - свойство параметра и свежий функциональный символ :
Эти правила избыточны в том смысле, что любое утверждение, которое вы можете доказать, не используя никаких новых символов, может быть доказано без использования дефиниторного расширения.
Вышеупомянутые правила позволяют избежать обычных проблем, с которыми сталкиваются многие другие системы, когда переменные, используемые для свидетелей экзистенциальных утверждений, необходимо отличать от переменных, используемых для произвольных объектов. Причина в том, что каждая переменная здесь определяется либо ∀-подконтекстом, либо оператором "let"; другими словами, свободных переменных нет. Тот факт, что каждая переменная связана, тесно связан с тем фактом, что эта система допускает пустую вселенную, если нет других аксиом.
Кроме того, каждая переменная определяется уникальным заголовком или оператором «let» в текущем контексте; другими словами, нет переменного затенения. Это задумано, и в реальной математической практике мы также соблюдаем это, хотя большинство других формальных систем этого не делают. Как следствие, такие предложения, как « .» просто не может быть записано в этой системе. Если вы хотите разрешить такие ужасные предложения, вам придется соответствующим образом изменить правила, но это, скорее всего, вызовет головную боль.
Наконец, были некоторые тонкие технические решения. Для правил квантификатора причина, по которой я требовал, чтобы не появляется в заключается в том, что если мы позже включим правила для указания типов, у нас обычно будут имена переменных в его синтаксисе, что вызовет проблемы. Например, если мы написали в текущем контексте " " и " ", будет неразумно разрешать писать" ". Аналогично, если бы мы написали " " и " ", мы не хотим разрешать писать" ".
Кроме того, чтобы позволить переменной снова стать свежей после выхода из подконтекста, в котором она была объявлена, я потребовал, чтобы правила ⇒intro и ∀intro могли применяться только сразу после соответствующего ⇒-подконтекста или ∀-подконтекста. Было бы проще просто определить новую переменную как переменную, которая не появляется ни в одной предыдущей строке, но тогда мы можем легко исчерпать новые имена переменных в длинном доказательстве.
~ ~ ~ ~ ~ ~ ~
Чтобы проиллюстрировать гибкость этой системы, я представлю и арифметику Пеано, и теорию множеств в виде дополнительных правил, которые можно просто добавить в систему.
Добавьте тип и символы PA, а именно символы-константы и -входные функции-символы и -input предикат-символ .
Добавьте аксиомы PA , адаптировано отсюда :
Добавьте аксиомы индукции, а именно для каждого свойства с участием только символов PA и кванторов над добавить следующую аксиому (где не появляется в ):
Добавьте тип и правило, согласно которому каждый член тоже тип.
Добавьте унарные функциональные символы , бинарные функции-символы , а постоянный символ . Мы повторно используем бинарный предикат-символ , так как не будет двусмысленности. Также добавьте следующие правила (в каждом контексте) для других обозначений:
Добавьте следующие аксиомы:
Добавьте следующие правила:
обозначение типа
Возьмите (в текущем контексте) любое свойство и выражение объекта и неиспользуемая переменная .
Затем является типом, и его членство регулируется:
. ( не должен появляться в или )
понимание
Возьмите любое имущество и неиспользуемая переменная .
. ( не должен появляться в или )
замена
Возьми любой - свойство параметра и неиспользуемые переменные .
( не должен появляться в или )
индукция
Возьмите любое имущество с параметр из .
( не должен появляться в )
Правило индукции включает в себя аксиомы индукции для PA, и, по сути, единственное отличие состоит в том, что свойство может включать операции над множествами и количественную оценку над множествами.
функция-обозначение
Это правило теоретически не нужно, но прагматически очень удобно (также известное как лямбда-выражения в информатике).
Возьми любой набор и любое объектное выражение с параметр из и неиспользуемая переменная .
Затем является объектом, и его поведение регулируется:
Сочетание вышеупомянутой арифметики Пеано с теорией множеств дает фундаментальную систему, которая по существу не уступает ZFC, но гораздо более удобна для пользователя. Он также агностичен к существованию объектов, не являющихся множествами, и даже не предполагает, что члены являются множествами. Он также рассматривает декартовы произведения и упорядоченные пары как встроенные абстрактные понятия. Вот как мы используем их в реальной математике. (Точнее, приведенная выше система напрямую интерпретирует ZFC за вычетом регулярности.)
Хаген фон Эйцен
Дэн Кристенсен
Стефан Мескен