gpt4 book ai didi

coq - 记录和定义

转载 作者:行者123 更新时间:2023-12-02 06:40:07 25 4
gpt4 key购买 nike

我有一个问题:RecordDefinition

我有这样的定义:

Definition rule := term -> term.

然后我为它写了一个 bool 函数。

Definition beq_rule a b := beq_term a && beq_term b.

哪里beq_term : term -> term -> bool.

所以我对 beq_rule 的定义实际上返回 beq_term 的类型这不是我想要的。我希望它为我返回一个类型:rule -> rule -> bool.

所以我通过 Record 更改了规则的定义:

Record rule := mkRule {lhs : term; rhs : term}.

Definition beq_rule (a b : rule) : bool :=
beq_term (lhs a) (lhs b) && beq_term (rhs a) (rhs b).

我的问题是:

1) 我的第一个定义 rule 有什么不同?二手 Definition另一个用过Record

2) 如果我想通过 Definition 定义规则我可以给个别名吗 lhsrhs喜欢 Record定义?

最佳答案

rule 的两个定义说的是完全不同的事情

Definition rule := term -> term

将规则定义为函数类型 term -> term 的类型(或 Prop)别名。因此

Definition not_what_you_meant : rule := fun t => t.

将愉快地编译。

关于RecordDefinition的关系。 Record 只是一个转换为 Inductive 的宏。所以

Record rule := mkRule {lhs : term; rhs : term}.

相同
Inductive rule := mkRule : term -> term -> rule.

加上访问函数

Definition lhs (r : rule) : term := 
match r with
mkRule l _ => l
end.

etc.

您应该认为 InductiveDefinition 有根本的不同。 Definition 定义一个别名。另一种说法是 Definition 是“引用透明的”,您可以(直到变量重命名)始终用定义的右侧替换其名称的任何出现。

另一方面,

Inductive 通过列出一组构造函数来定义类型(Coqs 域的元素)。在更合乎逻辑的思维方式中,Inductive 以确保“和谐”的方式根据其消除/引入规则定义逻辑命题。

关于coq - 记录和定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9577000/

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