您如何代表Agda中的CoC条款?

时间:2019-03-01 13:27:17

标签: agda

例如,表示Agda中的STLC可以通过以下方式完成:

data Type : Set where
*   : Type
_⇒_ : (S T : Type) → Type

data Context : Set where
ε   : Context
_,_ : (Γ : Context) (S : Type) → Context

data _∋_ : Context → Type → Set where
here  : ∀ {Γ S} → (Γ , S) ∋ S
there : ∀ {Γ S T} (i : Γ ∋ S) → (Γ , T) ∋ S

data Term : Context → Type → Set where
var : ∀ {Γ S} (v : Γ ∋ S) → Term Γ S
lam : ∀ {Γ S T} (t : Term (Γ , S) T) → Term Γ (S ⇒ T)
app : ∀ {Γ S T} (f : Term Γ (S ⇒ T)) (x : Term Γ S) → Term Γ T

(来自here。)但是,尝试使它适应构造微积分是有问题的,因为Type和Term是单个类型。这意味着不仅上下文/术语必须是相互递归的,而且术语必须在其自身上建立索引。这是一个初步尝试:

data Γ : Set

data Term : Γ → Term → Set

data Γ where
  ε   : Γ
  _,_ : (ty : Term) (ctx : Γ) → Γ
infixr 5 _,_

data Term where
    -- ...
但是,

Agda抱怨Term不在其初始声明的范围内。是否可以用这种方式表示,还是我们真的需要为Term和Type使用不同的类型?我非常希望在Agda中看到CoC的最低/参考实现。

1 个答案:

答案 0 :(得分:6)

这是一个非常棘手的问题。据我所知,尚无“最小”方式在Agda中编码CoC。您必须证明很多东西,或者使用浅层编码,或者使用诸如商数归纳法之类的沉重(但完全明智)的技术,或者先定义未键入的术语,然后再将它们分类为键入的术语。以下是一些相关文献:

Functional Program Correctness Through Types,尼尔斯·安德斯·丹尼尔森(Nils Anders Danielsson)-本文的最后一章是对依赖类型语言的形式化。这是大量的引子形式的形式化,并且还包含一些未键入的术语。

Type checking and normalisation,詹姆斯·查普曼(James Chapman)-本论文的第五章是依赖类型语言的形式化。这也是一种引理形式的形式化,除了许多引理只是对应数据类型的构造函数。例如,您可以将显式替换用作构造函数,而不是用作计算函数(先前的论文没有针对类型的替换,仅针对术语,而本论文甚至针对类型也具有显式替换)。

Outrageous but Meaningful Coincidences. Dependent type-safe syntax and evaluation,康纳·麦克布赖德(Conor McBride)-本文介绍了从属类型理论的深度编码,该理论对理论的浅层编码进行了修正。这意味着作者仅使用Agda的评估模型,而不是定义替代和证明属性,而是提供了目标语言的完整语法。

Typed Syntactic Meta-programming,Dominique Devriese,Frank Piessens –未键入的术语被归类为已键入的术语。当我查看IIRC时,代码中有很多假设,因为这是元编程的框架,而不是形式化。

Type theory eating itself?,Chuangjie Xu和Martin Escardo –单个文件的形式化。与往常一样,几种数据类型是相互定义的。显式传输的显式替换“模仿”了替换操作的行为。

EatEval.agda -我们通过结合前两种形式化的思想来实现这一点。在此文件中,我们没有定义多个显式传输,而是只有一个传输,可以将术语的类型更改为符号上相等的术语。即而不是通过构造函数来明确指定替换的行为,我们有一个单一的构造函数,上面写着:“如果在Agda中评估两种类型给出相同的结果,则可以通过构造函数将一种类型的术语转换为另一种类型的术语”。 >

Type Theory in Type Theory using Quotient Inductive Type,Thorsten Altenkirch和Ambrus Kaposi-这是我要说的最有希望的方法。它通过商类型设备在类型级别“合法化”计算。但是我们还没有Agda中的商类型,它们在本文中已基本假定。人们在商类型上做了很多工作(有一个完整的论点:Quotient inductive-inductive definitions – Dijkstra,Gabe),所以我们可能会在某个时候使用它们。

Decidability of Conversion for Type Theory in Type Theory,Andreas Abel,JoakimÖhman和Andrea Vezzosi – untyped terms的简称为typed onesLots of properties。还具有大量的元理论证明和一个特别有趣的设备,该设备允许使用相同的逻辑关系来证明健全性和完整性。形式化是巨大的,并且得到了很好的评论。

艾格达(zip file with the development)中的扩展Martin-Löf类型理论的setoid模型,埃里克·帕姆格伦(Erik Palmgren)-摘要:

  

摘要。我们介绍了setoid的Agda形式化的详细信息   Pi,Sigma,扩展身份的Martin-Löf类型理论的模型   类型,自然数和无限的宇宙   罗素至关重要的成分是使用Aczel的V型   迭代集作为类固醇的扩展宇宙,它允许   行为规范的类型相等性解释。

Coq in Coq,Bruno Barras和Benjamin Werner-CC在Coq(the code)中的正式化。未类型化的术语被归类为类型+引理+元理论证明。

感谢AndrásKovács和James Chapman的建议。