在此之前,我是在Software Foundations中编辑IndProp.v文件的。但是,一旦将代码放入一个单独的文件中,我发现eqb_neq
命令需要一个模块前缀才能起作用:Nat.eqb_neq
。
代码如下:
Set Warnings "-notation-overridden,-parsing".
Require Import List.
Import ListNotations.
Require Import PeanoNat.
Local Open Scope nat_scope.
Inductive nostutter {X:Type} : list X -> Prop :=
| ns_nil : nostutter []
| ns_one : forall (x : X), nostutter [x]
| ns_cons: forall (x : X) (h : X) (t : list X), nostutter (h::t) -> x <> h -> nostutter (x::h::t).
Example test_nostutter_1: nostutter [3;1;4;1;5;6].
Proof.
repeat constructor; apply Nat.eqb_neq; auto.
Qed.
是否可以告诉coq我一直在这里使用Nat模块并摆脱Nat
前缀?像在C ++中一样,您可以编写using namespace std;
,并且无需在每个对象之前显式指定名称空间。
答案 0 :(得分:3)
您可以使用Import Nat.
来做到这一点。但这有时会损害可读性。某些模块设计为其前缀使用,例如stdlib的Vector
。