semantica programacao
Embed Size (px)
TRANSCRIPT
-
8/12/2019 Semantica Programacao
1/82
Semntica da ProgramaoJorge Sousa Pinto
-
8/12/2019 Semantica Programacao
2/82
Temas- Estudo de uma linguagem imperativa simples- Semntica operacional- Semntica axiomtica (breve referncia)- O !-calculus- O sistema de tipos simples- Estudo de linguagens de programao estrita e no-- Semntica denotacional (introduo) e outros tpicos
-
8/12/2019 Semantica Programacao
3/82
- Dois testes com peso 50%- Exame final recurso
- Trabalho a pedido (at 2 valores compensao)
Avaliao
-
8/12/2019 Semantica Programacao
4/82
Bibliografia Livros- Reynolds, J.C. Theories of Programming Languages.
Cambridge Univ. Press, 1998- Winskel, G. The Formal Semantics of Programming
Languages. MIT Press, 1993- Hennessy, M. The Semantics of ProgrammingLanguages. Wiley, 1990 [ disponvel online]
-
8/12/2019 Semantica Programacao
5/82
Bibliografia Notas- Pitts A. M. Lecture Notes on Semantics of
Programming Languages. Univ Cambridge, 1997-2002- Mycroft A. Foundations of Functional Programming.
Univ. Cambridge, 2007
-Winskel F. Lecture Notes on Denotational Semantics.
Univ. Cambridge, 1997-2002
-
8/12/2019 Semantica Programacao
6/82
Def. de uma Linguagem deProgramao
Sintaxe: descrio dos smbolos e das expressesque constituem a linguagem, bem como das demais
categorias sintcticas (comandos, programas)
-
8/12/2019 Semantica Programacao
7/82
Semntica: descrio do significadodas vriasconstrues da linguagem, que permite prever oseu comportamento em tempo de execuo.
Ferramentas: interpretadores, compiladores,debuggers, profilers
-
8/12/2019 Semantica Programacao
8/82
Qual o significado da seguinte construo?
Segundo Kernighan & Ritchie, The C Programming Language,
O comando C executado repetidamente enquanto ovalor da expresso B for Verdadeiro, sendo o teste feitoantesda execuo do comando.
Semntica Informal
-
8/12/2019 Semantica Programacao
9/82
Especificao do comportamento independente damquina
Permite analisar, processar, e optimizar osprogramas de forma correcta
No desenho de novas linguagens de programao,pode ser til na clarificao de aspectos subtis
Semntica Formal
-
8/12/2019 Semantica Programacao
10/82
Os prprios mtodos semnticos podemsugerir novas caractersticas das linguagens (porexemplo o !-calculus anterior programaofuncional)
Em Verificao de Programas, a actividade quepretende certificar a correco docomportamento dos programas face s suasespecificaes (cfr. UCE de 2o. ciclo MFES)
-
8/12/2019 Semantica Programacao
11/82
Operacional:descreve os estados de execuo deum programa
Denotacional: descreve o significado de umprograma num domnio matemtico abstracto
Axiomtica: descreve o comportamento deprogramas atravs de uma lgica
Estilos de Semnticas Formal
-
8/12/2019 Semantica Programacao
12/82
- Estudo de uma linguagem imperativa simples- Semntica operacional- Semntica axiomtica (breve referncia)- O !-calculus- O sistema de tipos simples- Estudo de linguagens de programao estrita e no-- Semntica denotacional (introduo) e outros tpicos
Temas
-
8/12/2019 Semantica Programacao
13/82
Uma Linguagem Imperativa[Pitts, Lecture Notes]
-
8/12/2019 Semantica Programacao
14/82
Sistemas de TransioUm sistema de transies constitudo por um conjuntode configuraes e por uma relao binria de transio
entre configuraes:
Se a configurao c transitapara c escrevemos:
-
8/12/2019 Semantica Programacao
15/82
S.T. - Conceitos fechoreflexivo-transitivo da relao de transio sistema de transio determinstico
configurao normal configuraes iniciais e finais ou terminais
NB: uma configurao normal que no seja terminal de alguma forma mal-formada (bloqueada)
-
8/12/2019 Semantica Programacao
16/82
Linguagem de Comandos (LC)Sintaxe
Comandos, Expr. Inteiras e Expr. Booleanas
-
8/12/2019 Semantica Programacao
17/82
-
8/12/2019 Semantica Programacao
18/82
Uma Mquina Abstracta Stack de controloou de comandos:
Stack de resultados:
Um Estado: uma funo parcial finita que mapeiavariveis em nmeros inteiros
P ::= C | E | B
-
8/12/2019 Semantica Programacao
19/82
if
if
if
Transies da Mq. Abstr.
-
8/12/2019 Semantica Programacao
20/82
-
8/12/2019 Semantica Programacao
21/82
Configuraes Iniciais e FinaisA partir de um comando e um estado inicial constri-se
uma config. inicial:
uma execuo da mquina abstracta levar-nos-, setudo correr bem, a uma config. final da forma
-
8/12/2019 Semantica Programacao
22/82
A mquina abstracta constitui uma semnticaoperacionalda linguagem porque descreve a execuopasso-a-passo dos seus programas.Ser que todas as transies descrevem computaes?
Muitas configuraes sintacticamente correctas soinvlidas / mal formadas.
-
8/12/2019 Semantica Programacao
23/82
Se no topo da stack de controlo se encontra umoperador iopou bop, ento no topo da stack deresultados encontram-se duas constantes inteiras
Se :=, ento uma constante inteira e uma varivel Se if, ento uma constante booleana seguida de dois
comandos Se while, ento uma constante booleana seguida de
um comando
Configurao bem formada
-
8/12/2019 Semantica Programacao
24/82
Propriedade
Em execues (sequncias de transies) com incio
numa configurao inicial da formano ocorrem configuraes mal formadas.Prova: por induo no comprimento da sequncia de
transies. Necessita de um lema sobre expressescolocadas no topo da stack de controlo.
-
8/12/2019 Semantica Programacao
25/82
Os erros de execuo de um programa devemnaturalmente reflectir-se em erros da mquina
abstracta (transies bloquedas):
! !lno topo da stack e s(l)no est definido! Erro de avaliao de expresses aritmticas: diviso
por zero Note-se que no correspondem a configuraes mal
formadas!
Erros de execuo
-
8/12/2019 Semantica Programacao
26/82
Limitaes da Semntica porMquina Abstracta
Muitas transies fazem apenas anlise sintctica eno tm portanto uma funo descritiva dalinguagem
Pouco intuitiva: as construes no so descritas deforma directa
-
8/12/2019 Semantica Programacao
27/82
Difcil de utilizar como instrumento para raciocinarsobre propriedades da linguagem LC
Existem muitas configuraes invlidas (quando umcerto comando no topo da stack de controlo exige
a presena de uma expresso inteira ou booleanano topo da stack de resultados)
-
8/12/2019 Semantica Programacao
28/82
Tcnicas de Prova por Induo
-
8/12/2019 Semantica Programacao
29/82
Induo MatemticaTcnica bem conhecida: para provar que P(x) vlido paraqualquer nmero naturalxbasta provar que:P(0) vlidose P(x) vlido (x arbitrrio) ento P(x+1) vlidosendo Puma propriedade qualquer sobre os nmerosnaturais
-
8/12/2019 Semantica Programacao
30/82
Sintaxe Abstractadata Iop = Sum | Diff | Prod | Div | data Bop = Equal | LT | LTE | GT | data IntExp = IntConst Int
| Pos Mem| IntOp Iop IntExp IntExp
data BoolExp = TT | FF| BoolOp Bop IntExp IntExp
-
8/12/2019 Semantica Programacao
31/82
Sintaxe Abstractadata Command = Skip
| Assignment Mem IntExp| Sequence Command Command| ITE BoolExp Command Command| While BoolExp Command
Definio de tipos indutivos para Expresses e Comandos
Em termos abstractos que forma tm estes tipos?
-
8/12/2019 Semantica Programacao
32/82
Induo EstruturalPara provar que uma propriedade Psobre rvores verdadeira para qualquer rvore pertencente a um
conjunto de rvores etiquetadas, finitas, basta provar que:
caso de base: P verdade para todas as folhasda rvore
caso indutivo: para cada constructor cde nodos com nsub-rvores, se P verdade para as sub-rvores t1 tnento P(c(t1 tn) ) verdade
-
8/12/2019 Semantica Programacao
33/82
Induo Estrutural - ExpressesInteiras LC
caso de base:
P(n) verdade para todos os nmeros inteiros nP(!l) verdade para todas as variveis l
caso indutivo:sejam E, Eexpresses inteiras; se P(E)e P(E), entoP(E iopE), comiop um operador binrio sobre inteiros
-
8/12/2019 Semantica Programacao
34/82
Nota
A tcnica de prova por induo estrutural pode serjustificada com recurso induo matemtica. Dada umapropriedade Psobre rvores de expresso definimos:
P(n) = P(E) verdade para todas as rvores Ecom noumenos nodos
Ento P(E) verdade para todas as rvores finitas Esse
P(n) verdade para todos os inteiros n
-
8/12/2019 Semantica Programacao
35/82
rvores de ProvaDado um conjunto de frmulas lgicas, a definiode um sub-conjunto de frmulas (vlidas) pode ser
definida por induo; em particular, podem serdefinidas como as concluses das rvores queobedecem a uma determinada definio indutiva.
Estas rvores chamam-se provasou derivaes.
(cfr. bem conhecida Deduo Natural)
-
8/12/2019 Semantica Programacao
36/82
Exemplo (avaliao de LC)FrmulaE uma expresso de LC; sum estado;num inteirosignificado: a avaliao da expresso Eno estado stem
como resultado o inteiro nEsta relao pode ser definida indutivamente
-
8/12/2019 Semantica Programacao
37/82
Exemplo (avaliao de LC)Casos de base (axiomas):
n, s!n e !l, s!n se s(l)= nCaso Indutivo (regra):
E,s!n E,s!n se n = n iop nE iop E,s!n
-
8/12/2019 Semantica Programacao
38/82
Induo sobre RegrasPara provar que uma propriedade Psobre frmulaslgicas verdade para todas as frmulas resultantes de
conjuntos de axiomasAe de regras R, basta provar que:
axiomas: para todo o axioma adeAtem-se P(a)
regras: para toda a regra h1 hn de R,c se P(h1)e eP(hn)entoP(c)
-
8/12/2019 Semantica Programacao
39/82
Nota
Esta tcnica de prova pode ser justificada com recurso induo matemtica. Dado um conjunto Fdefrmulas e uma propriedade Psobre elas, defina-se P:P(n) = P( f ) verdade por todas as frmulas f "Fquesejam concluso de derivaes com nou menos nodosentoP( f ) verdade para todas as frmulas fsseP(n) verdade para todos os inteiros n
-
8/12/2019 Semantica Programacao
40/82
Semntica OperacionalEstrutural
(Plotkin, 1981)
-
8/12/2019 Semantica Programacao
41/82
Princpios bsicos: simplificar as configuraes (=> mais abstractas) eliminar transies no-semnticas transies so estruturais:transies de um elemento compostode um programa
so construdas indutivamente a partir das transiesdos seus componentes
-
8/12/2019 Semantica Programacao
42/82
LC Relao de Transio
if
se s(l) = n
Expresses:
-
8/12/2019 Semantica Programacao
43/82
LC Relao de TransioComandos:
-
8/12/2019 Semantica Programacao
44/82
LC Relao de TransioComandos:
-
8/12/2019 Semantica Programacao
45/82
Configuraes TerminaisDefinem-se como sendo:
Exemplos de configuraes bloqueadas:
!!l, { }"
Note-se que no ocorre nenhuma forma deconfigurao mal formada. As configs. bloqueadascorrespondem a erros de execuo.
-
8/12/2019 Semantica Programacao
46/82
Algumas Questes Seria possvel ter-se duas relaes distintaspara expresses e comandos?
Faria sentido outra definio para a relao detransio? Ou seja, feita alguma escolha(estratgia) inteligente na definio?
Qual a diferena essencial no estilo dedefinio das transies em relao s damquina abstracta da aula anterior?
-
8/12/2019 Semantica Programacao
47/82
Exerccios Se se pretender acrescentar operadoresbooleanos para conjuno, disjuno, e negao,
que regras devem ser acrescentadas semntica de transies? E no caso de operadores com efeitos laterais,
como x++da linguagem C? E como se procederia para lidar com outros
tipos de ciclos (for, do while)?
-
8/12/2019 Semantica Programacao
48/82
Propriedades Sistema Determinstico: se!P, s"#!P, s"e!P, s"#!P, s"ento !P, s"= !P, s"
Prova por induo nas regras (exerccio)
-
8/12/2019 Semantica Programacao
49/82
Propriedades Subject Reduction: seja!P, s"#!P, s"ento,se P um comando, P um comandose P uma expr. inteira, P uma expr. int.se P uma expr. booleana, P uma expr. booleana
-
8/12/2019 Semantica Programacao
50/82
Propriedades
Expresses livres de efeitos laterais: seja!P, s"#!P, s"comP uma expresso, ento tem-se s = s
-
8/12/2019 Semantica Programacao
51/82
Semntica de Avaliao(Kahn / Milner, Toft, Harper)
-
8/12/2019 Semantica Programacao
52/82
Sequncias de AvaliaoUma sequncia pode
Terminar (atinge uma config. terminal) Bloquear (pra sem atingir config. terminal) Divergir (no pra sequncia infinita)
exemplo: while true do ()
-
8/12/2019 Semantica Programacao
53/82
Relao de Avaliaoterminal
ser expresso por uma nova relao:
-
8/12/2019 Semantica Programacao
54/82
Regras de Avaliao Expresses( )
if
if c = n1op n2
-
8/12/2019 Semantica Programacao
55/82
Regras de Avaliao Comandos
-
8/12/2019 Semantica Programacao
56/82
Regras de Avaliao Comandos
-
8/12/2019 Semantica Programacao
57/82
Regras de Avaliao Comandos
(3 premissas)
-
8/12/2019 Semantica Programacao
58/82
Propriedade uma configurao terminal se a frmula
for inferida pelas regras apresentadasProva: por induo nas regras
-
8/12/2019 Semantica Programacao
59/82
ExerccioConsidere-se o seguinte programa divergente:
Provar (por contradio) que no existem estadosinicial se terminal stais que
-
8/12/2019 Semantica Programacao
60/82
PropriedadeNo provaremos, mas possvel codificar em LC qualquer funo recursivaparcial.Existir um algoritmo que, dada uma configuraoinicial, diz se esta ou no avaliada numa configuraofinal?
-
8/12/2019 Semantica Programacao
61/82
Propriedades
Expresses livres de efeitos laterais: seja!P, s"$!V, s"comP uma expresso, ento tem-se s = s
-
8/12/2019 Semantica Programacao
62/82
Propriedades Subject Reduction: seja!P, s"
$
!V, s"
ento,se P um comando, V um comandose P uma expr. inteira ,V uma expr. int.se P uma expr. booleana, V uma expr. booleana
-
8/12/2019 Semantica Programacao
63/82
Equivalncia das Semnticas deTransies e de Avaliao
Para todas as configuraes
com terminal
-
8/12/2019 Semantica Programacao
64/82
Prova(i)por induo nas regras de definio de $
(ii) para &prova-se resultado mais forte:
por induo nas regras de def. de!e (ii) resulta por induo no compr. da sequncia de trans.
-
8/12/2019 Semantica Programacao
65/82
Propriedades Sistema Determinstico: se!P, s"
$
!V, s"
e !P, s"
$
!V, s"ento !V, s"= !V, s"
Prova por induo nas regras desnecessria
dada a equivalncia com semntica detransies!
-
8/12/2019 Semantica Programacao
66/82
Equivalncia Semnticae Tipos
-
8/12/2019 Semantica Programacao
67/82
Relao de IgualdadeP=P P = P P=P P=P
P= P P=P
Relao de Equivalncia Congruente: P = P .C[P]= C[P]
P pode ser substitudo por P em qualquer contexto,expresso ou assero. Esta regra no ser imposta,tem que ser provada em cada linguagem!
-
8/12/2019 Semantica Programacao
68/82
Equivalncia SemnticaDuas expresses ou comandos dizem-se equivalentes
se para todos os estados iniciais se config. terminais#V, s$se tem
-
8/12/2019 Semantica Programacao
69/82
Inequivalncia de ComandosPara provar quebasta encontrar estados inicial e final tais que
e
(ou inversamente)
(identicamente para expresses)
-
8/12/2019 Semantica Programacao
70/82
TeoremaEsta noo de equivalncia semntica estabelece uma
relao de equivalncia congruente
Prova: equivalncia trivial uma vez que a def. partede uma equivalncia lgicaCongruncia implica analisar casos estruturalmentecomo se segue
-
8/12/2019 Semantica Programacao
71/82
Congruncia: expressesimplicaProvar que
implica
-
8/12/2019 Semantica Programacao
72/82
Congruncia: comandosimplicaProvar que
(ltimo caso mais difcil, prova-se recorrendo semntica de transies, por induo no comprimentode uma cadeia de transies)
-
8/12/2019 Semantica Programacao
73/82
Exemplos de ComandosEquivalentes
-
8/12/2019 Semantica Programacao
74/82
Exemplos de ComandosEquivalentes
-
8/12/2019 Semantica Programacao
75/82
Exemplos de ComandosEquivalentes
Ser uma sequncia de duas instrues deatribuio comutativa de acordo com esta noo de
equivalncia?
-
8/12/2019 Semantica Programacao
76/82
Um Sistema de TiposAsseres de tipagem:
"::=int |bool |loc |cmd
! uma funo parcial de variveis para tiposM um termo de LC
-
8/12/2019 Semantica Programacao
77/82
ifExpresses
Primeiro caso seria til na presena de variveis commbito (scope)local
-
8/12/2019 Semantica Programacao
78/82
Expresses
-
8/12/2019 Semantica Programacao
79/82
Comandos
-
8/12/2019 Semantica Programacao
80/82
Comandos
(por enquanto "s pode ser cmd)
-
8/12/2019 Semantica Programacao
81/82
Questo
Para que servem os tipos?
-
8/12/2019 Semantica Programacao
82/82
Propriedades
Se e ento
Subject Reduction
Em que condies ser garantidamente s = s ?