Логика
Логика — наука о формальных правилах корректного рассуждения. В IT она не «философский факультатив», а язык, на котором описывают условия в коде, контракты API, инварианты и требования. Любой if, while или switch — это логическое выражение, записанное синтаксисом языка.
Обзор всего блока: Математическая основа IT.
Два уровня в разработке
| Уровень | Что описывает | Примеры в практике |
|---|---|---|
| Пропозициональная (булева) | Целые утверждения: истина или ложь | isActive and not isBlocked |
| Предикатная | Свойства объектов с параметрами и кванторами | для всех активных пользователей доступ разрешён |
Пропозициональной логики достаточно для ветвлений и рефакторинга условий. Предикатная нужна для спецификаций, SQL WHERE, LINQ-фильтров и формальных методов (TLA+, Alloy).
Логические операции
Отрицание (NOT, ¬)
Инвертирует значение. Инволютивность: ¬(¬A) ≡ A. В коде !flag или not flag; двойное отрицание в JS (!!x) — приведение к boolean, а не логическая необходимость.
Конъюнкция (AND, ∧)
Истина только когда оба операнда истинны: A ∧ B. В коде: &&, and. Свойства: коммутативность, ассоциативность, дистрибутивность относительно OR, идемпотентность A ∧ A ≡ A.
Дизъюнкция (OR, ∨)
Ложь только когда оба ложны. В коде: ||, or. В большинстве языков — short-circuit: второй операнд может не вычисляться (false && f() не вызовет f). Это важно для побочных эффектов и производительности.
Исключающее ИЛИ (XOR, ⊕)
Истина, когда ровно один операнд истинен: A ⊕ B ≡ (A ∨ B) ∧ ¬(A ∧ B). Применение: чётность, сравнение битовых флагов, криптография. В C#/Java есть ^ для целых; отдельного логического XOR в JavaScript нет.
Законы булевой алгебры
- Исключённое третье:
A ∨ ¬A ≡ истина(в классической логике). - Противоречие:
A ∧ ¬A ≡ ложь— нарушение в спецификации = фатальная ошибка модели. - Де Морган:
¬(A ∧ B) ≡ ¬A ∨ ¬B¬(A ∨ B) ≡ ¬A ∧ ¬B
- Поглощение:
A ∨ (A ∧ B) ≡ A,A ∧ (A ∨ B) ≡ A.
Типичный рефакторинг:
# было
if not (user.is_blocked or not user.is_active):
...
# стало (де Морган)
if not user.is_blocked and user.is_active:
...
Таблицы истинности
Для n переменных — 2^n строк. Таблица задаёт функцию однозначно и позволяет:
- проверить эквивалентность двух формул;
- найти тавтологии (всегда истина) и противоречия;
- построить набор тестов (каждая строка — вход для покрытия условий).
Нормальные формы
- ДНФ — дизъюнкция конъюнкций литералов:
(A ∧ ¬B) ∨ (C ∧ D). - КНФ — конъюнкция дизъюнкций:
(A ∨ B) ∧ (¬C ∨ D).
Любое булево выражение можно привести к ДНФ или КНФ. Это основа SAT-решателей и формальной верификации.
Предикаты и кванторы
Предикат — функция из предметной области в {истина, ложь}: CanAccess(user, resource), IsEven(n).
| Квантор | Чтение | Пример |
|---|---|---|
| ∀ | для всех | ∀u ∈ Users: u.isActive ⇒ u.canLogin |
| ∃ | существует | ∃file: file.isLocked |
Отрицание кванторов (де Морган):
¬(∀x P(x)) ≡ ∃x ¬P(x)— «не все прошли проверку» ⇔ «найдётся хотя бы один непроверенный».¬(∃x P(x)) ≡ ∀x ¬P(x).
Порядок кванторов важен: ∀x ∃y R(x,y) и ∃y ∀x R(x,y) — разные утверждения.
Связь с кодом и тестами
- Упрощайте условия алгебраически, сохраняя семантику — меньше веток, выше читаемость.
- Таблица истинности для 3–4 флагов — честный способ не забыть комбинацию в тестах.
- Отрицание «для всех» переводите в конструктивное «найти контрпример» — так формулируют проверки безопасности и валидации.
Дальше: Дискретная математика (множества, графы, комбинаторика).
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Имя переменной, метода или класса — это когнитивный маячок, который активирует соответствующие схемы в долговременной памяти. История термина «ментальная модель» - Крейк о внутренних представлениях мира, которые строит когнитивная система. Единый процесс - согласованные по цели, времени и пространству действия участников ради одного результата. Что такое система и её элементы, как все это связано и зачем нужно. Краткое знакомство с науками, которые лежат в основе логики программ, данных и вычислений — от булевой алгебры до теории информации. Множества, отношения, графы и комбинаторика — язык описания структур данных, сетей, зависимостей и оценки сложности в IT. Делимость и НОД, запись алгоритмов псевдокодом, худший случай и асимптотика O(n) — связь с криптографией и проектированием кода. Векторы, матрицы, скалярное произведение и системы линейных уравнений — основа ML, графики и численных методов. События, условная вероятность, независимость и закон больших чисел — язык неопределённости в мониторинге, ML и рисках. Математические, имитационные и логические модели — от постановки задачи до валидации и рекомендаций для IT-инфраструктуры. Приближённое решение уравнений, интерполяция и метод наименьших квадратов — когда точная формула недоступна или слишком дорога. Иерархия Хомского, конечные автоматы, грамматики и неразрешимость — основа парсеров, regex и границ статического анализа.Когнитивистика - наука о мышлении
Ментальные модели
Тектология
Системы и модели
Математическая основа IT
Дискретная математика
Теория чисел, псевдокод и анализ алгоритмов
Линейная алгебра
Вероятность и статистика
Моделирование систем
Численные методы
Формальные языки и автоматы