在Coq中,为什么要使用Atom以及如何构建它?

时间:2012-12-02 16:58:58

标签: llvm coq

我正在与vellvm合作,开发一个转型。我是一名新手。

这是原子实现: http://www.cis.upenn.edu/~plclub/popl08-tutorial/code/coqdoc/Atom.html

例如,在vellvm中,原子被用作ids和标签。

我想在一个llvm转换中插入一段代码,为此我必须给出一个类型为“atom”的标签。如何构建Atom标签?

让我的问题更加笼统: 1)为什么有人想要使用Atom? 2)我怎样才能构建一个? 3)如果我以这种方式构建,我是否会考虑原子在代码中的使用方式不同?

谢谢!

编辑:ID和标签的代码

Definition id := atom. (*r identities *) 
Definition l := atom. (*r labels *)

2 个答案:

答案 0 :(得分:3)

查看你指出的文件(由Chargueraud和Aydemir撰写),你明白原子类型用于表示你可以用来给事物命名的任何类型。

函数atom_fresh_for_list应该用于创建一个新原子。此函数的类型表明它不仅返回任意原子,而且还证明您获得的原子不存在于您作为参数给出的列表中。这是你创建一个新的:你把所有旧的都放在一个列表中,然后用函数atom_fresh_for_list作为参数调用它。因此,您将获得类型{x:atom |的值...}。这不完全是一个原子:它是一个有更多信息的原子。你可以写下:

来掌握原子

let(v,h):= atom_fresh_for_list ... in ...

然后,在第二个“...”中,变量v包含原子,您可以使用它。如果你需要证明这个原子是一个新原子,那么你可以使用另一个变量h。

伊夫

答案 1 :(得分:2)

Yves能够部分回答它,只是没有一个如何构建原子的例子。你需要使用projT1。以下是此代码:

Definition an_atom : atom := (projT1 (atom_fresh_for_list nil)).

其中nil是任何列表。