• Aucun résultat trouvé

2.7 Dépendances d’une expression

2.7.2 Dépendances de valeur

La valeur résultant de l’évaluation d’un programme dépend d’un point d’injection (re-présenté par un label) si il existe une injection sur ce label ayant un impact sur la valeur de l’évaluation. On dit alors que ce label fait partie des v-dépendances de ce programme (dans un environnement donné). Certains labels peuvent avoir un impact uniquement sur une partie de la valeur. Dans ce cas, on voudrait savoir le plus précisément possible quelle partie de la valeur dépend de quel label.

Lors de l’analyse d’un programme, le résultat de l’analyse devra contenir une valeur structurée dont chaque sous-terme peut être annoté par l’ensemble de ses v-dépendances.

2.7.3 Illustration par l’exemple

Considérons le programme suivant (noté e) : l e t c = l : t r u e i n

l e t r e c f x = match x with

| ( a , b ) −> i f a then b e l s e f x i n

f ( c , l ’ : 17)

Ce programme termine lors de son évaluation par la sémantique opérationnelle sur la valeur 17. On a le jugement suivant :

Un label n’apparaissant pas dans le programme Un label l′′n’apparaissant pas dans le programme e ne peut pas faire partie de ses dépendances (que ce soit ses t-dépendances ou ses v-dépendances) puisqu’aucune injection sur l′′n’affecte le comportement du programme. On a le jugement suivant :

l′′:vl′′ e→→ 17 (pour toute valeur injectée vl′′)

Le label l Le point d’injection représenté par le label l fait partie des t-dépendances du programme. En effet, il existe une injection (l, false) ayant un impact sur la terminaison du programme. La sémantique avec injection ne fournit aucune valeur pour l’évaluation de eavec l’injection (l, false).

̸ ∃v. ⊢l:f alse e→→ v

Le label l Le point d’injection représenté par le label l fait partie des v-dépendances du programme. En effet, il existe une injection (l,18) ayant un impact sur la valeur du programme. La sémantique avec injection fournit une valeur (i.e. 18) pour l’évaluation de e avec l’injection (l,18) et cette valeur est différente de la valeur opérationnelle du programme (i.e. 17).

l′:18e→→ 18

Par contre, le label l ne fait pas partie des t-dépendances du programme puisque pour toute injection sur l, le programme termine :

Analyse dynamique

3.1 Introduction

Ce chapitre a pour but de présenter une analyse dynamique des dépendances d’un programme et sa preuve de correction, étape préliminaire à la définition et à la preuve d’une analyse statique présentée dans le chapitre suivant.

Notre analyse dynamique est appelée sémantique instrumentée et se trouve présen-tée à la fin de ce chapitre (cf. section 3.5).

Pour présenter cette analyse et en prouver sa correction, nous devons tout d’abord intro-duire deux sémantiques intermédiaires : la sémantique avec injection dans un t-environnement sur-instrumenté (cf. section 3.3) et la sémantique sur-instrumentée (cf. section 3.4). Ces deux sémantiques intermédiaires permettent de faire le lien entre la notion de dépendance et la sémantique dynamique étape par étape. Chaque étape a son importance dans la simplification de la preuve de correction. La figure 3.1 présente une vue globale des dif-férentes sémantiques intermédaires entre la sémantique opérationnelle avec injection et la sémantique instrumentée.

L’analyse dynamique (sémantique instrumentée) a pour but d’analyser le programme au cours de son évaluation. Le résultat fourni est la valeur du programme (au sens de la sémantique opérationnelle) sur laquelle on ajoute des annotations de dépendance. Chaque sous-terme de la valeur contient ses propres annotations pour savoir avec précision quelles parties de la valeur dépendent de tel label et quelles parties n’en dépendent pas. Si on

Sémantique opérationnelle avec injection :

Sémantique opérationnelle avec injection dans t-environnement sur-instrumenté :

Sémantique sur-instrumentée :

Sémantique instrumentée :

Les flèches correspondent à des fonctions injectives entre les ensembles de valeurs ou entre les ensembles d'environnements pour visualiser les pertes de précision et pertes de généralité.

Figure 3.1 – Sémantiques intermédiaires pour l’analyse dynamique

La sémantique avec injection donne la même valeur si on instancie l'environnement avant l'évaluation.

En instanciant la valeur sur-instrumentée, on peut obtenir la valeur (ou l'absence de valeur) du programme pour n'importe quelle injection.

Il existe une valeur sur-instrumentée pour le programme telle que sa valeur instrumentée est obtenue en supprimant les fonctions d'impact dans la valeur sur-instrumentée.

Ce diagramme montre le lien entre l'analyse dynamique d'un programme (sémantique instrumentée) et la notion d'injection (sémantique opérationnelle avec injection).

On peut ainsi visualiser l’enchaînement des preuves de correction des 3 sémantiques présentées dans ce chapitre.

Figure 3.2 – Enchaînement des preuves des sémantiques intermédiaires pour l’analyse dynamique

supprime toutes les annotations de dépendance, on obtient exactement la même valeur qu’après l’évaluation du programme par la sémantique opérationnelle.

Les annotations ajoutées par l’analyse dynamique correspondent aux dépendances du programme (c’est-à-dire l’ensemble des labels ayant un impact sur l’évaluation de ce pro-gramme, comme défini plus haut (cf. section 2.7)). Nous prouvons formellement cette af-firmation par le théorème de correction de l’analyse dynamique (cf. section 3.6.4).

Pour arriver à cette preuve, nous prouvons successivement la correction de la séman-tique avec injection dans un t-environnement sur-instrumenté (cf. section 3.3.2), puis la correction de la sémantique sur-instrumentée (cf. section 3.4.2) et enfin la correction de la sémantique instrumentée (cf. section 3.5.3). Les propriétés de correction de ces trois sémantiques s’enchaînent pour obtenir le théorème de correction de l’analyse dynamique. La figure 3.2 illustre l’enchaînement de ces propriétés de correction.

Dans ce chapitre, nous présenterons tout d’abord la sur-instrumentation des valeurs (cf. section 3.2) qui nous permettra d’introduire la première sémantique intermédiaire pour l’analyse dynamique : la sémantique opérationnelle avec injection dans un t-environnement sur-instrumenté (cf. section 3.3). Nous présenterons ensuite la seconde sémantique inter-médiaire : la sémantique sur-instrumentée (cf. section 3.4). Enfin nous pourrons présenter l’analyse dynamique elle-même : la sémantique instrumentée (cf. section 3.5). La présenta-tion de chaque sémantique sera accompagnée de l’énoncé de son théorème de correcprésenta-tion par rapport à la sémantique précédente ainsi que d’une explication sur sa preuve. Nous termi-nerons ce chapitre avec l’énoncé du théorème global de correction de l’analyse dynamique et une explication sur sa preuve utilisant la propriété de correction de chaque sémantique par rapport à la sémantique précédente.