Sémantiques pour un langage impératif

Documents pareils
Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Théorie de la Programmation

Organigramme / Algorigramme Dossier élève 1 SI

Évaluation et implémentation des langages

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Logiciel Libre Cours 2 Fondements: Programmation

Cours de Programmation 2

La NP-complétude. Johanne Cohen. PRISM/CNRS, Versailles, France.

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

OCL - Object Constraint Language

Rappels sur les suites - Algorithme

Informatique Machines à calculer en théorie et en pratique

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Algorithmique et Programmation Fonctionnelle


Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Cours 1 : La compilation

length : A N add : Z Z Z (n 1, n 2 ) n 1 + n 2

Préparation à l examen EFA en Macro

Cours No 3 : Identificateurs, Fonctions, Premières Structures de contrôle.

Classes et Objets en Ocaml.

Cours d algorithmique pour la classe de 2nde

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Réalisabilité et extraction de programmes

STAGE IREM 0- Premiers pas en Python

Corrigé des TD 1 à 5

Principes des langages de programmation INF 321. Eric Goubault

Peut-on tout programmer?

Machines virtuelles Cours 1 : Introduction

Cours d Algorithmique et de Langage C v 3.0

Initiation à l algorithmique

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

Algorithmique et Programmation, IMA

Initiation à la programmation en Python

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Chapitre 2 Le problème de l unicité des solutions

Calculabilité Cours 3 : Problèmes non-calculables.

Résolution de systèmes linéaires par des méthodes directes

Les diagrammes de modélisation

Compilation (INF 564)

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Programmation linéaire

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Enseignement secondaire technique

Limites finies en un point

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable T : pour travailler et mémoriser le cours

COMPARAISONDESLANGAGESC, C++, JAVA ET

Raisonnement probabiliste

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Informatique Théorique : Théorie des Langages, Analyse Lexicale, Analyse Syntaxique Jean-Pierre Jouannaud Professeur

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Fondements de l informatique Logique, modèles, et calculs

Propagation sur réseau statique et dynamique

Analyse de sécurité de logiciels système par typage statique

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Mathématique et Automatique : de la boucle ouverte à la boucle fermée. Maïtine bergounioux Laboratoire MAPMO - UMR 6628 Université d'orléans

Exo7. Matrice d une application linéaire. Corrections d Arnaud Bodin.

Théorème du point fixe - Théorème de l inversion locale

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

TD3: tableaux avancées, première classe et chaînes

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Les processus légers : threads. Système L3, /31

Examen Médian - 1 heure 30

Programmation C. Apprendre à développer des programmes simples dans le langage C

Raisonnement par récurrence Suites numériques

Présentation du langage et premières fonctions

Cours Informatique Master STEP

Chp. 4. Minimisation d une fonction d une variable

Résolution d équations non linéaires

Éléments de programmation et introduction à Java

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

Les BRMS Business Rules Management System. Groupe GENITECH

Simulation de variables aléatoires

Programmation. fonctionnelle, impérative, logique et orientée objet

DOCM Solutions officielles = n 2 10.

Les Langages Informatiques

Programmation Web. Madalina Croitoru IUT Montpellier

Exercices - Fonctions de plusieurs variables : corrigé. Pour commencer

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Apprentissage Automatique

Vérification de programmes et de preuves Première partie. décrire des algorithmes

Représentation d un entier en base b

Reconstruction de bâtiments en 3D à partir de nuages de points LIDAR

Table des matières Avant-propos... V Scripting Windows, pour quoi faire?... 1 Dans quel contexte?

6. Les différents types de démonstrations

Introduction à MATLAB R

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Les formations de remise à niveau(!) l'entrée des licences scientifiques. Patrick Frétigné CIIU

Intelligence Artificielle Planification

Lambda-calcul et langages fonctionnels

Le théorème de Thalès et sa réciproque

Programmation C++ (débutant)/instructions for, while et do...while

Introduction au langage C

Arbres binaires de recherche

Transcription:

Sémantiques pour un langage impératif Dominique Duval XLIM, colloquium du LACO Université de Limoges, 23 février 2007

Outline Introduction Syntaxe Sémantique dénotationnelle Sémantique opérationnelle SémantiqueS

