You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Browse filesBrowse the repository at this point in the historyBrowse files
Marat Zimnurov
committed
Теоркат, шаг 2: функтор перестал быть словом без гарантии
Объявление функтора в языке было и раньше: `функтор «Ф» из «A» в «B»` с блоком
отображений разбирался и укладывался в дерево. Проверки за ним не стояло
никакой — можно было написать это слово и получить ровно ничего, кроме слова.
Курс, кстати, на эту ловушку и наткнулся: файл с функтором проходил `check` с
ответом valid, и это легко принять за реализацию.
Теперь проверяются три закона, и все три ДОКАЗЫВАЮТСЯ, а не проверяются на
сетке:
1. согласование стрелки с объектами: если «ф» ведёт из «A» в «B», её образ
обязан вести из образа «A» в образ «B»;
2. сохранение композиции: образ композиции обязан быть композицией образов в
том же порядке — и обязан быть объявлен именно композицией, а не стрелкой
с теми же концами;
3. сохранение единиц: образ тождественного морфизма объекта — тождественный
морфизм его образа.
Плюс однозначность отображения объектов: второй образ у того же объекта — это
ошибка, а не победа последней строки.
Доказательство возможно ровно потому, что морфизм здесь ОБЪЯВЛЕНИЕ, а не
значение: имя, домен и кодомен известны до запуска, и «образ композиции есть
композиция образов» проверяется сравнением имён — без сетки и без решателя. С
функциями первого класса такой проверки не бывает: там композиция это
вычисление, а равенство вычислений неразрешимо. Тот самый отказ от
экспоненциалов, за который язык платит выразительностью, здесь платит обратно.
ЗАКОНЫ НЕ ВКЛЮЧАЮТСЯ ПО ЖЕЛАНИЮ. В контракте стояла строка `сохраняет
композицию` — отдельное разрешение на проверку. Не сделана намеренно:
отображение, не сохраняющее композицию, функтором не является, и позволить
написать это слово без закона значило бы продать имя вместо содержания.
Граница честности закреплена тестом: имена категорий («из «Продажи» в
«Биллинг»») остаются пометкой для читателя. Категория отдельной сущностью не
объявляется, и утверждать, что объект принадлежит именно ей, не на чем. Тест
с выдуманными категориями обязан проходить — если когда-нибудь перестанет,
значит появилась проверка, и обещание в документации надо переписать.
Проверено: 10 тестов законов функтора, 1434 теста языка целиком, 0 падений.
0 commit comments