UPMC Master informatique 2 STL NI503 Conception de langages Notes I



Documents pareils
Algorithmique et Programmation Fonctionnelle

Représentation géométrique d un nombre complexe

Initiation à la Programmation en Logique avec SISCtus Prolog

Angles orientés et fonctions circulaires ( En première S )

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Factorisation Factoriser en utilisant un facteur commun Fiche méthode

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

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

TP 1. Prise en main du langage Python

STAGE IREM 0- Premiers pas en Python

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

Correction de l examen de la première session

Introduction. Mathématiques Quantiques Discrètes

CORRIGE LES NOMBRES DECIMAUX RELATIFS. «Réfléchir avant d agir!»

Maple: premiers calculs et premières applications

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

OCL - Object Constraint Language

Présentation du langage et premières fonctions

Lambda-calcul et langages fonctionnels

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

Bases de données - Modèle relationnel

Représentation d un entier en base b

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

Image d un intervalle par une fonction continue

Equations cartésiennes d une droite

Cours 1 : La compilation

De même, le périmètre P d un cercle de rayon 1 vaut P = 2π (par définition de π). Mais, on peut démontrer (difficilement!) que

Groupe symétrique. Chapitre II. 1 Définitions et généralités

Représentation des Nombres

Cours d Analyse. Fonctions de plusieurs variables

MATHÉMATIQUES. Les préalables pour l algèbre MAT-P020-1 DÉFINITION DU DOMAINE D EXAMEN

Algorithme. Table des matières

Programmation Web. Madalina Croitoru IUT Montpellier

1 radian. De même, la longueur d un arc de cercle de rayon R et dont l angle au centre a pour mesure α radians est α R. R AB =R.

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

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)

Débuter avec Excel. Excel

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

Aide - mémoire gnuplot 4.0

Traduction des Langages : Le Compilateur Micro Java

Recherche dans un tableau

LE PRODUIT SCALAIRE ( En première S )

Rappels sur les suites - Algorithme

Cours 7 : Utilisation de modules sous python

Bases de programmation. Cours 5. Structurer les données

LES CARTES À POINTS : POUR UNE MEILLEURE PERCEPTION

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

Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS

1 Introduction et installation

Exercices - Nombres complexes : corrigé. Formes algébriques et trigonométriques, module et argument

TOUT CE QU IL FAUT SAVOIR POUR LE BREVET

Chapitre 10 Arithmétique réelle

Les indices à surplus constant

chapitre 4 Nombres de Catalan

Les structures de données. Rajae El Ouazzani

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

Machines virtuelles Cours 1 : Introduction

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Rappels et compléments, première partie : Nombres complexes et applications à la géométrie

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

Document d aide au suivi scolaire

Angles orientés et trigonométrie

Dérivation : cours. Dérivation dans R

Définitions. Numéro à préciser. (Durée : )

Exercices - Polynômes : corrigé. Opérations sur les polynômes

Cours de mathématiques

Sites web éducatifs et ressources en mathématiques

Chapitre VI- La validation de la composition.

Conversion d un entier. Méthode par soustraction

Calculs de probabilités

Algorithmique et Programmation, IMA

SOCLE COMMUN - La Compétence 3 Les principaux éléments de mathématiques et la culture scientifique et technologique

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

1 Définition et premières propriétés des congruences

Vision industrielle et télédétection - Détection d ellipses. Guillaume Martinez 17 décembre 2007

Bien lire l énoncé 2 fois avant de continuer - Méthodes et/ou Explications Réponses. Antécédents d un nombre par une fonction

Baccalauréat S Antilles-Guyane 11 septembre 2014 Corrigé

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

Petit lexique de calcul à l usage des élèves de sixième et de cinquième par M. PARCABE, professeur au collège Alain FOURNIER de BORDEAUX, mars 2007

Les nombres entiers. Durée suggérée: 3 semaines

FONCTIONS DE PLUSIEURS VARIABLES (Outils Mathématiques 4)

Licence Sciences et Technologies Examen janvier 2010

MODIFICATIONS DES PRINCIPES DIRECTEURS CONCERNANT LA RÉDACTION DES DÉFINITIONS RELATIVES AU CLASSEMENT

Fiche PanaMaths Calculs avec les fonctions sous Xcas

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

Premiers pas avec Mathematica

Classes et Objets en Ocaml.

Mathématiques financières

Date : Tangram en carré page