Syntaxe et sémantiques Un langage de programmation possède : une syntaxe (ou grammaire), et des sémantiques (pour le sens ). Une sémantique peut être (entre autres) : opérationnelle, dénotationnelle, axiomatique,... Pour un langage donné, ces sémantiques ne sont pas toujours équivalentes!

Paradigmes de langages de programmation On peut classer les langages de programmation : impératif (FORTRAN, Pascal, C, Ada) fonctionnel (Lisp, Scheme, ML, Caml, Haskell) logique (Prolog) et orienté objet (Smalltalk, Eiffel, Java, C++, OCaml) Le langage IMP est un langage impératif particulièrement simple, mais aussi puissant que les autres langages. Toutes les sémantiques de IMP sont équivalentes. Référence : Glynn WINSKEL, The formal semantics of programming languages.

Syntaxe et sémantiques d un langage impératif Le programme s exécute pas à pas, en écrasant la valeur d une zone mémoire pour la remplacer par une nouvelle valeur. L état de la mémoire jour donc un rôle primordial dans la description de l exécution d un programme. Dans la syntaxe l état est implicite (caché) Dans les sémantiques l état est explicite (visible) Travail en cours [Dumas, Duval, Reynaud] : Définir une sémantique avec état implicite Des idées voisines : les sortes cachées [Goguen], les monades [Moggi]

Un peu de calculabilité Thèse de Church-Turing. Toutes les définitions des fonctions calculables sont équivalentes. Enoncé par Kleene en 1943. Impossible à énoncer précisément, donc à prouver, mais s appuie sur des théorèmes d équivalence (1936) : machines de Turing, fonctions récursives de Gödel, lambda calcul de Church,... Tous les langages de programmation ont la même puissance. Indécidabilité. Le problème de l arrêt est indécidable (Turing 1936). Tous les langages permettent d écrire des programmes qui ne terminent pas.

Outline Introduction Syntaxe Sémantique dénotationnelle Sémantique opérationnelle SémantiqueS

Syntaxe : les constantes Nombres : n N = {..., 1, 0, 1,...} Valeurs de vérité : t T = { true, false } = { t, f } Variables : v V = {X, Y, Z, X 1, Y 1,...} On note U = { } (singleton), et on identifie 0 = ( 0) : U N, etc V N T X,......,0,... t, f U U U

Syntaxe : les expressions Définition inductive. Notation à la BNF (Backus-Naur Form). Expressions arithmétiques : a A. a ::= n v a a + a a a Expressions booléennes : b B. b ::= t b b b b b a = a a < a a a V,+, =,<, A B N T,,

Syntaxe : les commandes Définition inductive. Commandes : c C. c ::= skip v := a c; c if b then c t else c f while b do c (pas de fonctions, procédures, pointeurs,...) U skip ; while... if... C := A B V

Constantes et expressions Syntaxiquement, les constantes sont aussi des expressions : a ::= n v..., b ::= t... On peut rendre ces conversions explicites : a ::= n a(n) v a(v)..., b ::= t b(t)... V,+, =,<, A B v a n a t b N T,, Cela permet de distinguer la variable X (à gauche) de l expression X (à droite) dans la commande en notant éventuellement X := X X := v a(x )

Exemples : affectation Une commande est un chemin de source U et de but C (ou terme clos de type C) engendré par le graphe (ou signature) décrivant la syntaxe. X := 0 U U X := Y U U X V 0 N A X V Y V A Semblable aux diagrammes usuels, mais plus précis : X := 0 X := Y := C := C

Exemple : conditionnelle if X < 0 then X := X else skip X U V A 0 U N A X U V U X V A A skip U < B := C if... C C À comparer au diagramme usuel : X 0 < X X := if... skip

Trois sémantiques dénotationnel ( utilisateur ) implicite (nouveau) opérationnel ( machine )

Outline Introduction Syntaxe Sémantique dénotationnelle Sémantique opérationnelle SémantiqueS

Sémantique dénotationnelle La sémantique dénotationnelle est une interprétation mathématique de la syntaxe utilisant uniquement les constantes (N, T, V ) et les constructions ensemblistes. La sémantique dénotationnelle représente le point de vue de l utilisateur.

