Наименьшая фиксированная точка, наибольшая фиксированная точка

Почему наименьшая фиксированная точка совпадает с наибольшей фиксированной точкой в ​​ленивом неполном языке, таком как Haskell? При чем тут непрерывность полных частичных заказов?


person Marius Catalin    schedule 04.08.2018    source источник
comment
Вы можете уточнить? Вы говорите о фиксированных точках на уровне терминов (например, рекурсивные функции) или на уровне типов (рекурсивные типы)? Также обратите внимание, что в CPO с нижней частью каждая непрерывная функция имеет наименьшую фиксированную точку, но не может иметь наибольшей фиксированной точки (id @Bool имеет только наименьшее = низ). (Кроме того, если немного обобщить, это может быть больше в CS.SE, а не в SO - даже если сообщество Haskell имеет широкий охват здесь, в SO, а в CS.SE сообщество не так велико.)   -  person chi    schedule 04.08.2018
comment
На уровне типов - фиксированная точка функтора. Я нахожу это упоминается в разных местах, в schoolofhaskell.com/user/edwardk/moore / for-less или в cs.ox. ac.uk/jeremy.gibbons/publications/adt.pdf, но я не могу сделать снимок   -  person Marius Catalin    schedule 04.08.2018


Ответы (1)


В CPO (который мы интерпретируем как тип) любая возрастающая цепочка имеет наименьшую верхнюю границу .

Вот пример, который должен передать интуицию, почему в области CPO совпадают наименьшие и наибольшие неподвижные точки. Рассмотрим следующий функтор, злоупотребляя нотацией списка для краткости:

data ListF a x = [] | a : x

Его наибольшая фиксированная точка - это тип списков Haskell (возможно, бесконечный, возможно, частичный). А как насчет его наименее фиксированной точки? В нем должны быть следующие элементы (Fix конструкторы опущены):

0 : _|_
0 : 1 : _|_
0 : 1 : 2 : _|_
...

И они образуют возрастающую цепочку, поэтому должна быть минимальная верхняя граница, которая должна быть бесконечным списком натуральных целых чисел 0 : 1 : 2 : .... Таким образом, наименьшая фиксированная точка ListF содержит бесконечные списки и, следовательно, совпадает с наибольшей фиксированной точкой.


Как было указано в комментариях, утверждение о том, что наибольшая фиксированная точка задается типом [], может нуждаться в пояснении. Например, не станет ли какой-нибудь CPO "BigList" списков, проиндексированных большими порядковыми числами, еще большей фиксированной точкой?

Сначала можно показать, что [] удовлетворяет определению окончательной ListF-коалгебры. Тогда свойство финальных коалгебр состоит в том, что они единственны с точностью до изоморфизма. Следовательно, списки, проиндексированные более крупными порядковыми числами, приведут к неизоморфному CPO, так что это не может быть окончательной коалгеброй.

Я мог бы остановиться на этом, но подождите, разве BigList не является еще большей фиксированной точкой ListF? Мой вывод состоит в том, чтобы списать эту проблему на плохую терминологию, и формально мы должны обсуждать только «окончательные коалгебры», а не «наибольшие фиксированные точки».

В зависимости от того, как вы определяете «фиксированную точку» функтора в CPO и понятия (предварительного) порядка между CPO, вы можете обнаружить, что BigList является фиксированной точкой ListF, что она больше, чем [], что вы столкнетесь с множеством -теоретические парадоксы при достижении «величайшей фиксированной точки», и что в конечном итоге для практиков Haskell нет ничего ценного в этом способе формализации «величайшей фиксированной точки», потому что вы действительно хотели хороших свойств конечной коалгебры.

(Мне было бы интересно узнать о прямом способе определения «фиксированной точки», исключающей BigList как единицу.)

Так что вместо этого термин «наибольшая фиксированная точка» может быть синонимом «окончательной коалгебры». Некоторая интуиция переносится (к «фиксированным точкам» обычно можно подойти с помощью итераций), некоторые - нет (это не «величайший» в теоретико-множественном смысле).

person Li-yao Xia    schedule 04.08.2018
comment
Я не удовлетворен этим ответом - тема нетривиальна и потребует надлежащего доказательства. Например, даже в приведенном выше примере списка, почему окончательная коалгебра не может содержать, помимо упомянутых выше списков, еще и более длинную последовательность? Под более длинным здесь я подразумеваю более крупный порядковый номер. Результат может зависеть от рассматриваемой категории или от некоторых предположений относительно функтора - это трудно увидеть, если не будет выполнена болезненная формализация (IMO). - person chi; 05.08.2018
comment
Страница Wikipedia CPO, на которую вы ссылаетесь, открывается, говоря, что три - это три разных определения, которые называются CPO. Ответ может быть лучше, если вы скажете, о чем говорите. - person Ben; 05.08.2018
comment
@Ben Ссылка была добавлена ​​кем-то другим, и все определения подразумевают свойство, которое я указал заранее, и это также все, что мне нужно в моем ответе, поэтому не представляется полезным выделять тот или иной вариант CPO. Но это в точности определение омега-копо (третье), и в статье упоминается, что первые два являются строго более тонкими понятиями. - person Li-yao Xia; 05.08.2018
comment
@chi Не так уж больно проверить, что [] является конечной коалгеброй, которая тогда единственна с точностью до изоморфизма. Я только что отредактировал свой ответ, чтобы подробнее остановиться на этом вопросе. - person Li-yao Xia; 05.08.2018
comment
Спасибо. Парадоксов множества, вероятно, можно избежать, если взять категорию CPOs, мощность которых ‹= некоторая заданная мощность. Даже там, возможно, [] действительно окажется последней коалгеброй, и что уникальный морфизм из большого списка в [] - это усечение до первых омега-элементов. - person chi; 05.08.2018