Pour l épreuve d algèbre, les calculatrices sont interdites.

Cours d initiation à la programmation en C++ Johann Cuenin


Programmes des classes préparatoires aux Grandes Ecoles

ALGORITHMIQUE ET PROGRAMMATION En C

La programmation linéaire : une introduction. Qu est-ce qu un programme linéaire? Terminologie. Écriture mathématique

EXERCICES DE REVISIONS MATHEMATIQUES CM2

LA PHYSIQUE DES MATERIAUX. Chapitre 1 LES RESEAUX DIRECT ET RECIPROQUE

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Transcription:

UPMC Master informatique 2 STL NI503 Conception de langages Notes I 2012 1 Évaluer Un langage Le langage Logo est composé commandes permettant de diriger le déplacement d un point sur un plan cartésien discret. Le point est donné par ses coordonnées cartésiennes en abscisse et ordonnée (c est-à-dire, un couple (x, y)). Un mouvement est défini par une direction (c est-à-dire un angle α) et une longueur. Les commandes de mouvement sont : MOVE : accompagné d une valeur entière k, signifie le déplacement en ligne droite du point sur une longueur k ; TURN : accompagné d une valeur entière d, signifie que l orientation du mouvement voit son angle augmenté de d. Exécuter un mouvement consiste donc à modifier sa position (c est-à-dire la valeur des coordonnées (x, y)) en fonction de la valeur α de la direction et de la longueur k du déplacement. Si l angle α est exprimé en radians, on a simplement : x devient x + k cos(α) ; y devient y + k sin(α). Si le changement de direction est exprimé en degrés, la modification de la direction α s écrit : α devient α + d π. Un programme Logo est une suite de commandes de mouvements. Par exemple, on déplace le point selon le périmètre d un carré de côtés de longueurs 50 en enchaînant : Sa syntaxe Lexique les symboles réservés [ ; ] les mots clé MOVE TURN 1

les constantes numériques -?[0-9]+ (expression régulière). On note Num. Grammaire prog ::= [] [ cmds ] cmds ::= cmd cmd ; cmds cmd ::= MOVE Num TURN Num Le programme Logo ci-dessus devient : [ ; ; ; ; ; ; ] Syntaxe abstraite définition algébrique, types abstraits P rog et Cmd : [] : P rog :: : Cmd P rog P rog Move : IN Cmd T urn : IN Cmd Exemple : syntaxe abstraite du programme ci-dessus Move(50) :: T urn(90) :: Move(50) :: T urn(90) :: Move(50) :: T urn(90) :: Move(50) :: [] Définition alternative : A suites génériques, pour un ensemble A [] : A :: : A A A P rog = Cmd Move : IN Cmd T urn : IN Cmd 2 Modéliser Le domaine du langage Logo est celui d un plan cartésien. Le résultat de l exécution d un programme Logo est le déplacement sur ce plan d un point, à partir d une position et d une direction initiales. Abstraitement, un déplacement est une suite de directions et de positions ; c est-à-dire, une suite de triplets (α, x, y) IR 3. Un tel triplet représente l état du point guidé par le programme. On peut modéliser l exécution d un programme Logo comme une fonction des programmes munis d un état initial vers une suite d état P : P rog IR 3 (IR 3 ) On définit P par récurrence sur la suite de commandes qu il contient : P([], e) = e :: [] P(Move(k) :: p, (a, x, y)) = e :: P(p, (a, x + k cos(a), y + k sin(a))) P(T urn(d) :: p, (a, x, y)) = e :: P(p, (a + d π, x, y)) Définition alternative initialisation Trois fonctions : une pour les programmes, une pour les suites de commandes, une pour les commandes (cf grammaire). Signatures des fonctions : P : P rog (IR 3 ) Cs : Cmds IR 3 (IR 3 ) C : Cmd IR 3 IR 3 2

