我认为隐式语法,就像现在在Agda中一样,也是老练。它不应该由新的打字系统定义但应该只是顶部的一个语法糖/注释工具显式类型系统的。
下面是隐式语法的一种更简单的方法,应该是够了。(这在一定程度上受到了Necula和Lee在证明的有效表示与验证.)
首先我们引入_符号,以便用户写入_当他知道系统可以毫无歧义地进行推断。例如
人们可以写id _ zero而不是id Nat zero。
第二,我们约定,如果我们写
然后我们宣布
但当我们写f时,这被理解为f。
这样,普通类型的系统就足够了,我们只有解释如何处理符号。
该机制比实施的机制更具限制性现在,但更容易理解。
欺骗
很好的例子
无法使用受限版本表达的示例。
为类型命名:
参考:(A->A->Set)->Set参考R={x:A}->R x x(R x x)符号:(A->A->Set)->SetSym R公司={xy:A}->R x y->R y x
正在将多态函数作为参数传递。。。
elimVec:{A:集}(P:集){n:自然}->Vec A n->设置)->P无->({n:纳特}(x:A)(xs:Vec A n)->P xs->P(x::xs))->{n:Nat}(xs:Vec A n)->P xs
Ctx=列表类型数据项(Γ:Ctx):Ctx->设置其中ε:术语Γ[]_,_:项Γτ->项ΓΔ->项Г(τ::Δ)数据变量:Ctx->类型->设置位置v0:Var(τ::Γ)τvS:对于所有{Γστ}->VarΓτ->Var(σ:Γ)τ表格:{ΓΔ:Ctx}->({τ:类型}->VarΔτ->项Γτ)->项ΓΔ制表。。。
--乌尔夫/北美
隐含语法(帕特里克语言评论笔记)
Conor:这可能是一个选项:
Sch::=Ty|(x:Sch)->Sch|{x:Ty}->Schren:{ΓΔ:Ctx}(r:{τ:Ty}->VarΓτ->VarΔτ)->{τ:Ty}->TmΓτ->TmΔτren=?id_ren=ren(\x->x)
乌尔夫/尼尔斯-安德斯:蒂里的建议太有限了,但康纳可以。
乌尔夫:我们可以尝试不同的限制——当前的系统有一些问题
彼得:为了稳定,我们需要决定使用什么方法
Makoto:当前的系统似乎可以工作,所以不清楚通过限制它可以获得什么。但是Sch版本+某种类型的同义词可能就足够了。
本特:我真的很喜欢将“表示”(隐藏参数)从类型系统中分离出来的想法。