Reflection Idris中的准液化概述

Reflection Idris中的准液化概述,reflection,idris,Reflection,Idris,在我遇到伊德里斯之前,我还没有意识到他有一个准同性恋者 以下是REPL中的一个简短示例: Idris> :module Language.Reflection Idris> `(S Z) App (P (DCon 1 1) (NS (UN "S") ["Nat", "Prelude"]) (Bind (MN 0 "_t") (Pi (P (TCon 0 0) (NS (UN "Nat") ["Nat", "Prelude"]) E

在我遇到伊德里斯之前,我还没有意识到他有一个准同性恋者

以下是REPL中的一个简短示例:

Idris> :module Language.Reflection
Idris> `(S Z)
App (P (DCon 1 1)
       (NS (UN "S") ["Nat", "Prelude"])
       (Bind (MN 0 "_t")
             (Pi (P (TCon 0 0) (NS (UN "Nat") ["Nat", "Prelude"]) Erased)
                 (TType (UVar "./Prelude/Nat.idr" 22)))
             (P (TCon 0 0) (NS (UN "Nat") ["Nat", "Prelude"]) Erased)))
    (P (DCon 0 0)
       (NS (UN "Z") ["Nat", "Prelude"])
       (P (TCon 0 0) (NS (UN "Nat") ["Nat", "Prelude"]) Erased)) : TT
我想知道这是怎么回事。请提供简要概述和/或参考资料

本文定义了Idris核心语言的Idris表示形式,称为
TT

核心语言由两种不同的数据类型表示:
Raw
TT
<代码>原始用于表示要提交的条款 对于类型检查器,而
TT
表示类型检查器生成的术语

图3给出了
Raw
TT
的以下概述:


它还引用了描述准旋转机制的论文。

我的实用主义观点是,离开
反射标记将帮助更多的人在寻找这个问题时找到这个问题,而不是那些它会阻碍的问题。我还被推荐为这一主题的博士论文:。
-- Variable names
data TTName = ...

-- Constants
data Const = I Int | Str String | ...

-- Binders
data Binder : (tmTy : Type) -> Type where
    Lam : (ty : a) -> Binder a
    Pi : (ty, kind : a) -> Binder a
    Let : (ty, val : a) -> Binder a
    PVar : (ty : a) -> Binder a
    Hole : (ty : a) -> Binder a
    Guess : (ty, val : a) -> Binder a

-- Terms which have not yet been typechecked
data Raw = Var TTName
    | RBind TTName (Binder Raw) Raw
    | RApp Raw Raw
    | RType
    | RConstant Const

-- Well typed, de Bruijn indexed terms
data TT = P NameType TTName TT
    | V Int
    | Bind TTName (Binder TT) TT
    | App TT TT
    | TConst Const
    | TType TTUExp