• Aucun résultat trouvé

Singleton types et parametricity Singleton types

N/A
N/A
Protected

Academic year: 2022

Partager "Singleton types et parametricity Singleton types"

Copied!
17
0
0

Texte intégral

(1)

Singleton types et parametricity

Singleton types

Les types d ´ependants des pauvres Parametricity

Th ´eor `emes gratuits!

Singleton types partout

parametricity partout

(2)

Probl `emes avec les types d ´ependants

Incompatibles avec:

Mutation: incoh ´erence

Exceptions

R ´ecursion: v ´erification de types ind ´ecidable

Compilation: chaque phase de compilation est un probl `eme ouvert

...

Attrayant pour un assistant `a la preuve, mais:

(3)

GADTs: types “d ´ependants” sans arri `ere go ˆ ut

On remplace:

type Nat : Type | zero : Nat | succ : Nat -> Nat;

type NList (a : Type) (l : Nat)

| nnil : NList a zero

| ncons: a -> NList a l -> NList a (succ 1);

par

Zero : Type;

Succ : Type -> Type;

type NList a l

| nnil : NList a Zero

| ncons: a -> NList a l -> NList a (Succ 1);

(4)

GADTs

Pr ´eserve la “phase distinction”

Compatible avec les effets de bord, la compilation, ...

Disponible en Haskell, OCaml, Scala, ...

N ´ecessite une inf ´erence/v ´erification de types plus sophistiqu ´ee Se r ´eduit fondamentalement aux preuves d’ ´egalit ´e d’

mega

La saveur des types d ´ependants, mais sans la d ´ependance

(5)

Typage des GADTs

Le probl `eme du typage des GADTs:

Le raffinement des types dans les branches

case (ys : NList a l)

| nnil => nnil

| ncons x xs => ncons x xs

Il faut se souvenir que

l =

Zero dans la premi `ere branche

Tenir compte des ces ´egalit ´es lors de v ´erification d’ ´egalit ´e d’autres types Plusieurs typages possibles

annotations pour aider l’inf ´erence

(6)

Le type de make-nlist?

Avec typage d ´ependent:

make-nlist : a -> (len : Nat) -> NList a len;

Avec GADTs:

make-nlist : a -> (len : ?Nat?) -> NList a ?len?;

Nat n’existe plus (ou du moins, pas comme type) len n’existe pas dans le monde des types

(7)

Les types singleton `a la rescousse

type singleton: un type qui n’a qu’une seule valeur possible

Par exemple Snat

n

, le type des nombres qui valent

n

:

make-nlist : ∀ len. a -> Snat len -> NList a len;

On a maintenant acc `es `a len dans les 2 mondes: types et valeurs Mais, toujours pas de types d ´ependents!

Mais il faut dupliquer certaines choses:

(+) : ∀ n1, n2. Snat n1 -> Snat n2

-> Snat (plus n1 n2);

(8)

Types singleton partout

Les types singleton sont ´equivalents aux types d ´ependants

(9)

Param ´etricit ´e

∀t.t → t

est un singleton type

De m ˆeme, il n’y a pas de valeur de type

∀t.

Nat

→ t

Ceci peut se d ´eduire donc directement du type

La param ´etricit ´e est une propri ´et ´e g ´en ´erale `a partir de laquelle on peut prouver ces autres propri ´et ´es

(10)

Exemples

head

: ∀t.[t] → t f ◦

head

'

head

map

f

(++)

: ∀t.[t] → [t] → [t]

map

f (x

++

y) '

map

f x

++ map

f y K : ∀t

1

, t

2

.t

1

→ t

2

→ t

1

f (K x y) ' K (f x) (g y )

zip

: ∀t

1

, t

2

.([t

1

], [t

2

])

→ [(t

1

, t

2

)]

zip

(

map

f x,

map

g y)

'

map

(f × g)

zip

(x, y)

(11)

Mod `eles

Un mod `ele d’un langage est un mapping vers un formalisme standard Exemple:

Γ ` e : τ ⇒ J e K

Γ

∈ J τ K

Γ

J n K

Γ

⇒ n

J Int K

Γ

⇒ Z

(12)

