Ответ на заголовок
simpl in H.
Реальный ответ
Приведенный выше код не будет работать.
Определение even
изКнига логических основ:
Inductive even : nat → Prop :=
| ev_0 : even 0
| ev_SS (n : nat) (H : even n) : even (S (S n)).
even 0
- это опора, а не бул.Похоже, вы смешиваете типы True
и False
и логические значения true
и false
.Это совершенно разные вещи, и они не взаимозаменяемы по логике Кока.Короче говоря, even 0
не упрощается до true
или True
или чего-либо еще.Это просто even 0
. Если вы хотите показать, что even 0
логически верно, вы должны построить значение этого типа.
Я не помню, какая тактика доступна в этот момент вНЧ, но вот некоторые возможности:
(* Since you know `ev_0` is a value of type `even 0`,
construct `False` from H and destruct it.
This is an example of forward proof. *)
set (contra := H ev_0). destruct contra.
(* ... or, in one step: *)
destruct (H ev_0).
(* We all know `even 1` is logically false,
so change the goal to `False` and work from there.
This is an example of backward proof. *)
exfalso. apply H. apply ev_0.