在Coq中显示导入的模块的原始名称

时间:2018-09-23 18:20:16

标签: coq

如何选择属于某个模块的变量的文本表示形式? (请参阅下面的代码内部的注释。这类似于模块的表示法。)我想使用它,因为最好查看术语的原始含义。 (以及具有相同实现的不同类型:SetVars.t,FuncSymb.t,PredSymb.t等)

Require Import Coq.Structures.Equalities.
Require Import Arith.PeanoNat.
Module mod1 (SetVars : UsualDecidableTypeFull).
Definition h:SetVars.t->SetVars.t := fun x => x. (*example*)
End mod1.

Module mod2.
Module SetVars := PeanoNat.Nat.
Module X := mod1 SetVars.
Import X.
Theorem q:SetVars.t->SetVars.t.
Proof. exact h. Defined. (* Here everything is OK *)
Check h. (*"h : nat -> nat"*)
(*But I want to see "h:SetVars.t->SetVars.t"*)
End mod2.

1 个答案:

答案 0 :(得分:2)

替换

Module SetVars := PeanoNat.Nat.

使用

Module SetVars : UsualDecidableTypeFull := PeanoNat.Nat.

这使模块SetVars不透明,正好暴露了签名UsualDecidableTypeFull,因此类型SetVars.t -> SetVars.t不再可简化。