Pi型的分裂和极性


18

在阿格达(Agda)邮件列表上的最新帖子中,出现了法律的问题,彼得汉考克(Peter Hancock)在其中发人深省η

我的理解是法则带有否定类型,即。引入规则是可逆的连接词。要禁用功能,Hank建议使用定制消除器funsplit,而不是通常的应用程序规则。我想了解汉克关于两极的说法。ηη

例如,有两个演示类型。有传统的马丁- LOF 分裂消除,以积极的风格:Σ

Γf:(a:A)(b:Ba)C(a,b)Γp:Σa:A.BΓsplitfp:Cp

还有否定版本:

Γp:Σa:A.BΓπ0p:AΓp:Σa:A.BΓπ1p:B[π0p/a]

后一种表示形式很容易获得对,即。对任意对(其中==表示定义相等)。就可证明性而言,这种区别并不重要:从直觉上讲,您可以拆分或以其他方式实现投影。η(π0p,π1p)==pp

现在,类型通常是负面的(我相信,毫无争议):Π

Γf:Πa:A.BΓs:AΓfs:B[s/a]

这为函数提供:。ηλx.fx==f

但是,汉克在那封邮件中回忆起了分叉消除(《机器语言类型理论编程》,[http://www.cse.chalmers.se/research/group/logic/book/],第56页)。在逻辑框架中通过以下方式对其进行描述:

fΠ(A,B)C(v)Set[vΠ(A,B)]d(y)C(λ(y))[y(x)B(x)[xA]]funsplit(f,d)C(f)

有趣的是,Nordstrom等。通过说“ [此]非规范形式基于结构归纳原理”来激发这一定义。这种说法带有强烈的积极意义:函数将由其构造函数 '定义' 。λ

但是,我不能完全以自然推论(或什至更好的是顺序演算)来确定该规则的令人满意的表述。在这里,逻辑框架的(滥用)引入至关重要。y

那么,funsplit是类型的肯定表示吗?在(非相关的)后续演算中,我们也有类似的东西吗?它会是什么样子?Π

对于该领域的证明理论家来说,这有多普遍/好奇?

Answers:


12

在大多数类型理论中,使用表示功能消除绝对不是常见的情况。但是,我相信这种形式确实是消除功能类型的“积极”表现。这里的问题是您需要某种形式的高阶模式匹配,例如,参见Dale Millerfunsplit

请允许我以一种更清晰的方式重新制定您的规则:

Γf:Πx:A.BΓ,z:Πx:A.BC:SetΓ,[x:A]F(x):Be:C{λx:A.F(x)/z}match f with λx:A.F(x)e:C{f/z}

其中是上下文中类型的元变量B x AFBx:A

重写规则将变为:

match λx:A.t with λx:A.F(x)ee{t{u/x}/F(u)}

这使您可以将应用程序定义为:

app(t,u)=match t with λx:A.F(x)F(u)

除了需要有效的“逻辑框架样式”类型系统这一事实外,高阶统一的麻烦(以及有限的需求)使得这种表述不受欢迎。

但是,在文献中有一个地方存在正负区别:逻辑关系谓词的表述。两种可能的定义(在一元情况下)是

[[Πx:A.B]]={tu[[A]],tu[[B]]xu}

[[Πx:A.B]]={ttλx.t,u[[A]],t{u/x}[[B]]xu}

第二个版本不太常见,但是可以在例如Dowek和Werner中找到


1
这似乎与逻辑框架中广泛使用的高阶抽象语法有关。特别是,这里的似乎是元函数。F

13

对于弗雷德里克的回答,这里有一个稍微不同的观点。通常,强制性类型的Church编码会满足相关的律,但不会满足η律。βη

因此,这意味着我们可以如下定义一个依赖对:

π 1 π 1X X

x:X.Y[x]α:.(Πx:X.Y[x]α)α
π1π 2Π p X X
π1:x:X.Y[x]Xλp:(x:X.Y[x]).pX(λxy.x)
π2:Πp:(x:X.Y[x]).Y[π1p]

但是,第二个投影是可实现的,并且在参数模型中,您也可以证明它也具有正确的行为。(有关此内容的更多信息,请参阅我最近与Derek Dreyer有关构造微积分中参数的草案。)因此,我认为投影从根本上需要一些强大的可扩展性才能使其有意义。π2

就后续演算而言,弱消除器的规则看起来有点像:

Γ,x:X,y:Y[x],Γe:CΓ,p:x:X.Y[x],Γlet(x,y)=pine:C
这里,隐良好性条件意味着在不能发生自由或。如果放松该条件,我们将得到拆分规则,该规则的左规则类似于 这种替代让我想起了很多关于平等的Girard / Schroeder-Heister消除规则。我问了一个问题pΓC
Γ,x:X,y:Y[x],[(x,y)/p]Γe:[(x,y)/p]CΓ,p:x:X.Y[x],Γlet(x,y)=pine:C
关于这一规则,David Baelde和Gopalan Nadathur在他们的LICS 2012论文中给出了最新版本,将演绎模和定点逻辑结合起来。我认为Conor McBride花了一些时间思考身份类型与Schroeder-Heister平等之间的关系,因此您可能想看看他的想法。

1
我真的很喜欢所有这些答案!我觉得Fredrik的答案中隐含着一些“内省”(知道一个术语具有值的能力)的概念,这是eta的真正问题:参数化意味着内省意味着eta。
科迪2013年

10

理查德·加纳(Richard Garner)写了一篇很好的文章,关于应用程序与函数拆分,有关马丁-洛夫类型理论中从属产品的优势(APAL 160(2009)),还讨论了函数拆分规则的高阶性质(参考彼得·施罗德·海斯特(Peter Schroeder-Heister)的《自然演绎的自然延伸》(JSL 49(1984)))。

Richard指出,在存在身份类型(以及类型的形成和引入规则)的情况下,funsplit与上面的应用规则+命题eta可以互换,即以下两个规则: Π

m:Π(A,B)η(m):IdΠ(A,B)(m,λx.mx)(Π-Prop-η)
x:Af(x):B(x)η(λ(f))=refl(λ(f)):IdΠ(A,B)(λ(f),λ(f))(Π-Prop-η-Comp)

也就是说,如果您有乐趣,则可以如上所述定义application和,以便成立。更有趣的是,如果您有应用程序和命题eta规则,则可以定义funsplit。η(Π-Prop-η-Comp)

此外,funsplit严格比应用程序强:命题eta规则在仅具有应用程序的理论中无法定义-因此funsplit不能定义,因为命题eta规则也将是可定义的。直观地讲,这是因为应用程序规则使您更加放松:与funsplit(和eta)不同,它们不会告诉您什么函数,只是可以将它们应用于参数。我相信Richard的论点也可以针对类型进行重复,以针对与投影显示相同的结果。Σsplit

请注意,如果您具有定义性的eta规则,那么当然也可以命题化(使用)。因此,我认为您的陈述“ [...] 为函数提供了 ”和“ [后一种表示法使得对成对获得正确”。但是,Agda会同时为函数和对实现(如果被定义为一条记录),但这并不仅仅适用于应用程序。η η η Ση(m):=refl(m)ηηηΣ

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.