(используя более стандартную запись, я надеюсь, что вам все еще ясно. CEq
- это ==
, CLe
- это <
(его, вероятно, следует назвать CLt
))
Сначала Прежде чем углубляться в переписывание, давайте удостоверимся, что у вас есть достаточно фактов, чтобы доказать теорему.
Вы хотите доказать x < y
, и вы знаете y == z
. Для этого вы хотели бы, чтобы следующая лемма изменила цель на x < z
:
y == z -> x < z -> x < y
Это в настоящее время отсутствует в списке фактов.
Один способ представить этот факт соответствующим образом для обобщенного переписывания - это Morphism
объявление для CLe
:
Add Morphism CLe with signature CEq ==> CEq ==> iff
as ceq_cle_mor. Admitted.
Подпись CEq ==> CEq ==> iff
означает:
forall x x',
x == x' ->
forall y y',
y == y' ->
(x < y) <-> (x' < y')
То, что можно легко проверить, является обобщением пропущенный факт выше. Добавив его и исправив опечатку в лемме cnat_add_neutral
(в первоначальной версии вашего вопроса, теперь отредактированной), доказательство проходит.
Add Morphism CLe with signature CEq ==> CEq ==> iff
as ceq_cle_mor. Admitted.
(* CNat Test Theorem *)
Example cle_neutral_test: forall x:CNat, O«x -> O«x±O.
Proof.
intros x CH.
rewrite cnat_add_neutral.
apply CH.
Qed.