Upload
vuongcong
View
227
Download
1
Embed Size (px)
Citation preview
Langages de programmation
I il existe de nombreuxlangages de programmation
I un langage de programmation, c’est:
une grammaire,un compilateur,un manuel de reference,un environnement de developpement,une communaute d’utilisateurs,un ensemble de bibliotheques,un “parc de realisations”,. . .
Exprimer le calcul
la notion de calcul joue un role central en informatique
I la notion de fonction est volontiers extensionnelle
I plusieurs algorithmes pour resoudre un probleme
I plusieurs manieres d’exprimer un algorithme
un certain nombre de gensvivants a la cour duroyaume du Danemark
→ → a peu pres tous morts
Theorie de la programmationI les programmes comme objets mathematiques
ce qu’il y a de concret, c’est le langageI programme 6= algorithmeI abstraction plus ou moins grande vis-a-vis de la machine
(memoire, constituants)
I enoncer et prouver des proprietes des programmes(recherche, enjeux scientifiques/industriels)
lors de l’execution de ce programme. . .
· a la fin, la valeur de R sera egale a la racine carree de la valeurde X· une fonction attendant un entier ne sera pas utilisee avec une chaıne
de caracteres en entree · telle zone de la memoire ne sera pas accedee· la valeur contenue a l’adresse memoire p ne sera pas revelee· au plus 10 utilisateurs auront acces simultanement a telle ressource· l’appel a ce bout de code utilisera une quantite de memoire
proportionnelle au carre de la valeur de la variable X
I equations entre programmesI que peut signifier P1 = P2 ? pour quelle egalite?I peut-on resoudre des equations sur les programmes ?
Plus concretement
pour ce cours, deux “petits” langages
I Imp, petit langage imperatif
I µML, petit langage fonctionnel
Demo
I declinaisonsI langage imperatif / langage fonctionnelI compilateur / interprete
I les deux langages ont en communles expressions arithmetiqueswhile (x + 2) ∗ y − 5 > 2 do. . .let t = (a ∗ b + 2) in . . .
Sujets traites dans ce cours
I decrire les programmes, et l’execution des programmes
outils:I definitions inductivesI semantique operationnelle
I exprimer des proprietes sur les programmesI semantique axiomatique (logique de Floyd-Hoare) ImpI typage µML
I proprietes abstraites des programmes, notions de reecritureI terminaison, confluence, determinismeI quelques “bouts de maths discretes” quand c’est necessaire
I liens en passant avec la logique, avec la compilation
L’outil Coq(demonstration assistee par ordinateur)
I http://coq.inria.fr
installez-le sur votre machinepas de “je n’ai pas pu travailler car Coqne marche pas sur mon ordinateur”
et/ou utilisez les machines des salles libre-service
I avec l’interface coqide
petite demonstration
Coq — quelques idees a retenir
I on peut definir et manipulerI des types inductifs
Inductive nat : Set := O : nat | S : nat -> natI ainsi que des fonctions agissant sur ces types inductifs
I on peut prouver des proprietes sur ces objetsraisonnement par recurrence
I demonstrateur interactif:on “lutte” contre un ensemble de sous-buts a prouver,jusqu’au Qed.
I on dispose pour cela de tactiques, dont notammentI intro(s) trivialI rewrite
on reviendra sur tout cela, et approfondira,dans les prochaines semaines
Organisation
I enseignant responsable: Daniel HirschkoffTPs: Alexandre Isoard, Jean-Marie Madiot, Antoine Plet
I jeudi, 8h-10h: 2 groupesI vendredi, 8h-10h
repartissez-vous de facon equilibree,et tachez de rester dans le meme groupe
I cours: un peu sur transparents, beaucoup au tableau
I essentiellement des TPs, un peu de TDsce qui est fait sur machine est a relire !
I evaluation: un partiel, un examen, des devoirs a rendre
I prerequis: une certaine familiarite avec la programmation
I independamment du langageI qui n’a aucune experience de Caml?
si Projet1, alors Caml au debut
Partie 1
Semantique operationnelledes langages de programmation
—definitions inductives, raisonnements inductifs
Reference pour Imp 24/9/14
G. Winskel, “The Formal Semantics of Programming Languages”
disponible a la bibliotheque
nous couvrons les chapitres 2,3,4 (plus tard, le chapitre 6)
Langage Imp: syntaxe, semantique operationnelle
I grammaire de Imp
expressions arithmetiquesexpressions booleennescommandes
constructeurs c ::= . . . if b then c1 else c2 . . .
I semantique operationnelle a grands pas de Imp
regles d’inferenceσ, b ⇓ true σ, c ⇓ σ′ σ′, while b do c ⇓ σ′′
σ, while b do c ⇓ σ′′
terminologie: I execution, evaluation des programmes
(on ne parle que de programmes qui terminent)
I on definit par induction le jugement σ, c ⇓ σ′
a l’aide de regles d’inference
TPs
I la semaine derniere: premiers pas en Coq
repartissez-vous mieux
I cette semaine: definitions inductivesI d’ensemblesI de predicats
I par exemple:etant donnee la definition inductive des entiers de Peano, ondefinit par induction le jugement (inf n k) a l’aide des reglesd’inference suivantes
(inf 0 k)
(inf n k)
(inf (n + 1) (k + 1))
en Coq:
Inductive inf: nat -> nat -> Prop :=
inf ax : forall k, inf 0 k
| inf reg : forall n k,
inf n k -> inf (S n) (S k).
Retour sur Knaster-Tarski 01/10/14
theoreme de Knaster-Tarski: justification des definitions inductives
I f croissante (pour ⊆) sur l’ensemble des parties de ?. . .
I principe de preuve par induction sur t ∈ E
montrer que la propriete que l’on prouve est preservee par lesconstructeurs
exemple: ∀n : N, (n ≥ 1)⇒((double n) > n
)I definition de fonctions sur un ensemble inductif
Definitions inductives de predicats
anatomie des regles d’inference
σ, a1 ⇓ k1 σ, a2 ⇓ k2
σ, a1 + a2 ⇓ kk = k1 + k2
σ, b ⇓ true σ, c1 ⇓ σ′
σ, if b then c1 else c2 ⇓ σ′σ, a ⇓ k
σ,X := a ⇓ σ′ σ′ = σ[k/X ]
I ∀σ, b, c1, σ′, c2. (σ, b ⇓ true ∧ σ, c1 ⇓ σ′) ⇒ (σ, if b then c1 else c2 ⇓ σ′)
I σ, b, c1, σ′, c2: metavariables
I k = k1 + k2 condition d’application (side condition)
elle ne mentionneI ni un predicat pre-existant (comme σ, a ⇓ a)I ni le predicat que la regle d’inference definit
Retour sur les definitions inductives de predicats
I un ensemble fini de regles d’inferenceH1 . . .Hm
CSC
pour definir un jugement note ρ(t1, . . . , tn)
I Knaster-Tarski: un ensemble de derivations (finies) dont laconclusion est de la forme ρ(t1, . . . , tn)
I ambiguıte: une telle definition induit un ensemble de n-uplesI ceux pour lesquels il existe une derivation de ρ(t1, . . . , tn)I ex.: σ, c ⇓ σ′ ↔ sous-ensemble de M × com×M
I preuve par induction sur la derivationI propriete de la forme ∀y1 . . . yn.ρ(y1, . . . , yn) ⇒ P(y1, . . . , yn)
ambiguıte: . “si ρ(y1, . . . , yn), alors. . . ”. “s’il existe une derivation δ de ρ(y1, . . . , yn), alors. . . ”
I un sous-cas par regle d’inferencela propriete P vaut pour les premisses de la forme ρ(. . . )
Aspects organisationnels
I TD et non TPI jeudi: B1 & B2I vendredi: B1
I mise en place du soutienI principe
I a la carteI vous avez travaille
I venez laisser votre nom a la fin du cours
(ou ajoutez-vous par mail [email protected] plus tard)
I un DM a venir, un partiel dans un mois environavez-vous des echeances deja prevues?
Passages obliges – definitions par inductionen rouge, ce qui est exige dans une copie
I on se donnedes ensembles pre-existants, des relations pre-existantes
I on definit par inductionI soit un ensemble, donne par les constructeurs suivants . . .
(ou par la grammaire suivante . . . )
I soit un jugement,note . . . , [[ precisions eventuelles sur les metavariables apparaissant
dans le jugement ]],
(p.ex. note σ, c ⇓ σ′, ou c est une commande et σ, σ′ sont des etats
memoire)
donne par les regles d’inference suivantes . . .
Passages obliges – preuves par inductionen rouge, ce qui est exige dans une copie
I on demontre l’enonce suivant: [[ecrire l’enonce]] par induction
I sur la structure de totolorsque toto est un element d’un ensemble E definiinductivementet l’enonce est de la forme ∀toto ∈ E , blabla ou bien
I sur la derivation de titilorsque titi est un jugement defini inductivementet l’enonce est de la forme ∀..∀.., (titi)⇒ blabla
I il y a k cas:cas 1:. . .
cas k:
ici il faut etre raisonnable: detailler les cas qui le
meritent, regrouper les cas qui sont traites iden-
tiquement — on n’est pas des gallinaces
l’hypothese d’induction dit blabla, ce qui permet dededuire. . . (enoncer l’hypothese d’induction)
Passages obliges – definition de fonctions par inductionen rouge, ce qui est exige dans une copie
lorsque E est (un ensemble/ un predicat) defini par induction
on definit la fonction f par induction sur son argument toto ∈ Eil y a k cas
NB: toto peut aussi etre une derivation
Grands et petits pas
grands pas petits pas
execution, evaluation reductionspecification implementation
Semantique operationnelle – exempleI Imp
I sa grammaire, sa semantique a grands pas σ, c ⇓ σ′
I semantique a petits pas pour Imp (σ, c −→ σ′, c ′)correspondance entre ⇓ et −→
I “Imp realiste”I la memoire σ : V → Z, uniquement pour ecrire/lire des valeursI les registres R = [r1, . . . , rk ]: c’est avec eux qu’on calcule (+, ∗)I commandes
I read(X,ri ) write(ri ,X)I add(ri ,rj ,rk ) mult(ri ,rj ,rk ) cst(n,ri )I if then else sequence (;) while do skip
I semantique a petits pas σ,R, c _ σ′,R′, c′
I compilation: Imp Imp realistec 7→ c
(definie par induction sur
la commande)
X := Y + 5 devient
read(Y,1);cst(5,2);add(1,2,3);write(3,X)
validation de la compilation:σ, c ⇓ σ′ ssiσ,R, c _∗ σ′,R′, skip
cf. projet Compcert
Tres rapidement,
quelques elements de compilation
analyses lexicale et syntaxique: fabriquer des arbres
Intepreter / compiler
I interprete: implementation de la semantique operationnelleexecuter
I compilateur: traduction (p.ex. Imp assembleur)traduire (en preservant le sens)
interpretes et compilateurs sont des programmes manipulant desprogrammes (en un certain sens, c’est aussi le cas pour Coq)
Un compilateurI traducteur de code a code (de fichier source a fichier objet)I anatomie sommaire 1 → 2 → 3
1. front enddu fichier de texte a une representation arborescente"let x = 3 in (f x)+2"
ou plutot[’l’;’e’;’t’;’ ’;’x’;’ ’;’=’;’ ’;’3’;’ ’;’i’;’n’;’ ’;’ ’;’(’;’f’;’ ’;’x’;’)’;’+’;’2’;’\n’]
Let( Var "x", Cst 3, Add(App(Var "f", Var "x"), Cst 2) )
2. des tas de transformations (representations intermediaires)3. back end
generation de code: d’une representation arborescente a unfichier de texte[Push(rx);Set(rj,f addr);Call;Pop;Set(r0,2);Add]start: push(rx);
set(rj,f addr);
call;
pop;
set(r0,2);
add;
I “tout” est dans l’etape 2: analyses, transformations,reecritures, algorithmique, optimisations, . . .
Les deux etapes
I analyse lexicale
flot de caracteres (source) → flot de lexemes
I lexeme (token): “atome” du langageI typiquement:
I mots-clefs (let, begin, while,. . . )I symboles reserves ((, +, ;;, ;,. . . )I identificateurs (f, toto, . . . )
ainsi 32*52+(let x = 5 in x*x)
→ INT(32), MULT, INT(52), ADD, LPAREN, LET, ID("x"), EGAL, INT(5),
IN, ID("x"), MULT, ID("x"), RPAREN
(INT et ID ont un attribut, entier et chaıne de caracteres respectivement)
I analyse syntaxiqueflot de lexemes → arbre de syntaxe abstraite
→ Add( Mult(Int(32), Int(52)),
Let("x", Int(5), Mult(Var("x"), Var("x"))) )
I etape intermediaire: arbre d’analyse syntaxique (parse tree)
Analyse lexicale
I chaque lexeme est decrit par une expression reguliereI principaux elements (syntaxe de ocamllex):
I caractere ’$’, chaıne de caracteres "else"I intervalle [’0’-’9’] (un chiffre)I disjonction (de caracteres)
[’\t’ ’ ’] (tabulation ou espace)I juxtaposition [’A’-’Z’][’a’-’z’ ’A’-’Z’]
(mot de 2 lettres commencant par une majuscule)I repetitions: + signifie au moins 1, * zero ou plus
[’a’-’z’]+[’a’-’z’ ’0’-’9’]*
(ca commence par une lettre puis des lettres ou des chiffres)I disjonction a* | b*
I en sortie de l’analyse lexicale: des mots
Expression reguliere ↔ automate non deterministe
s0 S1a b c
NFA pour b|c
s2b
c
s3
s4 s5
ε
s6 s7
ε
ε
ε
s2b
c
s3
s4 s5
ε
S6s6 s9
εε
ε
ε
s8ε
ε
NFA pour a(b|c)*
s0 s1εa
s2 s3 s4 S1
s2b
c
s3
s4 s5
ε
S6s6 s9
εε
ε
ε
s8ε
ε
NFA pour (b|c)*
Determinisation, minimisation
I a partir de l’automate du transparent precedent, on dispose deprocedures pour determiniser l’automate (explosion dunombre d’etats), puis le minimiser
I on aboutit a
s0 S1
a
b
c
I comment implementer l’automate resultant?
I une table (tres creuse)etat a b c d e
e1 - e2 e3 - -e2 e4 - - - -e3 - - e3 - -
I eliminer les etats: un plat de spaghetti, fait de if et de goto
Analyse syntaxique
I l’analyse syntaxique se fonde sur une approche plus puissante:regles de grammaire
I les regles de grammaire font intervenir les lexemes et des“variables” (les non terminaux)
I exemple de grammaire:
E ::= K | E + E | E ∗ E | (E ) | let Id = E in EI E : non terminal (il peut y en avoir plusieurs)I K , let, Id ,+, ∗, (, ), in,=: lexemes
presentation alternative:
E → K E → E + E E → E ∗ E E → (E) E → let Id = E in + E
on parle de grammaire hors contexte
I analyse lexicale: du flot de caracteres au flot de lexemesI analyseur syntaxique (ou parser): applique les regles de
grammaire pour reconnaıtre une suite de lexemesI on change la structure: un flot (de lexemes) devient un arbreI on construit des phrases a partir de mots
Reconnaıtre une sequence de lexemes
I l’idee est de construire un arbre de derivation permettant dereconnaıtre le flot de lexemes
I grammaire: P ::= P + P | P ∗ P | K K un entierI soit le flot 32, +, 26, *, 2I on peut reconnaıtre de deux manieres:
P → P + P→ K32 + P→ K32 + P ∗ P→→ K32 + K26 ∗ K2
ou alors
P → P ∗ P→ P ∗ K2
→ P + P ∗ K2
→→ K32 + K26 ∗ K2
deux arbres differents: ambiguıte
I aucun moyen en revanche de reconnaıtre9 * 1 + + 1
Ce que fait le parser
E ::= E + E | E ∗ E | (E ) | a | b | c a+b*c
pile entree action$ a + b ∗ c$ shift$a +b ∗ c$ reduce : E → a$E +b ∗ c$ shift$E + b ∗ c$ shift$E + b ∗c$ reduce : E → b$E + E ∗c$ shift (tres malin)$E + E∗ c$ shift$E + E ∗ c $ reduce : E → c$E + E ∗ E $ reduce : E → E ∗ E$E + E $ reduce : E → E + E$E $ accept
I a la fin, on a un arbre add(id(a),mul(id(b),id(c)))
I construction d’une derivation “par la droite” Demo
I remarque: avec yacc, on ote les ambiguıtes en “bricolant”,pas en reecrivant la grammaire (comme en FDI)
Au total
I analyses lexicale et syntaxique fabriquent du sens
I de la donnee brute a l’expression d’un calcul
I elles constituent le front end d’un interprete ou d’uncompilateur
I ce qu’on fait de l’arbre de syntaxe abstraite:
“exprimer le sens” du calcul en lui-meme
Devoir numero 1
I disponible sur la page www du cours
I a rendre le 23 octobre a 19h au plus tardI du papier dans mes mains ou dans mon casierI un fichier par mail
I partiel: apres les vacances de la Toussaint
I DM 2: quelque part avant les vacances de Noel
I examen: en 2015
Les semaines qui viennent
I cette semaineTD et non TP salles B1 et B2
I la semaine prochaineTD egalement
I la semaine 17-21 novembreI mercredi 19: partiel
I programme: jusqu’a aujourd’hui inclusI tous documents analogiques autorisesI le sujet de l’an dernier est en ligne
I jeudi 20 et vendredi 21: visite a l’Universite de Montpellier
↪→ pas de cours ni TD/TP cette semaine-la
Retour sur le DMI de bonnes notes
I rarement un retour sur la partie CoqI but principal: faire le point, decanterI poids relatif dans la note finaleI mauvaise note: soutien conseille
I remarquesI on raisonne par induction sur la derivation de σ, c 7→ σ′, c ′
I par induction sur 7→: bon, okI par induction (tout court) NON
I σ, c ne se derive pas en σ′, c ′,mais on construit une derivation de σ, c −→ σ′, c ′
I une regle d’inference s’ecritBLA
BLI,
pas BLA⇒ BLI ou “si BLA, alors BLI ”
(c’est un “constructeur d’arbre”)
I “montrons que BLA implique BLI ” est ok,
pas “montronsBLA
BLI” de meme,
Hind
BLIest un peu glissant (des
fois, Hind donne une derivation de BLI )
Retour sur le DM, suiteI question 2.1
σ, I(Xi ) 7→ σ′, skip
σ′ = σ[(σ(X )+1)
/Xi ]σ, c 7→ σ
′, c′
σ, c ∨ c2 7→ σ′, c′
σ, c 7→ σ′, c′
σ, c1 ∨ c 7→ σ′, c′
σ, c 7→ σ′, c′
σ, c; c2 7→ σ′, c′; c2 σ, skip; c 7→ σ, c
σ, c 7→ σ′, c′
σ, c 7→+σ′, c′
σ, c 7→ σ′, c′ σ
′, c′ 7→+
σ′′, c′′
σ, c 7→+σ′′, c′′
I lemme 1∀σ, c , σ′, c ′, si σ, c 7→+ σ′, c ′, alors ∀c2, σ, c ; c2 7→+ σ′, c ′; c2
par induction sur la derivation de σ, c 7→+ σ′, c ′, 2 cas2e cas: utilisation de l’hypothese d’induction
I lemme 2∀σ, c , σ′, c ′, si σ, c 7→+ σ′, c ′, alors ∀c2, σ, c ∨ c2 7→+ σ′, c ′ ∨ c2
par induction sur la derivation de σ, c 7→+ σ′, c ′, 2 cas2e cas: l’hypothese d’induction n’est pas utileon pourrait proceder en raisonnant par cas sur la derivation deσ, c 7→+ σ′, c ′
I question 2.2 ∀σ, c, σ′, c ′, (σ, c 7→ σ′, c ′)⇒((σ 6= σ′)⇒ (σ, c −→ σ′, c ′)
)I partie 3.2 (coinduction)
Unification du premier ordre
1. {t, t} ] P, σ −→ P, σ
2. {X , t} ] P, σa) si t 6= X et X ∈ Vars(t), −→ ⊥b) si X /∈ Vars(t), −→ P[t/X ], [t/X ] ◦ σ
3. {f (t1, . . . , tk ), f (u1, . . . , uk )} ] P, σ−→ {t1, u1} ∪ · · · ∪ {tk , uk} ∪ P, σ
4. {f (t1, . . . , tk ), g(u1, . . . , un)} ] P, σ −→ ⊥ (avec f 6= g)
Theoreme:
I correction: si P, ∅ −→∗ ∅, σ, alors σ est un mgu de P;
I completude: si P, ∅ −→∗ ⊥, alors U(P) = ∅.Preuve: a venir
Reecriture — generique de fin
I terminaisonI principe d’induction bien fondeeI produit l’exicographique, extension multiensembleI ordre de reecriture
I confluenceI confluence, diamant, confluence localeI lemme de NewmanI paires critiques dans les SRM
I termesI substitutions, sous-termesI SRTI unification
I Systemes de Reecriture: SRA, SRM, SRT
Permutation la semaine prochaine
I mercredi 10 decembre, 10h15-12h15
TP, salles 125 et 171
mercredi ←[ jeudi
I jeudi
TP, salle 125 ou 171
jeudi ← [ vendredi
I vendredi 12 decembre, 8h-10h
cours, amphi B
vendredi ←[ mercredi
Un exemple
si l’etat initial verifie
K = nK = n ∧ K ≥ 0
alors en executant le programme
R := 1;
while (K>1) do
( R:= R*K; K := K-1 )
on aboutit a un etat qui verifie
R = n!
Un autre exemplesi l’etat initial verifie
X 1 ≥ 1 ∧ X 2 ≥ 1
alors en executant le programme
Y1 := X1;
Y2 := X2;
while (Y1 6= Y2) do
if Y1 > Y2 then Y1 := Y1 - Y2
else Y2 := Y2 - Y1on aboutit a un etat qui verifie
Y 1 = pgcd(X 1,X 2)
(Y 1 div X1) ∧ (Y 1 div X2) ∧(∀i . (i div X1) ∧ (i div X2)⇒ i ≤ Y 1
)
a div bdef= ∃j . (b = j × a) ∧ (j ≥ 1)
Logique de Hoare, validite, derivabilite
programmeurs X, Y, Z X := 3
logiciens i, j X = 3` {A} c {A′}
enonces, affirmations(en logique de Hoare)
|= {A} c {A′}ce qui “est vrai”(ce qui se passe)
I correction: ` ⇒ |= tout ce que je dis est vrai
I completude: |= ⇒ ` tout ce qui est vrai, je sais le dire
Logique de Hoare, completude: idees clef
I une assertion A denote un ensemble d’etats memoire
I plus faible preconditionetant donnes A′ et c , definir une formule W (A′, c) telle que
siσ |= W (A′, c)et σ, c ⇓ σ′, alors σ′ |= A′
decire les etats qui “tombent sur A′ apres c”
Proposition: on peut definir W (A′, c)
I completude: supposons |= {A} c {A′}, a-t-on ` {A} c {A′} ?
I Proposition: on peut deriver ` {W (A′, c)} c {A′}reste a montrer |= A⇒W (A′, c)
I Theoreme (completude relative):si |= {A} c{A′}, alors ` {A} c{A′}
modulo la decision effective de |= A
Logique de Hoare – remarques
I plus faible precondition: reponse theoriqueI en pratique: programmes annotes (cf. TP)I developpements recents:
logique de Hoare pour programmes avec pointeurs
I pas de “miracle”I bon nombre de theoremes d’arithmetique peuvent se formuler
comme des assertions A |= {true} skip {A} ?
peut-on alors etablir ces theoremes de maniere automatique?non Godel (1er thm. d’incompletude)
I il ne s’agit pas non plus d’avoir un algorithme qui repond aetant donnes c, A, A′, est-ce que |= {A} c {A′} ?
cf. |= {true} c {false}
Construire des raisonnements
des regles d’inference
I pour decrire l’execution des programmessemantique operationnelle de Imp
σ, b ⇓ true σ, c1 ⇓ σ′
σ, if b then c1 else c2 ⇓ σ′σ, b ⇓ true
σ, if b then c1 else c2 −→ σ, c1
I pour etablir des proprietes sur l’execution des programmessemantique axiomatique de Imp
` {A ∧ b} c1 {A′} ` {A ∧ ¬b} c2 {A′}` {A} if b then c1 else c2 {A′}