gpt4 book ai didi

coq - 使用列表删除功能

转载 作者:行者123 更新时间:2023-12-03 05:05:32 24 4
gpt4 key购买 nike

我正在尝试使用 Coq 中的列表删除函数 standard library但它要求输入奇怪的内容,我不知道如何解决。

我正在实现的功能是在 lambda 项中创建一个自由变量列表,如下所示:

Fixpoint fv (t : trm) : vars :=
match t with
| Var v => [v]
| App t1 t2 => (fv t1) ++ (fv t2)
| Abs x t' => remove x (fv t')
end.

它给了我以下错误:

Error: In environment
fv : trm -> vars
t : trm
x : nat
t' : trm
The term "x" has type "nat" while it is expected to have type
"forall x0 y : ?171, {x0 = y} + {x0 <> y}".

我很确定删除函数的定义中与假设有关。我不知道如何处理它,有什么帮助吗?

最佳答案

remove 在包含以下内容的上下文中定义:

Hypothesis eq_dec : forall x y : A, {x = y}+{x <> y}.

函数removes将此作为第一个参数(您可以通过执行Printremove看到。)

这个假设是一个函数,决定列表中类型元素的相等性。在你的情况下,你必须提供一个函数来决定 var 的相等性(这似乎是 nat,所以标准库中也可能有这样的函数) .

如果您不知道“{p} + {q}”表示法,可以在这里查找: http://coq.inria.fr/library/Coq.Init.Specif.html#sumbool

关于coq - 使用列表删除功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20998889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com