semantica programacao

Upload: pl-htc

Post on 03-Jun-2018

233 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/12/2019 Semantica Programacao

    1/82

    Semntica da ProgramaoJorge Sousa Pinto

    [email protected]

  • 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 ?