我想知道是否有办法在 Coq 中证明一个定理时引入一个全新的变量?
对于一个完整的示例,请考虑以下关于列表长度均匀性的属性。
Inductive ev_list {X:Type}: list X -> Prop :=
| el_nil : ev_list []
| el_cc : forall x y l, ev_list l -> ev_list (x :: y :: l).
现在我想证明对于任何列表l
,如果它length
是偶数,则ev_list l
成立:
Lemma ev_length__ev_list': forall X (l : list X), ev (length l) -> ev_list l.
Proof.
intros X l H.
这使:
1 subgoals
X : Type
l : list X
H : ev (length l)
______________________________________(1/1)
ev_list l
现在,我想“定义”一个新的自由变量n
和一个假设n = length l
。在手写数学中,我认为我们可以做到这一点,然后对n
. 但是有没有办法在 Coq 中做同样的事情?
笔记。我问的原因是:
我不想将其
n
人为地引入定理本身的陈述中,就像在前面链接的页面中所做的那样,恕我直言,这是不自然的。我试过了
induction H.
,但它似乎不起作用。Coq 无法对length l
'sev
-ness 进行案例分析,也没有生成归纳假设 (IH)。
谢谢。