• Aucun résultat trouvé

Extensions de PTS Entiers, floats, ... Tuples, Structures, Records, ... Algebraic data types Types r´ecursifs Types existentiels

N/A
N/A
Protected

Academic year: 2022

Partager "Extensions de PTS Entiers, floats, ... Tuples, Structures, Records, ... Algebraic data types Types r´ecursifs Types existentiels"

Copied!
10
0
0

Texte intégral

(1)

Extensions de PTS

Entiers, floats, ...

Tuples, Structures, Records, ...

Algebraic data types Types r ´ecursifs

Types existentiels

(2)

Types r ´ecursifs

G ´en ´eralement d ´enot ´es:

least fixed point:

µf = µx.f x ' f (f (f (f (...(f (⊥))))))

greatest fixed point:

νf = νx.f x ' f (f (f (f (...(f (>))))))

List α = µ (λl → Unit + (α × l)) Stream α = ν (λl → (α × l))

µ

ne marche pas pour

Stream

!

µ

ajoute jusqu’ `a obtenir un point fixe

ν

(3)

Egalit ´e des types r ´ecursifs ´

type List1 α | nil | cons α (List1 α );

type List2 α | nil | cons α (List1 α );

type List3 α | nil | cons α (List4 α );

type List4 α | nil | cons α (List3 α );

Ces types sont-ils tous ´egaux?

(4)

Iso- vs ´ Equi- r ´ecursion

Deux s ´emantiques possibles:

equirecursive types:

µf = f (µf )

isorecursive types:

Γ ` e : µf

Γ ` unroll e : f (µf ) Γ ` e : f (µf )

Γ ` roll e : µf

roll

/

unroll

ne peuvent convertir

List1

`a

List3

roll

/

unroll

facilitent grandement la v ´erification des types

(5)

R ´ecursion ”impropre”

type Tree α | leaf α | node (Tree ( α × α )) Tree = µ (λ(t : TypeType )

→ λ(α : Type ) → α + t (α × α))

Complique encore plus l’implantation des types ´equir ´ecursifs

Γ ` e : (µ f ) τ

1

... τ

n

Γ ` unroll e : f (µ f ) τ

1

... τ

n

Γ ` e : f (µ f ) τ

1

... τ

n

Γ ` roll e : (µ f ) τ

1

... τ

n

(6)

Quantification existentielle

Utile quand un type ne sera connu qu’ `a l’ex ´ecution:

filter

:

NList

α n → ∃n

0

.

NList

α n;

Essayons d’encoder la quantification universelle:

∃t.τ ' ¬∀t.¬t

∃t : κ.τ ' ((t : κ) → t →

False

) →

False

Utilisable pour des preuves

Renvoyer toujours False est probl ´ematique dans des programmes

G ´en ´eralis ´e `a n’importe quel type

(7)

Types existentiels

∃t : κ.τ ' (α : Type ) → ((t : κ) → τ → α) → α

Introduction (parfois d ´enot ´e

ht = τ, e : f i

)

Γ ` e : f τ

Γ ` pack τ e : ∃t : κ.f t

Elimination (parfois d ´enot ´e´

open e

1

... in e

2)

Γ ` e

1

: ∃t : κ.τ

1

Γ, t : κ, x : τ

1

` e

2

: τ

2

Γ ` let pack t x = e

1

in e

2

: τ

2

(8)

Types existentiels (exemples)

Une liste de taille non-sp ´ecifi ´ee:

List α ' ∃n : Nat . NList α n

Une repr ´esentation de fermeture:

τ

1

→ τ

2

' ∃

ctx

: Type . Pair ((τ

1

,

ctx

) → τ

2

)

ctx

O `u l’appelle `a une telle fermeture

f

devient:

let pack t x = f in

let code = x.1 // code : ( τ

1

, t) → τ

2

let env = x.2 // env : t

(9)

Existentiels = paires d ´ependantes

∃t : κ.τ ' (α : Type ) → ((t : κ) → τ → α) → α

Rappelons l’encodage de Church des paires:

Pair

τ

1

τ

2

' (α : Type ) → (τ

1

→ τ

2

→ α) → α

Diff ´erences:

Premier champ vient d’une autre sorte

Type du deuxi `eme champ peut d ´ependre de la valeur du premier

(10)

G ´en ´eralisation

Existentiels deviennent un cas particulier:

type Exists k f

| pack (t : k) (f t);

type Closure t

1

t

2

| closure (ctx : Type)

((t

1

× ctx)t

2

)

ctx;

Références

Documents relatifs

[r]

E is an algebraic bundle for ^ , with the cofinite subsets as rational éléments, and has as sup-computable éléments (i. e., computable for this bundle) ail subsets s r^J

On compare la valeur cherchée à l'élément central du tableau, si ce n'est pas la bonne, un test permet de trouver dans quelle moitié du tableau on trouvera la valeur. On

Pas de nouvelle cr´ eation de point dans la table pour (1,2,3) En deux comparaisons avec un autre point (au lieu de potentiellement 4).. Points

In short, scale structure and event structure are related: whenever they bear on non -stative predications, degree modifiers can either require them to be telic or to be

´ Etant donn´ e une loi de probabilit´ e th´ eorique, il s’agit de savoir, ` a partir d’un n-´ echantillon, c’est-` a-dire de n observations ind´ ependantes, d’une variable

We have extended the constraint-based type system HM(X ) with deep pattern matching, polymorphic recursion, and guarded algebraic data types, in an at- tempt to study, in a

Furthermore, this approach provides us with some extra expressiveness: a single algebraic data type can have both ordinary type parameters, which are inferred via constraint-based