Немножко про всякие равенства
Feb. 15th, 2013 11:10 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
В современной теории типов выделяют два основных класса равенств: Definitional equality и Propositional equality.
Definitional equality можно перевести как равенство-по-определению. Пример:
two = suc (suc zero)
Таким равенством мы выражаем идею интенсиональности, вкладывая в него представление об одинаковости смысла левой и правой частей. Равенство-по-определению задаёт полный синоним, его можно использовать подстановочным образом при переписывании термов. Ещё один (тривиальный) пример - переименование связанных переменных, часто называемое альфа-конверсией.
Ещё один класс равенств, которые часто рассматривают как подвид равенств-по-определению, это вычислительные равенства (computational equality), то есть равенство, основанное на редукциях
(λx. x + x) two = two + two = suc (suc (suc (suc zero)))
Propositional equality
Прямые вычислительные правила не подходят для того, чтобы показать, что для двух произвольных натуральных x и y имеет место равенство
x + y = y + x
Это утверждение описывает экстенсиональное равенство, то есть вычислительно оно выполняется на каждой конкретной паре натуральных аргументов. Фактически это не определение, а теорема; если определять сложение рекурсивно, то можно дать индуктивное доказательство (которое, однако, далеко не тривиально).
В теории типов экстенсиональное равенство это суждение (judgment, суждение в логике - это высказывание на мета-языке), а не высказывание (proposition, последнее понимается как часть формальной системы, а не мета-языка). Можно, однако, включить его в формальную систему, введя высказывание об идентичности (identity type) :
_≡_ : ℕ → ℕ → Proposition
То есть
∀ x y → x + y ≡ y + x
выражает пропозициональное равенство, конкретно - высказывание о том, что сложение натуральных коммутативно. Терм, населяющий такой тип, служит доказательством этого высказывания. Для Агды, например, такое доказательство можно посмотреть здесь или в модуле Data.Nat.Properties стандартной библиотеки, однако во втором случае требуется понимание того, как работает модуль ≡-Reasoning.
Ссылки
Хороший небольшой туториал про равенства в Агде: Andreas Abel, Agda: Equality.
Ну и первоисточник (не считая Пера нашего Мартин-Лёфа), в котором гораздо больше полезных идей по сравнению с моим конспективным изложением: nLab, Equality.
no subject
Date: 2013-02-16 11:49 am (UTC)no subject
Date: 2013-02-16 03:27 pm (UTC)no subject
Date: 2013-02-16 06:05 pm (UTC)http://www.cse.chalmers.se/research/group/logic/book/
Там как раз идея интенсиональности-экстенсиональности в деталях разобрана.
no subject
Date: 2013-02-16 09:40 pm (UTC)no subject
Date: 2013-02-16 10:05 pm (UTC)Педагогически это уменьшит путаницу в типах 1-5 (см. http://nponeccop.livejournal.com/297483.html), привьет мысль о том, что типы - это абстрактные метки произвольной природы.