Équations : on choisit un état initial P(p) = Cs(p, ( π 2, 0, 0)) Cs([], e) = e :: [] Cs(c :: cs, e) = e :: Cs(cs, C(c, e)) C(Move(k), (a, x, y)) = (a, x + k cos(a), y + k sin(a)) C(T urn(d), (a, x, y)) = (a + d π, x, y) Mathématiser On peut voir une suite d éléments pris dans un ensemble A comme un élément du produit A n (un n-uplet). Le zéro-uplet est la suite vide, élément de A 0. On peut également donner une autre vision des suites qui n utilise que le produit cartésien entre deux ensembles (les paires). On pose A 0 = { } A n+1 = A A n A = n IN An La suite x 1,..., x n est le couple (x 1, (... (x n, )...)). Nos opérations algébriques sur les suites correspondent à des objets mathématiques [] = x :: xs = (x, xs) On peut aussi formaliser la syntaxe abstraite en termes ensemblistes. Par exemple, on code chacune des deux instructions MOVE et TURN par 0 et 1 respectivement. L ensemble des expressions de la forme MOVE k est l ensemble de couples {(0, k) k IN} et l ensemble des expressions de la forme TURN d est l ensemble {(1, d) d IN}. L ensemble des commandes Logo est l union {(0, k) k IN} {(1, d) d IN} On a construit ainsi l union disjointe notée IN IN : c est-à-dire, deux copies de IN avec possibilité de discriminer les éléments de chacune d elle. On pose : Cmd = IN IN Cmds = Cmd P rog = Cmds Notre programme devient alors ((0, 50), ((1, 90), ((0, 50), ((1, 90), ((0, 50), ((1, 90), ((0, 50), ))))))) On ne s intéressera plus aux détails de codage de la syntaxe abstraite. Savoir qu il est possible nous suffira. On utilisera par la suite la notation entre doubles crochets ([[ ]]) pour désigner la syntaxe abstraite des commandes et des programmes. Par exemple : [[MOVE k]] [[TURN d]] [[c ; cs]] Le langage des fonctions sémantiques Nous utiliserons, pour noter les fonctions, une λ-notation : λx.e est la fonction de paramètre x et de corps e ; λx.λy.e est la fonction à deux paramètres x et y, et de corps e. La λ-notation des fonctions est à la base d une modélisation très générale de l écriture et l évaluation des expressions fonctionnelles : le λ-calcul. Les expressions, on dit les termes du λ-calcul (ou λ-termes) sont définis ainsi : on considère un ensemble infini dénombrable X de symboles dits de variables ; l ensemble des termes est le plus petit ensemble qui satisfasse 3

1. les variables sont des termes. 2. si x est une variable et t un terme alors λx.t est un terme. 3. si t et u sont deux termes alors (t u) est un terme. Le terme λx.t est appelé une abstraction, le terme (t u) est une application. On pourra utiliser les abréviations suivantes : (t u 1 u 2 ) pour ((t u 1 ) u 2 ) λx 1.x 2.t pour λx 1.λx 2.t On pourra également mettre des parenthèses autour d une abstraction si cela peut faciliter la lecture, sans qu il faille y voir une application. Outre ces constructions de base, on peut ajouter à la syntaxe des λ-termes des fonctions ou opérations pédéfinies. Par exemple λn.n 2 est la notation de la fonction d élévation au carré. Naturellement, on ajoutera également au λ-termes les constantes numériques. Ainsi, on pourra écrire l application (λx.x 2 42). α-équivalence Dans l écriture λx.t, la variable x est liée à la manière dont une variable x est liées dans la formule x.φ. Les deux fonctions λx.t et λy.t[y/x] sont deux fonctions équivalentes si t[y/x] est le terme obtenu en remplaçant x par y dans t ; et si y n a pas d autre occurence dans t. β-réduction La β-réduction est la modélisation du principe d évaluation des applications de fonctions par la substitution : (λx.t u) (lire : λx.t appliqué à u ) se réduit en t[u/x] ; si t se réduit en t alors (t u) se réduit en (t u) ; si u se réduit en u alors (t u) se réduit en (t u ) ; si t se réduit en t alors λx.t se réduit en λx.t. La règle principale est la première. Une application de la forme (λx.t u) est appelée un redex. On notera t v pour t se réduit en v Comme dans le renommage des variables liées, il faut prendre garde, lors de la substitution d un terme à une variable, qu aucune des variables du terme u ne devienne liée dans le résultat de la substitution. Techniquement, on obtient ce résulat en renommant systématiquement les variables liées du terme où l on remplace x lors du processus de susbtitution : (λy.t)[u/x] = λz.(t[z/y][t/x]) en choisissant z n ayant aucune occurence ni dans t ni dans u. Formes spéciales, structures de contrôles Comme on s est autorisé à pouvoir utiliser la λ-notation en y mèlant des expressions arithmétiques (λn.n 2 ), on s autorisera à introduire d autre opérateurs tels l alternative, le if. Toutefois, à la différence des fonctions arithmétiques usuelles, on précise, pour l alternative, ses règles de réduction. (if true t 1 t 2 ) t 1 (if false t 1 t 2 ) t 2 Implicitement, on a donc rajouté les valeurs booléennes a nos valeurs sémantiques : IB = {true, f alse}. Mais on a rajouté plus : pour pouvoir réduire une expression alternative (if t t 1 t 2 ), il faut avoir déterminé au préalable si t se réduit sur true ou false. On a ici fixé une stratégie d évaluation où l ordre d évaluation des arguments d une application n est pas indifférent : on a fixé qu il faut évaluer le premier argument en premier. En conséquence, pour évaluer l application (if t t 1 t 2 ), si t true, on ne cherche pas à évaluer t 2 et si t false, on ne cherche pas à évaluer t 1. 4

