Предположим, у меня есть:
A Linear : Set
тип для линейных терминов λ-исчисления.
A reduce-once : Term → Term
функция, которая выполняетглобальное сокращение переопределений.
A size : Linear → Nat
отношение, которое считает количество конструкторов.
Доказательство reduce-once-halts : (t : Linear) → size (reduce-once t) < size t
.
То есть у меня есть доказательство того, что применение reduce-once
всегда уменьшает размер термина. Исходя из этого, логически следует иметь возможность реализовать завершающую функцию reduce : (t : Linear) → Sigma t IsNormalized
, которая сокращает срок до нормальной формы. Поскольку я считаю, что это обычная ситуация, мой вопрос: как это обычно оформляется в Агде? Как я могу убедить его, что функция, которая уменьшает размер своего аргумента, может быть применена рекурсивно и в конечном итоге остановится?