• Aucun résultat trouvé

3.4 La notion de types dépendants

3.4.1 Les types dépendants du premier ordre

La théorie prédicative des types de PML restreint la quantication par l'utilisation d'une hié-rarchie d'univers de types. La quantication sur les types d'un univers forme un nouvel univers d'ordre supérieur. Il n'est pas possible à partir d'univers inférieurs de quantier sur des univers d'ordre supérieur. Des types de base calculables, comme par exemple les entiers, sont dénis dans un univers de base appeléeU0 qui est clos pour les formules logiques. De plus, des formules qui

11. Un prédicat est un syncatégorème particulier, i.e., une expression "incomplète", représentant une fonction d'un domaine D d'objets dans l'ensemble des valeurs vrai, faux dans la logique du premier ordre. Ceci an de départager les objets auxquels s'applique le prédicat des objets auxquels il ne s'applique pas, engendrant ainsi "l'extension du prédicat" contenue dans le domaine D.

12. L'ensemble des ensembles n'appartenant pas à eux-mêmes appartient-il à lui-même ?

Oui : comme par dénition les membres de cet ensemble n'appartiennent pas à eux-mêmes, il n'appartient pas à lui-même, d'où une contradiction.

Chapitre 3. La théorie des types

quantient U0 sont nécessairement du type supérieur U1. Le reste des univers est construit de la même façon. Bien évidemment la théorie des types indépendants du premier ordre restreint la théorie PML aux seuls universU0 etU1. Dans cette théorie, les types de données et les types logiques peuvent être représentés par une seule théorie et traités d'une manière identique.

