-
Notifications
You must be signed in to change notification settings - Fork 3
/
930.tex
130 lines (98 loc) · 5.03 KB
/
930.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
\documentclass{agregfiche}
% V1 par Aliaume Lopez
% Relu par Charlie Jacomme
% Relu par David Baelde
\title{Leçon 930 -- Sémantique des langages de programmation. Exemples.}
\begin{document}
\maketitle
\secrapports
\begin{rapport}{2017,2018,2019}
L’objectif est de formaliser ce qu’est un programme : introduction des
sémantiques opérationnelle et dénotationnelle, dans le but de pouvoir faire
des preuves de programmes, des preuves d’équivalence, des preuves de
correction de traduction. Ces notions sont typiquement introduites sur un
langage de programmation (impératif) jouet. On peut tout à fait se limiter à
un langage qui ne nécessite pas l’introduction des CPOs et des théorèmes de
point fixe généraux. En revanche, on s’attend ici à ce que les liens entre
sémantique opérationnelle et dénotationnelle soient étudiés (toujours dans le
cas d’un langage jouet). Il est aussi important que la leçon présente des
exemples d’utilisation des notions introduites, comme des preuves
d’équivalence de programmes ou des preuves de correction de programmes.
\end{rapport}
\secindispensables
\begin{itemize}
\item Sémantique opérationnelle (petit/grand pas) et dénotationnelle des commandes de IMP.
\item Équivalences entre les
sémantiques.
\item Exemples de programmes, avec une interprétation de leur
correction dans une des sémantiques présentées ci-dessus.
\end{itemize}
\secasavoir
\begin{itemize}
\item Utiliser la sémantique pour énoncer des propriétés : correction d'un
programme, terminaison, validité d'une optimisation.
\item Compositionnalité de la sémantique dénotationnelle, qui fait que l'équivalence est une congruence.
\item Identifier les relations fonctionnelles ou totales.
\end{itemize}
\secidees
\begin{itemize}
\item Sémantique axiomatique (logique de Hoare).
\item Paresse dans les expressions booléennes et non terminaison.
\item Effets de bords dans les expressions.
\item Instructions break et continue (en petit pas ou axiomatique).
\end{itemize}
\secpieges
\begin{itemize}
\item Dans IMP, seule la non terminaison empêche d'avoir un résultat dans la sémantique à grand pas (ou dénotationnelle), ce qui n'est pas toujours le cas. En toute généralité, la non terminaison se définit plutôt à petit pas.
\item Définir les expressions comme des termes.
\item On peut définir la sémantique dénotationelle du while simplement comme un sup, et ainsi éviter le formalisme des CPO. Si on parle de point fixe, il faut connaître le théorème d'existence, et illustrer son intérêt. Par exemple, cela montre que le while et son déroulé ont la même sémantique.
\item Bien faire attention aux références qui prennent des directions
\emph{incompatibles} très tôt. Par exemple, si le domaine de définition
des variables est $\mathbb{N}$ alors l'opération de soustraction
doit être \emph{binaire}, alors que dans le cas de $\mathbb{Z}$ on peut
se contenter d'une soustraction \emph{unaire}.
\item Réfléchir aux liens avec d'autres leçons~:
sémantique petit pas pour le lambda-calcul et les machines de Turing,
sémantique dénotationnelle pour les expressions régulière (langage).
\end{itemize}
\secquestionsclassiques
\begin{itemize}
\item Quel est l'intérêt des différentes sémantiques ?
\item Quelles sémantiques permettent de définir une notion de complexité ?
%
% \item Pour le programme d'une centrale nucléaire, quelle sémantique
% paraît la plus adaptée ?
\item Quelles sémantiques sont utilisées en pratique pour vérifier des programmes ?
\item Quelle sémantique permet de vérifier un programme qui ne termine pas ?
\item Peut-on faire un lien entre la sémantique dénotationnelle
et la preuve de programme ?
\item Calculer la sémantique dénotationnelle d'un programme
avec une boucle while simple (division euclidienne, fibonacci...)
% \item Conaissez-vous un langage pour lequel il n'y a pas
% de théorème d'adéquation ? De théorème de correction ?
%
\item Connaissez-vous un autre moyen de définir une sémantique ?
(plus faible précondition)
\item Vérifier la continuité de la fonction utilisée pour définir le WHILE ? (si il a été défini ainsi)
\item Comment ajouter un choix non déterministe dans
vos sémantiques ?
\item Comment ajouter un choix probabiliste (pièce non biaisée par exemple)
?
\item Est-ce que IMP est Turing-complet ? L'équivalence est-elle décidable ?
\end{itemize}
\secreferences
\begin{itemize}
\item \input{refs/winskel}
%\item \temporary{\url{http://www.cl.cam.ac.uk/~gw104/dens.pdf}}
% (aussi Glynn Winskel)
\end{itemize}
\secdev
\begin{itemize}
\item[++] \input{dev/semantiqueeoperdenotequiv}
\item[++] \input{dev/semantiqueprogrammeequiv}
\item[+] \input{dev/factorielhoare}
%\temporary{}
%\item[-] \temporary{Complétude de Hoare}
%Attention difficile
\end{itemize}
\end{document}