У меня есть модуль, и мне нужно специализировать один из его аргументов.Я хочу использовать натуральные числа вместо произвольного UsualDecidableTypeFull.Как я могу получить такое поведение в Coq?
Я определил некоторый модуль:
Module PRO2PRE_mod
(SetVars FuncSymb PredSymb PropSymb: UsualDecidableTypeFull).
(* ... *)
End PRO2PRE_mod.
Затем я специализировал последний из аргументов PropSymb.
Require Import Arith.PeanoNat.
Module m2 : UsualDecidableTypeFull.
Definition t:=nat.
Definition eq := @eq nat.
Definition eq_refl:=@eq_refl nat.
Definition eq_sym:=@eq_sym nat.
Definition eq_trans:=@eq_trans nat.
Definition eq_equiv:Equivalence eq := Nat.eq_equiv.
Definition eq_dec := Nat.eq_dec.
Definition eqb:=Nat.eqb.
Definition eqb_eq:=Nat.eqb_eq.
End m2.
Этот модульнужна специализация PropVars:
Module SWAP_mod
(SetVars FuncSymb PredSymb : UsualDecidableTypeFull).
Module PRE := PRO2PRE_mod SetVars FuncSymb PredSymb m2.
Import PRE.
Theorem test : m2.t.
try exact 0. (* ERROR HERE! *)
Abort.
End SWAP_mod.
Как использовать теоремы о натуральных числах внутри последнего модуля?(Я думаю, что не понимаю что-то об использовании модулей ... Может быть, нам нужно как-то привести тип 'm2.t' к типу 'nat'?)