Здравствуйте. Давно я сюда ничего не писал, но вот недавно возникла ситуация, и я решил попросить помощи.
Фабула: есть классический функциональный тип Список:
Код:
data List a = Nil | Cons a (List a)
для него требуется доказать выполнение второго закона класса типов Функтор:
Код:
fmap f (fmap g l) = fmap (f . g) l
то есть композиция функторного преобразования равна функторному преобразованию по композиции составляющих. На одной площадке было написано простейшее индуктивное доказательство в духе Tapl и Бенджамина Пирса: доказываем для базы индукции Nil, доказываем индукционный переход. Но Пирса можно понять - у него все выкладки базируются на языке со строгой семантикой и все типы конечны, мы не встретим там бесконечных списков, значит наивная индукция работает. Но подобное доказательство было приведено относительно Хаскеля, где присутствуют бесконечные списки. Это вызвало мое подозрение, т.к. по такой же логике можно доказать утверждение "бесконечных списков не существует", что противоречит истине. Мне были даны ссылки на Википедию "Трансфинитная индукция", но детально затруднились показать, как мы вводим отношение порядка на множестве списков для удовлетворения условиям этой индукции.
Собственно, вопрос: как доказать? В процессе обсуждения были высказаны предположения, что даже само определение равенства термов, не имеющих нормальной формы, может вызвать затруднения. Но в этом вопросе у меня есть некий оптимизм - мы можем попытаться ввести понятие равенства термов не приводя их к нормальным формам, а пытаясь привести оба терма (через частичные применения альфа/бета/эта редукции) к таким термам, которые равны (не являясь нормальными формами) - этакое экстенсиальное равенство. А поскольку в реальности мы можем ограничиться только конечными термам и (возможно, не имеющими нормальной формы), то на исходном множестве конечных термов можно считать отношение равенства определенным. Вопрос про применение индукции на таких бесконечных коиндуктивных типах, ну и, возможно, определение равенства на них.