Перейти до вмісту

Структурна індукція

Матеріал з Вікіпедії — вільної енциклопедії.

Структу́рна інду́кція — конструктивний метод математичного доведення, який узагальнює математичну індукцію (застосовувану над натуральним рядом) на довільні рекурсивно означені частково впорядковані сукупності. Структурна рекурсія — реалізація структурної індукції у формі визначення, процедури доведення або програми, що забезпечує індукційний перехід над частково впорядкованою сукупністю.

Спочатку[⇨] метод використовувався в математичній логіці, також знайшов застосування[⇨] в теорії графів, комбінаториці, загальній алгебрі, математичній лінгвістиці, але найбільшого поширення як самостійно досліджуваний метод набув у теоретичній інформатиці[1], де застосовується в питаннях семантики мов програмування, формальної верифікації, обчислювальної складності, функційного програмування.

На відміну від нетерівської індукції — найзагальнішої форми математичної індукції, застосовуваної над довільними фундованими множинами, — в понятті про структурну індукцію мається на увазі конструктивний характер, обчислювальна реалізація. При цьому фундованість сукупності — властивість, необхідна для рекурсивної ви́значності[2], таким чином, структурну рекурсію можна вважати частковим варіантом нетерівської індукції[1].

Історія

[ред. | ред. код]

Використання методу зустрічається принаймні від 1950-х років, зокрема, в доведенні теореми Лоша про ультрадобутки застосовується індукція побудови формули, при цьому сам метод особливим чином явно не називався[3]. У ті ж роки метод застосовувався в теорії моделей для доведень над ланцюгами моделей, вважається, що поява терміна «структурна індукція» пов'язана саме з цими доведеннями[4]. Карі поділив усі види застосування індукції в математиці на два типи — дедуктивну індукцію і структурну індукцію, класичну індукцію над натуральними числами вважаючи підтипом останньої[5].

З іншого боку, не пізніше початку 1950-х років метод трансфінітної індукції вже поширювався на довільні частково впорядковані множини, що задовольняють умову обриву ростучих ланцюгів (що еквівалентно фундованості[6]), в той же час Генкін[ru] відсилав до можливості індукції «в деяких типах частково впорядкованих систем»[7]. У 1960-х роках метод закріпився під назвою нетерівська індукція (за аналогією з нетерівським кільцем, у якому виконано умову обриву ростучих ланцюгів ідеалів)[8].

Явне визначення структурної індукції, яке посилається як на рекурсивну ви́значність, так і на нетерівську індукцію, дав Берстолл[en]) наприкінці 1960-х років[9], і в літературі з інформатики саме до нього відносять уведення методу[10][11].

Надалі в інформатиці утворилося декілька напрямів, які ґрунтуються на структурній індукції як базовому принципі, зокрема, такими є структурна операційна семантика мов програмування Плоткіна[en])[12], серія індуктивних методів формальної верифікації[13][14], структурно-рекурсивна мова запитів UnQL[15]. У 1990-х роках у теоретичній інформатиці поширився метод коіндукції, застосовуваний над нефундованих (як правило, нескінченних) структурах, який вважають дуальним для структурної індукції[16].

Через широке застосування в теоретичній інформатиці і нечисленність згадок у математичній літературі, станом на 2010-ті роки вважається, що виділення структурної індукції як особливого методу більшою мірою характерне для інформатики, ніж для математики[4].

Визначення

[ред. | ред. код]

Найзагальніше визначення[17][18] вводиться для класу структур (без уточнення природи структур ) з відношенням часткового порядку між структурами , з умовою мінімального елемента в і умовою наявності для кожної цілком упорядкованої сукупності зі всіх структур, що суворо передують їй: . Принцип структурної індукції в цьому випадку формулюється так: якщо виконання властивості для випливає з виконання властивості для всіх структур, що суворо передують їй, то властивість виконано і для всіх структур класу; символічно (в позначеннях систем натурального виведення[en]):

.

Рекурсивність у цьому визначенні реалізується сукупністю вкладених структур: як тільки є спосіб виводити властивості структури виходячи зі властивостей усіх попередніх їй, можна говорити про рекурсивну визначність структури.

В літературі з інформатики поширена й інша форма визначення структурної індукції, орієнтована на рекурсію за побудовою[19], в ній розглядається як клас об'єктів, визначених над деякою множиною атомарних елементів і набором операцій , при цьому кожен об'єкт  — результат послідовного застосування операцій до атомарних елементів. У цьому формулюванні принцип стверджує, що властивість виконується для всіх об'єктів , як тільки має місце для всіх атомарних елементів і для кожної операції з виконання властивості для елементів слідує виконання властивості для :

.

