funsplit et polarité des types Pi


18

Dans un récent fil de discussion sur la liste de diffusion d'Agda, la question des lois η est apparue, dans laquelle Peter Hancock a fait une remarque stimulante .

Ma compréhension est que les lois η viennent avec des types négatifs, c'est-à-dire. connecteurs dont les règles d'introduction sont inversibles. Pour désactiver η pour les fonctions, Hank suggère d'utiliser un éliminateur sur mesure, funsplit , au lieu de la règle d'application habituelle. Je voudrais comprendre la remarque de Hank en termes de polarités.

Par exemple, il existe deux présentations de types Σ . Il y a le traditionnel éliminateur de split Martin-Löf , dans un style positif:

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

Et il y a la version négative:

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

Cette dernière présentation permet d'obtenir facilement η pour les paires, ie. (π0p,π1p)==p pour n'importe quelle paire p (où == représente l'égalité de définition). En termes de prouvabilité, cette différence n'a pas d'importance: intuitivement, vous pouvez implémenter des projections avec split, ou inversement.

Maintenant, les types Π sont généralement (et sans controverse, je crois) pris négativement:

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

Ce qui nous donne pour les fonctions: λ x . f x = = f .ηλx.fx==f

Cependant, dans ce courrier, Hank rappelle l’ éliminateur de funsplit (Programming in ML type theory, [http://www.cse.chalmers.se/research/group/logic/book/], p.56). Il est décrit dans le cadre logique par:

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

Fait intéressant, Nordstrom et al. motiver cette définition en disant que "[cette] forme non canonique alternative est basée sur le principe de l'induction structurelle". Cette affirmation dégage une forte odeur de positivité: les fonctions seraient «définies» par leur constructeur, .λ

Cependant, je ne peux pas tout à fait définir une présentation satisfaisante de cette règle en déduction naturelle (ou, mieux encore, en calcul séquentiel). L'utilisation (ab) du cadre logique pour introduire semble cruciale ici.y

Alors, funsplit est- il une présentation positive des types ? Avons-nous également quelque chose de similaire dans le calcul séquentiel (non dépendant)? À quoi cela ressemblerait-il?Π

Est-ce courant / curieux pour les théoriciens de la preuve dans le domaine?

Réponses:


12

La présentation de l'élimination fonctionnelle en utilisant n'est certainement pas une occurrence habituelle dans la plupart des traitements de la théorie des types. Cependant, je crois que cette forme est bien la présentation "positive" de l'élimination des types fonctionnels. Le problème ici est que vous avez besoin d'une forme de correspondance de modèle d'ordre supérieur, voir par exemple Dale Miller .funsplit

Permettez-moi de reformuler votre règle d'une manière plus claire pour moi:

Γ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}

est une méta variable de type B dans le contexte x : A .FBx:A

La règle de réécriture devient alors:

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

Cela vous permet de définir l'application comme:

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

Au-delà du fait que cela nécessite un système de type "style de cadre logique" pour être valide, les tracas (et les besoins limités) d'une unification d'ordre supérieur rendent cette formulation impopulaire.

Cependant, il existe un endroit où la distinction positive / négative est présente dans la littérature: la formulation de prédicats de relation logique . Les deux définitions possibles (dans le cas unaire) sont

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

et

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

La deuxième version est moins courante, mais peut être trouvée par exemple dans Dowek et Werner .


1
Cela semble être lié à la syntaxe abstraite d'ordre supérieur qui est largement utilisée dans le cadre logique. En particulier, le semble ici être la méta-fonction. F
jour

13

Voici une perspective légèrement différente sur la réponse de Fredrik. C'est généralement le cas que les encodages imprédicatifs de types Church satisfont aux lois pertinentes , mais ne satisfont pas aux lois η .βη

Cela signifie donc que nous pouvons définir une paire dépendante comme suit:

Maintenant, notons que π 1 est facilement définissable: π 1 : x :

x:X.Y[x]α:.(Πx:X.Y[x]α)α
π1 Cependant, vous ne pouvez pas définir la deuxième projection π 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] - essayez-le! Vous ne pouvez que lui définir un éliminateur faible, c'est pourquoi je l'ai écrit avec un existentiel.

Cependant, la deuxième projection est réalisable , et dans un modèle paramétrique, vous pouvez également montrer qu'elle a le bon comportement. (Voir mon récent projet avec Derek Dreyer sur la paramétricité dans le calcul des constructions pour en savoir plus à ce sujet.) Je pense donc que la projection exige fondamentalement de fortes propriétés d'extensionnalité pour que cela ait du sens.π2

En termes de calcul séquentiel, l'éliminateur faible a une règle qui ressemble un peu à:

Γ,x:X,y:Y[x],Γe:CΓ,p:x:X.Y[x],Γlet(x,y)=pine:C
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

1
J'apprécie vraiment toutes ces réponses! Je pense qu'il y a une notion d '«introspection» (la capacité de savoir qu'un terme a une valeur) implicite dans la réponse de Fredrik qui est le vrai problème avec eta: la paramétricité implique l'introspection implique eta.
cody

10

Richard Garner a écrit un bel article sur l'application vs funsplit, Sur la force des produits dépendants dans la théorie des types de Martin-Löf (APAL 160 (2009)), qui traite également de la nature d'ordre supérieur de la règle funsplit (avec une référence à Une extension naturelle de la déduction naturelle de Peter Schroeder-Heister (JSL 49 (1984))).

Richard montre qu'en présence de types d'identité (et de règles de formation et d'introduction pour Π types), funsplit est interfonctionnable avec la règle d'application ci-dessus + propositionnelle eta, c'est-à-dire les deux règles suivantes:

m:Π(UNE,B)η(m):jeΠ(UNE,B)(m,λX.mX)(Π-Soutenir-η)
x:Af(x):B(x)η(λ(f))=refl(λ(f)):IdΠ(A,B)(λ(f),λ(f))(Π-Prop-η-Comp)

That is, if you have funsplit, you can define application and η as above so that (Π-Prop-η-Comp) holds. More interestingly, if you have application and the propositional eta rules, then you can define funsplit.

De plus, funsplit est strictement plus fort que l'application: les règles propositionnelles eta ne sont pas définissables dans une théorie avec seulement application - donc funsplit n'est pas définissable, car alors les règles propositionnelles eta le seraient aussi. Intuitivement, c'est parce que les règles d'application vous donnent un peu plus de mou: contrairement à funsplit (et eta), elles ne vous disent pas quelles sont les fonctions, mais seulement qu'elles peuvent être appliquées aux arguments. Je crois que l'argument de Richard pourrait être répété pourΣ types également, pour afficher le même résultat pour spljet vs projections.

Notez que si vous aviez des règles ETA définitionnelles, vous les auriez certainement aussi de manière propositionnelle (avec η(m):=refl(m)). Thus, I think your statements "[...] which gives us η for functions" and "[...] this latter presentation makes it easy to obtain η for pairs" are wrong. Agda, however, implements η for both functions and pairs (if Σ is defined as a record), but this does not follow from just application.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.