Arité d une fonction L arité d une fonction est le nombre d arguments qu elle attend. Par exemple, l addition est d arité 2, c est un opérateur (fonction) binaire. Cette arité est reflétée par le type de l addition : IN IN IN. Avec la λ-notation, cette notion n est plus tout-à-fait valable : la fonction notée λx.λy.x + y est en apparence une fonction d arité 2, toutefois, la syntaxe du λ-calcul ne force pas l application à 2 termes. Par exemple la terme (λx.λy.x + y 1) est correctement construit, il se réduit en λy.1 + y. Ce résultat est une fonction ; la fonction successeur. Une telle application peut-être appelée application partielle. Le type de λx.λy.x + y est noté IN (IN IN) que l on peut abréger en IN IN IN. En vérité, avec la λ-notation, toute fonction est d arité 1. Ajoutons la structure de couple au λ-calcul en notant (u 1, u 2 ) le couple formé de u 1 et u 2 ; ainsi que les deux projections fst et snd telles que (fst (u 1, u 2 )) se réduit en u 1 et (snd (u 1, u 2 )) se réduit en u 2. On peut alors écrire la fonction d addition comme λc.(fst c) + (snd c). On n obtiendra un résultat correct que si on l applique à un couple : (λc.(fst c) + (snd c) (3, 4)). Dans un tel cas, pour alléger l écriture en évitant l usage des projections, on s autorisera à faire porter l abstraction sur un couple en écrivant : λ(x, y).x + y. Tests et unions disjointes Parmi les opérations primitives que l on ajoute au λ-termes, figure les opérateurs de comparaison : égalité, ordre, etc. Pour ne pas alourdir inutilement la lecture, nous adopterons la notation infixe usuelle : (x = 0). Le résultat de l application de ces opérateurs sera une valeur booléenne : true ou false. 3 Sémantique La fonction P associe à un programme une valeur : la suite des points parcourus (on pourrait oublier les directions). Cette valeur est un objet mathématique défini en termes de nombres, d ensembles, de produit cartésiens d ensembles. C est ce que l on appelle la dénotation ou le sens d un programme. Il est défini en composant le sens des commandes du programme : MOVE est la fonction qui au nombre k et à l état (a, x, y) associe l état (a, x + k cos(a), y + k sin(a)) ; TURN est la fonction qui au nombre d et à l état (a, x, y) associe l état (a + d, x, y). Ces fonctions sont aussi des objets mathématiques. Équations sémantiques On reformule les signatures et définitions des fonctions d évaluation en utilisant la notation symbolique pour la syntaxe abstraite et le typage inspiré du λ-calcul : P : P rog (IR 3 ) Cs : Cmds IR 3 (IR 3 ) C : Cmd IR 3 IR 3 P[[[cs]]] = Cs[[cs]]( π 2, 0, 0) Cs[[ [] ]]e = e :: [] Cs[[c;cs]]e = e :: Cs[[cs]](C[[c]]e) C[[MOVE k]](a, x, y) = (a, x + k cos(a), y + k sin(a)) C[[TURN d]](a, x, y) = (a + d π, x, y) Exercices 1. Redéfinir les équations sémantiques de manière à ne conserver que la trace des positions de la tortue. C est-à-dire que la signature de la fonction d interprétation des programmes devient : P : P rog (IN 2 ) 2. Rajouter au langage la possibilité de gérer un crayon qui selon qu il est baissé ou non produira ou ne produira pas de trace. 5