Coq 如何消除表达式内部的析取?
既然证明Coq 如何消除表达式内部的析取?,coq,Coq,既然证明存在x0:A,fx0=y/\(x=x0\/在x0l中)与证明存在x0:A,fx0=y/\在x0l中是一样的,我想在这里消除x=x0,这样我就可以应用归纳假设,但我不确定如何做到这一点。我尝试了留在(x=x0\/在x0l)和其他各种事情,但我没有成功地实现它。事实证明,为所有a b c,(a/\c)->a/\(b\/c)定义类型的帮助函数来进行重写对于存在式下的术语也不起作用 这怎么可能呢 请注意,以上是SF book练习之一。事实证明,有必要定义帮助者 1 subgoal A : Typ
存在x0:A,fx0=y/\(x=x0\/在x0l中)
与证明存在x0:A,fx0=y/\在x0l中
是一样的,我想在这里消除x=x0
,这样我就可以应用归纳假设,但我不确定如何做到这一点。我尝试了留在(x=x0\/在x0l)
和其他各种事情,但我没有成功地实现它。事实证明,为所有a b c,(a/\c)->a/\(b\/c)定义类型的帮助函数来进行重写对于存在式下的术语也不起作用
这怎么可能呢
请注意,以上是SF book练习之一。事实证明,有必要定义帮助者
1 subgoal
A : Type
B : Type
x : A
l : list A
IHl : forall (f : A -> B) (y : B),
In y (map f l) -> exists x : A, f x = y /\ In x l
f : A -> B
y : B
H : In y (map f l)
______________________________________(1/1)
exists x0 : A, f x0 = y /\ (x = x0 \/ In x0 l)
这会立即进行所需的重写。我犯了一个愚蠢的错误,认为我需要一个策略而不是一个辅助引理。我应该更仔细地研究前面的例子——如果我这样做了,我就会意识到存在论需要得到解释。你可以通过以下任何一种方法来获得归纳假设的组成部分:
专门化(IHl f y h);销毁国际人道主义法
destruct(IHl f y H)
edestruct IHl
然后,您可以使用exists
和split
将目标转换为更易于操作的形式。我恳请您不要分享SF练习的解决方案,因为它们在课堂上使用。严格地说,这并不“相同”,这是隐含的。
1 subgoal
A : Type
B : Type
x : A
l : list A
IHl : forall (f : A -> B) (y : B),
In y (map f l) -> exists x : A, f x = y /\ In x l
f : A -> B
y : B
H : In y (map f l)
______________________________________(1/1)
exists x0 : A, f x0 = y /\ (x = x0 \/ In x0 l)
Lemma In_map_iff_helper : forall (X : Type) (a b c : X -> Prop),
(exists q, (a q /\ c q)) -> (exists q, a q /\ (b q \/ c q)).
Proof.
intros.
destruct H.
exists x.
destruct H.
split.
apply H.
right.
apply H0.
Qed.