【发布时间】:2026-01-24 18:15:02
【问题描述】:
我有一个函数 f 返回一对。然后我证明了一些关于它的结果。
在我的引理中,我第一次尝试获取每个组件是使用let (x, y) := f z in。但是,尝试使用这些引理似乎很麻烦。 apply 不能直接工作,我必须使用 pose proof 或其变体在假设中添加引理并破坏 f z 才能使用它。有没有办法在引理中顺利使用 let-in ?还是因为使用起来很痛苦而气馁?
为了完成我的问题,这里是我写关于f 的引理的其他尝试。我尝试直接使用fst (f z) 和snd (f z),但我也发现它很麻烦。最后,我以forall x y, (x,y) = f z -> 开始了我的引理。
这是一个具体的例子。
Require Import List. Import ListNotations.
Fixpoint split {A} (l:list A) :=
match l with
| [] => ([], [])
| [a] => ([a], [])
| a::b::l => let (l1, l2) := split l in (a::l1, b::l2)
end.
Lemma split_in : forall {A} (l:list A) x,
let (l1, l2) := split l in
In x l1 \/ In x l2 <-> In x l.
Lemma split_in2 : forall {A} (l:list A) x,
In x (fst (split l)) \/ In x (snd (split l)) <-> In x l.
Lemma split_in3 : forall {A} (l:list A) x l1 l2,
(l1, l2) = split l ->
In x l1 \/ In x l2 <-> In x l.
【问题讨论】:
标签: coq