Инъективная функция от типа A
до B
сопоставляет отдельные входы с различными выходами, но может не охватывать весь диапазон.
например,
f : ℕ -> ℕ
f = λx. 2*x
Я пытаюсьчтобы понять, как выразить такую вещь в Coq.
Я думаю, что Coq может говорить о таком объекте как о каком-то типе продукта, в котором один элемент является «необработанной» функцией A -> B
само по себе и другое является доказательством того, что указанная функция является инъективной.
Я не знаю, как выразить это в синтаксисе Coq, хотя ... более конкретно, как можно ссылаться на имя функциив определении типа в той же самой «структуре» и какой продукт-подобный предмет является наиболее подходящим.
Я попытался поместить здесь несколько вещей в эллипсах, но не смог уловитьфункция.
Definition injection (A : Prop) (B: Prop) :=
A -> B /\ ...
Я застрял на том, что положить в эллипсы.
Еще один пример определения, который не отражает правильную вещь, что-то вроде этого:
Definition injection (A : Prop) (B: Prop) :=
A * (not (A = A)) -> B * (not (B = B)).
рПроблема здесь в том, что =
работает с самими типами ... и, даже если это определение можно было бы преобразовать в лучшее, для него потребовалось бы отвратительное количество сантехники.