В этой статье есть несколько проблем. Помогите улучшить ее или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти сообщения )
|
В информатике коиндукция — это метод определения и доказательства свойств систем одновременно взаимодействующих объектов .
Коиндукция — это математическая двойственность структурной индукции . [ требуется ссылка ] Коиндуктивно определяемые типы данных известны как коданные и обычно представляют собой бесконечные структуры данных , такие как потоки .
Как определение или спецификация , коиндукция описывает, как объект может быть «наблюден», «разложен» или «разрушен» на более простые объекты. Как метод доказательства , он может быть использован для того, чтобы показать, что уравнение удовлетворяется всеми возможными реализациями такой спецификации.
Для генерации и манипулирования codata обычно используются функции corecursive в сочетании с ленивым вычислением . Неформально, вместо того, чтобы определять функцию путем сопоставления с образцом для каждого из индуктивных конструкторов, определяется каждый из «деструкторов» или «наблюдателей» над результатом функции.
В программировании co-logic programming (co-LP для краткости) «является естественным обобщением логического программирования и коиндуктивного логического программирования, которое в свою очередь обобщает другие расширения логического программирования, такие как бесконечные деревья, ленивые предикаты и параллельные коммуникационные предикаты. Co-LP имеет приложения к рациональным деревьям, проверке бесконечных свойств, ленивым вычислениям, параллельному логическому программированию , проверке моделей , доказательствам бисимилальности и т. д.» [1] Экспериментальные реализации co-LP доступны в Техасском университете в Далласе [2] и на языке Logtalk (примеры см. в [3] ) и SWI-Prolog .
В [4] дается краткое изложение как принципа индукции , так и принципа коиндукции . Хотя эта статья в первую очередь не посвящена индукции , полезно сразу рассмотреть их несколько обобщенные формы. Чтобы сформулировать принципы, требуется несколько предварительных сведений.
Пусть будет множеством и будет монотонной функцией , то есть:
Если не указано иное, предполагается, что сигнал монотонный.
Эти термины можно интуитивно понять следующим образом. Предположим, что — набор утверждений, а — операция, которая выдает следствия . Тогда F-замкнуто, когда вы не можете сделать вывод, кроме того, что уже утверждали, а F -непротиворечиво , когда все ваши утверждения поддерживаются другими утверждениями (т. е. нет «не- F -логических предположений»).
Теорема Кнастера –Тарского гласит, что наименьшая неподвижная точка ( обозначается ) задается пересечением всех F-замкнутых множеств, тогда как наибольшая неподвижная точка (обозначается ) задается объединением всех F-согласованных множеств. Теперь мы можем сформулировать принципы индукции и коиндукции.
Принципы, как указано, несколько непрозрачны, но их можно с пользой рассматривать следующим образом. Предположим, вы хотите доказать свойство . По принципу индукции достаточно продемонстрировать F-замкнутое множество , для которого выполняется свойство. Двойственно, предположим, что вы хотите показать, что . Тогда достаточно продемонстрировать F-согласованное множество, которое, как известно, является членом.
Рассмотрим следующую грамматику типов данных:
То есть, набор типов включает "нижний тип" , "верхний тип" и (неоднородные) списки. Эти типы можно идентифицировать со строками над алфавитом . Пусть обозначает все (возможно бесконечные) строки над . Рассмотрим функцию :
В этом контексте означает «конкатенацию строки , символа и строки ». Теперь нам следует определить наш набор типов данных как фиксированную точку , но важно, возьмем ли мы наименьшую или наибольшую фиксированную точку.
Предположим, что мы берем в качестве нашего набора типов данных. Используя принцип индукции , мы можем доказать следующее утверждение:
Чтобы прийти к этому выводу, рассмотрим множество всех конечных строк над . Очевидно, что не может создать бесконечную строку, поэтому оказывается, что это множество F-замкнуто , и отсюда следует вывод.
Теперь предположим, что мы берем в качестве нашего набора типов данных. Мы хотели бы использовать принцип коиндукции, чтобы доказать следующее утверждение:
Здесь обозначает бесконечный список, состоящий из всех . Чтобы использовать принцип коиндукции , рассмотрим множество:
Этот набор оказывается F-консистентным , и поэтому . Это зависит от подозрительного утверждения, что
Формальное обоснование этого является техническим и зависит от интерпретации строк как последовательностей , т.е. функций из . Интуитивно аргумент аналогичен аргументу, что (см. Повторяющаяся десятичная дробь ).
Рассмотрим следующее определение потока : [ 5]
Поток данных a = S a ( Поток a ) -- Поток "деструкторов" head ( S a astream ) = a tail ( S a astream ) = astream
Это определение, казалось бы, не вполне обосновано , но тем не менее оно полезно в программировании и может быть обосновано. В любом случае, поток — это бесконечный список элементов, из которого вы можете наблюдать первый элемент или поместить элемент перед ним, чтобы получить другой поток.
Источник: [6]
Рассмотрим эндофунктор в категории множеств :
С конечной F-коалгеброй связан следующий морфизм:
Это индуцирует другую коалгебру с ассоциированным морфизмом . Поскольку является конечным , существует единственный морфизм
такой что
Композиция индуцирует другой гомоморфизм F -коалгебры . Поскольку является конечным, этот гомоморфизм единственен и, следовательно , . Всего имеем:
Это свидетельствует об изоморфизме , который в категориальных терминах указывает на то, что является неподвижной точкой и оправдывает обозначение.
Мы покажем, что
Поток А
является конечной коалгеброй функтора . Рассмотрим следующие реализации:
из потока = ( голова потока , хвост потока ) из потока ( а , поток ) = S а поток
Легко видеть, что они взаимно обратны, что свидетельствует об изоморфизме. Подробнее см. ссылку.
Мы покажем, как принцип индукции включает в себя математическую индукцию. Пусть будет некоторым свойством натуральных чисел . Мы возьмем следующее определение математической индукции:
Теперь рассмотрим функцию :
Нетрудно заметить, что . Следовательно, по принципу индукции , если мы хотим доказать некоторое свойство , достаточно показать, что является F-замкнутым . В деталях нам требуется:
То есть,
Это и есть математическая индукция , как она и утверждается.