我是 coq 的新手并试图证明这个定理
Inductive expression : Type :=
| Var (n : nat)
.
.
Theorem variable_equality : forall x : nat, forall n : nat,
((equals x n) = true) -> (Var x = Var n).
这是equals的定义
Fixpoint equals (n1 : nat) (n2 : nat) :=
match (n1, n2) with
| (O, O) => true
| (O, S n) => false
| (S n, O) => false
| (S n, S n') => equals n n'
end.
到目前为止,这是我的解决方案
Proof.
intros x n. induction x as [| x' IH].
- destruct n.
+ reflexivity.
+ simpl. intro.
我最终得到了这样的东西
1 subgoal
n : nat
H : false = true
-------------------------
Var 0 = Var (S n)
我知道这个输出意味着如果定理必须是正确的,那么命题“Var 0 = Var (S n)”应该遵循命题“false = true”,但我不知道该怎么做并移动继续我的证明。