通常,您使用二进制参数来证明程序的等效性。用一元模型执行此操作是不自然的,因为它一次只谈论一个程序。
通常,如果您只对一元属性感兴趣,则使用一元模型。例如,请参阅我们最近的草稿《表面下的结构类型》,其中我们使用一元模型证明了类型健全性的结果。由于健全性讨论的是一个程序的行为(如果 则它偏离或减小到值v :A),因此一元模型就足够了。如果我们还要证明程序的等效性,则需要一个二进制模型。e :Av :A
编辑:我只是意识到,如果您看一下我们的论文,它就像一个普通的旧逻辑关系/可实现性模型。我应该说些什么使它(和其他模型)成为参数。基本上,当可以证明模型的身份扩展引理时,模型就是参数化的:也就是说,对于任何类型表达式,如果所有自由类型变量都绑定到身份关系,则类型表达式就是身份关系。我们没有明确证明它是引理(我不知道为什么,但是在进行操作模型时很少需要这样做),但是此属性对于我们的语言的健全性至关重要。
参数化中的“关系”和“身份关系”的定义实际上有点困难,如果您想支持高级类型(如高级类型或从属类型)或希望使用更高级的语义结构,则这种自由实际上是必不可少的。我知道的最容易理解的解释是鲍勃·阿特基(Bob Atkey)的论文“高等类型的关系参数”。
如果您对分类理论有很好的胃口,那么这首先由Rosolini在他的论文《反射图和参数多态性》中以抽象的方式提出。此后,Dunphy和Reddy在他们的Parametric Limits中以及Birkedal,Møgelberg和Petersen在参数多态性的领域理论模型中进一步开发了它。