如何在Coq中进行高阶项重写?

如何在Coq中进行高阶项重写?,coq,lambda-calculus,coqide,coq-plugin,Coq,Lambda Calculus,Coqide,Coq Plugin,这个问题是根据我的问题提出的。这个问题有两个功能和两个术语: 职能: is: (e->t)->(e->t) IS: e->(e->t)->t 条款: (is(boss))(John): t IS(John, boss): t 我的问题是:如何用只有is的术语重写涉及is的术语?Coq(或第三方工具)有这样的重写功能吗?Coq是否有设施检查重写条款的平等性 也许这样的重写可以在Coq世界之外完成,也许还有其他纯粹的lambda演算工具只进行语法操作 没有工具

这个问题是根据我的问题提出的。这个问题有两个功能和两个术语:

职能:

is: (e->t)->(e->t)
IS: e->(e->t)->t
条款:

(is(boss))(John): t
IS(John, boss): t
我的问题是:如何用只有
is
的术语重写涉及
is
的术语?Coq(或第三方工具)有这样的重写功能吗?Coq是否有设施检查重写条款的平等性


也许这样的重写可以在Coq世界之外完成,也许还有其他纯粹的lambda演算工具只进行语法操作

没有工具可以对您直接描述的Coq代码执行文本转换。在不太了解语法框架的情况下,我认为您最好编写一个Sed脚本,查找应用于参数的
is
的出现,并用
is
替换这些出现的等价表达式


第二个“IS”形式可以更容易地转换为IS-boss谓词,这就是为什么我要努力实现它


我认为,如果你使用SED脚本,你可以很容易直接进入<代码> ISSBOSS表单,而不使用<代码>是 .< /P>你想在证明中执行这个重写吗?或者你想编辑现存的COQ定义,提到<代码>是,所以他们只提到<代码>是< /代码>?注意表单

是boss John
,它在语法上等同于
(is(boss))(John)
,比
是(John,boss)
更详细。Coq中通常首选链式函数应用程序。我更喜欢两种独立的理论——一种是“is”,另一种是转换后的理论——是“is”“我将从语法框架生成第一个理论,然后我想把它转换成第二个理论。第二个”是“形式可以更容易地转换为is boss谓词,这就是我努力实现它的原因。谓词形式可以用于Coq中机械化的对象逻辑的推理,例如线性逻辑。如果
boss
具有类型
e->t
e
表示“实体”而
t
代表布尔人,你就不能用
约翰老板