---
title: "Typage idéal" 
weight: 20
---

# Typage idéal

Le typage idéal (usage de Girard) n'apparaît pas directement dans le LSC,
il s'agit plutôt d'un idéal intangible que l'on pourrait modéliser
mathématiquement.

Partons de la spécification. Nous voulons associer des étiquettes à des
comportements que nous avons en tête. 

## Définition par interaction

On raisonne toujours par *interaction*, c'est-à-dire qu'on définit un concept à
partir de l'ensemble des interactions associées.

On doit tout d'abord définir un *critère d'orthogonalité*. Il s'agit : 
- une relation binaire et symétrique entre constellations
- d'une sorte de mesure de l'interaction entre constellations
- d'un critère qui définit ce qui est considéré comme une interaction satisfaisante
- d'un critère qui juge ce qu'est une interaction attendue

Pour faire interagir deux constellations, il suffit d'exécuter leur union. On
note `C _|_ C'` si les deux constellations `C` et `C'` sont *orthogonales*
d'après un critère choisi, c'est-à-dire que l'exécution de `C + C'` satisfait
le critère.

Des critères possibles sont :
- demander la terminaison de l'exécution
- demander une constellation spécifique ou d'une forme spécifique en résultat
de l'exécution
- ...

## Construction de spécification

Soit **A** un ensemble de constellation. On note **~A** l'ensemble des
constellations `C'` telles que pour toutes constellations `C` de **A**, on ait
`C' _|_ C`.  

Un ensemble de constellation est une *spécification idéale* si **A** = **~~A**
ou de façon équivalente lorsqu'il existe un ensemble **B** tel que **A = ~B**.
C'est-à-dire que **A** peut être caractérisé par interaction par un ensemble
**B** vu comme une sorte d'ensemble de tests à faire passer pour affirmer
l'appartenance à **A**. On cherche à avoir des objets *testables*.

Il est évident que dans le cas général, ce **B** peut être infini et que donc
on ne pourrait jamais affirmer en temps fini l'appartenance d'une constellation
à une spécification idéale. Elles sont justement idéales en ce sens : elle
capture parfaitement un comportement souhaité mais elles ne permettent pas
d'étiqueter une constellation.

## Exemple : fonctions

On aimerait définir une étiquette associée correspondant aux fonctions unaires
d'entier vers entier.

On recherche un ensemble de tests : l'ensemble infini **Nat** de toutes les
représentations d'entiers que de telles fonctions devrait pouvoir prendre en
entrée.

La spécification idéale recherchée est **Nat => Nat = ~Nat**.

La difficulté est de trouver un critère d'orthogonalité et une représentation
des fonctions cohérente avec cette notion de spécification. Ce n'est pas le cas
de toutes les représentations imaginables d'entiers.