Коиндукция
В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
В информатике — коиндукция это метод определения и доказательства свойств систем одновременно взаимодействующих объектов .
Коиндукция — это математический аналог структурной индукции . [ нужна ссылка ] Коиндуктивно определенные типы данных известны как кодаты и обычно представляют собой бесконечные структуры данных , такие как потоки .
В качестве определения или спецификации коиндукция описывает, как объект можно «наблюдать», «разбивать» или «разрушать» на более простые объекты. В качестве метода доказательства его можно использовать, чтобы показать, что уравнение удовлетворяется всеми возможными реализациями такой спецификации.
Для генерации кодовых данных и управления ими обычно используются коркурсивные функции в сочетании с ленивыми вычислениями . Неформально, вместо того, чтобы определять функцию путем сопоставления с образцом каждого из индуктивных конструкторов, определяется каждый из «деструкторов» или «наблюдателей» над результатом функции.
В программировании кологическое программирование (для краткости co-LP) «является естественным обобщением логического программирования и коиндуктивного логического программирования, которое, в свою очередь, обобщает другие расширения логического программирования, такие как бесконечные деревья, ленивые предикаты и параллельные взаимодействующие предикаты. Co-LP имеет приложения к рациональным деревьям, проверке бесконечных свойств, ленивым вычислениям, параллельному логическому программированию , проверке моделей , биподобия и т. д.». доказательствам [1] Экспериментальные реализации совместного LP доступны в Техасском университете в Далласе. [2] и на языке Logtalk (примеры см. [3] ) и SWI-Пролог .
Описание [ править ]
В [4] дается краткое изложение как принципа индукции , так и принципа коиндукции . в первую очередь не рассматривается Хотя в данной статье индукция , полезно сразу рассмотреть их несколько обобщенные формы. Чтобы сформулировать принципы, необходимо сделать несколько предварительных сведений.
Предварительные сведения [ править ]
Позволять быть набором и быть монотонной функцией , то есть:
Если не указано иное, будем считать монотонным.
- X является F-замкнутым, если
- X является F-согласованным, если
- X является неподвижной точкой, если
Эти термины можно интуитивно понять следующим образом. Предположим, что представляет собой набор утверждений, и операция, приводящая к последствиям . Затем является F-замкнутым, когда вы не можете сделать вывод больше, чем вы уже утверждали, в то время как является F-непротиворечивым , когда все ваши утверждения поддерживаются другими утверждениями (т. е. нет «не- F -логических предположений»).
Теорема Кнастера -Тарского говорит нам, что наименьшая неподвижная точка (обозначается ) задается пересечением всех F-замкнутых множеств, а наибольшая неподвижная точка (обозначается ) задается объединением всех F-согласованных множеств. Теперь мы можем сформулировать принципы индукции и коиндукции.
Определение [ править ]
- Принцип индукции : если является F-замкнутым , то
- Принцип коиндукции : если является F-согласованным , то
Обсуждение [ править ]
Как уже говорилось, принципы несколько неясны, но их можно с пользой представить следующим образом. Предположим, вы хотите доказать свойство . По принципу индукции достаточно представить F-замкнутое множество на который удерживается имущество. Предположим, вы хотите показать, что . Тогда достаточно показать F-согласованное множество, что известно, что он является членом.
Примеры [ править ]
Определение набора типов данных [ править ]
Рассмотрим следующую грамматику типов данных:
То есть в набор типов входит "нижний тип" , "высший тип" и (неоднородные) списки. Эти типы можно идентифицировать по строкам в алфавите. . Позволять обозначают все (возможно, бесконечные) строки над . Рассмотрим функцию :
В этом контексте означает «объединение строк , символ и строка .» Теперь нам следует определить наш набор типов данных как фиксированную точку , но важно, возьмем ли мы наименьшую или наибольшую фиксированную точку.
Предположим, мы возьмем как наш набор типов данных. Используя принцип индукции , мы можем доказать следующее утверждение:
- Все типы данных в конечны
Чтобы прийти к этому выводу, рассмотрим множество всех конечных строк над . Четко не может создать бесконечную строку, поэтому оказывается, что это множество F-замкнуто , из чего следует вывод.
Теперь предположим, что мы берем как наш набор типов данных. Мы хотели бы использовать принцип коиндукции, чтобы доказать следующее утверждение:
- Тип
Здесь обозначает бесконечный список, состоящий из всех . Чтобы использовать принцип коиндукции , рассмотрим набор:
Это множество оказывается F-согласованным , и поэтому . Это зависит от подозрительного заявления, которое
Формальное обоснование этого является техническим и зависит от интерпретации строк как последовательностей , т.е. функций из . Интуитивно этот аргумент аналогичен аргументу о том, что (см. Повторение десятичной дроби ).
Коиндуктивные типы данных в языках программирования [ править ]
Рассмотрим следующее определение потока : [5]
data Stream a = S a (Stream a)
-- Stream "destructors"
head (S a astream) = a
tail (S a astream) = astream
Казалось бы, это определение недостаточно обосновано , но, тем не менее, оно полезно в программировании и о нем можно рассуждать. В любом случае поток — это бесконечный список элементов, из которого вы можете наблюдать первый элемент или помещать элемент перед ним, чтобы получить другой поток.
с F - коалгебрами Связь
Источник: [6]
Рассмотрим эндофунктор в категории наборы :
Последняя F-коалгебра имеет связанный с ним следующий морфизм:
Это порождает еще одну коалгебру с ассоциированным морфизмом . Потому что является окончательным , существует единственный морфизм
такой, что
Состав индуцирует другой F -коалгебры гомоморфизм . С окончателен, этот гомоморфизм единственен и, следовательно, . Итого имеем:
Это свидетельствует об изоморфизме , что категорически указывает на то, что является фиксированной точкой и оправдывает обозначения.
Поток как окончательная коалгебра [ править ]
Мы покажем это
Stream A
является конечной коалгеброй функтора . Рассмотрим следующие реализации:
out astream = (head astream, tail astream)
out' (a, astream) = S a astream
Легко увидеть, что они взаимно обратны, что свидетельствует об изоморфизме. Более подробную информацию смотрите в ссылке.
с индукцией математической Связь
Мы покажем, как принцип индукции включает в себя математическую индукцию. Позволять быть некоторым свойством натуральных чисел . Примем следующее определение математической индукции:
Теперь рассмотрим функцию :
Это не должно быть трудно увидеть . Следовательно, по принципу индукции , если мы хотим доказать какое-то свойство из , достаточно показать, что является F-замкнутым . Подробно нам потребуется:
То есть,
Как уже говорилось, это именно математическая индукция .
См. также [ править ]
Ссылки [ править ]
- ^ «Со-логическое программирование | Lambda the Ultimate» .
- ^ «Домашняя страница Гопала Гупты» .
- ^ «Logtalk3/Examples/Coinduction у мастера · LogtalkDotOrg/Logtalk3» . Гитхаб .
- ^ Бенджамин С. Пирс . «Типы и языки программирования» . Массачусетский технологический институт Пресс .
- ^ Декстер Козен , Александра Сильва . «Практическая коиндукция». CiteSeerX 10.1.1.252.3961 .
- ^ Ральф Хинце (2012). «Общее программирование с дополнениями» . Общее и индексированное программирование . Конспекты лекций по информатике. Том. 7470. Спрингер. стр. 47–129. дои : 10.1007/978-3-642-32202-0_2 . ISBN 978-3-642-32201-3 .
Дальнейшее чтение [ править ]
- Учебники
- Давиде Санджорджи (2012). Введение в бисимуляцию и коиндукцию . Издательство Кембриджского университета.
- Давиде Санджорджи и Ян Руттен (2011). Продвинутые темы по бисимуляции и коиндукции . Издательство Кембриджского университета.
- Вводные тексты
- Эндрю Д. Гордон (1994). «Учебник по коиндукции и функциональному программированию». 1994. стр. 78–95. CiteSeerX 10.1.1.37.3914 . — математически ориентированное описание
- Барт Джейкобс и Ян Руттен (1997). Учебное пособие по (Co)алгебрам и (Co)индукции ( альтернативная ссылка ) — одновременно описывает индукцию и коиндукцию.
- Эдвард Хименес и Питер Кастеран (2007). «Учебное пособие по [ко-]индуктивным типам в Coq»
- Коиндукция — краткое введение
- История
- Давиде Санджорджи . « О происхождении бисимуляции и коиндукции », Транзакции ACM по языкам и системам программирования , Vol. 31, № 4, май 2009 г.
- Разнообразный
- Кологическое программирование: расширение логического программирования с помощью коиндукции - описывает парадигму кологического программирования.