Signification de «position positive» et «position négative» dans la théorie des types?


10

Que signifient «en position positive» et «en position négative» dans le contexte de la théorie des types?

La seule chose que j'ai compris du billet de blog de Bob Harper sur le sujet est qu'il existe un lien entre la polarité dans ce sens dans la théorie des types et la polarité dans la logique, mais je ne sais pas ce qu'est ce lien.

Réponses:


9

Malheureusement, la "polarité" est un concept quelque peu surchargé dans la théorie des types. "Position positive" et "position négative" se réfèrent à une notion de polarité différente de celle dont parle Bob avec la focalisation / polarisation.

Votre sens

Lorsque vous définissez un type inductif, vous donnez une série de règles qui correspondent aux opérations pour le type que vous définissez. Par exemple , vous pourriez dire un Natest quelque chose avec

  • une valeur zero : Nat
  • une fonction suc : Nat -> Nat

Et puis attendez-vous à ce qu'il Natcontienne toutes les valeurs qui peuvent être générées à partir de l'application répétée sucà d'autres Nats et inclut zero. Conformément à cette construction inductive, nous obtenons un principe de récursivité à travers Nats qui fonctionne basé sur le fait que tout Natest généré par ces constructeurs.

rec : A -> (A -> A) -> Nat -> A

pour que

rec Z S zero = zero
rec Z S (suc n) = S (rec Z S n)

Cependant, il existe certaines restrictions sur ce que nous pouvons écrire en tant que règles. Sinon, nous pouvons écrire une série de règles pour lesquelles le principe de récursivité ne peut être justifié. Considérez le "type inductif" Davec un constructeur

  • d : (D -> D) -> D

Ici, il n'y a pas de principe de récursivité sain ici. et pour une bonne raison! Si nous avions un principe de récursivité, nous pourrions l'utiliser pour encoder une version de l'auto-application et avec elle, la non-terminaison. Cela Dne peut pas être appelé "inductif" car les types inductifs sont des constructions finies générées à partir de constructeurs appliquant à plusieurs reprises!

Pour y faire face, nous restreignons la façon dont les types inductifs peuvent être récursifs dans la théorie des types. Plus précisément, nous les empêchons d'apparaître dans des "endroits négatifs". C'est cette notion de polarité dont vous parliez. La polarité d'une position est ainsi déterminée,

  1. L'argument commence dans une position positive
  2. Chaque fois que nous allons à gauche une flèche, la polarité bascule

XEst donc positif dans les deux premiers et négatif dans les deux autres

X
Int -> X
X -> Int
(Unit -> X) -> Int

Cette idée se justifie par un recours à la théorie des catégories où un type inductif dont les seules récurrences sont positives donne naissance à un foncteur covariant. Les détails de comment cela fonctionne et pourquoi c'est intéressant un peu long.

Signification de Bob Harper

Dans son blog, Harper parlait d'une signification différente de la polarité. Cette polarité fait référence à la façon dont divers connecteurs en logique ont un sens. En particulier, nous pouvons classer les connecteurs de deux manières

  • Les connecteurs positifs peuvent être définis en définissant comment les introduire (leurs règles d'introduction)
  • Les connecteurs négatifs peuvent être définis en définissant comment les utiliser (leurs règles d'élimination)

En termes de langage de programmation, cela capture bien la distinction entre les types paresseux et stricts. Un type strict est défini par ses valeurs. Un paresseux est défini par la façon dont le motif peut correspondre sur eux. Afin de gérer cela correctement, nous définissons un langage avec 2 constructions principales, des façons de construire des types positifs et des "épines" pour décomposer les types négatifs. Nous pouvons l'utiliser pour incorporer à la fois le calcul strict et le calcul paresseux dans une seule langue.

Afin de mieux comprendre cela, je vous renvoie au chapitre 38 du livre de Bob Harper .


Désolé, @jozefg, j'ai compris le concept mais je n'ai pas compris comment voir si un type n'apparaissait que sur des positions positives. Pourriez-vous en préciser un peu plus et donner quelques exemples supplémentaires?
paulotorrens
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.