Généralement toutes les théories des types sont présentées au moyen des règles de base sui-vantes (certaines en possèdent d'autres) :

Les règles de formation. Elles expliquent les conditions sous lesquelles il est possible de former (construire) un type. Ce sont des règles syntaxiques.

Les règles d'introduction. Elles expliquent la signication d'un type en indiquant comment il est possible de construire les éléments dits canoniques ou normaux de ce type (un type de la théorie constructive des types est toujours construit de manière inductive). Ce sont des règles sémantiques.

Les règles d'élimination. Elles introduisent d'autres éléments du type (dits non-canoniques). Ce sont des règles syntaxiques.

Les types dépendants sont donc des nouveaux types de base :

1. Le Π-type :Πx : σ . τ(x), le produit dépendant de τ(x) oux est un habitant deσ. 2. Le Σ-type :Σx : σ . τ(x), la somme dépendante deτ(x) ou xest un habitant deσ.

Un premier exemple de type dépendant est le type des tableaux d'entiers. La taille est le plus souvent représentée dans des langages de programmation par une information indiquée dans le type. Il n'existe alors pas un type tableau, mais une famille :tableau(0),tableau(1), ... pour des tableaux de taille 0, 1, ... Prenons une fonction T qui établit une correspondance entre un entier

net un tableau de taille nne contenant que des0 :

T(0) =[]

T(1) =[0] etc.

Cette fonction prend toujours pour argument un entier, par contre le type du résultat de la fonction n'est pas toujours le même. Ce type est tableau(n) où n est la valeur de l'argument de la fonction. Un type possible pour cette fonction est : entier tableau(n). Problème : cette notation n'exprime pas le fait que le nréfère à l'argument de la fonction. Il est nécessaire d'indiquer le nom de l'argument (dans le reste du type) en plus du fait qu'il est du type entier. Ce type peut être représenté par le Π-type suivant :

Πn : entier . tableau(n)

De cette manière, la notationE F devient un cas particulier de :Πx : E . F , l'argument x

de la fonction n'est pas utilisé dans F et ne demande donc pas à être indiqué.

Ces types dépendants augmentent fortement l'expressivité et la concision de la théorie des types. Ils permettent par exemple de représenter le type complexedate:T ype dont un habitant

3.4. La notion de types dépendants est une année, un mois et un jour. Certains représentent la date comme un produit cartésien d'entiers naturelsN ×N ×N où le premier élément est l'année, le second le mois et le troisième le jour. Il est possible d'améliorer le type en précisant que le nombre des mois n'excède pas 12 et le nombre de jours n'excède pas 31 :N × N(12) × N(31).

Seulement voilà, le nombre de jours n'est pas toujours égal à 31 et le mois de février dépend de l'année. Donc une meilleure représentation peut être faite par le type dépendant suivant :

date , Σy : N .Σm : N at(12)13. N at(nombre de jours pour le mois m de l'année y) où le terme "nombre de jours pour le mois m de l'année y" est dénie par un ltre aramétré par les arguments y et m. Un habitant du type date est par exemple :<1968, <3,10>>.

Prenons le cas un peu plus complexe d'une phrase dicile à dénir : Every man who owns a donkey beats it (Tout homme qui possède un âne le bat) se représente par la formule de la logique du premier ordre :

∀d∈Donkey,∀m∈M an(Owns(m, d)⊃Beats(m, d))

Le problème avec cette représentation est que la quantication porte sur tous les hommes et tous les ânes, au lieu de porter uniquement sur les hommes possédant un âne. Cette phrase pourrait également s'écrire :

∀m∃d M an(m) Donkey(d) Owns(m, d) →Beats(m, d)

Mais en écrivant cette formule la quantication existentielle porte sur l'ensemble des ânes, alors qu'elle devait portée sur le sous-ensemble des ânes que possède un homme.

Avec une représentation par des types dépendants il est possible de quantier uniquement sur un sous-ensemble (i.e., chaque âne appartenant à un homme) et l'exemple ci-dessus devient :

Πd: (Σx:M an.y:Donkey.Owns(x, y)).(Beats(π1d, π1(π2d))

Dans la théorie des types dépendants, il est également possible d'utiliser les Σ-types pour l'encapsulation :

Σf1 : σ1 τ1.· · ·Σfm : σm τm. Axiome(f1,· · ·, fm)

où lesfi sont des opérations (programmes) deσi τi qui satisfont à un axiome (ou spécica-tion) Axiome(f) :T ype. Les habitants de Axiome(f ) sont interprétés comme des preuves de cet axiome.

Prenons par exemple, pour un typeσ :T ype, la dénition de la structure d'un monoïde14:

13. L'opérateurN atconstruit un type à partir d'un entier, et correspond, par l'isomorphisme de Curry-Howard à un prédicat sur un entier. Ce prédicat est appelé un constructeur de type dont le type est :Πx : int . N at(x). 14. Une opération binairesur un ensembleX est dite associative si (a∗b)∗c =a∗(b∗c)pour tout triplet

a,b,c∈ X.

Un élémentc X est dit élément neutre pour l'opération binaire considérée si e∗x =x∗e =xpour tout

x X.

Un ensembleX muni d'une opération binaire associative et d'un élément neutre s'appelle par convention un monoïde.

Chapitre 3. La théorie des types

Monoïde(σ) , Σop : σ σ σ .Σunit : σ .x :

σ . Eqσ15(op x unit, x) × Eqσ(op x unit, x)) ×x, y, z : σ . Eqσ(op x(op y z), op(op x y)z)) Un habitant σ :Monoïde(σ) peut être le tuple hm,he,hp, qiiip est la preuve que e : σ

est un élément neutre pour l'opérationm : σ σ σ, etqune preuve de l'associativité dem. La théorie des types dépendants d'ordre supérieur qui sera introduite dans la section suivante autorise l'encapsulation des types. Il est alors possible d'écrire un type tel que :

Σα : T ype . M onoide(α). Ces types d'ordres supérieurs peuvent alors être utilisés pour la spéci-cation de modules ou de structures complexes (tels que les enregistrements).

Comment prouver un Π-type ou un Σ-type ?

Une preuve du type produit P : Πx : σ . τ est une fonction P , λ x : σ . P x qui donne pour chaque élémentM : σ du domaine de quantication, une preuveP m : τ[Mx]qui montre que la propositionτ est vraie pour l'élémentM.

Une preuve du type somme forte P : Σx : σ . τ est une paire P =< π1P, π2P > qui consiste en un élément π1P : σ du domaine de quantication et une preuve π2P :

τ [π1Px]montrant que la propositionτ est vraie pour l'élémentπ1P. Logique intuitionniste Théorie constructive des types

T1 T2 T1 + T2

(∀x:T1)T2(x) (Πx:T1)T2(x)

T1 T2x:T1)T2 ou T1 T2

(∃x:T1)T2(x) (Σx:T1)T2(x)

T1 T2x:T1)T2 ou T1x T2

Table 3.3 Correspondance entre la théorie la logique intuitionniste et la théorie constructive des types