Открыть сервисСервис

Предикат — понятие логики и программирования

Предикат — это выражение (формула, функция или конструкция языка программирования), которое принимает значение «истина» или «ложь». Слово происходит от латинского praedicatum — «утверждаемое, сказуемое». В логике предикат — это функция истинности, заданная на некотором множестве объектов; в математике — условие, которому элементы множества удовлетворяют или не удовлетворяют; в программировании — условие, результат которого используется для принятия решений (ветвление, фильтрация, отбор).

Предикат в математической логике

В классическом исчислении предикатов предикат — это функция, значениями которой являются «истина» и «ложь». Если переменная x пробегает множество M, то предикат P(x) называется формулой с переменной x; множество всех x, для которых P(x) истинен, называется областью истинности предиката.

Пример: P(x) = «x чётное число». Для x = 4 предикат истинен, для x = 7 — ложен. Область истинности на целых числах — множество чётных чисел.

Основные логические связки, применяемые к предикатам:

  • отрицание (¬P) — инвертирует значение;
  • конъюнкция (P ∧ Q) — истинна, когда оба предиката истинны;
  • дизъюнкция (P ∨ Q) — истинна, если хотя бы один истинен;
  • импликация (P → Q) — ложна только когда P истинен, а Q ложен;
  • эквивалентность (P ↔ Q) — истинна при совпадении значений.

Кванторы расширяют язык предикатов: квантор всеобщности (∀x) означает «для всех x», квантор существования (∃x) — «существует такое x». Например, «∀x (x + 0 = x)» читается как «для любого x верно, что x плюс ноль равно x».

Предикат в математике

В математике предикат — это свойство или условие, которому объекты подчиняются или не подчиняются. Термин широко используется в теории множеств, алгебре и анализе. Например, «x > 5» — предикат на вещественных числах; «M — компактное пространство» — предикат на топологических пространствах.

Предикаты лежат в основе определений. Определение «чётное число» — это предикат «делится на два без остатка». Аксиоматика теории множеств по Зермело — Френкелю построена на предикате принадлежности x ∈ y.

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

В реляционной алгебре и языке SQL предикат — это условие отбора строк. WHERE-часть SQL-запроса содержит предикат: SELECT * FROM users WHERE age > 18. Строки, для которых предикат истинен, попадают в результат; остальные отбрасываются.

Теоретико-множественная модель данных, предложенная Эдгаром Коддом в 1970 году, строится именно на предикатах: каждая таблица — это набор кортежей, удовлетворяющих некоторому предикату.

Предикат в программировании

В языках программирования предикат — это функция (или выражение), возвращающая логическое значение. В Python это может быть лямбда-функция или обычное условие, в SQL — выражение в WHERE, в языках семейства C — выражение в if, while, for.

Пример на Python:

```python def is_even(x): return x % 2 == 0

numbers = [1, 2, 3, 4] evens = list(filter(is_even, numbers)) # [2, 4] ```

Здесь is_even — предикат: он принимает число и возвращает True или False. Функция filter применяет предикат к каждому элементу списка и оставляет только те, для которых предикат истинен.

Предикаты используются в фильтрации коллекций (filter, List.where, select), в условных операторах, в генераторах множеств и в декларативных языках (Prolog, Haskell, SQL). В Prolog предикат — это основная единица знания: программа представляет собой набор предикатов вида parent(ivan, petr). — «Иван — родитель Петра».

Предикат в философии и риторике

В традиционной логике, восходящей к Аристотелю, предикат — это часть суждения, которая отрицается или утверждается о субъекте. В суждении «Сократ — человек» субъект — Сократ, предикат — «человек». Классическая схема «субъект — предикат» легла в основу суждений силлогистики.

Различие с термином «предсказание»

Предикат не следует путать с предсказанием (prediction). Предикат ничего не прогнозирует — он лишь описывает истинностное значение условия в данный момент. В машинном обучении иногда используется термин «предиктор» (predictor) — признак, по которому строится модель; это другое понятие, хотя этимологически оно родственно.

История

Исчисление предикатов было создано Готлобом Фреге в 1879 году в работе «Бegriffsschrift» («Понятийная запись»). Ранее, в 1847 году, Джордж Буль заложил основы алгебры логики, где высказывания обрабатывались как значения «истина» и «ложь». Развитие теории предикатов связано с именами Бертрана Рассела, Артура Гёделя (теорема о полноте и неполноте), Альонасо Чёрча и Алана Тьюринга.

Исторические источники и литература

  • Фреге Г. Бegriffsschrift, 1879.
  • Клейни С. Введение в математику. Синтаксис и семантика.
  • Кодд Э. Реляционный модель данных для больших банков данных, 1970.
  • Кларк Д., Тавани Дж. Логика для компьютерных наук.
  • Дейкстра Э. О структуре программы «goto».
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru