coq - 如何在 Coq 的假设中实例化 forall 的变量?

标签 coq

我有两个假设

IHl: forall (lr : list nat) (d x : nat), d = x \/ In x l' -> (something else)
Head : d = x

我要apply IHlHead因为它满足d = x \/ In x l IHl。我试过 apply with以简单提示失败的策略 Error: Unable to unify .

我应该使用哪种策略来实例化假设中的变量?

最佳答案

您的假设 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

这是 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)).

可能有一个 apply您可以使用,但取决于对您隐含/推断的内容,我很难告诉您它是哪一个。

关于coq - 如何在 Coq 的假设中实例化 forall 的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31515009/

相关文章:

程序修复点的 Coq 简化

syntax - Coq 介绍语法

coq - 是否可以使用 Coq 编写 C 程序?

coq - 有效使用 Coq 提示数据库的最佳实践

coq - Coq 中记录成员的归纳?

automation - 打样自动化

coq - 如何在 Coq 中定义这种依赖类型的树结构?

coq - 如何在通用量化下捕获参数(使用模块?部分?)

coq - 我可以将 Coq 证明提取为 Haskell 函数吗?

Coq:整数的 bool 比较