george66, а можно ли каким-нибудь естественным образом интерпретировать категорию, дуальную к Вашей, где все стрелки, соответствующие подстановкам, будут обращены вспять, и
будет начальным, а не финальным, объектом?
Сразу не соображу. А зачем? Кажется, что-то подобное есть в "Справочной книге по математической логике", там в первом томе есть глава про интерпретации в категориях, но она слишком абстрактно завёрнута (на мой взгляд). В общем, если дана теория (вообще говоря, с несколькими сортами переменных - по действительным числам, натуральным, ещё чему-нибудь), можно саму теорию превратить в категорию и затем строить её модели как "правильные отображения" этой категории в Set (или ещё во что-нибудь вместо Set). Модели сами образуют категорию и какая-то двойственность (Йонеды) там возникает (кажется, между исходной теорией-категорией и категорией её "конечно представленных моделей"). Не уверен, что от этого прибавляется знаний.
По поводу теоремы 1.32 - очень надеюсь когда-нибудь сам доказать её попроще и тогда раздел не понадобится. Кстати, в книге Карри и Фейса она занимает страницы три, в результате её приходится буквально расшифровывать.
Я пытался формализовать свои результаты в Coq (а также Lean и Metamath), но скоро упёрся в проблемы самого Coq. У меня есть некий тип
(на самом деле это тип лямбда-термов) и тип
зависящий от натурального параметра
(это лямбда-термы, содержащие ровно
лямбд, этот тип хитрым путём определяю независимо, что удобно для определения подстановки). Я хочу доказать, что
есть дизъюнктное объединение (
) всех
. Строю три (естественные) функции
Доказываю взаимную обратность (что они дают изоморфизм
и
)
Но когда выписываю теорему
Получаю ошибку "The term bar (foo n a) has type A (rang (foo n a)) while it is expected to have type A n".
Спрашиваю на форуме Coq, велят вставить "тип равенства". Пытаюсь это сделать и понимаю, что вместо 14-ти страниц мрачных доказательств получу в несколько раз больше мрачных доказательств, из которых половина не относится к делу, бросаю. На самом деле идеально подошла бы более тупая "экстенсиональная теория типов" и пруфчекер Nuprl, но он, видимо, сдох (на письма не отвечают). От него осталась виртуальная машина, которая стартует больше часа, потому что написана на Lisp. Ещё отдельно можно рассказать про Metamath, но это настолько изысканный мазохизм, что лучше не начинать. В общем, по опыту попыток формализовать в Coq, Metamath и Lean скажу, что хорошего пруфчекера пока нет.
Спасибо, что комментируете!