这个页面上的信息可能已经过时了。任何更新的版本都将显示在官方用户手册
可解约束
在类型检查期间元变量将为每个隐式参数生成。使用模式统一的限制形式求解元变量(1). 基本上,表单的约束F x 1。。xn=t
对于元变量F类
和不同的变量x1。。xn公司
可以用解决F:=\x1。。xn->t
.
请参见在第13届Agda实施者会议上解释Agda的统一.
参数位置中的元变量
作为数据类型或构造函数的参数出现的元变量很有可能被求解。如果D类
是数据类型,然后是约束D us=D vs
等于美国=vs
,有望在中解决元变量我们
或与
.
以构造函数为首的函数
通常,当元变量作为模式匹配定义的函数的参数出现时,约束求解器将离开约束,希望元变量在其他地方求解。然而,对于某类函数,我们将其称为构造函数头函数,可以做得更好:如果函数定义的所有右侧都有不同的(类型或值)构造函数头,我们可以通过查看预期结果的头来推断函数参数的形状。例如,以下函数是以构造函数为标题的:
Vec:设置->自然->设置Vec A零=单位Vec A(sucn)=A对(Vec A n)
现在,如果我们有一个约束Vec X Y=配对
,用于元变量X(X)
和Y(Y)
我们可以得出这样的结论:车辆X Y
要有表格配对__
如果选择了定义的第二个子句,因此我们可以解决Y:=例如Z
对于一个新的元变量Z
并重新评估约束。这将导致约束对X(Vec X Z)=对t
这反过来又被简化为X=秒
和Vec X Z=t
.
我们还可以改进同一构造函数头函数的两个应用程序之间的约束求解。例如,考虑约束Vec s X=向量t u
对于元变量X(X)
和中性项u个
。如果左手边减少,它将减少为一个以构造器为首的项,该项将不等于右手边。因此,左侧必须是中性的,并且由于函数的中性应用程序在参数相等的情况下是相等的,因此必须是这样的情况s=t
和X=u
.
更新(Agda 2.3.2):Agda现在扩展了简单的定义(一个子句,终止),以检查函数是否以构造函数开头。例如,以下操作现在也有效:
MyPair:设置->设置->设置MyPair A B=配对A BVec:设置->自然->设置Vec A零=单位Vec A(sucn)=我的配对A(Vec A n)
[1]结构演算中的统一与反统一Frank Pfenning,1991年。