Как выбрать текстовое представление переменных, принадлежащих какому-либо модулю? (См. Комментарии внутри кода ниже. Это похоже на нотацию для модулей.) Я хочу использовать его, потому что желательно видеть исходное значение терминов. (и разделять разные типы с той же реализацией: 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.
coq
1
ged 23 Сен 2018 в 21:20

1 ответ

Лучший ответ

Заменить

Module SetVars := PeanoNat.Nat.

С участием

Module SetVars : UsualDecidableTypeFull := PeanoNat.Nat.

Это делает модуль SetVars непрозрачным, выставляя в точности сигнатуру UsualDecidableTypeFull, так что тип SetVars.t -> SetVars.t больше не может быть уменьшен.

2
Li-yao Xia 23 Сен 2018 в 18:38