定义一个"依赖类型"模块函子

时间:2018-04-01 23:24:52

标签: coq

如何制作一个依赖类型的仿函数(缺少一个更好的术语)?我想做类似以下的事情:

Module Type Element.
  ...
End Element.

Module Wrapper (E : Element).
  ...
End Wrapper.

Module DepentlyTypedFunctor (E : Element) (W : Wrapper E).
  ...
End DepentlyTypedFunctor.

最后一个定义不起作用,我想我正在寻找正确的语法,如果可能的话。我对这种定义的动机是定义DependentlyTypedFunctor内的定理,该定理适用于包含Wrappers的任何实例的所有Element,类似于如何定义向量定理,{{ 1}}。

1 个答案:

答案 0 :(得分:3)

我认为你只是想让Wrapper成为Module Type。如果它不是模块类型,那么只有一个这样的模块,你可以只在DependentlyTypedFunctor上写E。如果你有Element的不透明实现,这可能是不够的,在这种情况下,Wrapper的不同实例可能彼此不相等。

如果这是一个问题,您可能只想使用记录而不是模块。