Логика

Предикаты и кванторы

Почему силлогизм Аристотеля «Все люди смертны. Сократ - человек. Следовательно, Сократ смертен» работает? Пропозициональная логика не может объяснить: для неё «Все люди смертны» и «Сократ смертен» - просто разные буквы P и Q. Предикатная логика раскрывает внутреннюю структуру утверждений.

  • **Базы данных:** SQL-запрос `SELECT * FROM users WHERE age > 18 AND country = 'RU'` - это комбинация предикатов. `EXISTS` и `ALL` - это кванторы
  • **Программирование:** Методы `every()`, `some()`, `filter()`, `find()` - реализации кванторов и предикатов из логики первого порядка
  • **Математика:** Определения и теоремы формулируются с кванторами. «∀ε>0 ∃δ>0: |x-a|<δ → |f(x)-f(a)|<ε» - определение непрерывности

Предикат

В пропозициональной логике мы работали с **целыми высказываниями** как неделимыми единицами: P, Q, R. Но утверждение «Сократ смертен» имеет структуру: **субъект** (Сократ) и **свойство** (смертен). **Предикат** - это свойство или отношение, которое можно применить к объектам.

**Предикат** - это функция, которая принимает объект(ы) и возвращает истину или ложь. Запись: P(x), где P - предикат, x - переменная. Примеры: Смертен(x), Больше(x, y), Между(x, y, z).

В программировании предикаты - это **функции, возвращающие boolean**. Метод `isEven(n)` - предикат. Фильтр `array.filter(x => x > 0)` использует предикат `x => x > 0`. SQL-условие `WHERE age > 18` - тоже предикат.

Какое из следующих выражений НЕ является предикатом?

Кванторы

Предикаты становятся по-настоящему мощными с **кванторами** - операторами, которые говорят, **сколько** объектов удовлетворяют предикату. Два основных квантора: **универсальный** (∀ - «для всех») и **экзистенциальный** (∃ - «существует»).

**∀x P(x)** читается «для всех x верно P(x)» или «каждый x обладает свойством P». **∃x P(x)** читается «существует x такой, что P(x)» или «хотя бы один x обладает свойством P».

Кванторы можно комбинировать. Порядок важен! «∀x ∃y Любит(x, y)» означает «каждый кого-то любит» (у каждого есть объект любви, возможно разный). А «∃y ∀x Любит(x, y)» - «есть кто-то, кого любят все» (один объект всеобщей любви).

Как формализовать утверждение «Некоторые студенты сдали все экзамены»?

Универсальный квантор

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

**Домен (область определения)** - множество объектов, по которому пробегает переменная. «Все лебеди белые» при домене {австралийские лебеди} ложно, при домене {европейские лебеди} - веками считалось истинным.

**Вакуумная истинность:** утверждение ∀x (P(x) → Q(x)) истинно, если **нет объектов, удовлетворяющих P**. «Все единороги розовые» - истинно (нет единорогов для проверки). Это часто контринтуитивно, но математически корректно.

Утверждение «∀x (Дракон(x) → Летает(x))» в мире без драконов является...

Экзистенциальный квантор

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

**Связь кванторов через отрицание (законы де Моргана для кванторов):** ¬(∀x P(x)) ≡ ∃x ¬P(x) и ¬(∃x P(x)) ≡ ∀x ¬P(x). «Не все студенты сдали» = «Существует несдавший». «Не существует бессмертного» = «Все смертны».

**Уникальность:** иногда нужно сказать «существует **ровно один**». Обозначается ∃! (читается «существует единственный»). ∃!x P(x) означает: ∃x P(x) ∧ ∀y∀z (P(y) ∧ P(z) → y = z) - существует и единственный.

«∃x P(x)» означает, что большинство объектов обладают свойством P

«∃x P(x)» означает, что хотя бы один объект обладает свойством P - даже если это единственный такой объект

Экзистенциальный квантор - минималистичное утверждение. «Существует простое чётное число» истинно, хотя такое число только одно (2). Для «большинства» нужны числовые кванторы или дополнительные условия.

Какое утверждение эквивалентно «Не существует решения уравнения»?

Ключевые идеи

  • **Предикат:** функция от объектов, возвращающая истину или ложь - P(x), Q(x, y)
  • **∀ (для всех):** утверждение о каждом объекте, опровергается одним контрпримером
  • **∃ (существует):** утверждение о существовании, доказывается одним примером
  • **Де Морган:** ¬∀x P(x) ≡ ∃x ¬P(x), ¬∃x P(x) ≡ ∀x ¬P(x)
  • **Порядок кванторов важен:** ∀x∃y ≠ ∃y∀x в общем случае

Связанные темы

Предикатная логика - основа формальных систем:

  • Нормальные формы — Предикатная логика имеет свои нормальные формы (Сколема, Пренекса)
  • Дедукция — Силлогизмы Аристотеля формализуются в предикатной логике
  • Множества — Множества определяются через предикаты: {x | P(x)}

Вопросы для размышления

  • Как бы вы формализовали «Каждый программист иногда делает ошибки» с помощью кванторов?
  • Почему в SQL есть и `EXISTS`, и `NOT EXISTS`, а не просто отрицание?
  • Приведите пример утверждения, которое меняет смысл при перестановке кванторов.

Связанные уроки

  • comp-18-type-checking
  • ml-02
Предикаты и кванторы

0

1

Войти