我有两个假设
IHl: forall (lr : list nat) (d x : nat), d = x \/ In x l' -> (something else)
Head : d = x
Run Code Online (Sandbox Code Playgroud)
虽然我想apply IHl
在头上,因为它满足Head
了IHl.然而d = x \/ In x l
战术将通过简单的暗示失败apply with
.
我应该使用哪种策略来实例化假设中的变量?
你的假设IHl
需要4个参数:lr : list nat
,d : nat
,x : nat
,和_ : d = x \/ In x l'
.
你的假设Head : d = x
没有正确的类型作为第四个参数传递.你需要将它从平等证明转变为分离证明.幸运的是,您可以使用:
or_introl
: forall A B : Prop, A -> A \/ B
Run Code Online (Sandbox Code Playgroud)
这是该or
类型的两个构造函数之一.
现在您可能必须明确传递B
Prop,除非可以通过统一在上下文中找出它.
以下是应该工作的事情:
(* To keep IHl but use its result, given lr : list nat *)
pose proof (IHl lr _ _ (or_introl Head)).
(* To transform IHl into its result, given lr : list nat *)
specialize (IHl lr _ _ (or_introl Head)).
Run Code Online (Sandbox Code Playgroud)
可能有一个apply
你可以使用,但是根据你隐含/推断的内容,我很难告诉你它是哪一个.
归档时间: |
|
查看次数: |
1458 次 |
最近记录: |