Частичные функции уровня типа обрабатываются как константы в смысле Сколема: вызовы частичной функции f
остаются f
без дальнейшего значения.
Давайте посмотрим на пример. Здесь f
- это частичная функция-предшественник:
f : Nat -> Nat
f (S x) = x
Если мы затем попытаемся использовать ее в типе, она не уменьшится, даже если f 3
уменьшится до 2
:
bad : f 3 = 2
bad = Refl
При проверке правой стороны плохого с ожидаемым типом f 3 = 2
Несоответствие типов между 2 = 2
(Тип Refl
) и f 3 = 2
(Ожидаемый тип)
Итак, f
- это константа atomi c, обозначающая только себя. Конечно, поскольку это означает само за себя, следующие проверки типов по-прежнему:
good : f 3 = f 3
good = Refl