Структурна індукція
Структу́рна інду́кція — конструктивний метод математичного доведення, який узагальнює математичну індукцію (застосовувану над натуральним рядом) на довільні рекурсивно означені частково впорядковані сукупності. Структурна рекурсія — реалізація структурної індукції у формі визначення, процедури доведення або програми, що забезпечує індукційний перехід над частково впорядкованою сукупністю.
Спочатку[⇨] метод використовувався в математичній логіці, також знайшов застосування[⇨] в теорії графів, комбінаториці, загальній алгебрі, математичній лінгвістиці, але найбільшого поширення як самостійно досліджуваний метод набув у теоретичній інформатиці[1], де застосовується в питаннях семантики мов програмування, формальної верифікації, обчислювальної складності, функційного програмування.
На відміну від нетерівської індукції — найзагальнішої форми математичної індукції, застосовуваної над довільними фундованими множинами, — в понятті про структурну індукцію мається на увазі конструктивний характер, обчислювальна реалізація. При цьому фундованість сукупності — властивість, необхідна для рекурсивної ви́значності[2], таким чином, структурну рекурсію можна вважати частковим варіантом нетерівської індукції[1].
Історія
Використання методу зустрічається принаймні від 1950-х років, зокрема, в доведенні теореми Лоша про ультрадобутки застосовується індукція побудови формули, при цьому сам метод особливим чином явно не називався[3]. У ті ж роки метод застосовувався в теорії моделей для доведень над ланцюгами моделей, вважається, що поява терміна «структурна індукція» пов'язана саме з цими доведеннями[4]. Карі поділив усі види застосування індукції в математиці на два типи — дедуктивну індукцію і структурну індукцію, класичну індукцію над натуральними числами вважаючи підтипом останньої[5].
З іншого боку, не пізніше початку 1950-х років метод трансфінітної індукції вже поширювався на довільні частково впорядковані множини, що задовольняють умову обриву ростучих ланцюгів (що еквівалентно фундованості[6]), в той же час Генкін відсилав до можливості індукції «в деяких типах частково впорядкованих систем»[7]. У 1960-х роках метод закріпився під назвою нетерівська індукція (за аналогією з нетерівським кільцем, у якому виконано умову обриву ростучих ланцюгів ідеалів)[8].
Явне визначення структурної індукції, яке посилається як на рекурсивну ви́значність, так і на нетерівську індукцію, дав Берстолл) наприкінці 1960-х років[9], і в літературі з інформатики саме до нього відносять уведення методу[10][11].
Надалі в інформатиці утворилося декілька напрямів, які ґрунтуються на структурній індукції як базовому принципі, зокрема, такими є структурна операційна семантика мов програмування Плоткіна)[12], серія індуктивних методів формальної верифікації[13][14], структурно-рекурсивна мова запитів UnQL[15]. У 1990-х роках у теоретичній інформатиці поширився метод коіндукції, застосовуваний над нефундованих (як правило, нескінченних) структурах, який вважають дуальним для структурної індукції[16].
Через широке застосування в теоретичній інформатиці і нечисленність згадок у математичній літературі, станом на 2010-ті роки вважається, що виділення структурної індукції як особливого методу більшою мірою характерне для інформатики, ніж для математики[4].
Визначення
Найзагальніше визначення[17][18] вводиться для класу структур (без уточнення природи структур ) з відношенням часткового порядку між структурами , з умовою мінімального елемента в і умовою наявності для кожної цілком упорядкованої сукупності зі всіх структур, що суворо передують їй: . Принцип структурної індукції в цьому випадку формулюється так: якщо виконання властивості для випливає з виконання властивості для всіх структур, що суворо передують їй, то властивість виконано і для всіх структур класу; символічно (в позначеннях систем натурального виведення):
- .
Рекурсивність у цьому визначенні реалізується сукупністю вкладених структур: як тільки є спосіб виводити властивості структури виходячи зі властивостей усіх попередніх їй, можна говорити про рекурсивну визначність структури.
В літературі з інформатики поширена й інша форма визначення структурної індукції, орієнтована на рекурсію за побудовою[19], в ній розглядається як клас об'єктів, визначених над деякою множиною атомарних елементів і набором операцій , при цьому кожен об'єкт — результат послідовного застосування операцій до атомарних елементів. У цьому формулюванні принцип стверджує, що властивість виконується для всіх об'єктів , як тільки має місце для всіх атомарних елементів і для кожної операції з виконання властивості для елементів слідує виконання властивості для :
- .
Роль відношення часткового порядку з загального визначення тут грає відношення включення за побудовою: [20].
Приклади
Запровадження принципу в інформатику мотивувалося рекурсивним характером таких структур даних, як списки і дерева[21]. Перший приклад над списком, наведений Берстоллом — твердження про властивості згортки списків з елементами типу двомісною функцією і початковим елементом згортки у зв'язку з конкатенацією списків :
- .
Структурна індукція в доведенні цього твердження ведеться від порожніх списків — якщо , то:
- ліва частина, за визначенням конкатенації: ,
- права частина, за визначенням згортки:
і в разі, якщо список непорожній, і починається елементом , то:
- ліва частина, за визначенням конкатенації та згортки: ,
- права частина, за визначенням згортки і припущенням індукції: .
Припущення індукції ґрунтується на істинності твердження і включення .
В теорії графів структурна індукція часто застосовується для доведення тверджень про багатодольні графи (з використанням переходу від -дольних до -дольних), у теоремах про амальгамування графів, властивостей дерев і лісів[22]. Інші структури в математиці, для яких застосовується структурна індукція — перестановки, матриці і їх тензорні добутки, конструкції з геометричних фігур у комбінаторній геометрії.
Типове застосування в математичній логіці та універсальній алгебрі — структурна індукція побудови формул з атомарних термів, наприклад, показується, що виконання необхідної властивості для термів і тягне , , і так далі. Також за побудовою формул виконуються багато структурно-індуктивних доведень у теорії автоматів, математичній лінгвістиці; для доведення синтаксичної коректності комп'ютерних програм широко використовується структурна індукція за БНФ-визначенням мови (іноді навіть виділяється в окремий підтип — БНФ-індукція[23]).
Примітки
- Штеффен, Рютинг, Хут, 2018, с. 179.
- [Рекурсия Структурна індукція] — стаття з Математичної енциклопедії
- J. Loś. Quelques remarques, théorèmes et problèmes sur les classes définissables d'algèbres // Studies in Logic and the Foundations of Mathematics. — 1955. — Т. 16 (3 листопада). — С. 98—113. — DOI: .
- Гундерсон, 2011, с. 48.
- Карри, 1969, при цьому зазначаючи: «Звичайна математична індукція зі справжньої точки зору є структурною індукцією...; вона так часто зустрічається <...> що варто вважати її третім видом - натуральною індукцією».
- А. Г. Курош. Лекции по общей алгебре. — М. : Физматлит, 1962. — С. 21—22 (§5. Условие минимальности).
- Л. Генкин. О математической индукции. — М. : Физматгиз, 1962. — С. 36 (заключение).
- П. Кон. Универсальная алгебра. — М. : Мир, 1969. — С. 33—34.
- Бёрстолл, 1969.
- Tools and Notions for Program Construction. An Advanced Course / D. Néel (ed.). — Cambridge University Press, 1982. — С. 196. — ISBN 0-512-24801-9.
- О. А. Ильичёва. Формальное описание семантики языков программирования. — Ростов-на-Дону : ЮФУ, 2007. — С. 99—100.
- G. Plotkin. The origins of structural operational semantics // The Journal of Logic and Algebraic Programming. — 2004. — 3 листопада. — С. 3—15. — DOI: .
- Z. Manna, S. Ness, J. Vuillemin. Inductive methods for proving properties of programs // Communications of the ACM. — 1973. — Т. 16, № 8 (3 листопада). — С. 491—502. — DOI: .
- C. Reynolds, R. Yeh. Induction as the basis for program verification // Proceedings of the 2nd international conference on Software engineering (ICSE ’76). — Los Alamitos : IEEE Computer Society Press, 1976. — 3 листопада. — С. 389.
- P. Buneman, M. Fernandez, D. Suciu. UnQL: a query language and algebra for semistructured data based on structural recursion // The VLDB Journal. — 2000. — Т. 9, № 1 (3 листопада). — С. 76—110. — DOI: .
- R. Milner, M. Tofte. Co-induction in relational semantics // Theoretical Computer Science. — Т. 87, № 1. — С. 209—220.
- Бёрстолл, 1969, с. 42.
- Гундерсон, 2011, с. 42.
- Штеффен, Рютинг, Хут, 2018, с. 177—178.
- Штеффен, Рютинг, Хут, 2018, с. 178.
- Бёрстолл, 1969, с. 43, 45.
- Гундерсон, 2011, с. 49, 257, 384, 245.
- Штеффен, Рютинг, Хут, 2018, с. 214.
Література
- B. Steffen, O. Rüthing, M. Huth. Mathematical Foundations of Advanced Informatics. — Springer, 2018. — Т. 1. Inductive Approaches. — ISBN 978-3-319-68396-6.
- R. M. Burstall. Proving properties of programs by structural induction // The Computer Journal. — 1969. — Т. 12, № 1 (3 листопада). — С. 41–48. — DOI: .
- D. Gunderson. Handbook of Mathematical Induction. Theory and Applications. — Boca Raton : CRC, 2011. — 893 с. — ISBN 978-1-4200-9364-3.
- Х. Карри. Основания математической логики. — М. : Мир, 1969. — 567 с. (рос.)