Здесь есть несколько проблем.
Прежде всего , ошибка означает, что вы пытаетесь дать cnat_add_morphism
предложение вместо доказательства этого предложения. В Coq доказательства являются объектами типа предложения, доказательством которого они являются. например, forall x : CNat, x¦x
является типом, и вы должны создать объект этого типа, чтобы гарантировать, что тип является истинным. Это похоже на то, что у вас есть функция f : nat -> nat
и вы пишете f nat
, вы получаете следующую ошибку:
The term "nat" has type "Set" while it is expected to have type "nat".
Полученная вами ошибка точно такая же. Таким образом, вам нужно предоставить объект типа "x" x ", т. Е. Доказательство, которое гарантирует, что предложение x ¦ x
верно. Таким образом, вы можете использовать аксиому ceq_reflexivity
. Термин (ceq_reflexivity x)
имеет тип x¦x
, и вы можете использовать его вместо неправильного использования x¦x
.
(cnat_add_morphism x x (ceq_reflexivity x))
Second , вам нужно применить лемму, а не переписывать и используйте предположение вместо x¦x
(используйте x и y не только x).
apply (cnat_add_morphism x y CH c c (ceq_reflexivity c)).