如何选择属于某个模块的变量的文本表示形式? (请参阅下面的代码内部的注释。这类似于模块的表示法。)我想使用它,因为最好查看术语的原始含义。 (以及具有相同实现的不同类型: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.
答案 0 :(得分:2)
替换
Module SetVars := PeanoNat.Nat.
使用
Module SetVars : UsualDecidableTypeFull := PeanoNat.Nat.
这使模块SetVars
不透明,正好暴露了签名UsualDecidableTypeFull
,因此类型SetVars.t -> SetVars.t
不再可简化。