Роль відношення часткового порядку з загального визначення тут грає відношення включення за побудовою: [20].

Приклади

[ред. | ред. код]

Запровадження принципу в інформатику мотивувалося рекурсивним характером таких структур даних, як списки і дерева[21]. Перший приклад над списком, наведений Берстоллом — твердження про властивості згортки списків[ru] з елементами типу двомісною функцією і початковим елементом згортки у зв'язку з конкатенацією списків :

.

Структурна індукція в доведенні цього твердження ведеться від порожніх списків — якщо , то:

ліва частина, за визначенням конкатенації: ,
права частина, за визначенням згортки:

і в разі, якщо список непорожній, і починається елементом , то:

ліва частина, за визначенням конкатенації та згортки: ,
права частина, за визначенням згортки і припущенням індукції: .

Припущення індукції ґрунтується на істинності твердження і включення .

В теорії графів структурна індукція часто застосовується для доведення тверджень про багатодольні графи (з використанням переходу від -дольних до -дольних), у теоремах про амальгамування графів[en], властивостей дерев і лісів[22]. Інші структури в математиці, для яких застосовується структурна індукція — перестановки, матриці і їх тензорні добутки, конструкції з геометричних фігур у комбінаторній геометрії.

Типове застосування в математичній логіці та універсальній алгебрі — структурна індукція побудови формул з атомарних термів, наприклад, показується, що виконання необхідної властивості для термів і тягне , , і так далі. Також за побудовою формул виконуються багато структурно-індуктивних доведень у теорії автоматів, математичній лінгвістиці; для доведення синтаксичної коректності комп'ютерних програм широко використовується структурна індукція за БНФ-визначенням мови (іноді навіть виділяється в окремий підтип — БНФ-індукція[23]).

Примітки

[ред. | ред. код]
  1. а б Штеффен, Рютинг, Хут, 2018, с. 179.
  2. [Рекурсия Структурна індукція] — стаття з Математичної енциклопедії
  3. J. Loś[pl]. 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 (25 грудня). — С. 98—113. — DOI:10.1016/S0049-237X(09)70306-4.
  4. а б Гундерсон, 2011, с. 48.
  5. Карри, 1969, при цьому зазначаючи: «Звичайна математична індукція зі справжньої точки зору є структурною індукцією...; вона так часто зустрічається <...> що варто вважати її третім видом - натуральною індукцією».
  6. А. Г. Курош. Лекции по общей алгебре. — М. : Физматлит, 1962. — С. 21—22 (§5. Условие минимальности).
  7. Л. Генкин. О математической индукции. — М. : Физматгиз, 1962. — С. 36 (заключение).
  8. П. Кон. Универсальная алгебра. — М. : Мир, 1969. — С. 33—34.
  9. Бёрстолл, 1969.
  10. Tools and Notions for Program Construction. An Advanced Course / D. Néel (ed.). — Cambridge University Press, 1982. — С. 196. — ISBN 0-512-24801-9.
  11. О. А. Ильичёва. Формальное описание семантики языков программирования. — Ростов-на-Дону : ЮФУ, 2007. — С. 99—100.
  12. G. Plotkin. The origins of structural operational semantics // The Journal of Logic and Algebraic Programming. — 2004. — 25 грудня. — С. 3—15. — DOI:10.1016/j.jlap.2004.03.009.
  13. Z. Manna, S. Ness, J. Vuillemin. Inductive methods for proving properties of programs // Communications of the ACM. — 1973. — Т. 16, № 8 (25 грудня). — С. 491—502. — DOI:10.1145/355609.362336.
  14. 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. — 25 грудня. — С. 389.
  15. 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 (25 грудня). — С. 76—110. — DOI:10.1007/s007780050084.
  16. R. Milner, M. Tofte. Co-induction in relational semantics // Theoretical Computer Science. — Т. 87, № 1. — С. 209—220.
  17. Бёрстолл, 1969, с. 42.
  18. Гундерсон, 2011, с. 42.
  19. Штеффен, Рютинг, Хут, 2018, с. 177—178.
  20. Штеффен, Рютинг, Хут, 2018, с. 178.
  21. Бёрстолл, 1969, с. 43, 45.
  22. Гундерсон, 2011, с. 49, 257, 384, 245.
  23. Штеффен, Рютинг, Хут, 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[en]. — 1969. — Т. 12, № 1 (25 грудня). — С. 41–48. — DOI:10.1093/comjnl/12.1.41.
  • D. Gunderson. Handbook of Mathematical Induction. Theory and Applications. — Boca Raton : CRC, 2011. — 893 с. — ISBN 978-1-4200-9364-3.
  • Х. Карри. Основания математической логики. — М. : Мир, 1969. — 567 с. (рос.)