《Needle与Knot:绑定器样板代码的整理》上半部分
在编程领域,对于抽象语法的处理和相关语义的定义是非常重要的。本文将深入探讨Knot规范语言,包括其规范的定义、语义以及常见的基础设施操作等内容。
1. λLF和λtele示例规范
首先给出了λLF和λtele的示例规范,涉及命名空间、排序和构造函数的定义。
namespace Tyv : Ty
namespace Tmv : Term
sort Kind := Star
| KPi (x : Tmv) (T : Ty) ([x]K : Kind)
sort Ty
:= TVar (X @Tyv)
| TApp (T : Ty) (t : Term)
| TPi (x : Tmv) (T1 : Ty) ([x]T2 : Ty)
sort Term := Var
(x@Tmv)
| App
(t1 t2 : Term)
| Abs (x : Tmv) (T : Ty) ([x]t : Term)
env Env := (X : Tyv) →(K : Kind) | (x : Tmv) →(T : Ty)
namespace Tmv : Term
sort Term := Var (x@Tmv)
| App (t : Term) (ts : Terms) | Abs (d : Tele) ([bind d]t : Term)
| Pi
(d : Tele) ([bind d]t : Term)
sort Terms := Nil
| Cons
(t : Term) (ts : Terms)
sort Tele :=
TNil
| TCons (x : Tmv)
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



