coq - 在证明中生成了奇怪的目标`Some 0 = true`
问题描述
考虑这个玩具 Coq 问题(CollaCoq):
Require Import ssreflect ssrfun ssrbool.
Require Import Unicode.Utf8.
Definition optfun (n: nat) : option nat :=
match n with
| 0 => Some 0
| _ => None
end.
Definition boolfun (n: nat) : bool :=
match n with
| 0 => true
| _ => false
end.
Lemma lem : ∀ n, isSome (optfun n) = boolfun n.
Proof.
intro. unfold optfun, boolfun. destruct n.
我的目标是在返回 Someboolfun
时为真optfun
,并在引理中证明这一点。
然而,在给出证明步骤之后,当前的子目标是Some 0 = true
。
我认为这样的命题甚至不应该进行类型检查,因为我希望Some 0
是 typeoption nat
并且true
是 type bool
。为什么会这样?optfun
我的,boolfun
或者有什么问题lem
吗?