Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Coq中导入库:Coq.Arith.PeanoNat?_Coq - Fatal编程技术网

如何在Coq中导入库:Coq.Arith.PeanoNat?

如何在Coq中导入库:Coq.Arith.PeanoNat?,coq,Coq,我需要使用标准库中名为Coq.Arith.PeanoNat()的部分 我已经尝试过导入整个Arith库或者只导入这个模块,但我无法以任何方式使用它 我试过的其他图书馆都很好用。当我需要导入Bool.时,我会编译并正确使用它。当打印Bool.时,我可以用下一种格式查看其中的所有函数: Module Bool := Struct Definition... . . . End 当我执行Require Import Arith.PeanoNat.或Require Import Arith.时,我会将

我需要使用标准库中名为Coq.Arith.PeanoNat()的部分

我已经尝试过导入整个Arith库或者只导入这个模块,但我无法以任何方式使用它

我试过的其他图书馆都很好用。当我
需要导入Bool.
时,我会编译并正确使用它。当
打印Bool.
时,我可以用下一种格式查看其中的所有函数:

Module
Bool
:= Struct
Definition...
.
.
.
End
当我执行
Require Import Arith.PeanoNat.
Require Import Arith.
时,我会将其作为即时输出:

[Loading ML file z_syntax_plugin.cmxs ... done]
[Loading ML file quote_plugin.cmxs ... done]
[Loading ML file newring_plugin.cmxs ... done]
<W> Grammar extension: in [tactic:simple_tactic], some rule has been     masked
<W> Grammar extension: in [tactic:simple_tactic], some rule has been masked
<W> Grammar extension: in [tactic:simple_tactic], some rule has been masked
<W> Grammar extension: in [tactic:simple_tactic], some rule has been masked
<W> Grammar extension: in [tactic:simple_tactic], some rule has been masked
[加载ML文件z_syntax_plugin.cmxs…完成]
[正在加载ML文件quote_plugin.cmxs…完成]
[正在加载ML文件newring_plugin.cmxs…完成]
语法扩展:在[策略:简单策略]中,一些规则被掩盖了
语法扩展:在[策略:简单策略]中,一些规则被掩盖了
语法扩展:在[策略:简单策略]中,一些规则被掩盖了
语法扩展:在[策略:简单策略]中,一些规则被掩盖了
语法扩展:在[策略:简单策略]中,一些规则被掩盖了

当我询问Coq
Print Arith.PeanoNat
时,它输出:
Module Arith:=Struct End
,它似乎是空的。当我尝试使用库中的任何内容时,例如布尔比较下的
le\le
,我会得到标准的
错误:leb\ue不是一个定义的对象。
我已经更新了Coq和库,我不知道这里会发生什么。我非常感谢您在解决此库问题时提供的帮助。

当我尝试打印Arith.PeanoNat时,输出略有不同:我得到
Module PeanoNat:=Struct Module Nat End
,然后即使
leb
不在范围内,
Nat.leb
也在范围内


(如果相关的话,我会运行
8.5beta2

如果我没有弄错,
Require
是加载文件的关键字<代码>导入与管理名称空间有关。它们通常一起使用,如在
Require Import PeanoNat.
中,但它们实际上在做两件不同的事情

当coq文件(
DirName/FileName.vo
)加载了
Require
,就好像
FileName.vo
的内容被包装在
模块DirName.FileName
中一样<代码>结束。然后使用
DirName.FileName.Name
访问文件中定义的所有内容

文件本身可以包含模块
M
,要访问
M
的内容,必须键入
DirName.FileName.ModuleName.Name1

Import
用于将所有定义升级到顶层。通过执行导入DirName.FileName.ModuleName操作,模块
Name1
现在导入到顶层,并且可以在没有长路径的情况下引用

在上面的示例中,文件
Arith/PeanoNat.vo
定义了模块
Nat
。事实上,这就是它定义的全部。因此,如果您确实
需要导入Arith.PeanoNat
,您将在顶层获得
PeanoNat.Nat
。然后
Import PeanoNat.Nat
Nat
带到顶层。请注意,您不能要求导入PeanoNat.Nat,因为它不是
.vo
文件

Coq有时可以找到
.vo
文件,而无需指定整个路径,因此您也可以执行
要求导入PeanoNat。
Coq将找到该文件。如果你想知道它在哪里找到的,一定要找到PeanoNat。

Coq < Require Import PeanoNat.

Coq < Locate PeanoNat.
Module Coq.Arith.PeanoNat
Coq < Require Import Nat.
Warning: Notation _ + _ was already used in scope nat_scope
Warning: Notation _ * _ was already used in scope nat_scope
Warning: Notation _ - _ was already used in scope nat_scope

Coq < Locate Nat.
Module Coq.Init.Nat

因此,您不需要导入库,而是需要它。使用
Import
不必使用完整路径名。我希望这有助于您调试正在发生的事情。

您是否同时导入任何可能导致冲突的其他模块?@ichistmeinname,我只导入布尔和Arith。出于测试的目的,我导入了其他的,当我看到它们工作得很好时,我从我的文件中删除了它们。我认为这确实起到了作用。我试着检查Nat.leb_le是否也一样,我得到了相同的“nota defined object”。Hi@gallais。不知何故,Nat.leb_le现在已经在范围内了(我只关闭了coq一天,当我今天再次尝试运行同一个文件时,它工作得更好了…),但我仍然有问题。我知道Nat.leb_le是范围。我现在如何使用,在一个证明?“应用leb_le”产生“在当前环境中找不到参考leb_le”@Sara好消息!如果
leb_le
不在范围内,但
Nat.leb_le
在范围内,则您必须使用长名称
Nat.leb_le
首先导入Nat
,以便将其内容(包括
leb_le
)纳入范围(cf.)。谢谢,这已经解决了!我意识到我也在以错误的顺序导入东西(我不知道这会有什么不同!)。现在一切似乎都在运行。谢谢你的详细解释,我想我不会再有问题了。@Sara如果这个答案解决了你的问题,最好接受这个答案。这个答案最接近我的问题,所以我在这里发布了一个问题:我首先键入
Require Import Coq.Numbers.Natural.Abstract.NDiv.
然后命令
打印NDiv.
返回
模块NDiv:=Struct模块type NDivProp End
,命令
打印NDivProp
打印一个引理列表,我想使用其中一个。但是
导入NDivProp。
抛出一个错误
NDivProp不是一个模块
Print add\u mod
(我想使用的引理)抛出一个错误
错误:add\u mod不是一个定义的对象。
,命令
NDiv.add\u mod
NDivProp.add\u mod
,也有打印错误。那么如何访问
add_mod
引理呢?我认为最好的方法是发布一个新问题。