我有两个假设
IHl: forall (lr : list nat) (d x : nat), d = x \/ In x l' -> (something else)
Head : d = x
我希望apply IHl
Head
,因为它满足IHl的d = x \/ In x l
。我尝试了apply with
策略,但是通过简单的提示Error: Unable to unify
失败了。
我应该使用哪种策略来实例化假设中的变量?
答案 0 :(得分:7)
您的假设IHl
有4个参数:lr : list nat
,d : nat
,x : nat
和_ : d = x \/ In x l'
。
您的假设Head : d = x
没有正确的类型作为第4个参数传递。你需要将它从平等证明转变为分离证明。幸运的是,您可以使用:
or_introl
: forall A B : Prop, A -> A \/ B
是or
类型的两个构造函数之一。
现在您可能必须明确传递B
道具,除非可以通过统一在上下文中找出它。
以下是应该有效的事情:
(* 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)).
您可以使用apply
,但根据隐含/推断的内容,我很难告诉您它是哪一个。