L état On pose S = N V (fonctions de V vers N) s(v) N est la valeur de la variable v dans l état s, s[n/v] ou update (s, v, n) est l état obtenu à partir de s en remplaçant la valeur de v par n. s = X 1 Y 55 Z 4 s(x ) = 1 s[9/x ] = X 9 Y 55 Z 4.... Remarque. S = N V, donc V S N, donc V N S.

Interprétation : les constantes Les constantes sont leur propre interprétation : [[n]] = n N, [[t]] = t T, [[v]] = v V V N T X,......,0,... t, f U U U

Interprétation : les expressions Expressions arithmétiques : A est interprété par N S [[n]] : s n, [[v]] = [[v a(v)]] : s s(v), [[ a]] = [[a]], [[a+a ]] = [[a]]+[[a ]],... Expressions booléennes : B est interprété par T S. [[t]] : s t, [[ b]] = [[b]], [[b b ]] = [[b]] [[b ]], [[a < a ]] = [[a]] < [[a ]],... V,+, N S =,>, T S N T,,

Interprétation : les commandes C est interprété par S S p (fonctions partielles de S vers S). L ensemble S S p est ordonné : c c dom(c) dom(c ) et s dom(c), c(s) = c (s) [[ skip ]] : s s [[v := a]] : s s[n/v] où n = [[a]](s) [[c; c ]] = [[c ]] [[c]] : s [[c ]]([[c]](s)) [[ if b then c t else c f ]] : s si [[b]](s) alors [[c t ]](s) sinon [[c f ]](s) c est la définition d une fonction par cas, car T = { true, false } = { true } + { false }

Interprétation : la boucle On souhaite que : [[ while b do c]](s) = si [[b]](s) alors [[ while b do c]]([[c]](s)) sinon s Autrement dit, en définissant la fonction Φ β,γ : Sp S Sp S par Φ β,γ (w) : s si β(s) alors w(γ(s)) sinon s on souhaite que [[ while b do c]] soit un point fixe de Φ [[b]],[[c]] : [[ while b do c]] = Φ [[b]],[[c]] ([[ while b do c]]) Théorème. Φ β,γ a au moins un point fixe, et un unique plus petit point fixe Y β,γ. On pose : [[ while b do c]] = Y [[b]],[[c]]

L interprétation est un modèle de la syntaxe U comp id Sp S Y si... update,+, N S =,>, T S V N T,, On dit que la sémantique dénotationnelle est compositionnelle.

L interprétation est une transformation naturelle A chaque flèche dans la syntaxe correspond un carré commutatif, par exemple : B B A A + A [[ ]] [[ ]] T S T S [[ ]] [[ ]] N S N S + N S V A := C while B C... C [[ ]] [[ ]] V N Supdate N S [[ ]] T S S S p Y S S p [[ ]]

Outline Introduction Syntaxe Sémantique dénotationnelle Sémantique opérationnelle SémantiqueS

Sémantique opérationnelle La sémantique opérationnelle est une évaluation de la syntaxe en utilisant uniquement les constantes (N, T, V ) et l observation de l état de la mémoire. La sémantique opérationnelle représente le point de vue de la machine. Pour simplifier, on suppose encore que l état est une fonction de V vers N : S = N V

(Dé)curryfication On peut passer de la fonction d interprétation [[ ]] = [[ ]] A : A N S à la fonction d évaluation ev = ev A : A S N par décurryfication : a A, s S, ev(a, s) = [[a]](s) ( N) De même ev = ev B : B S T est définie par : b B, s S, ev(b, s) = [[b]](s) ( T ) Et ev = ev C : C S S est la fonction partielle définie par : c C, s S, ev(c, s) = [[c]](s) ( S)

Evaluation : les constantes Notation. On note (a, s) n pour ev(a, s) = n, c est-à-dire : dans l état s, l évaluation de a retourne n (la notation classique est (a, s) n). Classiquement, l évaluation est décrite par des règles, déduites de la sémantique dénotationnelle par décurryfication. Les constantes sont leur propre valeur : ev N : N S N : (n, s) n ev T : T S T : (t, s) t ev V : V S V : (v, s) v Preuve : ev(n, s) = [[n]](s) = n, etc.