Mod `ele pour System F

Pour la param ´etricit ´e, on d ´efini une sorte de mod `ele Les types sont traduits en relations binaires

e : τ ⇒ e J τ K e

Pour un type de base

τ

, la relation est la relation identit ´e

J

Bool

K :

Bool

Bool

= I

Bool

Si

J τ K = R : A ⇔ A

0

alors

J [τ ] K = R

0

: [A] ⇔ [A

0

]

(13)

Mod `ele de fonctions

Si

J τ

1

K : A ⇔ A

0

et

J τ

2

K : B ⇔ B

0

alors

J τ

1

→ τ

2

K : A → B ⇔ A

0

→ B

0

tel que

f J τ

1

→ τ

2

K f

0 iff

∀x, x

0

. x J τ

1

K x

0

⇒ f x J τ

2

K f

0

x

0

Functions are related if they take

related input arguments to related output results

(14)

Mod `ele de polymorphisme

J ∀t.F t K : (∀t.F t) ⇔ (∀t

0

.F

0

t

0

)

soit

F

une fonction de relation `a relation telle que pour toute relation

R : A ⇔ A

0 il y a une relation

F R : F A ⇔ F

0

A

0.

alors

f J ∀t.F t K f

0 iff

∀A, A

0

, R : A ⇔ A

0

. f [A] (F R) f

0

[A

0

]

Polymorphic functions are related if they take related input types to related output values

(15)

Th ´eor `eme de param ´etricit ´e

Le th ´eor `eme de param ´etricit ´e, dit simplement:

Si

• ` e : τ

alors

e J τ K e

Cela revient `a dire que le mod `ele est valide

(16)

Usage

Prenons notre premier exemple

f : ∀t. t → t

Le th ´eor `eme nous dit

∀x

1

, x

2

, R. x

1

R x

2

⇒ (f x

1

) R (f x

2

);

On peut alors l’instancier avec:

x

1

= x, x

2

= x, R = {(x, x)}

Ce qui nous donne:

(f x) R (f x) ⇒ (f x, f x) ∈ {(x, x)} ⇒ f x = x

(17)

Avec Curry-Howard

alors

J τ

1

→ τ

2

K : A → B ⇔ A

0

→ B

0

tel que

f J τ

1

→ τ

2

K f

0 iff

∀x, x

0

. x J τ

1

K x

0

⇒ f x J τ

2

K f

0

x

0

Devient:

f J τ

1

→ τ

2

K f

0

= (x : A) → (x

0

: A

0

) → (P : x J τ

1

K x

0

)

→ (f x J τ

2

K f

0

x

0

)

A.K.A

J τ

1

→ τ

2

K = λf → λf

0

→ (x : A) → (x

0

: A

0

) → (P : x J τ

1

K x

0

)

→ (f x J τ

2

K f

0

x

0

)

Références

Documents relatifs

Calcule et affiche la somme des éléments de liste et stocke le résultat dans une variable somme (sans utiliser la fonction sum de Python).. Calcule et affiche la moyenne de ces

Dans cette partie, nous nous int´ eressons au probl` eme inverse de d´ ecompilation d’une EDO en un ensemble de r` egles de r´ eactions, et aux conditions d’unicit´ e du mod` ele

Impl´ementation de l’algorithme en langage C.- La d´ecomposition d’une permuta- tion en cycles, que ce soit dans le cas d´eterministe ou non d´eterministe, n’est jamais un

Plan où on analyse un sujet ou une notion (très pratique pour notion) par thèmes ou par aspects. Le but est d’analyser les aspects essentiels du sujet, d’en faire le tour en traitant

print ("Vous n ' avez pas donné de nombre correct, nous ne pouvons donc pas donner le carré") print ("Le carré de", nombre, "est égale à", nombre * nombre).

Extrait du livre Enfants-Poètes de l'Ecole Freinet.. de la Table

A good cutoff k i is such that varPOAC removes many inconsistent values (that is, obtains a significant volume reduction in the net- work) while avoiding calls to varPOAC that

Construction de la boîte à moustache (!!! pouvoir interpréter et comprendre l’utilité de cet outil). 3) Exercices sur les mesures de localisation et de dispersion