Формальные языки и автоматы
Формальные языки — множества строк над конечным алфавитом. Автоматы и грамматики — два способа задать язык: распознать вход или породить строки. Теория лежит в основе компиляторов, regex, протоколов и границ анализа кода.
См. также: регулярные выражения в разделе алгоритмов.
Иерархия Хомского (кратко)
| Тип | Грамматика | Автомат | Пример языка |
|---|---|---|---|
| 3 | регулярная | конечный автомат | суффикс ab, чётное число a |
| 2 | контекстно-свободная | магазинный | скобки, выражения с приоритетом |
| 1 | контекстно-зависимая | линейно-ограниченный | редко вручную в коде |
| 0 | неограниченная | машина Тьюринга | всё, что алгоритмически порождаемо |
Чем мощнее класс, тем больше выразительность — и тем больше неразрешимых вопросов.
Регулярные языки
Правила вида A → aB или A → a (праволинейная форма). Распознаются конечными автоматами (ДКА / НКА, эквивалентны по мощности).
Применение: лексический анализ, regex, простые протоколы, модели состояний (сессия, фаза обработки).
Не хватает для вложенных структур: «скобки сбалансированы» — уже не регулярный язык.
Контекстно-свободные языки
Правило A → α, где α — строка терминалов и нетерминалов. Описывает большинство синтаксисов языков программирования:
E → E + T | T
T → T * F | F
F → ( E ) | digit
Распознаются магазинным автоматом (стек). Парсеры (LR, LL, PEG) — инженерная реализация этой идеи.
Машина Тьюринга
Универсальная модель вычисления: лента, головка, конечное управление. Тезис Чёрча–Тьюринга: всё интуитивно алгоритмическое вычислимо на машине Тьюринга.
Не для программирования напрямую, а для доказательства границ: что принципиально нельзя автоматизировать полностью.
Разрешимость
- Разрешимый язык — есть алгоритм, который для любой строки за конечное время отвечает «да / нет».
- Рекурсивно перечислимый — алгоритм может зациклиться на «нет» (полупроверка).
Проблема останова
Нельзя построить универсальную программу, которая для произвольной (P, x) решает, остановится ли P на x. Доказательство Тьюринга — диагональный аргумент.
Следствия для практики:
- статический анализ никогда не будет полным без компромиссов (false positive / false negative);
- эквивалентность двух программ в общем случае неразрешима;
- сложные баги могут проявляться только в конкретном рантайме.
Разрешимы многие задачи для регулярных языков (пустота, эквивалентность автоматов) и часть — для КС (принадлежность строки), но не эквивалентность двух КС-грамматик.
Практический вывод
- Regex и ДКА — для токенов и простых паттернов.
- Парсер — для синтаксиса с вложенностью.
- Не ждите от IDE/анализатора полного понимания поведения произвольной программы — это не лень разработчиков, а математический предел.
Дальше: Теория информации.
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Имя переменной, метода или класса — это когнитивный маячок, который активирует соответствующие схемы в долговременной памяти. История термина «ментальная модель» - Крейк о внутренних представлениях мира, которые строит когнитивная система. Единый процесс - согласованные по цели, времени и пространству действия участников ради одного результата. Что такое система и её элементы, как все это связано и зачем нужно. Краткое знакомство с науками, которые лежат в основе логики программ, данных и вычислений — от булевой алгебры до теории информации. Булева и предикатная логика для разработки — операции, таблицы истинности, кванторы и законы де Моргана в условиях кода. Множества, отношения, графы и комбинаторика — язык описания структур данных, сетей, зависимостей и оценки сложности в IT. Делимость и НОД, запись алгоритмов псевдокодом, худший случай и асимптотика O(n) — связь с криптографией и проектированием кода. Векторы, матрицы, скалярное произведение и системы линейных уравнений — основа ML, графики и численных методов. События, условная вероятность, независимость и закон больших чисел — язык неопределённости в мониторинге, ML и рисках. Математические, имитационные и логические модели — от постановки задачи до валидации и рекомендаций для IT-инфраструктуры. Приближённое решение уравнений, интерполяция и метод наименьших квадратов — когда точная формула недоступна или слишком дорога.Когнитивистика - наука о мышлении
Ментальные модели
Тектология
Системы и модели
Математическая основа IT
Логика
Дискретная математика
Теория чисел, псевдокод и анализ алгоритмов
Линейная алгебра
Вероятность и статистика
Моделирование систем
Численные методы