Evaluation : les expressions arithmétiques L évaluation d une expression arithmétique retourne un nombre : ev A : A S N (n a(n), s) n, (v a(v), s) s(v), (a, s) n (a, s) n (a + a, s) n + n,... Preuve : ev(n a(n), s) = [[n a(n)]](s) = n, ev(v a(v), s) = [[v a(v)]](s) = s(v), ev(a+a, s) = [[a+a ]](s) = [[a]](s)+[[a ]](s) = ev(a, s)+ev(a, s), etc.

Evaluation : les expressions booléennes L évaluation d une expr. booléenne retourne une valeur de vérité : ev B : B S T (t b(t), s) t, (b, s) t ( b, s) t,... Preuve : ev(t b(t), s) = [[t b(t)]](s) = t, ev( b, s) = [[ b]](s) = [[b]](s) = ev(b, s), etc.

Evaluation : les commandes L évaluation, ou exécution, d une commande retourne un état, à condition qu elle se termine : ev C : C S S ( skip, s) s (a, s) n (v := a, s) s[n/v] (c, s) s (c, s ) s ((c; c ), s) s Preuve : ev(c; c, s) = [[c; c ]](s) = [[c ]]([[c]](s)) = [[c ]](ev(c, s)) = ev(c, ev(c, s))

Evaluation : la conditionnelle (b, s) true (c t, s) s ( if b then c t else c f, s) s (b, s) false (c f, s) s ( if b then c t else c f, s) s Preuve : ev( if b then c t else c f, s) = [[ if b then c t else c f ]](s) = si [[b]](s) alors [[c t ]](s) sinon [[c f ]](s) = si ev(b, s) alors ev(c t, s) sinon ev(c f, s) Cela pourrait fournir l unique règle : (b, s) t (c t, s) s t (c f, s) s f ( if b then c t else c f, s) ( si t alors s t sinon s f ) mais elle ne convient pas car non linéaire en S. Par contre cela fournit les deux égalités conditionnelles : si ev(b, s) = true alors ev( if b then c t else c f, s) = ev(c t, s) si ev(b, s) = false alors ev( if b then c t else c f, s) = ev(c f, s) d où les deux règles.

Evaluation : la boucle Comme pour la conditionnelle, il y a 2 règles. (b, s) true (c, s) s, ( while b do c, s ) s ( while b do c, s) s (b) false ( while b do c, s) s Preuve : Vérifier que la fonction s ev( while b do c, s) est un point fixe de Φ [[b]],[[c]]. Vérifier que c est le plus petit point fixe de Φ [[b]],[[c]]. Alors ev( while b do c, s) = [[ while b do c]](s) = Y [[b]],[[c]] (s).

Outline Introduction Syntaxe Sémantique dénotationnelle Sémantique opérationnelle SémantiqueS

Equivalence des deux sémantiques dénotationnelle opérationnelle utilisateur machine interprétation évaluation modèle règles exponentiel en S linéaire en S Théorème. La sémantique dénotationnelle et la sémantique opérationnelle de IMP sont équivalentes : [[a 1 ]] = [[a 2 ]] ssi s S, ev(a 1, s) = ev(a 2, s) [[b 1 ]] = [[b 2 ]] ssi s S, ev(b 1, s) = ev(b 2, s) [[c 1 ]] = [[c 2 ]] ssi s S, ev(c 1, s) = ev(c 2, s) Preuve : Par définition de la sémantique opérationnelle!

Vers une sémantique avec état implicite dénotationnel ( utilisateur ) implicite (nouveau) opérationnel ( machine )

Décorations La syntaxe est statique. L évaluation des constantes n interagit pas avec l état : c est une fonction statique ev st. L évaluation des expressions utilise l état : c est une fonction inspectrice ev in. L évaluation des commandes utilise et modifie l état : c est une fonction modificatrice ev mo.

Dilatation Pour expliciter le fait que ev mo est un modificateur : dilater la fonction ev mo, soit de façon exponentielle en S (dénotationnel) soit de façon linéaire en S (opérationnel) : ev mo : C U [[ ]] : C Sp S ev : C S S

Equivalence des trois sémantiques? Théorème? La sémantique implicite de IMP est équivalente à ses sémantiques dénotationnelle et opérationnelle. Preuve? Utiliser les logiques diagrammatiques [Duval, Lair, 2002]. Travail en cours [Dumas, Duval, Reynaud]