21.12. Дополнительные замечания 245
проводится только тогда, когда они оказываются сразу на обеих сторонах <:, и (2) не проводится под-
становка рекурсивных типов в тела (они просто остаются в виде переменных), и поэтому легко видеть,
что алгоритм всегда завершается.
Правила наследования, встречающиеся в именных системах типов (таких, как Облегченная Java,
Глава 19) близкородственны Янтарному правилу.
Упражнение 21.11.1 Рекомендуется, : Найдите рекурсивные типы S и T, связанные отношени-
ем наследования по эквирекурсивному определению, но не по Янтарному правилу.
21.12. Дополнительные замечания
Эта глава основана на статье-самоучителе Гапеева, Левина и Пирса (Gapeev, Levin and Pierce 2000).
Основные сведения о коиндукции можно найти в «Порочных кругах» (Vicious Circles) Барвайза и
Мосса (Barwise and Moss 1996), самоучителе Гордона по коиндукции и функциональному программиро-
ванию (Gordon 1995), а также во вводной статье Милнера и Тофте по коиндукции в семантике языков
программирования (Milner and Tofte 1991a). Информацию о монотонных функциях и неподвижных
точках см. у Ачеля (Aczel 1977) и у Дэви и Пристли (Davey and Pristley 1990).
Коиндуктивные доказательства стали использоваться в информатике в 1970-е годы, например, в
работах Милнера (Milner 1980) и Парка (Park 1981) по параллелизму; см. также категориальные рас-
суждения Арбиба и Мейнса о дуальности в теории автоматов (Arbib and Manes 1975). Однако индукция
в ее двойственной «ко-» форме была известна математикам намного раньше; она в явном виде исполь-
зовалась, например, в абстрактной алгебре и теории категорий. Основополагающая книга Ачеля (Aczel
1988) о не вполне обоснованных множествах содержит краткий исторический обзор.
Амадио и Карделли (Amadio and Cardelli 1993) построили первый алгоритм проверки наследования
для рекурсивных типов. В их статье определяются три отношения: отношение включения на бесконеч-
ных деревьях, алгоритм, проверяющий наследование для µ-типов, и отношение ссылочного наследова-
ния для µ-типов, определяемое как наименьшая неподвижная точка для набора декларативных пра-
вил вывода; доказывается, что эти три отношения эквивалентны, и все они связываются с модальной
конструкцией, основанной на отношениях частичной эквивалентности. Коиндукция не используется;
вместо этого для рассуждений о бесконечных деревьях вводится понятие конечного приближения к
бесконечному дереву. Это понятие затем играет ключевую роль во многих доказательствах.
Брандт и Хенглейн (Brandt and Henglein 1997) обнажили коиндуктивную суть системы Амадио и
Карделли, дав новую индуктивную аксиоматизацию отношения наследования, корректную и полную
по отношению к аксиомам Амадио и Карделли. Так называемое правило Arrow/Fix в этой аксио-
матизации воплощает коиндуктивность системы. В этой статье описывается общий метод построения
индуктивной аксиоматизации для отношений, которые наиболее естественно описываются через коин-
дукцию, и приводится подробное доказательство завершения для алгоритма проверки наследования.
В §21.9 мы близко следуем ходу этого доказательства. Брандт и Хенглейн показывают, что сложность
их алгоритма O n
2
.
Козен, Палсберг и Шварцбах (Kozen, Palsberg and Schwartzbach 1993) получают изящный квадра-
тичный алгоритм из наблюдения, что регулярный рекурсивный тип соответствует автомату с помечен-
ными состояниями. Они определяют понятие произведения для двух автоматов, и получают обыкно-
венный автомат над словами, который принимает слово тогда и только тогда, когда типы, соответству-
ющие исходным автоматам, не находятся в отношении наследования. После этого проверка на пустоту,
проводимая за линейное время, решает задачу проверки наследования. Это, в сочетании с квадратич-
ным временем для построения автомата-произведения и линейным временем преобразования типов в
автоматы, дает общую квадратичную сложность.
Хосойя, Вуайон и Пирс (Hosoya, Vouillon and Pierce 2001) используют родственный подход, основан-
ный на теории автоматов, и устанавливают связь между рекурсивными типами (с объединениями) и
древовидными автоматами, что позволяет построить алгоритм проверки наследования, приспособлен-
ный для задач обработки XML.
Джим и Палсберг (Jim and Palsberg 1999) решают задачу реконструкции типов (см. Главу 22) для
языков с наследованием и рекурсивными типами. Как и мы в этой главе, они используют коиндуктив-
ную точку зрения на отношение наследования для бесконечных деревьев, и обосновывают алгоритм
rev. 104