SlideShare uma empresa Scribd logo
1 de 222
Baixar para ler offline
1




Semˆntica Formal
   a
Carlos A. P. Campani

 22 de julho de 2005
2




Copyright c 2005 Carlos A. P. Campani.
´
E garantida a permiss˜o para copiar, distribuir e/ou
                       a
modificar este documento sob os termos da Licen¸a de
                                                  c
Documenta¸ao Livre GNU (GNU Free Documentation
            c˜
License), Vers˜o 1.2 ou qualquer vers˜o posterior
               a                     a
publicada pela Free Software Foundation; sem Se¸oes
                                                  c˜
Invariantes, Textos de Capa Frontal, e sem Textos de
Quarta Capa. Uma c´pia da licen¸a ´ inclu´ na se¸ao
                      o           c e      ıda       c˜
intitulada “GNU Free Documentation License”.
veja: http://www.ic.unicamp.br/~norton/fdl.html.
3




S´ mula
 u
1. Introdu¸ao
          c˜
2. Abordagens de semˆntica formal
                    a
3. Linguagem exemplo While
4. Sintaxe abstrata
4




5. Revis˜o de Prova de Teoremas
        a
 (a) Prova de Implica¸ao
                     c˜
 (b) Prova por Redu¸˜o ao Absurdo
                   ca
  (c) Prova por Indu¸˜o
                    ca
      i. Indu¸˜o Sobre os Naturais
             ca
     ii. Indu¸ao Sobre o Tamanho de uma Seq¨ˆncia
             c˜                            ue
    iii. Indu¸ao Estrutural
             c˜
5




6. Semˆntica de express˜es
      a                o
 (a) N´meros e Numerais
      u
 (b) Descrevendo Estados
  (c) Express˜es aritm´ticas
             o        e
 (d) Express˜es booleanas
            o
7. Propriedades da Semˆntica
                      a
 (a) Vari´veis Livres
         a
 (b) Substitui¸ao
              c˜
6




8. Semˆntica Operacional
      a
 (a) Semˆntica Natural
        a
     i. Propriedades da Semˆntica
                           a
    ii. Fun¸˜o Semˆntica
           ca      a
 (b) Semˆntica Operacional Estruturada
        a
     i. Propriedades da Semˆntica
                           a
    ii. Fun¸˜o Semˆntica
           ca      a
  (c) Um Resultado de Equivalˆncia
                             e
7




9. Semˆntica Denotacional
      a
 (a) Composicionalidade
 (b) Ponto Fixo
  (c) Defini¸ao da Semˆntica
           c˜        a
 (d) Requisitos sobre o Ponto Fixo
  (e) Teoria de Pontos Fixos
  (f) Existˆncia
           e
 (g) Um Resultado de Equivalˆncia
                            e
8




10. Semˆntica Axiom´tica
       a           a
  (a) Provas Diretas de Corre¸˜o de Programas
                             ca
       i. Semˆntica Natural
             a
      ii. Semˆntica Operacional Estruturada
             a
     iii. Semˆntica Denotacional
             a
  (b) Asser¸oes para Corre¸ao Parcial
           c˜             c˜
   (c) Corre¸ao e Completude do Sistema Formal
            c˜
  (d) Asser¸oes para Corre¸ao Total
           c˜             c˜
9




Bibliografia
 • Nielson, H. & Nielson, F. Semantics with
   Applications: a formal introduction. dispon´ em:
                                              ıvel
   http://www.daimi.au.dk/~bra8130/Wiley_book/
   wiley.html;
 • lˆminas para impress˜o: http:
    a                  a
   //www.ufpel.edu.br/~campani/semantica4.ps.gz.
1          ¸˜
    INTRODUCAO                                            10




     1    Introdu¸˜o
                 ca
     Semˆntica formal preocupa-se em especificar
         a
     rigorosamente o significado ou comportamento de
     programas, partes de hardware, etc.
     Sintaxe descreve as estruturas de uma linguagem;
     Semˆntica descreve o significado destas estruturas.
        a
1          ¸˜
    INTRODUCAO                                               11




     A necessidade de uma semˆntica formal (matem´tica)
                              a                     a
     para linguagens de programa¸ao justifica-se pois:
                                c˜
      • pode revelar ambig¨idades na defini¸˜o da linguagem
                          u                ca
        (o que uma descri¸˜o n˜o formal n˜o permitiria
                         ca a            a
        revelar);
      • ´ uma base para implementa¸ao (s´
        e                         c˜    ıntese), an´lise e
                                                   a
        verifica¸ao formal.
               c˜
2   ABORDAGENS                                                 12


     2    Abordagens
     Semˆntica Operacional Significado de uma constru¸˜o
         a                                               ca
        da linguagem ´ especificado pela computa¸ao que ela
                      e                          c˜
        induz quando executada em uma m´quina hipot´tica
                                           a          e
        (interessa como o efeito da computa¸ao ´ produzido);
                                           c˜ e
     Semˆntica Denotacional Significados modelados por
         a
        objetos matem´ticos que representam o efeito de
                      a
        executar uma estrutura (somente o efeito interessa,
        n˜o como ´ produzido);
         a        e
     Semˆntica Axiom´tica Especifica propriedades do
         a              a
        efeito da execu¸ao das estruturas como asser¸˜es
                       c˜                           co
        (alguns aspectos da execu¸ao s˜o ignorados).
                                  c˜ a
2   ABORDAGENS                                              13




     Tipos de Semˆntica Operacional:
                 a
      • Semˆntica Operacional Estruturada (especifica mais
            a
        detalhes da execu¸ao);
                         c˜
      • Semˆntica Natural (simplifica a nota¸ao e esconde
            a                               c˜
        detalhes, ao tomar um passo maior).
3   LINGUAGEM EXEMPLO WHILE             14




     3    Linguagem Exemplo While

                          n ∈ Num
                              x ∈ Var
                          a ∈ Aexp
                          b ∈ Bexp
                              S ∈ Stm
3   LINGUAGEM EXEMPLO WHILE                                        15




                  a ::= n|x|a1 + a2 |a1 ∗ a2 |a1 − a2
            b ::= true|false|a1 = a2 |a1 ≤ a2 |¬b|b1 ∧ b2
     S ::= x:=a|skip|S1 ; S2 |if b then S1 else S2 |while b do S
3   LINGUAGEM EXEMPLO WHILE                          16




     ex1: z:=x; x:=y; y:=z
     ex2: y:=1; while ¬(x = 1) do (y:=y∗x; x:=x−1)
4   SINTAXE ABSTRATA                                                        17




     4    Sintaxe Abstrata

                            z:=x; x:=y; y:=z


                             S ƒƒƒƒƒ
                          ÐÐ       ƒƒƒƒ
                        ÐÐ              ƒƒƒA
                      S bb ;                  S www
                    Ò                       Ð      www
                ÐÒÒ  b0
                   Ò       b             ÐÐÐ         w8
               z := a                 S bb ;             S aa
                                       ÑÑ   bb1             ÑÑ    a
                                                                   a0
                                   ÐÑÑ                  ÐÑ
                           x    x      :=         a   y      :=         a
                                                                       
                                                  y                     z
4   SINTAXE ABSTRATA                                            18




                                     S „„„„„
                                   ÓÓ      „„„„
                                 ÑÓ             „„„A
                               S ww ;
                                    www              S`
                               Ð
                            ÐÐÐ        ww8      ÐÒÒÒ  ``0
                                                        `
                         Sd ;               S b y := a
                     ÐÐÐ  dd1          ~
                                      ~~  b1
                                      
                                               b
                                                            
                 z      :=     a    x    :=     a          z
                                               
                               x                y
4   SINTAXE ABSTRATA                             19




     Usando nota¸ao linear:
                c˜
       • z:=x; (x:=y; y:=z) (mais ` direita);
                                  a
       • (z:=x; x:=y); y:=z (mais ` esquerda).
                                  a
4   SINTAXE ABSTRATA                              20




     Exerc´ıcio: Construa a ´rvore sint´tica de
                            a          a
     y:=1; while ¬(x = 1) do (y:=y∗x; x:=x−1).
5        ˜
    REVISAO DE PROVA DE TEOREMAS                          21


     5     Revis˜o de Prova de Teoremas
                a

     5.1    Prova de Implica¸˜o
                            ca
     Para provar A → B, assuma A (hip´tese) e deduza B.
                                     o


                          A (hip´tese)
                                o
                          ...
                          ...
                          .
                          .
                          .
                          B
                              A→B
5        ˜
    REVISAO DE PROVA DE TEOREMAS                          22



     ex: Provar que se um n´mero inteiro ´ divis´ por 6
                           u             e      ıvel
     ent˜o tamb´m o ´ por 2.
        a       e    e
     Seja n ∈ Z, tal que n ´ divis´ por 6:
                           e      ıvel
      1. n ´ divis´ por 6 (hip´tese);
           e      ıvel        o
      2. n = 6.k, onde k ∈ N;
      3. n = 2.3.k;
      4. n = 2.k , onde k = 3.k e k ∈ N
      5. n ´ divis´ por 2;
           e      ıvel
      6. Logo, vale o enunciado.
5        ˜
    REVISAO DE PROVA DE TEOREMAS                              23


     5.2     Prova por Redu¸˜o ao Absurdo
                           ca

     Para provar A, suponha ¬A e mostre que isto resulta em
     uma contradi¸ao (absurdo).
                 c˜
     ex: Provar que se um n´mero somado a si mesmo resulta
                             u
     o n´mero original, ent˜o este n´mero ´ zero.
        u                  a        u     e
     Suponha que este n´mero ´ x e que:
                       u     e

                        x+x=x∧x=0

     ent˜o
        a
                         2x = x ∧ x = 0
     Logo, 2 = 1 (absurdo).
5        ˜
    REVISAO DE PROVA DE TEOREMAS                        24



     5.3     Prova por Indu¸˜o
                           ca

     5.3.1    Indu¸˜o Sobre os Naturais
                  ca

                           P (0)    P (n) → P (n + 1)
               n∈N
                                    ∀nP (n)
     Base P (0);
     Passo P (n) → P (n + 1);
           • P (n) ´ a hip´tese indutiva;
                   e      o
           • Ent˜o, tenta-se provar P (n + 1);
                a
     Conclus˜o ∀nP (n).
            a
5        ˜
    REVISAO DE PROVA DE TEOREMAS                             25




     ex: Provar que o quadrado de um n´mero natural sempre
                                      u
     ´ maior ou igual ao n´mero.
     e                    u
     Base 0 ≤ 02 ;
     Passo Assumir n ≤ n2 . Ent˜o:
                               a

               n + 1 ≤ n2 + 1 ≤ n2 + 1 + 2n = (n + 1)2

     Conclus˜o ∀n ∈ N n ≤ n2 .
            a
5        ˜
    REVISAO DE PROVA DE TEOREMAS                               26




          ıcio: Prove que para todo n ∈ N, 2n  n.
     Exerc´
                                                    n(n+1)
     Exerc´
          ıcio: Prove que 1 + 2 + 3 + · · · + n =      2
                                                           .
5        ˜
    REVISAO DE PROVA DE TEOREMAS                                 27




     5.3.2   Indu¸˜o Sobre o Tamanho de uma
                 ca
             Seq¨ˆncia
                ue

      1. Prove que a propriedade vale para todas as
         seq¨ˆncias de comprimento 0 (base);
            ue
      2. Prove que a propriedade vale para todas as outras
         seq¨ˆncias: Assuma que a propriedade vale para
            ue
         todas as seq¨ˆncias de tamanho menor ou igual a k
                     ue
         (hip´tese indutiva) e mostre que vale para seq¨ˆncias
             o                                         ue
         de tamanho k + 1.
5        ˜
    REVISAO DE PROVA DE TEOREMAS                                    28




     5.3.3   Indu¸˜o Estrutural
                 ca

     Aplica-se sobre as estruturas de uma linguagem:
      1. Prove que a propriedade vale para todas as
         estruturas atˆmicas (ex: P (x:=a) e P (skip));
                      o
      2. Prove que a propriedade vale para qualquer
         programa: Assuma que vale para as estruturas que
         formam um comando, e mostre que vale para o
         comando composto (ex: P (S1 ) ∧ P (S2 ) → P (S1 ; S2 )).
6      ˆ                ˜
    SEMANTICA DE EXPRESSOES                                       29




     6     Semˆntica de Express˜es
              a                o

     6.1    N´ meros e Numerais
             u

                          N : Num → Z

     Se n ∈ Num ent˜o escrevemos N [[n]], e usamos [[ e ]] para
                     a
     enfatizar que N ´ uma fun¸˜o semˆntica.
                     e        ca     a
6      ˆ                ˜
    SEMANTICA DE EXPRESSOES                               30




                      N [[0]] = 0
                      N [[1]] = 1
                     N [[n 0]] = 2∗N [[n]]
                     N [[n 1]] = 2∗N [[n]]+1

     Observa¸˜o: 0 ´ o numeral (0 ∈ Num) e 0 ´ o n´mero
             ca    e                         e    u
     (0 ∈ Z).
6      ˆ                ˜
    SEMANTICA DE EXPRESSOES                                    31




     6.2    Descrevendo Estados

     Estado representa uma associa¸ao entre vari´veis e seus
                                  c˜            a
     valores.


                        State = Var → Z

     ex: [x → 5, y → 7, z → 0].
6      ˆ                ˜
    SEMANTICA DE EXPRESSOES                             32



     6.3    Express˜es aritm´ticas
                   o        e

                   A : Aexp → (State → Z)



                      A[[n]]s = N [[n]]
                      A[[x]]s = s x
                A[[a1 + a2 ]]s = A[[a1 ]]s+A[[a2 ]]s
                 A[[a1 ∗ a2 ]]s = A[[a1 ]]s∗A[[a2 ]]s
                A[[a1 − a2 ]]s = A[[a1 ]]s−A[[a2 ]]s

     Observa¸˜o: s ´ um estado.
            ca     e
6      ˆ                ˜
    SEMANTICA DE EXPRESSOES                                      33




     ex: seja s x = 3:

                   A[[x + 1]]s = A[[x]]s+A[[1]]s
                               = (s x)+N [[1]]
                               = 3+1
                               = 4

     Observa¸˜o: na primeira linha, + dentro do [[.]] pertence
             ca
     ` linguagem, + ` direita ´ a opera¸ao soma. 1 ´ o
     a              a         e        c˜            e
     numeral (1 ∈ Num) e 1 ´ o n´mero (1 ∈ Z).
                              e    u
6      ˆ                ˜
    SEMANTICA DE EXPRESSOES                 34




     6.4    Express˜es booleanas
                   o

                   B : Bexp → (State → T)


                          T = {tt, ff }
6      ˆ                ˜
    SEMANTICA DE EXPRESSOES                                    35




              B[[true]]s = tt
              B[[false]]s = ff
                            
                               tt se A[[a1 ]]s = A[[a2 ]]s
           B[[a1 = a2 ]]s =
                               ff se A[[a1 ]]s = A[[a2 ]]s
                            
                               tt se A[[a1 ]]s ≤ A[[a2 ]]s
           B[[a1 ≤ a2 ]]s =
                               ff   se A[[a1 ]]s  A[[a2 ]]s
                            
                               tt se B[[b]]s = ff
                B[[¬b]]s =
                               ff se B[[b]]s = tt
6      ˆ                ˜
    SEMANTICA DE EXPRESSOES                                     36




                        
                         tt se B[[b ]]s = tt e B[[b ]]s = tt
                                    1               2
       B[[b1 ∧ b2 ]]s =
                         ff se B[[b1 ]]s = ff ou B[[b2 ]]s = ff
7                      ˆ
    PROPRIEDADES DA SEMANTICA                                  37


     7     Propriedades da Semˆntica
                              a

     7.1    Vari´veis Livres
                a
     As vari´veis livres de uma express˜o a ´ definida como o
            a                          a    e
     conjunto de vari´veis que ocorrem em a.
                      a


                     FV(n) = ∅
                     FV(x) = {x}
                FV(a1 + a2 ) = FV(a1 ) ∪ FV(a2 )
                FV(a1 ∗ a2 ) = FV(a1 ) ∪ FV(a2 )
                FV(a1 − a2 ) = FV(a1 ) ∪ FV(a2 )
7                      ˆ
    PROPRIEDADES DA SEMANTICA                                       38




     Teorema 1 Sejam s e s dois estados satisfazendo que
     s x = s x para todo x em FV(a). Ent˜o, A[[a]]s = A[[a]]s .
                                        a
     Prova: (por indu¸˜o sobre as express˜es aritm´ticas)
                     ca                  o        e
      1. Base:
         caso n Sabemos que A[[a]]s = N [[n]] e A[[a]]s = N [[n]]
            e assim A[[a]]s = A[[a]]s ;
         caso x n´s temos A[[x]]s = s x e A[[x]]s = s x e, pela
                   o
            hip´tese, s x = s x, j´ que x ∈ FV(x). Logo,
               o                  a
            A[[a]]s = A[[a]]s ;
7                      ˆ
    PROPRIEDADES DA SEMANTICA                                       39




      2. Passo: (supomos que o enunciado vale para a1 e a2 )
         caso a1 + a2 Sabemos que
            A[[a1 + a2 ]]s = A[[a1 ]]s + A[[a2 ]]s e
            A[[a1 + a2 ]]s = A[[a1 ]]s + A[[a2 ]]s . Al´m disto,
                                                       e
            FV(a1) ⊆ FV(a1 + a2 ) e FV(a2) ⊆ FV(a1 + a2 ).
            Usando a hip´tese indutiva, A[[a1 ]]s = A[[a1 ]]s e
                            o
            A[[a2 ]]s = A[[a2 ]]s , e ´ f´cil ver que o enunciado
                                      e a
            vale para a1 + a2 ;
         casos a1 ∗ a2 e a1 − a2 similares ao anterior.
7                      ˆ
    PROPRIEDADES DA SEMANTICA                                     40




     Exerc´
          ıcio: Definir o conjunto FV(b) das vari´veis livres
                                                a
     em uma express˜o booleana b.
                    a
     Exerc´ıcio: Provar que, dados s e s satisfazendo s x = s x
     para todo x ∈ FV(b), B[[b]]s = B[[b]]s .
7                      ˆ
    PROPRIEDADES DA SEMANTICA                              41




     7.2    Substitui¸˜o
                     ca

     Substitui¸˜o denota a opera¸˜o em que se troca cada
              ca                ca
     ocorrˆncia de uma vari´vel y de uma express˜o a por
          e                a                    a
     uma outra express˜o a0 .
                       a
     Nota¸ao: a[y → a0 ].
         c˜
7                      ˆ
    PROPRIEDADES DA SEMANTICA                                    42




                n[y → a0 ] = n
                             
                              a se x = y
                                0
                x[y → a0 ] =
                              x se x = y

         (a1 + a2 )[y → a0 ] = (a1 [y → a0 ]) + (a2 [y → a0 ])
         (a1 ∗ a2 )[y → a0 ] = (a1 [y → a0 ]) ∗ (a2 [y → a0 ])
        (a1 − a2 )[y → a0 ] = (a1 [y → a0 ]) − (a2 [y → a0 ])
7                      ˆ
    PROPRIEDADES DA SEMANTICA                                    43




     Exerc´ıcio: Prove que
     A[[a[y → a0 ]]]s = A[[a]](s[y → A[[a0 ]]s]), para todo s.
     Exerc´
          ıcio: Defina a substitui¸ao para express˜es
                                 c˜              o
     booleanas.
8      ˆ
    SEMANTICA OPERACIONAL                                     44




     8    Semˆntica Operacional
             a
       • Express˜es aritm´ticas e booleanas apenas produzem
                o         e
         um valor, mas n˜o mudam os estados;
                         a
       • Comandos de programas While mudam o estado;
       • Semˆntica operacional preocupa-se mais em como os
             a
         programas s˜o executados do que meramente com os
                     a
         resultados destas computa¸oes;
                                  c˜
8      ˆ
    SEMANTICA OPERACIONAL                                  45




       • Abordagens:
         Semˆntica natural descreve como os resultados
             a
           gerais s˜o obtidos;
                   a
         Semˆntica operacional estruturada descreve como
             a
           passos individuais da computa¸˜o ocorrem;
                                        ca
8      ˆ
    SEMANTICA OPERACIONAL                                     46




       • Os significados dos comandos da linguagem ser˜oa
         descritos por meio de um sistema de transi¸˜es;
                                                   co
       • Existem dois tipos de configura¸oes:
                                       c˜
          S, s significando que o comando S ser´ executado a
                                              a
             partir do estado s;
         s representando um estado terminal (ou final).
8      ˆ
    SEMANTICA OPERACIONAL                                                  47




     8.1      Semˆntica Natural
                 a

            [assns ]            x:=a, s → s[x → A[[a]]s]
           [skipns ]                    skip, s → s
                                      S1 ,s →s , S2 ,s →s
           [compns ]                       S1 ;S2 ,s →s
                                  S1 ,s →s
             [if tt ]
                 ns      if b then S1 else S2 ,s →s
                                                        se B[[b]]s = tt
                                  S2 ,s →s
             [if ff ]
                 ns      if b then S1 else S2 ,s →s
                                                        se B[[b]]s = ff
                        S,s →s , while b do S,s →s
           [whilett ]
                 ns          while b do S,s →s
                                                         se B[[b]]s = tt
           [whileff ]
                 ns      while b do S, s → s se B[[b]]s = ff
8      ˆ
    SEMANTICA OPERACIONAL                                     48




     esquema de axioma ou axioma como em [assns ];
     regra como em [compns ];
     ´rvore de deriva¸˜o ´ a aplica¸ao dos axiomas e regras
     a                ca e         c˜
        para deduzir uma transi¸˜o S, s → s .
                               ca
     Observa¸˜o: x ´ uma meta-vari´vel.
            ca     e              a
8      ˆ
    SEMANTICA OPERACIONAL                                        49




     ex: (´rvore de deriva¸˜o)
          a               ca

         (z:=x; x:=y); y:=z         s0 = [x → 5, y → 7, z → 0]


             z:=x,s0 →s1      x:=y,s1 →s2
                   z:=x;x:=y,s0 →s2
                                            y:=z, s2 → s3
                     (z:=x; x:=y); y:=z, s0 → s3

     Observa¸˜o: s1 = s0 [z → 5], s2 = s1 [x → 7] e
              ca
     s3 = s2 [y → 5].
8      ˆ
    SEMANTICA OPERACIONAL                      50




     Como construir uma ´rvore de deriva¸˜o?
                        a               ca
     Resposta: da raiz para as folhas.
8      ˆ
    SEMANTICA OPERACIONAL                             51




     ex: y:=1; while ¬(x = 1) do (y:=y∗x; x:=x−1) e
     s = [x → 3, y → 0]
8      ˆ
    SEMANTICA OPERACIONAL                                 52




     Raiz:
      y:=1; while ¬(x = 1) do (y:=y∗x; x:=x−1), s → s61


                     s61 = s[y → 6][x → 1]
8      ˆ
    SEMANTICA OPERACIONAL                                  53


     ´rvore T :
     a


                  y:=1, s → s13            T1
       y:=1; while ¬(x = 1) do (y:=y∗x; x:=x−1), s → s61


                           s13 = s[y → 1]

     ´rvore T1 :
     a


                        T2            T3
         while ¬(x = 1) do (y:=y∗x; x:=x − 1), s13 → s61

     Pois B[[¬(x = 1)]]s13 = tt
8      ˆ
    SEMANTICA OPERACIONAL                                  54




     ´rvore T2 :
     a


          y:=y∗x, s13 → s33            x:=x−1, s33 → s32
                    y:=y∗x; x:=x − 1, s13 → s32


              s33 = s[y → 3]   s32 = s[y → 3][x → 2]
8      ˆ
    SEMANTICA OPERACIONAL                                   55




     ´rvore T3 :
     a


              y:=y∗x,s32 →s62        x:=x−1,s62 →s61
                      y:=y∗x;x:=x−1,s32 →s61
                                                       T4
          while ¬(x = 1) do (y:=y∗x; x:=x−1), s32 → s61


                         s62 = s[y → 6][x → 2]
8      ˆ
    SEMANTICA OPERACIONAL                                56




     ´rvore T4 (folha):
     a



         while ¬(x = 1) do (y:=y∗x; x:=x−1), s61 → s61

     Pois B[[¬(x = 1)]]s61 = ff
8      ˆ
    SEMANTICA OPERACIONAL                                        57




     Exerc´
          ıcio: Construa a ´rvore de deriva¸˜o para o seguinte
                           a               ca
     programa:

            z:=0; while y ≤ x do (z:=z+1; x:=x−y)

     com s = [x → 17, y → 5].
8      ˆ
    SEMANTICA OPERACIONAL                                       58




     A execu¸ao de um comando S no estado s:
            c˜
       • termina se e somente se existe um estado s tal que
          S, s → s ;
       • entra em loop se e somente se n˜o existe um estado s
                                        a
         tal que S, s → s .
8      ˆ
    SEMANTICA OPERACIONAL                             59




     8.1.1   Propriedades da Semˆntica
                                a

     S1 e S2 s˜o semanticamente equivalentes se
              a

              S1 , s → s se e somente se S2 , s → s

     para todos os estados s e s .
8      ˆ
    SEMANTICA OPERACIONAL                                     60


     Provar que while b do S ´ semanticamente equivalente a
                              e
     if b then (S; while b do S) else skip.
     Prova: (⇒) Se while b do S, s → s ent˜o   a
      if b then (S; while b do S) else skip, s → s


                          while b do S, s → s

     Poss´
         ıveis ´rvores:
               a

                            T1           T2
                          while b do S, s → s
     Onde T1 ´ a ´rvore com raiz S, s → s e T2 ´ a ´rvore
             e a                               e a
     com raiz while b do S, s → s e B[[b]]s = tt.
8      ˆ
    SEMANTICA OPERACIONAL                                  61




                         S1 , s → s           S2 , s → s
          [compns ]
                                 S1 ; S2 , s → s

     Usando T1 e T2 como premissas da regra [compns ]:

                           T1        T2
                      S; while b do S, s → s
8      ˆ
    SEMANTICA OPERACIONAL                                          62




                           S1 , s → s
      [if tt ]
          ns                                     Se B[[b]]s = tt
                  if b then S1 else S2 , s → s

     Obtemos:


                             T1            T2
                           S;while b do S,s →s
             if b then (S; while b do S) else skip, s → s
8      ˆ
    SEMANTICA OPERACIONAL                                63




     Falta provar o caso B[[b]]s = ff . Neste caso, T ´
                                                     e
     simplesmente:

                         while b do S, s    →s

     Usando [skipns ]:
                             skip, s   →s
8      ˆ
    SEMANTICA OPERACIONAL                                         64




     Usando [if ff ]:
                ns



                           S2 , s → s
      [if ff ]
          ns                                     Se B[[b]]s = ff
                  if b then S1 else S2 , s → s


                           skip, s → s
           if b then (S; while b do S) else skip, s   →s
8      ˆ
    SEMANTICA OPERACIONAL                                  65




     (⇐) Se if b then (S; while b do S) else skip, s → s
     ent˜o while b do S, s → s
        a
     Usando [if tt ]:
                ns

                      S; while b do S, s → s
           if b then (S; while b do S) else skip, s → s
     e B[[b]]s = tt
8      ˆ
    SEMANTICA OPERACIONAL                                 66




     Usando [compns ]:
                    S,s →s           while b do S,s →s
                             S;while b do S,s →s
           if b then (S; while b do S) else skip, s → s

     Usando [whilett ]:
                  ns

              S, s → s        while b do S, s → s
                      while b do S, s → s
8      ˆ
    SEMANTICA OPERACIONAL                                 67




     No caso B[[b]]s = ff :
                           skip, s → s
           if b then (S; while b do S) else skip, s → s
     es=s .
     Usando [whileff ]:
                  ns

                         while b do S, s   →s

     Isto completa a prova.
8      ˆ
    SEMANTICA OPERACIONAL                                        68




     Exerc´
          ıcio: Prove que S1 ; (S2 ; S3 ) e (S1 ; S2 ); S3 s˜o
                                                            a
     semanticamente equivalentes.
     Exerc´
          ıcio: Mostre que S1 ; S2 , no geral, n˜o ´
                                                a e
     semanticamente equivalente a S2 ; S1 .
8      ˆ
    SEMANTICA OPERACIONAL                                       69




     Uma semˆntica ´ determin´stica se, para todos S, s, s e
            a      e         ı
     s :
              S, s → s e S, s → s implica s = s .

     Isto significa que para todo comando S e estado inicial s
     n´s podemos determinar um unico estado final s se a
      o                           ´
     execu¸ao de S termina.
           c˜
8      ˆ
    SEMANTICA OPERACIONAL                              70




     Teorema 2 A semˆntica natural ´ determin´
                    a              e         ıstica.
8      ˆ
    SEMANTICA OPERACIONAL                                   71


     8.1.2   Fun¸˜o Semˆntica
                ca     a

                    Sns : Smt → (State → State)
     Observa¸˜o: usa-se → para fun¸oes parciais. Ou seja:
            ca                    c˜

                       Sns [[S]] ∈ State → State

     dado por:
                                
                                   s    Se S, s → s
                 Sns [[S]]s =
                                 undef caso contr´rio
                                                  a

     Observa¸˜o: Sns [[while true do skip]]s = undef para
             ca
     todo s (fun¸˜o parcial).
                ca
8      ˆ
    SEMANTICA OPERACIONAL                                     72


     8.2     Semˆntica Operacional Estruturada
                a
         ˆ
       • Enfase nos passos individuais da computa¸˜o;
                                                 ca
       • Rela¸˜o de transi¸˜o: S, s ⇒ γ (a transi¸ao
             ca            ca                    c˜
         expressa o primeiro passo da computa¸ao), com dois
                                             c˜
         poss´
             ıveis resultados:
           – γ = S , s significando que a execu¸˜o de S n˜o
                                              ca        a
             est´ completa e S , s ´ uma configura¸˜o
                a                  e              ca
             intermedi´ria;
                      a
           – γ = s significando que a execu¸ao de S terminou
                                          c˜
             e o estado final ´ s ;
                             e
       • Se diz que S, s emperrou se n˜o existe γ tal que
                                      a
          S, s ⇒ γ.
8      ˆ
    SEMANTICA OPERACIONAL                                      73



       [assSOS ]            x:=a, s ⇒ s[x → A[[a]]s]
       [skipSOS ]                 skip, s ⇒ s
                                   S1 ,s ⇒ S1 ,s
      [comp1 ]
           SOS                  S1 ;S2 ,s ⇒ S1 ;S2 ,s
                                       S1 ,s ⇒s
      [comp2 ]
           SOS                    S1 ;S2 ,s ⇒ S2 ,s

        [if tt ]
            SOS        if b then S1 else S2 , s ⇒ S1 , s
                                 Se B[[b]]s = tt
        [if ff ]
            SOS        if b then S1 else S2 , s ⇒ S2 , s
                                 Se B[[b]]s = ff
      [whileSOS ]             while b do S, s ⇒
                    if b then (S; while b do S) else skip, s
8      ˆ
    SEMANTICA OPERACIONAL                                     74


     Uma seq¨ˆncia de deriva¸˜o de um comando S iniciando
             ue             ca
     no estado s ´:
                 e
       • uma seq¨ˆncia finita
                ue

                            γ0 , γ 1 , γ 2 , . . . , γ k

         de configura¸oes satisfazendo γ0 = S, s , γi ⇒ γi+1
                     c˜
         para 0 ≤ i  k, e k ≥ 0, e ou γk ´ uma configura¸˜o
                                          e             ca
         terminal ou ´ uma configura¸˜o emperrada; ou
                     e                ca
       • uma seq¨ˆncia infinita
                ue

                               γ0 , γ 1 , γ 2 , . . .

         de configura¸oes satisfazendo γ0 = S, s e γi ⇒ γi+1
                     c˜
         para i ≥ 0.
8      ˆ
    SEMANTICA OPERACIONAL                                75




     Nota¸ao: Usamos γ0 ⇒i γi para indicar i passos na
          c˜
     seq¨ˆncia. Usamos γ0 ⇒∗ γi para indicar um n´mero
        ue                                        u
     finito de passos.
8      ˆ
    SEMANTICA OPERACIONAL                                       76




     ex: (z:=x; x:=y); y:=z e s0 = [x → 5, y → 7, z → 0].
     Seq¨ˆncia de deriva¸ao:
         ue              c˜

      (z:=x; x:=y); y:=z, s0   ⇒   x:=y; y:=z, s0 [z → 5]
                               ⇒   y:=z, (s0 [z → 5])[x → 7]
                               ⇒ ((s0 [z → 5])[x → 7])[y → 5]
8      ˆ
    SEMANTICA OPERACIONAL                                  77




     Cada passo da deriva¸˜o corresponde a uma ´rvore de
                         ca                       a
     deriva¸˜o. Assim, para o primeiro passo ter´
           ca                                   ıamos:


                           z:=x,s0 ⇒s0 [z→5]
                     z:=x;x:=y,s0 ⇒ x:=y,s0 [z→5]
         (z:=x; x:=y); y:=z, s0 ⇒ x:=y; y:=z, s0 [z → 5]
8      ˆ
    SEMANTICA OPERACIONAL                                   78




     ex: Seja s x = 3 e
     y:=1; while ¬(x = 1) do (y:=y∗x; x:=x−1). O primeiro
     passo ´:
           e



         y:=1; while ¬(x = 1) do (y:=y∗x; x:=x−1), s ⇒

          while ¬(x = 1) do (y:=y∗x; x:=x−1), s[y → 1]
8      ˆ
    SEMANTICA OPERACIONAL                                79




     ´
     Arvore:
                        y:=1, s ⇒ s[y → 1]
         y:=1; while ¬(x = 1) do (y:=y∗x; x:=x−1), s ⇒
          while ¬(x = 1) do (y:=y∗x; x:=x−1), s[y → 1]

     Observa¸˜o: usa-se [assSOS ] e [comp2 ].
            ca                           SOS
8      ˆ
    SEMANTICA OPERACIONAL                                  80




     Reescrevendo o la¸o como um condicional:
                      c

           if ¬(x = 1) then ((y:=y∗x; x:=x−1); while

       ¬(x = 1) do (y:=y∗x; x:=x−1)) else skip, s[y → 1]
8      ˆ
    SEMANTICA OPERACIONAL                               81




     Segundo [if tt ], o passo seguinte resultar´ em:
                 SOS                            a

                         (y:=y∗x; x:=x−1);

         while ¬(x = 1) do (y:=y∗x; x:=x−1), s[y → 1]
8      ˆ
    SEMANTICA OPERACIONAL                                     82




     Usando-se [assSOS ], [comp2 ] e [comp1 ], obtem-se a
                               SOS        SOS
     transi¸ao:
           c˜

                         (y:=y∗x; x:=x−1);
         while ¬(x = 1) do (y:=y∗x; x:=x−1), s[y → 1] ⇒
       x:=x−1; while ¬(x = 1) do (y:=y∗x; x:=x−1), s[y → 3]
8      ˆ
    SEMANTICA OPERACIONAL                                83




     ´
     Arvore:
                         y:=y∗x,s[y→1] ⇒s[y→3]
                 y:=y∗x;x:=x−1,s[y→1] ⇒ x:=x−1,s[y→3]

                        (y:=y∗x; x:=x−1);
        while ¬(x = 1) do (y:=y∗x; x:=x−1), s[y → 1] ⇒
                              x:=x−1;
         while ¬(x = 1) do (y:=y∗x; x:=x−1), s[y → 3]
8      ˆ
    SEMANTICA OPERACIONAL                                      84




     Usando [assSOS ] e [comp2 ] obtemos a pr´xima
                             SOS             o
     configura¸ao:
             c˜

      while ¬(x = 1) do (y:=y∗x; x:=x−1), s[y → 3][x → 2]

     Continuando, chegaremos ao estado final s[y → 6][x → 1].
8      ˆ
    SEMANTICA OPERACIONAL                               85




     Exerc´ıcio: Seja s = [x → 17, y → 5]. Construa a
     seq¨ˆncia de deriva¸ao do comando:
        ue               c˜

             z:=0; while y ≤ x do (z:=z+1; x:=x−y)
8      ˆ
    SEMANTICA OPERACIONAL                                     86


     Importante observar que a linguagem exemplo While n˜o
                                                        a
     possui configura¸˜es emperradas.
                    co
     A execu¸ao de um comando S no estado s:
            c˜
       • termina se e somente se existe uma seq¨ˆncia de
                                               ue
         deriva¸ao finita come¸ando com S, s ;
               c˜            c
       • entra em loop se e somente se existe uma seq¨ˆncia
                                                     ue
         de deriva¸˜o infinita come¸ando com S, s .
                  ca              c
     Dizemos que s execu¸ao de S em s termina com sucesso
                         c˜
     se S, s ⇒∗ s , para algum estado s . Na linguagem
     exemplo While a execu¸ao termina com sucesso se e
                            c˜
     somente se termina pois n˜o existem configura¸˜es
                               a                  co
     emperradas.
8      ˆ
    SEMANTICA OPERACIONAL                                      87



     8.2.1   Propriedades da Semˆntica
                                a

     Lema 1 Se S1 ; S2 , s ⇒k s , ent˜o existe um estado s e
                                        a
     n´meros naturais k1 e k2 tal que S1 , s ⇒k1 s e
      u
      S2 , s ⇒k2 s , onde k = k1 + k2 .
     Prova: (por indu¸˜o sobre o tamanho da seq¨ˆncia de
                     ca                        ue
     deriva¸˜o)
           ca
     Base: k = 0 (por vacuidade)
     Passo: Assumimos como hip´tese que o enunciado vale
                                  o
     para todo k ≤ k0 . Assumimos S1 ; S2 , s ⇒k0 +1 s ou
      S1 ; S2 , s ⇒ γ ⇒k0 s para alguma configura¸˜o γ.
                                                  ca
8      ˆ
    SEMANTICA OPERACIONAL                                       88


     O primeiro passo pode ser resultado de [comp1 ] ou
                                                 SOS
     [comp2 ]:
          SOS

      1. [comp1 ] e γ = S1 ; S2 , s , ou seja
              SOS

                         S1 ; S2 , s ⇒ S1 ; S2 , s

         Logo, S1 , s ⇒ S1 , s e S1 ; S2 , s ⇒k0 s .
         Esta segunda seq¨ˆncia satisfaz a hip´tese indutiva.
                         ue                   o
         Assim, existe um estado s0 e n´meros k1 e k2 tal que
                                        u

                    S1 , s ⇒k1 s0 e S2 , s0 ⇒k2 s

         onde k1 + k2 = k0 . Logo, S1 , s ⇒k1 +1 s0 e
          S2 , s0 ⇒k2 s , e como (k1 + 1) + k2 = k0 + 1, est´
                                                            a
         provado o resultado;
8      ˆ
    SEMANTICA OPERACIONAL                                     89




      2. [comp2 ] e γ = s . Assim, S1 , s ⇒ s e
                SOS
          S2 , s ⇒k0 s . O resultado fica provado fazendo-se
         k1 = 1 e k2 = k0 .
8      ˆ
    SEMANTICA OPERACIONAL                                      90




     Exerc´ ıcio: Prove que se S1 , s ⇒k s ent˜o a
      S1 ; S2 , s ⇒k S2 , s , isto ´, a execu¸˜o de S1 n˜o ´
                                   e         ca         a e
     influenciada pelo comando que o segue.
8      ˆ
    SEMANTICA OPERACIONAL                              91




     Teorema 3 A semˆntica operacional estruturada ´
                     a                             e
     determin´
             ıstica.
8      ˆ
    SEMANTICA OPERACIONAL                                92




     8.2.2   Fun¸˜o Semˆntica
                ca     a

                 SSOS : Smt → (State → State) ,
     dado por:
                              
                                 s     Se S, s ⇒∗ s
              SSOS [[S]]s =
                               undef   caso contr´rio
                                                  a
8      ˆ
    SEMANTICA OPERACIONAL                                         93



     8.3    Um Resultado de Equivalˆncia
                                   e

     Teorema 4 Para todo comando S da linguagem exemplo
     While n´s temos Sns [[S]] = SSOS [[S]].
            o
     Este teorema expressa duas propriedades:
      1. Se a execu¸˜o de S, come¸ando em algum estado,
                   ca              c
         termina em uma semˆntica, ent˜o ela tamb´m
                              a          a           e
         termina na outra, e os estados resultantes s˜o iguais;
                                                     a
      2. Se a execu¸˜o de S, para algum estado, entra em
                   ca
         loop em uma semˆntica ent˜o tamb´m entra em loop
                          a         a      e
         na outra.
9      ˆ
    SEMANTICA DENOTACIONAL                             94




     9    Semˆntica Denotacional
             a
     Semˆntica Operacional Como ocorre a execu¸˜o do
         a                                    ca
        comando;
     Semˆntica Denotacional O efeito da execu¸ao do
         a                                   c˜
        comando.
9      ˆ
    SEMANTICA DENOTACIONAL                                    95




      • Na abordagem denotacional cada constru¸ao sint´tica
                                              c˜      a
        ´ mapeada, por uma fun¸˜o semˆntica, para um
        e                      ca     a
        objeto matem´tico (de um modo geral uma fun¸ao);
                    a                                c˜
      • Exemplos de fun¸oes semˆnticas denotacionais: A
                        c˜      a
        (mapeia express˜es aritm´ticas para fun¸oes em
                       o        e              c˜
        State → Z) e B (mapeia express˜es booleanas para
                                        o
        fun¸˜es em State → T);
           co
9      ˆ
    SEMANTICA DENOTACIONAL                                   96




      • Fun¸oes Sns e SSOS s˜o exemplos de fun¸˜es
            c˜              a                  co
        semˆnticas que mapeiam comandos em fun¸oes em
            a                                     c˜
        State → State, no entanto, elas n˜o s˜o exemplos
                                          a a
        de fun¸oes denotacionais porque elas n˜o s˜o
               c˜                             a a
        definidas de forma composicional ;
      • Na semˆntica denotacional, estruturas de la¸o de
                a                                  c
        repeti¸˜o s˜o interpretadas usando-se pontos fixos:
              ca a
         – pontos fixos s˜o ra´ de uma equa¸˜o funcional ;
                        a    ızes         ca
         – um funcional ´ uma fun¸˜o que mapeia uma fun¸ao
                        e        ca                    c˜
           em outra fun¸˜o.
                       ca
9      ˆ
    SEMANTICA DENOTACIONAL                                    97




     9.1     Composicionalidade

     Significa expressar uma propriedade de uma estrutura em
     fun¸ao da composi¸ao das propriedades de suas
        c˜             c˜
     sub-estruturas.
     ex: A[[a1 + a2 ]]s = A[[a1 ]]s+A[[a2 ]]s
9      ˆ
    SEMANTICA DENOTACIONAL                                   98


     9.2   Ponto Fixo
     Um funcional mapeia uma fun¸˜o em outra fun¸ao.
                                ca              c˜
     Seja F um funcional, ent˜o:
                             a
                     F g1 = g2
                     F g0 = g0 (ponto fixo)
                    F k g0 = g0

     ex: F g = se x = 0 ent˜o 1 caso contr´rio x∗g(x − 1),
                              a              a
     e o ponto fixo de F ´ a fun¸˜o fatorial. Ou seja,
                          e     ca
     F g0 = g0 e g0 ´ a fun¸ao fatorial.
                    e       c˜
     Observa¸˜o: usamos uma linguagem de programa¸˜o
             ca                                  ca
     funcional hipot´tica neste exemplo.
                    e
9      ˆ
    SEMANTICA DENOTACIONAL                                      99




     Seja g1 (x) = x2 . Ent˜o:
                           a

     F g1 = se x = 0 ent˜o 1 caso contr´rio x ∗ (x − 1)2 = g2
                        a              a

     e g1 = g2 .
     Seja g0 (x) = x!. Ent˜o:
                          a

     F g0 = se x = 0 ent˜o 1 caso contr´rio x ∗ ((x − 1)!) =
                        a              a

           se x = 0 ent˜o 1 caso contr´rio x! = x! = g0
                       a              a
9      ˆ
    SEMANTICA DENOTACIONAL                                                    100




     9.3     Defini¸˜o
                  ca

                      Sds [[x:=a]]s = s[x → A[[a]]s]
                        Sds [[skip]] = id
                      Sds [[S1 ; S2 ]] = Sds [[S2 ]] ◦ Sds [[S1 ]]
     Sds [[if b then S1 else S2 ]] = cond(B[[b]], Sds [[S1 ]], Sds [[S2 ]])
             Sds [[while b do S]] = FIX F

     Onde F g = cond(B[[b]], g ◦ Sds [[S]], id).
9      ˆ
    SEMANTICA DENOTACIONAL                             101




     Explica¸ao:
            c˜


                     Sds [[x:=a]]s = s[x → A[[a]]s]

     Observa¸˜o: corresponde a [assns ] e [assSOS ].
            ca


                            Sds [[skip]] = id

     Observa¸˜o: id ´ a fun¸˜o identidade.
            ca      e      ca
9      ˆ
    SEMANTICA DENOTACIONAL                                       102




                  Sds [[S1 ; S2 ]] = Sds [[S2 ]] ◦ Sds [[S1 ]]

     Observa¸˜o: isto significa que o efeito da execu¸ao de
               ca                                    c˜
     S1 ; S2 ´ a composi¸ao funcional do efeito da execu¸ao de
             e          c˜                              c˜
     S1 com o efeito da execu¸˜o de S2 .
                              ca
9      ˆ
    SEMANTICA DENOTACIONAL                                                    103




     Sds [[S1 ; S2 ]]s = (Sds [[S2 ]] ◦ Sds [[S1 ]])s =
                         
                          s
                                               se existe s tal que
                         
                         
                         
                         
                         
                                       Sds [[S1 ]]s = s e Sds [[S2 ]]s = s
                         
                         
                         
                          undef              se Sds [[S1 ]]s = undef ou
                       =
                         
                                               se existe s tal que
                         
                         
                         
                         
                         
                                                   Sds [[S1 ]]s = s e
                         
                         
                         
                                                Sds [[S2 ]]s = undef
9      ˆ
    SEMANTICA DENOTACIONAL                                                     104




      Sds [[if b then S1 else S2 ]] = cond(B[[b]], Sds [[S1 ]], Sds [[S2 ]])

     Observa¸˜o: a fun¸˜o auxiliar cond tem funcionalidade
            ca        ca

           cond : (State → T) × (State → State) ×
                (State → State) → (State → State)

     e ´ definida por:
       e
                                     
                                      g s se p s = tt
                                        1
                cond(p, g1 , g2 )s =
                                      g2 s se p s = ff
9      ˆ
    SEMANTICA DENOTACIONAL                                      105




                  Sds [[if b then S1 else S2 ]]s =

        = cond(B[[b]], Sds [[S1 ]], Sds [[S2 ]])s
          
           s
                       se B[[b]]s = tt e Sds [[S1 ]]s = s ou
          
          
          
                           se B[[b]]s = ff e Sds [[S2 ]]s = s
        =
           undef se B[[b]]s = tt e Sds [[S1 ]]s = undef ou
          
          
          
          
          
                        se B[[b]]s = ff e Sds [[S2 ]]s = undef
9      ˆ
    SEMANTICA DENOTACIONAL                                        106




                    Sds [[while b do S]] = FIX F

     Observe que:

     while b do S = if b then (S; while b do S) else skip

     e aplicando a defini¸ao de Sds ao lado direito resulta em:
                        c˜

                        Sds [[while b do S]] =

           = cond(B[[b]], Sds [[while b do S]] ◦ Sds [[S]], id)
9      ˆ
    SEMANTICA DENOTACIONAL                                       107



      • N˜o podemos usar esta ultima express˜o, pois ela
         a                     ´            a
        n˜o est´ definida de forma composicional ;
         a     a
      • No entanto, isto expressa que Sds [[while b do S]] ´ o
                                                           e
        ponto fixo do funcional definido por:

                    F g = cond(B[[b]], g ◦ Sds [[S]], id)

         ou seja,

              Sds [[while b do S]] = F (Sds [[while b do S]])

      • Agora, esta nova defini¸ao respeita a
                              c˜
        composicionalidade.
9      ˆ
    SEMANTICA DENOTACIONAL                            108




                   Sds [[while b do S]] = FIX F
     e a funcionalidade da fun¸˜o auxiliar FIX ´
                              ca               e

        FIX : ((State → State) → (State → State)) →

                        (State → State)
9      ˆ
    SEMANTICA DENOTACIONAL                     109




     ex: Seja o seguinte comando:

                    while ¬(x = 0) do skip

     O funcional correspondente ´:
                                e
                            
                             g s se s x = 0
                   (F g)s =
                             s se s x = 0
9      ˆ
    SEMANTICA DENOTACIONAL                                  110


     Determina¸ao do funcional:
              c˜

            Sds [[while ¬(x = 0) do skip]]s = (FIX F )s

      (F g)s = cond(B[[¬(x = 0)]], g ◦ Sds [[skip]], id)s
               
                g ◦ S [[skip]]s se B[[¬(x = 0)]]s = tt
                       ds
             =
                      id s        se B[[¬(x = 0)]]s = ff
               
                g s se s x = 0
             =
                s se s x = 0

     Observa¸˜o: g ◦ Sds [[skip]]s = g ◦ id s = g s, pois
              ca
     g ◦ id = g.
9      ˆ
    SEMANTICA DENOTACIONAL                     111


     A fun¸ao g1 definida como:
          c˜
                          
                           undef se s x = 0
                   g1 s =
                           s     se s x = 0

     ´ ponto fixo de F porque
     e
                           
                            g s se s   x=0
                               1
               (F g1 )s =
                            s se s     x=0
                           
                            undef se   sx=0
                        =
                            s     se   sx=0
                        = g1 s
9      ˆ
    SEMANTICA DENOTACIONAL                          112




     J´, por sua vez, g2 , definida como:
      a

                     g2 s = undef para todo s

     n˜o ´ ponto fixo de F porque se s x = 0 ent˜o
      a e                                      a
     (F g2 )s = s , enquanto que g2 s = undef.
9      ˆ
    SEMANTICA DENOTACIONAL                                 113



      • Existem funcionais com mais de um ponto fixo. Um
        exemplo ´ F , j´ que qualquer fun¸˜o g de
                e      a                 ca
        State → State satisfazendo g s = s se s x = 0 ´
                                                      e
        ponto fixo de F ;
      • Existem tamb´m funcionais que n˜o tem ponto fixo.
                     e                  a
        Considere F1 definido como:
                          
                           g      se g = g2
                              1
                   F1 g =
                           g2 caso contr´rio
                                           a

         Se g1 = g2 ent˜o n˜o existe fun¸ao g0 tal que
                       a a              c˜
         F1 g0 = g0 .
9      ˆ
    SEMANTICA DENOTACIONAL                             114




     Exerc´
          ıcio: Determine o funcional F associado ao
     comando:
                  while ¬(x = 0) do x:=x − 1
9      ˆ
    SEMANTICA DENOTACIONAL                                     115




     Solu¸ao:
         c˜

         Sds [[while ¬(x = 0) do x:=x − 1]]s = (FIX F )s

     (F g)s = cond(B[[¬(x = 0)]], g ◦ Sds [[x:=x − 1]], id)s
              
               g ◦ S [[x:=x − 1]]s se B[[¬(x = 0)]]s = tt
                      ds
            =
                        id s          se B[[¬(x = 0)]]s = ff
              
               g s[x → s x − 1] se s x = 0
            =
                         s          se s x = 0
9      ˆ
    SEMANTICA DENOTACIONAL                                 116


     Exerc´
          ıcio: Considere as seguintes fun¸˜es parciais:
                                          co
      1. g1 s = undef para todo s
      2.                   
                            s[x → 0] se s x ≥ 0
                    g2 s =
                            undef se s x  0

      3.                   
                            s[x → 0] se s x ≥ 0
                    g3 s =
                                s    se s x  0
      4. g4 s = s[x → 0] para todo s
      5. g5 s = s para todo s
     Determine quais s˜o pontos fixos de F .
                      a
9      ˆ
    SEMANTICA DENOTACIONAL                                    117




     Exerc´
          ıcio: Considere o seguinte fragmento de programa:

             while ¬(x = 1) do (y:=y∗x; x:=x − 1)

     Determine o funcional F associado ao programa.
     Determine tamb´m ao menos dois pontos fixos de F .
                    e
9      ˆ
    SEMANTICA DENOTACIONAL                                      118




     9.4   Requisitos sobre o Ponto Fixo

     Perante o problema de haver mais de um ponto fixo, ou
     de n˜o existir nenhum, se faz necess´rio:
         a                               a
      • Definir os requisitos de um ponto fixo e mostrar que
        ao menos um ponto fixo preenche estes requisitos;
      • Mostrar que todos os funcionais obtidos da linguagem
        While tem um ponto fixo que satisfaz estes requisitos.
9      ˆ
    SEMANTICA DENOTACIONAL                                     119




     Seja o comando while b do S. Quanto a termina¸ao,
                                                  c˜
     existem trˆs possibilidades:
               e
      1. Ele termina;
      2. Ele entra em loop localmente, ou seja, S entra em
         loop;
      3. Ele entra em loop globalmente, ou seja, a estrutura
         while entra em loop.
9      ˆ
    SEMANTICA DENOTACIONAL                                   120




      1. Caso em que o la¸o termina: Assim, existe uma
                           c
         seq¨ˆncia de estados s0 , s1 , . . . , sn tal que
            ue
                                  
                                   tt se i  n
                       B[[b]]si =
                                   ff se i = n

         e
                      Sds [[S]]si = si+1 para i  n
9      ˆ
    SEMANTICA DENOTACIONAL                                    121


         Seja g0 um ponto fixo de F . Logo, no caso i  n
         temos:
                g0 si = (F g0 )si
                       = cond(B[[b]], g0 ◦ Sds [[S]], id)si
                       = g0 (Sds [[S]]si )
                       = g0 si+1

         No caso i = n, temos:
                g0 sn = (F g0 )sn
                       = cond(B[[b]], g0 ◦ Sds [[S]], id)sn
                       = id sn
                       = sn
9      ˆ
    SEMANTICA DENOTACIONAL                                 122




         Conclui-se que todos os pontos fixos satisfazem
         g0 s0 = sn , n˜o sendo poss´ tirar daqui nenhum
                       a            ıvel
         requisito.
9      ˆ
    SEMANTICA DENOTACIONAL                                 123




      2. Caso em que o la¸o entra em loop localmente, ou
                                 c
         seja, S entra em loop: Existe uma seq¨ˆncia de
                                              ue
         estados s0 , s1 , . . . , sn tal que

                       B[[b]]si = tt para i ≤ n

         e                      
                                 s     para i  n
                                    i+1
                  Sds [[S]]si =
                                 undef para i = n
9      ˆ
    SEMANTICA DENOTACIONAL                                     124




         Seja g0 um ponto fixo do funcional F . No caso i  n
         obtemos:
                             g0 si = g0 si+1
         e no caso i = n obtemos:

                g0 sn = (F g0 )sn
                       = cond(B[[b]], g0 ◦ Sds [[S]], id)sn
                       = (g0 ◦ Sds [[S]])sn
                       = undef

         E novamente n˜o se obtem nenhum requisito.
                      a
9      ˆ
    SEMANTICA DENOTACIONAL                                           125


      3. Caso em que o la¸o entra em loop globalmente, ou
                           c
         seja, a estrutura while entra em loop: Existe um
         seq¨ˆncia infinita de estados s0 , s1 , s2 , . . . tal que
            ue

                          B[[b]]si = tt para todo i

         e
                        Sds [[S]]si = si+1 para todo i

         Seja g0 um ponto fixo de F , ent˜o
                                        a

                               g0 si = g0 si+1

         para todo i ≥ 0. E temos g0 s0 = g0 si para todo i.
         Esta ´ a situa¸ao em que podemos ter v´rios pontos
              e        c˜                        a
         fixos diferentes.
9      ˆ
    SEMANTICA DENOTACIONAL                                       126

         ex:
                     S = while ¬(x = 0) do skip
         cujo funcional ´
                        e
                              
                               g s se s x = 0
                     (F g)s =
                               s se s x = 0

         Sabemos que qualquer fun¸ao g de State → State
                                     c˜
         satisfazendo g s = s se s x = 0 ´ ponto fixo de F . No
                                         e
         entanto, nossa experiˆncia computacional nos diz que
                                 e
                                 
                                  undef se s x = 0
                                              0
                   Sds [[S]]s0 =
                                  s0     se s0 x = 0

         de forma a representar o comportamento do loop.
9      ˆ
    SEMANTICA DENOTACIONAL                                     127




         Assim, nosso ponto fixo preferencial ´
                                             e
                            
                             undef se s x = 0
                     g0 s =
                             s       se s x = 0

         A propriedade distintiva deste ponto fixo ´ que para
                                                  e
         qualquer outro ponto fixo g de F , se g0 s = s ent˜o
                                                           a
         g s = s , mas n˜o o contr´rio.
                        a          a
9      ˆ
    SEMANTICA DENOTACIONAL                                   128




         Generalizando para qualquer funcional F : O ponto
         fixo desejado deve ser alguma fun¸ao parcial
                                         c˜
         g0 : State → State tal que:
         • g0 ´ um ponto fixo de F ;
              e
         • se g ´ outro ponto fixo de F , ent˜o g0 s = s
                e                           a
           implica g s = s , para todos os s e s .
9      ˆ
    SEMANTICA DENOTACIONAL                                 129




     9.5   Teoria de Pontos Fixos
      • Desenvolver uma teoria que permita tratar com
        funcionais e pontos fixos;
      • Garantir a existˆncia do ponto fixo preferencial.
                        e
9      ˆ
    SEMANTICA DENOTACIONAL                                       130




     Seja a ordem    sobre as fun¸oes parciais State → State:
                                 c˜

                              g1   g2

     quando a fun¸˜o parcial g1 compartilha seus resultados
                   ca
     com a fun¸˜o parcial g2 , ou seja, se g1 s = s ent˜o
                ca                                     a
     g2 s = s , para todo s e s .
     g1 g2 significa que em todos os pontos em que g1 ´   e
     definido, g2 tamb´m o ´, e os seus valores s˜o iguais, mas
                      e     e                   a
     o inverso n˜o ´ exigido. g1 g2 pode ser lido como g1 ´
                a e                                         e
     menos ou igualmente definido que g2 ou g1 aproxima g2 .
9      ˆ
    SEMANTICA DENOTACIONAL               131


                             g
                                 1
             1                       a

             2                       b

             3                       c




                             g
                                 2
              1                      a

              2                      b

              3                      c
9      ˆ
    SEMANTICA DENOTACIONAL                      132




     ex:
                      g1 s = s para todo s
                       
                        s         se s x ≥ 0
                g2 s =
                        undef caso contr´rio
                                           a
                         
                            s   se s x = 0
                g3 s =
                        undef caso contr´rio
                                         a
                       
                        s       se s x ≤ 0
                g4 s =
                        undef caso contr´rio
                                         a
9      ˆ
    SEMANTICA DENOTACIONAL                             133




                              g1   g1
                         g2   g1   g2   g2
               g3   g1   g3   g2   g3   g3   g3   g4
                         g4   g1   g4   g4
                         g2   g4   g4   g2
9      ˆ
    SEMANTICA DENOTACIONAL                                   134




     Diagrama de Hasse:

                                        g1 e
                                    }        ee
                                  }}           ee
                               }}}               ee
                             }}                    e
                          g2 e                          g4
                              ee                    }
                                ee               }}}
                                  ee           }}
                                    e        }}
                                        g3
9      ˆ
    SEMANTICA DENOTACIONAL                                       135


     Exerc´
          ıcio: Sejam g1 , g2 e g3 , como a seguir definidos:
                       
                        s             se s x ´ par
                                               e
              g1 s =
                        undef caso contr´rio    a
                       
                        s           se s x ´ um primo
                                             e
              g2 s =
                        undef          caso contr´rio
                                                   a
              g3 s = s
      1. Determine a ordem entre estas fun¸˜es;
                                          co
      2. Determine uma fun¸˜o parcial g4 tal que g4
                          ca                              g1 ,
         g4 g2 e g4 g3 ;
      3. Determine uma fun¸˜o parcial g5 tal que g1 g5 ,
                          ca
         g2 g5 e g5 g3 , e g5 n˜o ´ igual a g1 , g2 nem a g3 .
                               a e
9      ˆ
    SEMANTICA DENOTACIONAL                                  136




     Uma caracteriza¸ao alternativa da ordem
                    c˜                           em
     State → State ´e

          g1   g2 se e somente se graph(g1 ) ⊆ graph(g2 )

     onde graph(f ) = { x, y ∈ X × Y |f (x) = y} e
     f :X →Y.
9      ˆ
    SEMANTICA DENOTACIONAL                                            137




     O conjunto State → State munido da ordem ´ um e
     exemplo de um conjunto parcialmente ordenado.
     Seja D um conjunto e d, d1 , d2 , d3 ∈ D. Um conjunto
     parcialmente ordenado ´ um par (D, D ), onde D ´
                           e                              e
     uma rela¸ao em D satisfazendo:
             c˜
      1. d    D   d (reflexividade);
      2. d1 D d2 e d2 D d3 implica d1          D   d3
         (transitividade);
      3. d1   D   d2 e d2   D   d1 implica d1 = d2 (anti-simetria).
9      ˆ
    SEMANTICA DENOTACIONAL                                  138




     Um elemento d ∈ D satisfazendo d d para todo d ∈ D
     ´ chamado de elemento m´nimo de D. Podemos dizer que
     e                        ı
     ele n˜o cont´m informa¸˜o.
          a      e         ca
9      ˆ
    SEMANTICA DENOTACIONAL                                  139




     Teorema 5 Se um conjunto parcialmente ordenado
     (D, D ) tem um elemento m´nimo d, ent˜o d ´ unico.
                              ı           a    e´
     Prova: Assuma que D tem dois elementos m´nimos d1 e
                                              ı
     d2 . Desde que d1 ´ elemento m´nimo, d1 d2 . Como d2
                       e           ı
     tamb´m ´ elemento m´nimo, d2 d1 . Pela propriedade
           e e              ı
     da anti-simetria de obtemos d1 = d2 .
9      ˆ
    SEMANTICA DENOTACIONAL                                    140




                                 1 aa
                            ÑÑ        aa
                          ÑÑ            aa
                       ÑÑÑ                a
                     2 aa                      3 aa
                         aa              ÑÑÑ      aa
                           aa          ÑÑ           aa
                             a       ÑÑ               a
                                 4                        5
9      ˆ
    SEMANTICA DENOTACIONAL                                 141


     ex: Seja S um conjunto n˜o vazio e defina:
                             a

                      P(S) = {K|K ⊆ S}

     chamado conjunto das partes.
     Ent˜o (P(S), ⊆) ´ um conjunto parcialmente ordenado
        a            e
     porque
      • ⊆ ´ reflexiva: K ⊆ K;
          e
      • ⊆ ´ transitiva: se K1 ⊆ K2 e K2 ⊆ K3 ent˜o
          e                                     a
        K1 ⊆ K3 ;
      • ⊆ ´ anti-sim´trica: se K1 ⊆ K2 e K2 ⊆ K1 ent˜o
          e         e                               a
        K1 = K2 .
9      ˆ
    SEMANTICA DENOTACIONAL                                             142


     No caso em que S = {a, b, c},
     P(S) = {∅, {a}, {b}, {c}, {a, b}, {a, c}, {b, c}, {a, b, c}}, e
     temos:
                                   {a, b, c}
                                  t            tt
                                tt               tt
                               t                   tt
                            ttt                      tt
                          tt                           t
                    {a, b}          {a, c}               {b, c}
                          tt                   tt
                             tt ttt              tt ttt
                                                    tt
                               tt
                              ttt t
                            tt t tt               t
                                                     t
                                                   tt ttt
                          tt                   ttt       t
                     {a} t            {b}                    {c}
                             tt                         t
                               tt                    ttt
                                 tt
                                   tt             ttt
                                     tt         tt
                                              tt
                                          ∅
     (P(S), ⊆) tem um elemento m´
                                ınimo, ∅.
9      ˆ
    SEMANTICA DENOTACIONAL                                   143




     Exerc´ıcio: Mostre que (P(S), ⊇) ´ um conjunto
                                      e
     parcialmente ordenado e determine o elemento m´ınimo.
     Desenhe o diagrama de Hasse no caso em que
     S = {a, b, c}.
9      ˆ
    SEMANTICA DENOTACIONAL                     144




     Lema 2 (State → State, ) ´ um conjunto
                                  e
     parcialmente ordenado. A fun¸˜o parcial
                                 ca
     ⊥ : State → State definida como

                    ⊥ s = undef para todo s

     ´ o elemento m´nimo de State → State.
     e             ı
9      ˆ
    SEMANTICA DENOTACIONAL                                    145


     Prova: Primeiro provamos que    ´ ordem parcial:
                                     e
     Reflexiva Trivialmente g     g, porque g s = s implica
        g s=s;
     Transitiva Assumimos g1 g2 e g2 g3 . Assumimos
        g1 s = s e de g1 g2 concluimos g2 s = s , e ent˜o
                                                       a
        g2 g3 fornece g3 s = s ;
     Anti-sim´trica Assumimos g1 g2 e g2 g1 .
              e
        Assumimos que g1 s = s . Ent˜o, g2 s = s segue de
                                      a
        g1 g2 , e neste caso ambas as fun¸˜es d˜o valores
                                          co     a
        iguais. No caso em que g1 s = undef, ´ necess´rio
                                               e      a
        que g2 s = undef, j´ que caso contr´rio, g2 s = s e
                           a               a
        de g2 g1 obteriamos g1 s = s , que ´ uma
                                             e
        contradi¸˜o.
                ca
9      ˆ
    SEMANTICA DENOTACIONAL                                146




     Finalmente, temos que provar que ⊥ ´ o elemento
                                         e
       ı                         ´ a
     m´nimo de State → State. E f´cil ver que ⊥ ´ um
                                                  e
     elemento de State → State e trivialmente ⊥ g vale
     para todos g, dado que ⊥ s = s implica g s = s por
     vacuidade.
9      ˆ
    SEMANTICA DENOTACIONAL                                      147




     Formalizando os requisitos de FIX F :
      • FIX F ´ ponto fixo de F , isto ´, F (FIX F ) = FIX F ;
              e                       e
      • FIX F ´ o menor ponto fixo de F , isto ´, se F g = g
               e                              e
        ent˜o FIX F g.
           a
9      ˆ
    SEMANTICA DENOTACIONAL                                    148




     Exerc´
          ıcio: Mostre que se F tem um menor ponto fixo g0
     ent˜o g0 ´ unico.
        a     e´
     Exerc´ıcio: Determine o menor ponto fixo dos funcionais
     associados aos programas:
      1. while ¬(x = 0) do x:=x − 1
      2. while ¬(x = 1) do (y:=y ∗ x; x:=x − 1)
9      ˆ
    SEMANTICA DENOTACIONAL                                    149


      • Seja (D, ), e assumimos um subconjunto Y ⊆ D;
      • Existe um elemento de D que resume toda a
        informa¸˜o de Y ;
                ca
      • Um elemento d ´ chamado de limite superior de Y se:
                      e

                             ∀d ∈ Y d   d

      • Um limite superior d de Y ´ um menor limite
                                   e
        superior (ou supremo) se e somente se

             d ´ limite superior de Y implica que d
               e                                      d

      • O supremo de Y tem pouca informa¸ao a mais que a
                                        c˜
        presente nos elementos de Y .
9      ˆ
    SEMANTICA DENOTACIONAL                                     150




     Exerc´ıcio: Mostre que se Y tem um supremo, ent˜o ele ´
                                                    a      e
     unico.
     ´
9      ˆ
    SEMANTICA DENOTACIONAL                                 151




     Nota¸ao: o (´nico) supremo de Y ´ denotado por
         c˜      u                   e                Y.
9      ˆ
    SEMANTICA DENOTACIONAL                                      152




     Um subconjunto Y ´ chamado de cadeia se ele ´
                         e                          e
     consistente no sentido que quaisquer dois elementos de Y
     compartilham informa¸ao um com o outro, ou seja,
                            c˜

                  ∀d1 , d2 ∈ Y d1   d2 ∨ d2   d1
9      ˆ
    SEMANTICA DENOTACIONAL                                      153




     ex: Considere o conjunto parcialmente ordenado
     (P({a, b, c}), ⊆). Ent˜o, o subconjunto
                           a

                        Y0 = {∅, {a}, {a, c}}

     ´ uma cadeia. Neste caso, {a, b, c} e {a, c} s˜o limites
     e                                             a
     superiores de Y0 e {a, c} ´ o supremo.
                               e
     contra-ex: O subconjunto {∅, {a}, {c}, {a, c}} n˜o ´ uma
                                                     a e
     cadeia. Por que?
9      ˆ
    SEMANTICA DENOTACIONAL                                      154


     ex: Seja gn : State → State definido como:
                    
                     undef
                                    se s x  n
                    
            gn s =    s[x → −1] se 0 ≤ s x e s x ≤ n
                    
                    
                    
                          s          se s x  0

     e gn   gm se n ≤ m.
     Seja Y0 = {gn |n ≥ 0}. Y0 ´ uma cadeia porque gn
                               e                        gm se
     n ≤ m. A fun¸ao parcial
                   c˜
                        
                         s[x → −1] se 0 ≤ s x
                 gs=
                               s     se s x  0

     ´ o supremo de Y0 .
     e
9      ˆ
    SEMANTICA DENOTACIONAL                                     155




     Exerc´
          ıcio: Seja gn a fun¸ao parcial definida por:
                             c˜
             
              s[y → (s x)!][x → 1] se 0  s x e s x ≤ n
      gn s =
                       undef          se s x ≤ 0 ou s x  n

     Definimos Y0 = {gn |n ≥ 0}. Mostre que Y0 ´ uma cadeia.
                                                 e
     Caracterize os limites superiores de Y0 e determine o
     supremo.
9      ˆ
    SEMANTICA DENOTACIONAL                                      156




     Um conjunto parcialmente ordenado (D, ) ´ chamado
                                                 e
     de cadeia completa parcialmente ordenada (ccpo) se Y
     existe para todas as cadeias Y de D. Ele ´ um reticulado
                                              e
     completo se Y existe para todos os subconjuntos Y de
     D.
9      ˆ
    SEMANTICA DENOTACIONAL                                      157




     Exerc´
          ıcio: Mostre que (P(S), ⊆) ´ um reticulado
                                     e
     completo e um ccpo para todos os conjuntos n˜o vazios S.
                                                  a
9      ˆ
    SEMANTICA DENOTACIONAL                                                   158




     Contra-exemplo de ccpo: Seja
     Pfin (S) = {K ⊆ S|K ´ finito}. Considere (Pfin (N), ⊆).
                         e
     Ent˜o
         a

         Y = {{0}, {0, 1}, {0, 1, 2}, . . . , {0, 1, 2, . . . , n}, . . .}

     ´ cadeia. A uni˜o cont´vel dos elementos Ai da cadeia ´
     e              a      a                               e
                                  ∞
                                       Ai = N ,
                                 i=1

     por´m ele n˜o pode ser o supremo da cadeia pois n˜o
        e        a                                    a
     pertence a ela.
9      ˆ
    SEMANTICA DENOTACIONAL                                       159




     Teorema 6 Se (D, ) ´ um ccpo ent˜o existe um
                          e          a
     elemento m´nimo ⊥ dado por ⊥ = ∅.
               ı
     Prova:
      1. ∅ ´ uma cadeia pois ∀d1 , d2 ∈ ∅ d1
           e                                   d2 ∨ d2   d1
         (por vacuidade);
      2. Como (D, ) ´ uma ccpo ent˜o existe
                      e           a               ∅ pois ∅ ⊆ D
         ´ cadeia de D;
         e
      3.   ∅   d, d ∈ D, ent˜o
                            a      ∅ ´ elemento m´
                                     e           ınimo de D.
9      ˆ
    SEMANTICA DENOTACIONAL                                    160



     Lema 3 (State → State, ) ´ um ccpo. O supremo
                                e
       Y da cadeia Y de State → State ´ dado por:
                                      e

               graph(   Y)=      {graph(g)|g ∈ Y }

     isto ´, ( Y ) s = s se e somente se g s = s para algum
          e
     g ∈Y.
     Observa¸˜es:
            co
      • graph(f ) = { x, y ∈ X × Y |f (x) = y} e
        f :X →Y;
      • State → State n˜o ´ um reticulado, mas ´ um ccpo
                          a e                  e
        e suas cadeias possuem supremo.
9      ˆ
    SEMANTICA DENOTACIONAL                                   161




     Sejam (D, ) e (D , ) duas ccpo’s e considere a fun¸ao
                                                        c˜
     (total) f : D → D . f ´ monotˆnica se e somente se
                           e      o

                   d1    d2 implica f (d1 )   f (d2 )

     para todos os d1 e d2 .
9      ˆ
    SEMANTICA DENOTACIONAL                                     162




     Exerc´ıcio: Considere o ccpo (P(N), ⊆). Determine quais
     das seguintes fun¸˜es em P(N) → P(N) s˜o
                       co                     a
     monotˆnicas:
            o
      • f1 (X) = NX
      • f2 (X) = X    {27}
      • f3 (X) = X    {7, 9, 13}
      • f4 (X) = {n ∈ X|n ´ primo}
                          e
      • f5 (X) = {2∗n|n ∈ X}
9      ˆ
    SEMANTICA DENOTACIONAL                                    163




     Exerc´
          ıcio: Determine quais dos seguintes funcionais em
     (State → State) → (State → State) s˜o monotˆnicos:
                                             a        o
      • F0 g = g
               
                g     se g = g2
                  1
      • F1 g =                     onde g1 = g2
                g2 caso contr´rio
                               a
                  
                   g s se s x = 0
      • (F g) s =
                   s se s x = 0
9      ˆ
    SEMANTICA DENOTACIONAL                                    164




     Teorema 7 Sejam (D, ), (D , ) e (D , ) trˆs e
     ccpo’s e sejam f : D → D e f : D → D duas fun¸˜es
                                                   co
     monotˆnicas. Ent˜o, f ◦ f : D → D ´ uma fun¸˜o
            o          a               e        ca
     monotˆnica.
            o
     Prova: Assumimos que d1 d2 . A monotonicidade de f
     resulta em f (d1 )    f (d2 ). A monotonicidade de f
     resulta em f (f (d1 ))     f (f (d2 )), como queriamos
     provar.
     Observa¸˜o: Isto significa que a opera¸˜o de composi¸ao
             ca                           ca            c˜
     de fun¸oes preserva a monotonicidade.
           c˜
9      ˆ
    SEMANTICA DENOTACIONAL                                  165




     Lema 4 Sejam (D, ) e (D , ) duas ccpo’s e seja
     f : D → D uma fun¸˜o monotˆnica. Se Y ´ cadeia de D
                          ca       o            e
     ent˜o {f (d)|d ∈ Y } ´ uma cadeia de D . Al´m disto,
         a                e                     e

                       {f (d)|d ∈ Y }   f( Y )

     Observa¸˜o: Isto significa que:
            ca
      • a imagem de uma cadeia sob uma fun¸ao monotˆnica
                                          c˜       o
        tamb´m ´ uma cadeia;
             e e
      • o supremo desta segunda cadeia aproxima a imagem
        do supremo da primeira.
9      ˆ
    SEMANTICA DENOTACIONAL                                      166




     Prova: Se Y = ∅ o enunciado ´ trivialmente v´lido porque
                                 e               a

                      {f (d)|d ∈ ∅}     f (⊥)
                                 ∅      f (⊥)
                                ⊥       f (⊥)
9      ˆ
    SEMANTICA DENOTACIONAL                                           167




     Assumimos Y = ∅. Seja A = {f (d)|d ∈ Y } e sejam
     d1 , d2 ∈ A. Ent˜o, existe d1 , d2 ∈ Y tal que d1 = f (d1 ) e
                     a
     d2 = f (d2 ). Desde que Y ´ cadeia ent˜o d1 d2 ou
                                e             a
     d2 d1 .
     Pela monotonicidade de f vale o mesmo entre d1 e d2 .
     Ou seja, A ´ cadeia de D .
                e
9      ˆ
    SEMANTICA DENOTACIONAL                                       168




     Para a segunda parte da prova, assumimos d ∈ Y . Ent˜o, a
     d     Y , e pela monotonicidade de f , f (d)   f ( Y ).
     Desde que isto vale para todos os d ∈ Y , ent˜o f ( Y ) ´
                                                  a          e
     limite superior de A.
9      ˆ
    SEMANTICA DENOTACIONAL                                           169




     Estamos interessados em fun¸oes f que preservem os
                                   c˜
     limites superiores de cadeias, ou seja, que satisfazem:

                        {f (d)|d ∈ Y } = f ( Y )               (1)

     Uma fun¸ao f : D → D definida sobre duas ccpo’s
              c˜
     (D, ) e (D , ) ´ cont´nua se ela ´ monotˆnica e (1)
                      e     ı           e      o
     vale para todas as cadeias n˜o vazias Y .
                                 a
     Observa¸˜o: Isto significa que obtemos a mesma
             ca
     informa¸ao independente de determinarmos o supremo
            c˜
     antes ou depois de aplicar f .
9      ˆ
    SEMANTICA DENOTACIONAL                                     170




     Se vale tamb´m ⊥ = f (⊥) ent˜o dizemos que f ´ estrita.
                 e               a                e
9      ˆ
    SEMANTICA DENOTACIONAL                                 171




     Lema 5 Sejam (D, ),(D , ) e (D , )trˆs ccpo’s e
                                             e
     sejam f : D → D e f : D → D duas fun¸˜es cont´
                                           co     ınuas.
     Ent˜o, f ◦ f : D → D ´ uma fun¸˜o cont´
         a                 e       ca      ınua.
     Prova: Do Teorema 7 sabemos que f ◦ f ´ monotˆnica.
                                           e      o
     Da continuidade de f obtemos:

                      {f (d)|d ∈ Y } = f ( Y )
9      ˆ
    SEMANTICA DENOTACIONAL                                     172




     Desde que {f (d)|d ∈ Y } ´ uma cadeia n˜o vazia de D e
                              e             a
     usando a continuidade de f obtemos:

           {f (d )|d ∈ {f (d)|d ∈ Y }} = f ( {f (d)|d ∈ Y })

     que ´ equivalente a
         e

                    {f (f (d))|d ∈ Y } = f (f ( Y ))

     provando o resultado.
9      ˆ
    SEMANTICA DENOTACIONAL                                      173




     Exerc´
          ıcio: Prove que se f e f s˜o estritas, f ◦ f tamb´m
                                    a                      e
     o ´.
       e
9      ˆ
    SEMANTICA DENOTACIONAL                                     174




     Exerc´
          ıcio: Mostre que o funcional associado ao programa

                   while ¬(x = 0) do x:=x − 1

     ´ cont´
     e     ınuo.
9      ˆ
    SEMANTICA DENOTACIONAL                                  175



     Contra-exemplo de fun¸˜o cont´
                          ca      ınua: Seja
     (P(N ∪ {a}), ⊆) um ccpo. Considere a fun¸˜o
                                              ca
     f : P(N ∪ {a}) → P(N ∪ {a}) definida como:
                      
                          X        se X ´ finito
                                         e
               f X=
                       X ∪ {a} se X ´ infinito
                                        e

     f ´ monotˆnica, j´ que X1 ⊆ X2 implica f X1 ⊆ f X2 .
       e       o          a
     No entanto, n˜o ´ cont´
                     a e       ınua. Considere
     Y = {{0, 1, . . . , n}|n ≥ 0} que ´ uma cadeia, com
                                       e
      Y = N. Aplicando f obtemos:
      {f X|X ∈ Y } = Y = N e f ( Y ) = f N = N ∪ {a}.
9      ˆ
    SEMANTICA DENOTACIONAL                                176




     Teorema 8 Seja f : D → D uma fun¸˜o cont´nua sobre
                                      ca     ı
     um ccpo (D, ) com elemento m´nimo ⊥. Ent˜o,
                                 ı           a

                    FIX f =      {f n (⊥)|n ≥ 0}

     define um elemento de D e este elemento ´ o menor
                                            e
     ponto fixo de f .
     Observa¸˜es:
            co
      • f 0 = id e f n+1 = f ◦ f n para n ≥ 0;
      • Esta ´ a defini¸ao de ponto fixo desejado.
             e        c˜
9      ˆ
    SEMANTICA DENOTACIONAL                                   177




     Prova:
      1. f 0 (⊥) = ⊥, e ⊥ d para todo d ∈ D. Por indu¸˜o
                                                       ca
         podemos mostrar que f n (⊥) f n (d), j´ que f ´
                                               a       e
         monotˆnica. Segue que f n (⊥) f m (⊥) para n ≤ m.
                 o
         Assim, {f n (⊥)|n ≥ 0} ´ uma cadeia de D e FIX f
                                e
         existe porque D ´ um ccpo;
                          e
9      ˆ
    SEMANTICA DENOTACIONAL                                   178




      2. Precisamos mostrar que FIX f ´ um ponto fixo, isto
                                      e
         ´, f (FIX f ) = FIX f :
         e

               f (FIX f ) = f ( {f n (⊥)|n ≥ 0})
                         =    {f (f n (⊥))|n ≥ 0}
                         =    {f n (⊥)|n ≥ 1}
                         =    ({f n (⊥)|n ≥ 1} ∪ {⊥})
                         =    {f n (⊥)|n ≥ 0}
                         = FIX f
9      ˆ
    SEMANTICA DENOTACIONAL                                    179




      3. Para mostrar que FIX f ´ o menor ponto fixo basta
                                  e
         assumir que d ´ algum outro ponto fixo. Assim,
                        e
         ⊥ d e pela monotonicidade de f obtemos
         f n (⊥) f n (d), para n ≥ 0. Como d ´ ponto fixo,
                                             e
         f n (⊥) d, e sabendo que FIX f ´ supremo da cadeia
                                         e
         {f n (⊥)|n ≥ 0}, FIX f d, o que prova o resultado.
9      ˆ
    SEMANTICA DENOTACIONAL                            180




     ex: Considere o funcional:
                             
                              g s se s x = 0
                  (F g) s =
                              s se s x = 0

     Tomamos ⊥ s = undef para todo s, que ´ o menor
                                          e
     elemento de State → State, para determinar os
     elementos de {F n (⊥)|n ≥ 0}.
9      ˆ
    SEMANTICA DENOTACIONAL                         181




                   0
              (F       ⊥) s = (id ⊥) s
                            = undef
                   1
              (F       ⊥) s = (F ⊥) s
                              
                               ⊥ s se s x = 0
                            =
                               s se s x = 0
                              
                               undef se s x = 0
                            =
                               s     se s x = 0
9      ˆ
    SEMANTICA DENOTACIONAL                              182




                 2
            (F       ⊥) s = F (F 1 ⊥) s
                            
                             (F 1 ⊥) s    se s x = 0
                          =
                                  s       se s x = 0
                            
                             undef se     sx=0
                          =
                             s       se   sx=0
9      ˆ
    SEMANTICA DENOTACIONAL                                              183




                                    n          n+1
     No caso geral, nos temos F         ⊥=F             ⊥ para n  0.
     Al´m disto,
       e
                    n                   0          1            1
            {F          ⊥|n ≥ 0} = {F       ⊥, F       ⊥} = F       ⊥
                0
     porque F       ⊥ = ⊥. Assim, o menor ponto fixo de F ´ a
                                                         e
     fun¸ao
        c˜                     
                                undef se s x = 0
                        g1 s =
                                s     se s x = 0
9      ˆ
    SEMANTICA DENOTACIONAL                              184




     Exerc´ıcio: Determine o ponto fixo dos funcionais
     associados aos seguintes comandos:
      1. while ¬(x = 0) do x:=x − 1
      2. while ¬(x = 1) do (y:=y ∗ x; x:=x − 1)
9      ˆ
    SEMANTICA DENOTACIONAL                             185




     9.6   Existˆncia
                e

     Teorema 9 As equa¸˜es da semˆntica denotacional
                       co          a
     definem uma fun¸˜o total Sds em
                   ca
     Stm → (State → State).
9      ˆ
    SEMANTICA DENOTACIONAL                              186




     9.7   Um Resultado de Equivalˆncia
                                  e

     Teorema 10 Para todo comando S da linguagem
     exemplo While, n´s temos SSOS [[S]] = Sds [[S]].
                     o
10      ˆ           ´
     SEMANTICA AXIOMATICA                                        187




     10     Semˆntica Axiom´tica
               a           a
       • Corre¸˜o parcial: estabelece certa rela¸ao entre os
               ca                                 c˜
         valores iniciais e finais das vari´veis (se o programa
                                          a
         terminar);
       • Corre¸˜o parcial+termina¸ao=corre¸˜o total
              ca                 c˜       ca
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal
Semântica Formal

Mais conteúdo relacionado

Mais procurados (20)

Acentuação gráfica
Acentuação gráficaAcentuação gráfica
Acentuação gráfica
 
Teorias do uso da língua - Pragmática
Teorias do uso da língua - PragmáticaTeorias do uso da língua - Pragmática
Teorias do uso da língua - Pragmática
 
Parte 1 linguística geral apresentação
Parte 1   linguística geral apresentaçãoParte 1   linguística geral apresentação
Parte 1 linguística geral apresentação
 
Língua e linguagem, código linguístico, funções da linguagem
Língua e linguagem, código linguístico, funções da linguagemLíngua e linguagem, código linguístico, funções da linguagem
Língua e linguagem, código linguístico, funções da linguagem
 
CoerêNcia Textual
CoerêNcia TextualCoerêNcia Textual
CoerêNcia Textual
 
Coesão
CoesãoCoesão
Coesão
 
Sintaxe
SintaxeSintaxe
Sintaxe
 
O Processo de Comunicação
O Processo de ComunicaçãoO Processo de Comunicação
O Processo de Comunicação
 
Fatores de textualidade
Fatores de textualidadeFatores de textualidade
Fatores de textualidade
 
Texto E Textualidade
Texto E TextualidadeTexto E Textualidade
Texto E Textualidade
 
Pronomes ensino médio
Pronomes ensino médioPronomes ensino médio
Pronomes ensino médio
 
Fatores de textualidade
Fatores de textualidadeFatores de textualidade
Fatores de textualidade
 
Linguagem, língua e fala
Linguagem, língua e falaLinguagem, língua e fala
Linguagem, língua e fala
 
LÍNGUA & LINGUAGEM
LÍNGUA & LINGUAGEMLÍNGUA & LINGUAGEM
LÍNGUA & LINGUAGEM
 
Semântica pragmática
Semântica pragmáticaSemântica pragmática
Semântica pragmática
 
O ensino da língua portuguesa 1ª aula 04
O ensino da língua portuguesa 1ª aula 04O ensino da língua portuguesa 1ª aula 04
O ensino da língua portuguesa 1ª aula 04
 
Neologismo
NeologismoNeologismo
Neologismo
 
Panorama dos estudos linguísticos
Panorama dos estudos linguísticosPanorama dos estudos linguísticos
Panorama dos estudos linguísticos
 
Tipologia textual
Tipologia textualTipologia textual
Tipologia textual
 
Hipertextos
HipertextosHipertextos
Hipertextos
 

Semelhante a Semântica Formal

47612195 apostila-de-scilab
47612195 apostila-de-scilab47612195 apostila-de-scilab
47612195 apostila-de-scilabMarco Antônio
 
Aula 12 funcoes - Programação 1
Aula 12 funcoes - Programação 1Aula 12 funcoes - Programação 1
Aula 12 funcoes - Programação 1Isaac Barros
 
Ruby, Rails e Diversão (Campus Party Brasil 2009)
Ruby, Rails e Diversão (Campus Party Brasil 2009)Ruby, Rails e Diversão (Campus Party Brasil 2009)
Ruby, Rails e Diversão (Campus Party Brasil 2009)Julio Monteiro
 
Introdução a linguagem de programação C
Introdução a linguagem de programação CIntrodução a linguagem de programação C
Introdução a linguagem de programação CSchoolByte
 
4 introdução ao paradigma funcional
4 introdução ao paradigma funcional4 introdução ao paradigma funcional
4 introdução ao paradigma funcionalPéricles Miranda
 
Visual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuroVisual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuroRogério Moraes de Carvalho
 
Cartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdfCartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdfEdkallenn Lima
 
Algoritomos aula 3 rafael
Algoritomos aula 3 rafaelAlgoritomos aula 3 rafael
Algoritomos aula 3 rafaelhugodrocha
 
Desenho de formas utizando netbeans
Desenho de formas utizando netbeansDesenho de formas utizando netbeans
Desenho de formas utizando netbeansokashi24
 
Curso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CCurso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CJoberthSilva
 

Semelhante a Semântica Formal (20)

47612195 apostila-de-scilab
47612195 apostila-de-scilab47612195 apostila-de-scilab
47612195 apostila-de-scilab
 
Compiladores 5
Compiladores 5Compiladores 5
Compiladores 5
 
Aula 12 funcoes - Programação 1
Aula 12 funcoes - Programação 1Aula 12 funcoes - Programação 1
Aula 12 funcoes - Programação 1
 
Cs 2
Cs 2Cs 2
Cs 2
 
Ruby, Rails e Diversão (Campus Party Brasil 2009)
Ruby, Rails e Diversão (Campus Party Brasil 2009)Ruby, Rails e Diversão (Campus Party Brasil 2009)
Ruby, Rails e Diversão (Campus Party Brasil 2009)
 
Functional Programming - Scala
Functional Programming - ScalaFunctional Programming - Scala
Functional Programming - Scala
 
Introdução a linguagem de programação C
Introdução a linguagem de programação CIntrodução a linguagem de programação C
Introdução a linguagem de programação C
 
Calourada2010
Calourada2010Calourada2010
Calourada2010
 
4 introdução ao paradigma funcional
4 introdução ao paradigma funcional4 introdução ao paradigma funcional
4 introdução ao paradigma funcional
 
Aula 08-oac-execucao-de-programas
Aula 08-oac-execucao-de-programasAula 08-oac-execucao-de-programas
Aula 08-oac-execucao-de-programas
 
Visual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuroVisual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuro
 
1.introducao java
1.introducao java1.introducao java
1.introducao java
 
Cartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdfCartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdf
 
Algoritomos aula 3 rafael
Algoritomos aula 3 rafaelAlgoritomos aula 3 rafael
Algoritomos aula 3 rafael
 
Desenho de formas utizando netbeans
Desenho de formas utizando netbeansDesenho de formas utizando netbeans
Desenho de formas utizando netbeans
 
Linguagem C clecioamerico
Linguagem C clecioamericoLinguagem C clecioamerico
Linguagem C clecioamerico
 
FC-Logic
FC-LogicFC-Logic
FC-Logic
 
01-Paradigmas.pdf
01-Paradigmas.pdf01-Paradigmas.pdf
01-Paradigmas.pdf
 
Curso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação CCurso Completo de Linguagem de Programação C
Curso Completo de Linguagem de Programação C
 
Pged 02
Pged 02Pged 02
Pged 02
 

Mais de Carlos Campani

Técnicas de integração
Técnicas de integraçãoTécnicas de integração
Técnicas de integraçãoCarlos Campani
 
Lista de exercícios 3
Lista de exercícios 3Lista de exercícios 3
Lista de exercícios 3Carlos Campani
 
Lista de exercícios 2
Lista de exercícios 2Lista de exercícios 2
Lista de exercícios 2Carlos Campani
 
Aplicações da integração
Aplicações da integraçãoAplicações da integração
Aplicações da integraçãoCarlos Campani
 
Lista de exercícios 1
Lista de exercícios 1Lista de exercícios 1
Lista de exercícios 1Carlos Campani
 
ANÁLISE COMPLETA DE UMA FUNÇÃO
ANÁLISE COMPLETA DE UMA FUNÇÃOANÁLISE COMPLETA DE UMA FUNÇÃO
ANÁLISE COMPLETA DE UMA FUNÇÃOCarlos Campani
 
PROPRIEDADES DAS FUNÇÕES
PROPRIEDADES DAS FUNÇÕESPROPRIEDADES DAS FUNÇÕES
PROPRIEDADES DAS FUNÇÕESCarlos Campani
 
Funções, suas propriedades e gráfico
Funções, suas propriedades e gráficoFunções, suas propriedades e gráfico
Funções, suas propriedades e gráficoCarlos Campani
 
Solução de equações modulares
Solução de equações modularesSolução de equações modulares
Solução de equações modularesCarlos Campani
 
Equações polinomiais
Equações polinomiaisEquações polinomiais
Equações polinomiaisCarlos Campani
 
Instruções de Aprendiz
Instruções de AprendizInstruções de Aprendiz
Instruções de AprendizCarlos Campani
 
Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...
Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...
Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...Carlos Campani
 

Mais de Carlos Campani (20)

Técnicas de integração
Técnicas de integraçãoTécnicas de integração
Técnicas de integração
 
Lista de exercícios 3
Lista de exercícios 3Lista de exercícios 3
Lista de exercícios 3
 
Lista de exercícios 2
Lista de exercícios 2Lista de exercícios 2
Lista de exercícios 2
 
Aplicações da integração
Aplicações da integraçãoAplicações da integração
Aplicações da integração
 
Lista de exercícios 1
Lista de exercícios 1Lista de exercícios 1
Lista de exercícios 1
 
Integral
IntegralIntegral
Integral
 
Semana 14
Semana 14 Semana 14
Semana 14
 
Semana 13
Semana 13 Semana 13
Semana 13
 
Semana 12
Semana 12Semana 12
Semana 12
 
Semana 11
Semana 11Semana 11
Semana 11
 
Semana 10
Semana 10 Semana 10
Semana 10
 
Semana 9
Semana 9 Semana 9
Semana 9
 
ANÁLISE COMPLETA DE UMA FUNÇÃO
ANÁLISE COMPLETA DE UMA FUNÇÃOANÁLISE COMPLETA DE UMA FUNÇÃO
ANÁLISE COMPLETA DE UMA FUNÇÃO
 
PROPRIEDADES DAS FUNÇÕES
PROPRIEDADES DAS FUNÇÕESPROPRIEDADES DAS FUNÇÕES
PROPRIEDADES DAS FUNÇÕES
 
Funções, suas propriedades e gráfico
Funções, suas propriedades e gráficoFunções, suas propriedades e gráfico
Funções, suas propriedades e gráfico
 
Solução de equações modulares
Solução de equações modularesSolução de equações modulares
Solução de equações modulares
 
Equações polinomiais
Equações polinomiaisEquações polinomiais
Equações polinomiais
 
PROVAS DE TEOREMAS
PROVAS DE TEOREMASPROVAS DE TEOREMAS
PROVAS DE TEOREMAS
 
Instruções de Aprendiz
Instruções de AprendizInstruções de Aprendiz
Instruções de Aprendiz
 
Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...
Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...
Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...
 

Semântica Formal

  • 1. 1 Semˆntica Formal a Carlos A. P. Campani 22 de julho de 2005
  • 2. 2 Copyright c 2005 Carlos A. P. Campani. ´ E garantida a permiss˜o para copiar, distribuir e/ou a modificar este documento sob os termos da Licen¸a de c Documenta¸ao Livre GNU (GNU Free Documentation c˜ License), Vers˜o 1.2 ou qualquer vers˜o posterior a a publicada pela Free Software Foundation; sem Se¸oes c˜ Invariantes, Textos de Capa Frontal, e sem Textos de Quarta Capa. Uma c´pia da licen¸a ´ inclu´ na se¸ao o c e ıda c˜ intitulada “GNU Free Documentation License”. veja: http://www.ic.unicamp.br/~norton/fdl.html.
  • 3. 3 S´ mula u 1. Introdu¸ao c˜ 2. Abordagens de semˆntica formal a 3. Linguagem exemplo While 4. Sintaxe abstrata
  • 4. 4 5. Revis˜o de Prova de Teoremas a (a) Prova de Implica¸ao c˜ (b) Prova por Redu¸˜o ao Absurdo ca (c) Prova por Indu¸˜o ca i. Indu¸˜o Sobre os Naturais ca ii. Indu¸ao Sobre o Tamanho de uma Seq¨ˆncia c˜ ue iii. Indu¸ao Estrutural c˜
  • 5. 5 6. Semˆntica de express˜es a o (a) N´meros e Numerais u (b) Descrevendo Estados (c) Express˜es aritm´ticas o e (d) Express˜es booleanas o 7. Propriedades da Semˆntica a (a) Vari´veis Livres a (b) Substitui¸ao c˜
  • 6. 6 8. Semˆntica Operacional a (a) Semˆntica Natural a i. Propriedades da Semˆntica a ii. Fun¸˜o Semˆntica ca a (b) Semˆntica Operacional Estruturada a i. Propriedades da Semˆntica a ii. Fun¸˜o Semˆntica ca a (c) Um Resultado de Equivalˆncia e
  • 7. 7 9. Semˆntica Denotacional a (a) Composicionalidade (b) Ponto Fixo (c) Defini¸ao da Semˆntica c˜ a (d) Requisitos sobre o Ponto Fixo (e) Teoria de Pontos Fixos (f) Existˆncia e (g) Um Resultado de Equivalˆncia e
  • 8. 8 10. Semˆntica Axiom´tica a a (a) Provas Diretas de Corre¸˜o de Programas ca i. Semˆntica Natural a ii. Semˆntica Operacional Estruturada a iii. Semˆntica Denotacional a (b) Asser¸oes para Corre¸ao Parcial c˜ c˜ (c) Corre¸ao e Completude do Sistema Formal c˜ (d) Asser¸oes para Corre¸ao Total c˜ c˜
  • 9. 9 Bibliografia • Nielson, H. & Nielson, F. Semantics with Applications: a formal introduction. dispon´ em: ıvel http://www.daimi.au.dk/~bra8130/Wiley_book/ wiley.html; • lˆminas para impress˜o: http: a a //www.ufpel.edu.br/~campani/semantica4.ps.gz.
  • 10. 1 ¸˜ INTRODUCAO 10 1 Introdu¸˜o ca Semˆntica formal preocupa-se em especificar a rigorosamente o significado ou comportamento de programas, partes de hardware, etc. Sintaxe descreve as estruturas de uma linguagem; Semˆntica descreve o significado destas estruturas. a
  • 11. 1 ¸˜ INTRODUCAO 11 A necessidade de uma semˆntica formal (matem´tica) a a para linguagens de programa¸ao justifica-se pois: c˜ • pode revelar ambig¨idades na defini¸˜o da linguagem u ca (o que uma descri¸˜o n˜o formal n˜o permitiria ca a a revelar); • ´ uma base para implementa¸ao (s´ e c˜ ıntese), an´lise e a verifica¸ao formal. c˜
  • 12. 2 ABORDAGENS 12 2 Abordagens Semˆntica Operacional Significado de uma constru¸˜o a ca da linguagem ´ especificado pela computa¸ao que ela e c˜ induz quando executada em uma m´quina hipot´tica a e (interessa como o efeito da computa¸ao ´ produzido); c˜ e Semˆntica Denotacional Significados modelados por a objetos matem´ticos que representam o efeito de a executar uma estrutura (somente o efeito interessa, n˜o como ´ produzido); a e Semˆntica Axiom´tica Especifica propriedades do a a efeito da execu¸ao das estruturas como asser¸˜es c˜ co (alguns aspectos da execu¸ao s˜o ignorados). c˜ a
  • 13. 2 ABORDAGENS 13 Tipos de Semˆntica Operacional: a • Semˆntica Operacional Estruturada (especifica mais a detalhes da execu¸ao); c˜ • Semˆntica Natural (simplifica a nota¸ao e esconde a c˜ detalhes, ao tomar um passo maior).
  • 14. 3 LINGUAGEM EXEMPLO WHILE 14 3 Linguagem Exemplo While n ∈ Num x ∈ Var a ∈ Aexp b ∈ Bexp S ∈ Stm
  • 15. 3 LINGUAGEM EXEMPLO WHILE 15 a ::= n|x|a1 + a2 |a1 ∗ a2 |a1 − a2 b ::= true|false|a1 = a2 |a1 ≤ a2 |¬b|b1 ∧ b2 S ::= x:=a|skip|S1 ; S2 |if b then S1 else S2 |while b do S
  • 16. 3 LINGUAGEM EXEMPLO WHILE 16 ex1: z:=x; x:=y; y:=z ex2: y:=1; while ¬(x = 1) do (y:=y∗x; x:=x−1)
  • 17. 4 SINTAXE ABSTRATA 17 4 Sintaxe Abstrata z:=x; x:=y; y:=z S ƒƒƒƒƒ ÐÐ ƒƒƒƒ ÐÐ ƒƒƒA S bb ; S www Ò Ð www ÐÒÒ b0 Ò b ÐÐÐ w8 z := a S bb ; S aa ÑÑ bb1 ÑÑ a a0 ÐÑÑ ÐÑ x x := a y := a y z
  • 18. 4 SINTAXE ABSTRATA 18 S „„„„„ ÓÓ „„„„ ÑÓ „„„A S ww ; www S` Ð ÐÐÐ ww8 ÐÒÒÒ ``0 ` Sd ; S b y := a ÐÐÐ dd1 ~ ~~ b1  b z := a x := a z x y
  • 19. 4 SINTAXE ABSTRATA 19 Usando nota¸ao linear: c˜ • z:=x; (x:=y; y:=z) (mais ` direita); a • (z:=x; x:=y); y:=z (mais ` esquerda). a
  • 20. 4 SINTAXE ABSTRATA 20 Exerc´ıcio: Construa a ´rvore sint´tica de a a y:=1; while ¬(x = 1) do (y:=y∗x; x:=x−1).
  • 21. 5 ˜ REVISAO DE PROVA DE TEOREMAS 21 5 Revis˜o de Prova de Teoremas a 5.1 Prova de Implica¸˜o ca Para provar A → B, assuma A (hip´tese) e deduza B. o A (hip´tese) o ... ... . . . B A→B
  • 22. 5 ˜ REVISAO DE PROVA DE TEOREMAS 22 ex: Provar que se um n´mero inteiro ´ divis´ por 6 u e ıvel ent˜o tamb´m o ´ por 2. a e e Seja n ∈ Z, tal que n ´ divis´ por 6: e ıvel 1. n ´ divis´ por 6 (hip´tese); e ıvel o 2. n = 6.k, onde k ∈ N; 3. n = 2.3.k; 4. n = 2.k , onde k = 3.k e k ∈ N 5. n ´ divis´ por 2; e ıvel 6. Logo, vale o enunciado.
  • 23. 5 ˜ REVISAO DE PROVA DE TEOREMAS 23 5.2 Prova por Redu¸˜o ao Absurdo ca Para provar A, suponha ¬A e mostre que isto resulta em uma contradi¸ao (absurdo). c˜ ex: Provar que se um n´mero somado a si mesmo resulta u o n´mero original, ent˜o este n´mero ´ zero. u a u e Suponha que este n´mero ´ x e que: u e x+x=x∧x=0 ent˜o a 2x = x ∧ x = 0 Logo, 2 = 1 (absurdo).
  • 24. 5 ˜ REVISAO DE PROVA DE TEOREMAS 24 5.3 Prova por Indu¸˜o ca 5.3.1 Indu¸˜o Sobre os Naturais ca P (0) P (n) → P (n + 1) n∈N ∀nP (n) Base P (0); Passo P (n) → P (n + 1); • P (n) ´ a hip´tese indutiva; e o • Ent˜o, tenta-se provar P (n + 1); a Conclus˜o ∀nP (n). a
  • 25. 5 ˜ REVISAO DE PROVA DE TEOREMAS 25 ex: Provar que o quadrado de um n´mero natural sempre u ´ maior ou igual ao n´mero. e u Base 0 ≤ 02 ; Passo Assumir n ≤ n2 . Ent˜o: a n + 1 ≤ n2 + 1 ≤ n2 + 1 + 2n = (n + 1)2 Conclus˜o ∀n ∈ N n ≤ n2 . a
  • 26. 5 ˜ REVISAO DE PROVA DE TEOREMAS 26 ıcio: Prove que para todo n ∈ N, 2n n. Exerc´ n(n+1) Exerc´ ıcio: Prove que 1 + 2 + 3 + · · · + n = 2 .
  • 27. 5 ˜ REVISAO DE PROVA DE TEOREMAS 27 5.3.2 Indu¸˜o Sobre o Tamanho de uma ca Seq¨ˆncia ue 1. Prove que a propriedade vale para todas as seq¨ˆncias de comprimento 0 (base); ue 2. Prove que a propriedade vale para todas as outras seq¨ˆncias: Assuma que a propriedade vale para ue todas as seq¨ˆncias de tamanho menor ou igual a k ue (hip´tese indutiva) e mostre que vale para seq¨ˆncias o ue de tamanho k + 1.
  • 28. 5 ˜ REVISAO DE PROVA DE TEOREMAS 28 5.3.3 Indu¸˜o Estrutural ca Aplica-se sobre as estruturas de uma linguagem: 1. Prove que a propriedade vale para todas as estruturas atˆmicas (ex: P (x:=a) e P (skip)); o 2. Prove que a propriedade vale para qualquer programa: Assuma que vale para as estruturas que formam um comando, e mostre que vale para o comando composto (ex: P (S1 ) ∧ P (S2 ) → P (S1 ; S2 )).
  • 29. 6 ˆ ˜ SEMANTICA DE EXPRESSOES 29 6 Semˆntica de Express˜es a o 6.1 N´ meros e Numerais u N : Num → Z Se n ∈ Num ent˜o escrevemos N [[n]], e usamos [[ e ]] para a enfatizar que N ´ uma fun¸˜o semˆntica. e ca a
  • 30. 6 ˆ ˜ SEMANTICA DE EXPRESSOES 30 N [[0]] = 0 N [[1]] = 1 N [[n 0]] = 2∗N [[n]] N [[n 1]] = 2∗N [[n]]+1 Observa¸˜o: 0 ´ o numeral (0 ∈ Num) e 0 ´ o n´mero ca e e u (0 ∈ Z).
  • 31. 6 ˆ ˜ SEMANTICA DE EXPRESSOES 31 6.2 Descrevendo Estados Estado representa uma associa¸ao entre vari´veis e seus c˜ a valores. State = Var → Z ex: [x → 5, y → 7, z → 0].
  • 32. 6 ˆ ˜ SEMANTICA DE EXPRESSOES 32 6.3 Express˜es aritm´ticas o e A : Aexp → (State → Z) A[[n]]s = N [[n]] A[[x]]s = s x A[[a1 + a2 ]]s = A[[a1 ]]s+A[[a2 ]]s A[[a1 ∗ a2 ]]s = A[[a1 ]]s∗A[[a2 ]]s A[[a1 − a2 ]]s = A[[a1 ]]s−A[[a2 ]]s Observa¸˜o: s ´ um estado. ca e
  • 33. 6 ˆ ˜ SEMANTICA DE EXPRESSOES 33 ex: seja s x = 3: A[[x + 1]]s = A[[x]]s+A[[1]]s = (s x)+N [[1]] = 3+1 = 4 Observa¸˜o: na primeira linha, + dentro do [[.]] pertence ca ` linguagem, + ` direita ´ a opera¸ao soma. 1 ´ o a a e c˜ e numeral (1 ∈ Num) e 1 ´ o n´mero (1 ∈ Z). e u
  • 34. 6 ˆ ˜ SEMANTICA DE EXPRESSOES 34 6.4 Express˜es booleanas o B : Bexp → (State → T) T = {tt, ff }
  • 35. 6 ˆ ˜ SEMANTICA DE EXPRESSOES 35 B[[true]]s = tt B[[false]]s = ff   tt se A[[a1 ]]s = A[[a2 ]]s B[[a1 = a2 ]]s =  ff se A[[a1 ]]s = A[[a2 ]]s   tt se A[[a1 ]]s ≤ A[[a2 ]]s B[[a1 ≤ a2 ]]s =  ff se A[[a1 ]]s A[[a2 ]]s   tt se B[[b]]s = ff B[[¬b]]s =  ff se B[[b]]s = tt
  • 36. 6 ˆ ˜ SEMANTICA DE EXPRESSOES 36   tt se B[[b ]]s = tt e B[[b ]]s = tt 1 2 B[[b1 ∧ b2 ]]s =  ff se B[[b1 ]]s = ff ou B[[b2 ]]s = ff
  • 37. 7 ˆ PROPRIEDADES DA SEMANTICA 37 7 Propriedades da Semˆntica a 7.1 Vari´veis Livres a As vari´veis livres de uma express˜o a ´ definida como o a a e conjunto de vari´veis que ocorrem em a. a FV(n) = ∅ FV(x) = {x} FV(a1 + a2 ) = FV(a1 ) ∪ FV(a2 ) FV(a1 ∗ a2 ) = FV(a1 ) ∪ FV(a2 ) FV(a1 − a2 ) = FV(a1 ) ∪ FV(a2 )
  • 38. 7 ˆ PROPRIEDADES DA SEMANTICA 38 Teorema 1 Sejam s e s dois estados satisfazendo que s x = s x para todo x em FV(a). Ent˜o, A[[a]]s = A[[a]]s . a Prova: (por indu¸˜o sobre as express˜es aritm´ticas) ca o e 1. Base: caso n Sabemos que A[[a]]s = N [[n]] e A[[a]]s = N [[n]] e assim A[[a]]s = A[[a]]s ; caso x n´s temos A[[x]]s = s x e A[[x]]s = s x e, pela o hip´tese, s x = s x, j´ que x ∈ FV(x). Logo, o a A[[a]]s = A[[a]]s ;
  • 39. 7 ˆ PROPRIEDADES DA SEMANTICA 39 2. Passo: (supomos que o enunciado vale para a1 e a2 ) caso a1 + a2 Sabemos que A[[a1 + a2 ]]s = A[[a1 ]]s + A[[a2 ]]s e A[[a1 + a2 ]]s = A[[a1 ]]s + A[[a2 ]]s . Al´m disto, e FV(a1) ⊆ FV(a1 + a2 ) e FV(a2) ⊆ FV(a1 + a2 ). Usando a hip´tese indutiva, A[[a1 ]]s = A[[a1 ]]s e o A[[a2 ]]s = A[[a2 ]]s , e ´ f´cil ver que o enunciado e a vale para a1 + a2 ; casos a1 ∗ a2 e a1 − a2 similares ao anterior.
  • 40. 7 ˆ PROPRIEDADES DA SEMANTICA 40 Exerc´ ıcio: Definir o conjunto FV(b) das vari´veis livres a em uma express˜o booleana b. a Exerc´ıcio: Provar que, dados s e s satisfazendo s x = s x para todo x ∈ FV(b), B[[b]]s = B[[b]]s .
  • 41. 7 ˆ PROPRIEDADES DA SEMANTICA 41 7.2 Substitui¸˜o ca Substitui¸˜o denota a opera¸˜o em que se troca cada ca ca ocorrˆncia de uma vari´vel y de uma express˜o a por e a a uma outra express˜o a0 . a Nota¸ao: a[y → a0 ]. c˜
  • 42. 7 ˆ PROPRIEDADES DA SEMANTICA 42 n[y → a0 ] = n   a se x = y 0 x[y → a0 ] =  x se x = y (a1 + a2 )[y → a0 ] = (a1 [y → a0 ]) + (a2 [y → a0 ]) (a1 ∗ a2 )[y → a0 ] = (a1 [y → a0 ]) ∗ (a2 [y → a0 ]) (a1 − a2 )[y → a0 ] = (a1 [y → a0 ]) − (a2 [y → a0 ])
  • 43. 7 ˆ PROPRIEDADES DA SEMANTICA 43 Exerc´ıcio: Prove que A[[a[y → a0 ]]]s = A[[a]](s[y → A[[a0 ]]s]), para todo s. Exerc´ ıcio: Defina a substitui¸ao para express˜es c˜ o booleanas.
  • 44. 8 ˆ SEMANTICA OPERACIONAL 44 8 Semˆntica Operacional a • Express˜es aritm´ticas e booleanas apenas produzem o e um valor, mas n˜o mudam os estados; a • Comandos de programas While mudam o estado; • Semˆntica operacional preocupa-se mais em como os a programas s˜o executados do que meramente com os a resultados destas computa¸oes; c˜
  • 45. 8 ˆ SEMANTICA OPERACIONAL 45 • Abordagens: Semˆntica natural descreve como os resultados a gerais s˜o obtidos; a Semˆntica operacional estruturada descreve como a passos individuais da computa¸˜o ocorrem; ca
  • 46. 8 ˆ SEMANTICA OPERACIONAL 46 • Os significados dos comandos da linguagem ser˜oa descritos por meio de um sistema de transi¸˜es; co • Existem dois tipos de configura¸oes: c˜ S, s significando que o comando S ser´ executado a a partir do estado s; s representando um estado terminal (ou final).
  • 47. 8 ˆ SEMANTICA OPERACIONAL 47 8.1 Semˆntica Natural a [assns ] x:=a, s → s[x → A[[a]]s] [skipns ] skip, s → s S1 ,s →s , S2 ,s →s [compns ] S1 ;S2 ,s →s S1 ,s →s [if tt ] ns if b then S1 else S2 ,s →s se B[[b]]s = tt S2 ,s →s [if ff ] ns if b then S1 else S2 ,s →s se B[[b]]s = ff S,s →s , while b do S,s →s [whilett ] ns while b do S,s →s se B[[b]]s = tt [whileff ] ns while b do S, s → s se B[[b]]s = ff
  • 48. 8 ˆ SEMANTICA OPERACIONAL 48 esquema de axioma ou axioma como em [assns ]; regra como em [compns ]; ´rvore de deriva¸˜o ´ a aplica¸ao dos axiomas e regras a ca e c˜ para deduzir uma transi¸˜o S, s → s . ca Observa¸˜o: x ´ uma meta-vari´vel. ca e a
  • 49. 8 ˆ SEMANTICA OPERACIONAL 49 ex: (´rvore de deriva¸˜o) a ca (z:=x; x:=y); y:=z s0 = [x → 5, y → 7, z → 0] z:=x,s0 →s1 x:=y,s1 →s2 z:=x;x:=y,s0 →s2 y:=z, s2 → s3 (z:=x; x:=y); y:=z, s0 → s3 Observa¸˜o: s1 = s0 [z → 5], s2 = s1 [x → 7] e ca s3 = s2 [y → 5].
  • 50. 8 ˆ SEMANTICA OPERACIONAL 50 Como construir uma ´rvore de deriva¸˜o? a ca Resposta: da raiz para as folhas.
  • 51. 8 ˆ SEMANTICA OPERACIONAL 51 ex: y:=1; while ¬(x = 1) do (y:=y∗x; x:=x−1) e s = [x → 3, y → 0]
  • 52. 8 ˆ SEMANTICA OPERACIONAL 52 Raiz: y:=1; while ¬(x = 1) do (y:=y∗x; x:=x−1), s → s61 s61 = s[y → 6][x → 1]
  • 53. 8 ˆ SEMANTICA OPERACIONAL 53 ´rvore T : a y:=1, s → s13 T1 y:=1; while ¬(x = 1) do (y:=y∗x; x:=x−1), s → s61 s13 = s[y → 1] ´rvore T1 : a T2 T3 while ¬(x = 1) do (y:=y∗x; x:=x − 1), s13 → s61 Pois B[[¬(x = 1)]]s13 = tt
  • 54. 8 ˆ SEMANTICA OPERACIONAL 54 ´rvore T2 : a y:=y∗x, s13 → s33 x:=x−1, s33 → s32 y:=y∗x; x:=x − 1, s13 → s32 s33 = s[y → 3] s32 = s[y → 3][x → 2]
  • 55. 8 ˆ SEMANTICA OPERACIONAL 55 ´rvore T3 : a y:=y∗x,s32 →s62 x:=x−1,s62 →s61 y:=y∗x;x:=x−1,s32 →s61 T4 while ¬(x = 1) do (y:=y∗x; x:=x−1), s32 → s61 s62 = s[y → 6][x → 2]
  • 56. 8 ˆ SEMANTICA OPERACIONAL 56 ´rvore T4 (folha): a while ¬(x = 1) do (y:=y∗x; x:=x−1), s61 → s61 Pois B[[¬(x = 1)]]s61 = ff
  • 57. 8 ˆ SEMANTICA OPERACIONAL 57 Exerc´ ıcio: Construa a ´rvore de deriva¸˜o para o seguinte a ca programa: z:=0; while y ≤ x do (z:=z+1; x:=x−y) com s = [x → 17, y → 5].
  • 58. 8 ˆ SEMANTICA OPERACIONAL 58 A execu¸ao de um comando S no estado s: c˜ • termina se e somente se existe um estado s tal que S, s → s ; • entra em loop se e somente se n˜o existe um estado s a tal que S, s → s .
  • 59. 8 ˆ SEMANTICA OPERACIONAL 59 8.1.1 Propriedades da Semˆntica a S1 e S2 s˜o semanticamente equivalentes se a S1 , s → s se e somente se S2 , s → s para todos os estados s e s .
  • 60. 8 ˆ SEMANTICA OPERACIONAL 60 Provar que while b do S ´ semanticamente equivalente a e if b then (S; while b do S) else skip. Prova: (⇒) Se while b do S, s → s ent˜o a if b then (S; while b do S) else skip, s → s while b do S, s → s Poss´ ıveis ´rvores: a T1 T2 while b do S, s → s Onde T1 ´ a ´rvore com raiz S, s → s e T2 ´ a ´rvore e a e a com raiz while b do S, s → s e B[[b]]s = tt.
  • 61. 8 ˆ SEMANTICA OPERACIONAL 61 S1 , s → s S2 , s → s [compns ] S1 ; S2 , s → s Usando T1 e T2 como premissas da regra [compns ]: T1 T2 S; while b do S, s → s
  • 62. 8 ˆ SEMANTICA OPERACIONAL 62 S1 , s → s [if tt ] ns Se B[[b]]s = tt if b then S1 else S2 , s → s Obtemos: T1 T2 S;while b do S,s →s if b then (S; while b do S) else skip, s → s
  • 63. 8 ˆ SEMANTICA OPERACIONAL 63 Falta provar o caso B[[b]]s = ff . Neste caso, T ´ e simplesmente: while b do S, s →s Usando [skipns ]: skip, s →s
  • 64. 8 ˆ SEMANTICA OPERACIONAL 64 Usando [if ff ]: ns S2 , s → s [if ff ] ns Se B[[b]]s = ff if b then S1 else S2 , s → s skip, s → s if b then (S; while b do S) else skip, s →s
  • 65. 8 ˆ SEMANTICA OPERACIONAL 65 (⇐) Se if b then (S; while b do S) else skip, s → s ent˜o while b do S, s → s a Usando [if tt ]: ns S; while b do S, s → s if b then (S; while b do S) else skip, s → s e B[[b]]s = tt
  • 66. 8 ˆ SEMANTICA OPERACIONAL 66 Usando [compns ]: S,s →s while b do S,s →s S;while b do S,s →s if b then (S; while b do S) else skip, s → s Usando [whilett ]: ns S, s → s while b do S, s → s while b do S, s → s
  • 67. 8 ˆ SEMANTICA OPERACIONAL 67 No caso B[[b]]s = ff : skip, s → s if b then (S; while b do S) else skip, s → s es=s . Usando [whileff ]: ns while b do S, s →s Isto completa a prova.
  • 68. 8 ˆ SEMANTICA OPERACIONAL 68 Exerc´ ıcio: Prove que S1 ; (S2 ; S3 ) e (S1 ; S2 ); S3 s˜o a semanticamente equivalentes. Exerc´ ıcio: Mostre que S1 ; S2 , no geral, n˜o ´ a e semanticamente equivalente a S2 ; S1 .
  • 69. 8 ˆ SEMANTICA OPERACIONAL 69 Uma semˆntica ´ determin´stica se, para todos S, s, s e a e ı s : S, s → s e S, s → s implica s = s . Isto significa que para todo comando S e estado inicial s n´s podemos determinar um unico estado final s se a o ´ execu¸ao de S termina. c˜
  • 70. 8 ˆ SEMANTICA OPERACIONAL 70 Teorema 2 A semˆntica natural ´ determin´ a e ıstica.
  • 71. 8 ˆ SEMANTICA OPERACIONAL 71 8.1.2 Fun¸˜o Semˆntica ca a Sns : Smt → (State → State) Observa¸˜o: usa-se → para fun¸oes parciais. Ou seja: ca c˜ Sns [[S]] ∈ State → State dado por:   s Se S, s → s Sns [[S]]s =  undef caso contr´rio a Observa¸˜o: Sns [[while true do skip]]s = undef para ca todo s (fun¸˜o parcial). ca
  • 72. 8 ˆ SEMANTICA OPERACIONAL 72 8.2 Semˆntica Operacional Estruturada a ˆ • Enfase nos passos individuais da computa¸˜o; ca • Rela¸˜o de transi¸˜o: S, s ⇒ γ (a transi¸ao ca ca c˜ expressa o primeiro passo da computa¸ao), com dois c˜ poss´ ıveis resultados: – γ = S , s significando que a execu¸˜o de S n˜o ca a est´ completa e S , s ´ uma configura¸˜o a e ca intermedi´ria; a – γ = s significando que a execu¸ao de S terminou c˜ e o estado final ´ s ; e • Se diz que S, s emperrou se n˜o existe γ tal que a S, s ⇒ γ.
  • 73. 8 ˆ SEMANTICA OPERACIONAL 73 [assSOS ] x:=a, s ⇒ s[x → A[[a]]s] [skipSOS ] skip, s ⇒ s S1 ,s ⇒ S1 ,s [comp1 ] SOS S1 ;S2 ,s ⇒ S1 ;S2 ,s S1 ,s ⇒s [comp2 ] SOS S1 ;S2 ,s ⇒ S2 ,s [if tt ] SOS if b then S1 else S2 , s ⇒ S1 , s Se B[[b]]s = tt [if ff ] SOS if b then S1 else S2 , s ⇒ S2 , s Se B[[b]]s = ff [whileSOS ] while b do S, s ⇒ if b then (S; while b do S) else skip, s
  • 74. 8 ˆ SEMANTICA OPERACIONAL 74 Uma seq¨ˆncia de deriva¸˜o de um comando S iniciando ue ca no estado s ´: e • uma seq¨ˆncia finita ue γ0 , γ 1 , γ 2 , . . . , γ k de configura¸oes satisfazendo γ0 = S, s , γi ⇒ γi+1 c˜ para 0 ≤ i k, e k ≥ 0, e ou γk ´ uma configura¸˜o e ca terminal ou ´ uma configura¸˜o emperrada; ou e ca • uma seq¨ˆncia infinita ue γ0 , γ 1 , γ 2 , . . . de configura¸oes satisfazendo γ0 = S, s e γi ⇒ γi+1 c˜ para i ≥ 0.
  • 75. 8 ˆ SEMANTICA OPERACIONAL 75 Nota¸ao: Usamos γ0 ⇒i γi para indicar i passos na c˜ seq¨ˆncia. Usamos γ0 ⇒∗ γi para indicar um n´mero ue u finito de passos.
  • 76. 8 ˆ SEMANTICA OPERACIONAL 76 ex: (z:=x; x:=y); y:=z e s0 = [x → 5, y → 7, z → 0]. Seq¨ˆncia de deriva¸ao: ue c˜ (z:=x; x:=y); y:=z, s0 ⇒ x:=y; y:=z, s0 [z → 5] ⇒ y:=z, (s0 [z → 5])[x → 7] ⇒ ((s0 [z → 5])[x → 7])[y → 5]
  • 77. 8 ˆ SEMANTICA OPERACIONAL 77 Cada passo da deriva¸˜o corresponde a uma ´rvore de ca a deriva¸˜o. Assim, para o primeiro passo ter´ ca ıamos: z:=x,s0 ⇒s0 [z→5] z:=x;x:=y,s0 ⇒ x:=y,s0 [z→5] (z:=x; x:=y); y:=z, s0 ⇒ x:=y; y:=z, s0 [z → 5]
  • 78. 8 ˆ SEMANTICA OPERACIONAL 78 ex: Seja s x = 3 e y:=1; while ¬(x = 1) do (y:=y∗x; x:=x−1). O primeiro passo ´: e y:=1; while ¬(x = 1) do (y:=y∗x; x:=x−1), s ⇒ while ¬(x = 1) do (y:=y∗x; x:=x−1), s[y → 1]
  • 79. 8 ˆ SEMANTICA OPERACIONAL 79 ´ Arvore: y:=1, s ⇒ s[y → 1] y:=1; while ¬(x = 1) do (y:=y∗x; x:=x−1), s ⇒ while ¬(x = 1) do (y:=y∗x; x:=x−1), s[y → 1] Observa¸˜o: usa-se [assSOS ] e [comp2 ]. ca SOS
  • 80. 8 ˆ SEMANTICA OPERACIONAL 80 Reescrevendo o la¸o como um condicional: c if ¬(x = 1) then ((y:=y∗x; x:=x−1); while ¬(x = 1) do (y:=y∗x; x:=x−1)) else skip, s[y → 1]
  • 81. 8 ˆ SEMANTICA OPERACIONAL 81 Segundo [if tt ], o passo seguinte resultar´ em: SOS a (y:=y∗x; x:=x−1); while ¬(x = 1) do (y:=y∗x; x:=x−1), s[y → 1]
  • 82. 8 ˆ SEMANTICA OPERACIONAL 82 Usando-se [assSOS ], [comp2 ] e [comp1 ], obtem-se a SOS SOS transi¸ao: c˜ (y:=y∗x; x:=x−1); while ¬(x = 1) do (y:=y∗x; x:=x−1), s[y → 1] ⇒ x:=x−1; while ¬(x = 1) do (y:=y∗x; x:=x−1), s[y → 3]
  • 83. 8 ˆ SEMANTICA OPERACIONAL 83 ´ Arvore: y:=y∗x,s[y→1] ⇒s[y→3] y:=y∗x;x:=x−1,s[y→1] ⇒ x:=x−1,s[y→3] (y:=y∗x; x:=x−1); while ¬(x = 1) do (y:=y∗x; x:=x−1), s[y → 1] ⇒ x:=x−1; while ¬(x = 1) do (y:=y∗x; x:=x−1), s[y → 3]
  • 84. 8 ˆ SEMANTICA OPERACIONAL 84 Usando [assSOS ] e [comp2 ] obtemos a pr´xima SOS o configura¸ao: c˜ while ¬(x = 1) do (y:=y∗x; x:=x−1), s[y → 3][x → 2] Continuando, chegaremos ao estado final s[y → 6][x → 1].
  • 85. 8 ˆ SEMANTICA OPERACIONAL 85 Exerc´ıcio: Seja s = [x → 17, y → 5]. Construa a seq¨ˆncia de deriva¸ao do comando: ue c˜ z:=0; while y ≤ x do (z:=z+1; x:=x−y)
  • 86. 8 ˆ SEMANTICA OPERACIONAL 86 Importante observar que a linguagem exemplo While n˜o a possui configura¸˜es emperradas. co A execu¸ao de um comando S no estado s: c˜ • termina se e somente se existe uma seq¨ˆncia de ue deriva¸ao finita come¸ando com S, s ; c˜ c • entra em loop se e somente se existe uma seq¨ˆncia ue de deriva¸˜o infinita come¸ando com S, s . ca c Dizemos que s execu¸ao de S em s termina com sucesso c˜ se S, s ⇒∗ s , para algum estado s . Na linguagem exemplo While a execu¸ao termina com sucesso se e c˜ somente se termina pois n˜o existem configura¸˜es a co emperradas.
  • 87. 8 ˆ SEMANTICA OPERACIONAL 87 8.2.1 Propriedades da Semˆntica a Lema 1 Se S1 ; S2 , s ⇒k s , ent˜o existe um estado s e a n´meros naturais k1 e k2 tal que S1 , s ⇒k1 s e u S2 , s ⇒k2 s , onde k = k1 + k2 . Prova: (por indu¸˜o sobre o tamanho da seq¨ˆncia de ca ue deriva¸˜o) ca Base: k = 0 (por vacuidade) Passo: Assumimos como hip´tese que o enunciado vale o para todo k ≤ k0 . Assumimos S1 ; S2 , s ⇒k0 +1 s ou S1 ; S2 , s ⇒ γ ⇒k0 s para alguma configura¸˜o γ. ca
  • 88. 8 ˆ SEMANTICA OPERACIONAL 88 O primeiro passo pode ser resultado de [comp1 ] ou SOS [comp2 ]: SOS 1. [comp1 ] e γ = S1 ; S2 , s , ou seja SOS S1 ; S2 , s ⇒ S1 ; S2 , s Logo, S1 , s ⇒ S1 , s e S1 ; S2 , s ⇒k0 s . Esta segunda seq¨ˆncia satisfaz a hip´tese indutiva. ue o Assim, existe um estado s0 e n´meros k1 e k2 tal que u S1 , s ⇒k1 s0 e S2 , s0 ⇒k2 s onde k1 + k2 = k0 . Logo, S1 , s ⇒k1 +1 s0 e S2 , s0 ⇒k2 s , e como (k1 + 1) + k2 = k0 + 1, est´ a provado o resultado;
  • 89. 8 ˆ SEMANTICA OPERACIONAL 89 2. [comp2 ] e γ = s . Assim, S1 , s ⇒ s e SOS S2 , s ⇒k0 s . O resultado fica provado fazendo-se k1 = 1 e k2 = k0 .
  • 90. 8 ˆ SEMANTICA OPERACIONAL 90 Exerc´ ıcio: Prove que se S1 , s ⇒k s ent˜o a S1 ; S2 , s ⇒k S2 , s , isto ´, a execu¸˜o de S1 n˜o ´ e ca a e influenciada pelo comando que o segue.
  • 91. 8 ˆ SEMANTICA OPERACIONAL 91 Teorema 3 A semˆntica operacional estruturada ´ a e determin´ ıstica.
  • 92. 8 ˆ SEMANTICA OPERACIONAL 92 8.2.2 Fun¸˜o Semˆntica ca a SSOS : Smt → (State → State) , dado por:   s Se S, s ⇒∗ s SSOS [[S]]s =  undef caso contr´rio a
  • 93. 8 ˆ SEMANTICA OPERACIONAL 93 8.3 Um Resultado de Equivalˆncia e Teorema 4 Para todo comando S da linguagem exemplo While n´s temos Sns [[S]] = SSOS [[S]]. o Este teorema expressa duas propriedades: 1. Se a execu¸˜o de S, come¸ando em algum estado, ca c termina em uma semˆntica, ent˜o ela tamb´m a a e termina na outra, e os estados resultantes s˜o iguais; a 2. Se a execu¸˜o de S, para algum estado, entra em ca loop em uma semˆntica ent˜o tamb´m entra em loop a a e na outra.
  • 94. 9 ˆ SEMANTICA DENOTACIONAL 94 9 Semˆntica Denotacional a Semˆntica Operacional Como ocorre a execu¸˜o do a ca comando; Semˆntica Denotacional O efeito da execu¸ao do a c˜ comando.
  • 95. 9 ˆ SEMANTICA DENOTACIONAL 95 • Na abordagem denotacional cada constru¸ao sint´tica c˜ a ´ mapeada, por uma fun¸˜o semˆntica, para um e ca a objeto matem´tico (de um modo geral uma fun¸ao); a c˜ • Exemplos de fun¸oes semˆnticas denotacionais: A c˜ a (mapeia express˜es aritm´ticas para fun¸oes em o e c˜ State → Z) e B (mapeia express˜es booleanas para o fun¸˜es em State → T); co
  • 96. 9 ˆ SEMANTICA DENOTACIONAL 96 • Fun¸oes Sns e SSOS s˜o exemplos de fun¸˜es c˜ a co semˆnticas que mapeiam comandos em fun¸oes em a c˜ State → State, no entanto, elas n˜o s˜o exemplos a a de fun¸oes denotacionais porque elas n˜o s˜o c˜ a a definidas de forma composicional ; • Na semˆntica denotacional, estruturas de la¸o de a c repeti¸˜o s˜o interpretadas usando-se pontos fixos: ca a – pontos fixos s˜o ra´ de uma equa¸˜o funcional ; a ızes ca – um funcional ´ uma fun¸˜o que mapeia uma fun¸ao e ca c˜ em outra fun¸˜o. ca
  • 97. 9 ˆ SEMANTICA DENOTACIONAL 97 9.1 Composicionalidade Significa expressar uma propriedade de uma estrutura em fun¸ao da composi¸ao das propriedades de suas c˜ c˜ sub-estruturas. ex: A[[a1 + a2 ]]s = A[[a1 ]]s+A[[a2 ]]s
  • 98. 9 ˆ SEMANTICA DENOTACIONAL 98 9.2 Ponto Fixo Um funcional mapeia uma fun¸˜o em outra fun¸ao. ca c˜ Seja F um funcional, ent˜o: a F g1 = g2 F g0 = g0 (ponto fixo) F k g0 = g0 ex: F g = se x = 0 ent˜o 1 caso contr´rio x∗g(x − 1), a a e o ponto fixo de F ´ a fun¸˜o fatorial. Ou seja, e ca F g0 = g0 e g0 ´ a fun¸ao fatorial. e c˜ Observa¸˜o: usamos uma linguagem de programa¸˜o ca ca funcional hipot´tica neste exemplo. e
  • 99. 9 ˆ SEMANTICA DENOTACIONAL 99 Seja g1 (x) = x2 . Ent˜o: a F g1 = se x = 0 ent˜o 1 caso contr´rio x ∗ (x − 1)2 = g2 a a e g1 = g2 . Seja g0 (x) = x!. Ent˜o: a F g0 = se x = 0 ent˜o 1 caso contr´rio x ∗ ((x − 1)!) = a a se x = 0 ent˜o 1 caso contr´rio x! = x! = g0 a a
  • 100. 9 ˆ SEMANTICA DENOTACIONAL 100 9.3 Defini¸˜o ca Sds [[x:=a]]s = s[x → A[[a]]s] Sds [[skip]] = id Sds [[S1 ; S2 ]] = Sds [[S2 ]] ◦ Sds [[S1 ]] Sds [[if b then S1 else S2 ]] = cond(B[[b]], Sds [[S1 ]], Sds [[S2 ]]) Sds [[while b do S]] = FIX F Onde F g = cond(B[[b]], g ◦ Sds [[S]], id).
  • 101. 9 ˆ SEMANTICA DENOTACIONAL 101 Explica¸ao: c˜ Sds [[x:=a]]s = s[x → A[[a]]s] Observa¸˜o: corresponde a [assns ] e [assSOS ]. ca Sds [[skip]] = id Observa¸˜o: id ´ a fun¸˜o identidade. ca e ca
  • 102. 9 ˆ SEMANTICA DENOTACIONAL 102 Sds [[S1 ; S2 ]] = Sds [[S2 ]] ◦ Sds [[S1 ]] Observa¸˜o: isto significa que o efeito da execu¸ao de ca c˜ S1 ; S2 ´ a composi¸ao funcional do efeito da execu¸ao de e c˜ c˜ S1 com o efeito da execu¸˜o de S2 . ca
  • 103. 9 ˆ SEMANTICA DENOTACIONAL 103 Sds [[S1 ; S2 ]]s = (Sds [[S2 ]] ◦ Sds [[S1 ]])s =   s  se existe s tal que       Sds [[S1 ]]s = s e Sds [[S2 ]]s = s     undef se Sds [[S1 ]]s = undef ou =   se existe s tal que       Sds [[S1 ]]s = s e     Sds [[S2 ]]s = undef
  • 104. 9 ˆ SEMANTICA DENOTACIONAL 104 Sds [[if b then S1 else S2 ]] = cond(B[[b]], Sds [[S1 ]], Sds [[S2 ]]) Observa¸˜o: a fun¸˜o auxiliar cond tem funcionalidade ca ca cond : (State → T) × (State → State) × (State → State) → (State → State) e ´ definida por: e   g s se p s = tt 1 cond(p, g1 , g2 )s =  g2 s se p s = ff
  • 105. 9 ˆ SEMANTICA DENOTACIONAL 105 Sds [[if b then S1 else S2 ]]s = = cond(B[[b]], Sds [[S1 ]], Sds [[S2 ]])s   s  se B[[b]]s = tt e Sds [[S1 ]]s = s ou     se B[[b]]s = ff e Sds [[S2 ]]s = s =  undef se B[[b]]s = tt e Sds [[S1 ]]s = undef ou      se B[[b]]s = ff e Sds [[S2 ]]s = undef
  • 106. 9 ˆ SEMANTICA DENOTACIONAL 106 Sds [[while b do S]] = FIX F Observe que: while b do S = if b then (S; while b do S) else skip e aplicando a defini¸ao de Sds ao lado direito resulta em: c˜ Sds [[while b do S]] = = cond(B[[b]], Sds [[while b do S]] ◦ Sds [[S]], id)
  • 107. 9 ˆ SEMANTICA DENOTACIONAL 107 • N˜o podemos usar esta ultima express˜o, pois ela a ´ a n˜o est´ definida de forma composicional ; a a • No entanto, isto expressa que Sds [[while b do S]] ´ o e ponto fixo do funcional definido por: F g = cond(B[[b]], g ◦ Sds [[S]], id) ou seja, Sds [[while b do S]] = F (Sds [[while b do S]]) • Agora, esta nova defini¸ao respeita a c˜ composicionalidade.
  • 108. 9 ˆ SEMANTICA DENOTACIONAL 108 Sds [[while b do S]] = FIX F e a funcionalidade da fun¸˜o auxiliar FIX ´ ca e FIX : ((State → State) → (State → State)) → (State → State)
  • 109. 9 ˆ SEMANTICA DENOTACIONAL 109 ex: Seja o seguinte comando: while ¬(x = 0) do skip O funcional correspondente ´: e   g s se s x = 0 (F g)s =  s se s x = 0
  • 110. 9 ˆ SEMANTICA DENOTACIONAL 110 Determina¸ao do funcional: c˜ Sds [[while ¬(x = 0) do skip]]s = (FIX F )s (F g)s = cond(B[[¬(x = 0)]], g ◦ Sds [[skip]], id)s   g ◦ S [[skip]]s se B[[¬(x = 0)]]s = tt ds =  id s se B[[¬(x = 0)]]s = ff   g s se s x = 0 =  s se s x = 0 Observa¸˜o: g ◦ Sds [[skip]]s = g ◦ id s = g s, pois ca g ◦ id = g.
  • 111. 9 ˆ SEMANTICA DENOTACIONAL 111 A fun¸ao g1 definida como: c˜   undef se s x = 0 g1 s =  s se s x = 0 ´ ponto fixo de F porque e   g s se s x=0 1 (F g1 )s =  s se s x=0   undef se sx=0 =  s se sx=0 = g1 s
  • 112. 9 ˆ SEMANTICA DENOTACIONAL 112 J´, por sua vez, g2 , definida como: a g2 s = undef para todo s n˜o ´ ponto fixo de F porque se s x = 0 ent˜o a e a (F g2 )s = s , enquanto que g2 s = undef.
  • 113. 9 ˆ SEMANTICA DENOTACIONAL 113 • Existem funcionais com mais de um ponto fixo. Um exemplo ´ F , j´ que qualquer fun¸˜o g de e a ca State → State satisfazendo g s = s se s x = 0 ´ e ponto fixo de F ; • Existem tamb´m funcionais que n˜o tem ponto fixo. e a Considere F1 definido como:   g se g = g2 1 F1 g =  g2 caso contr´rio a Se g1 = g2 ent˜o n˜o existe fun¸ao g0 tal que a a c˜ F1 g0 = g0 .
  • 114. 9 ˆ SEMANTICA DENOTACIONAL 114 Exerc´ ıcio: Determine o funcional F associado ao comando: while ¬(x = 0) do x:=x − 1
  • 115. 9 ˆ SEMANTICA DENOTACIONAL 115 Solu¸ao: c˜ Sds [[while ¬(x = 0) do x:=x − 1]]s = (FIX F )s (F g)s = cond(B[[¬(x = 0)]], g ◦ Sds [[x:=x − 1]], id)s   g ◦ S [[x:=x − 1]]s se B[[¬(x = 0)]]s = tt ds =  id s se B[[¬(x = 0)]]s = ff   g s[x → s x − 1] se s x = 0 =  s se s x = 0
  • 116. 9 ˆ SEMANTICA DENOTACIONAL 116 Exerc´ ıcio: Considere as seguintes fun¸˜es parciais: co 1. g1 s = undef para todo s 2.   s[x → 0] se s x ≥ 0 g2 s =  undef se s x 0 3.   s[x → 0] se s x ≥ 0 g3 s =  s se s x 0 4. g4 s = s[x → 0] para todo s 5. g5 s = s para todo s Determine quais s˜o pontos fixos de F . a
  • 117. 9 ˆ SEMANTICA DENOTACIONAL 117 Exerc´ ıcio: Considere o seguinte fragmento de programa: while ¬(x = 1) do (y:=y∗x; x:=x − 1) Determine o funcional F associado ao programa. Determine tamb´m ao menos dois pontos fixos de F . e
  • 118. 9 ˆ SEMANTICA DENOTACIONAL 118 9.4 Requisitos sobre o Ponto Fixo Perante o problema de haver mais de um ponto fixo, ou de n˜o existir nenhum, se faz necess´rio: a a • Definir os requisitos de um ponto fixo e mostrar que ao menos um ponto fixo preenche estes requisitos; • Mostrar que todos os funcionais obtidos da linguagem While tem um ponto fixo que satisfaz estes requisitos.
  • 119. 9 ˆ SEMANTICA DENOTACIONAL 119 Seja o comando while b do S. Quanto a termina¸ao, c˜ existem trˆs possibilidades: e 1. Ele termina; 2. Ele entra em loop localmente, ou seja, S entra em loop; 3. Ele entra em loop globalmente, ou seja, a estrutura while entra em loop.
  • 120. 9 ˆ SEMANTICA DENOTACIONAL 120 1. Caso em que o la¸o termina: Assim, existe uma c seq¨ˆncia de estados s0 , s1 , . . . , sn tal que ue   tt se i n B[[b]]si =  ff se i = n e Sds [[S]]si = si+1 para i n
  • 121. 9 ˆ SEMANTICA DENOTACIONAL 121 Seja g0 um ponto fixo de F . Logo, no caso i n temos: g0 si = (F g0 )si = cond(B[[b]], g0 ◦ Sds [[S]], id)si = g0 (Sds [[S]]si ) = g0 si+1 No caso i = n, temos: g0 sn = (F g0 )sn = cond(B[[b]], g0 ◦ Sds [[S]], id)sn = id sn = sn
  • 122. 9 ˆ SEMANTICA DENOTACIONAL 122 Conclui-se que todos os pontos fixos satisfazem g0 s0 = sn , n˜o sendo poss´ tirar daqui nenhum a ıvel requisito.
  • 123. 9 ˆ SEMANTICA DENOTACIONAL 123 2. Caso em que o la¸o entra em loop localmente, ou c seja, S entra em loop: Existe uma seq¨ˆncia de ue estados s0 , s1 , . . . , sn tal que B[[b]]si = tt para i ≤ n e   s para i n i+1 Sds [[S]]si =  undef para i = n
  • 124. 9 ˆ SEMANTICA DENOTACIONAL 124 Seja g0 um ponto fixo do funcional F . No caso i n obtemos: g0 si = g0 si+1 e no caso i = n obtemos: g0 sn = (F g0 )sn = cond(B[[b]], g0 ◦ Sds [[S]], id)sn = (g0 ◦ Sds [[S]])sn = undef E novamente n˜o se obtem nenhum requisito. a
  • 125. 9 ˆ SEMANTICA DENOTACIONAL 125 3. Caso em que o la¸o entra em loop globalmente, ou c seja, a estrutura while entra em loop: Existe um seq¨ˆncia infinita de estados s0 , s1 , s2 , . . . tal que ue B[[b]]si = tt para todo i e Sds [[S]]si = si+1 para todo i Seja g0 um ponto fixo de F , ent˜o a g0 si = g0 si+1 para todo i ≥ 0. E temos g0 s0 = g0 si para todo i. Esta ´ a situa¸ao em que podemos ter v´rios pontos e c˜ a fixos diferentes.
  • 126. 9 ˆ SEMANTICA DENOTACIONAL 126 ex: S = while ¬(x = 0) do skip cujo funcional ´ e   g s se s x = 0 (F g)s =  s se s x = 0 Sabemos que qualquer fun¸ao g de State → State c˜ satisfazendo g s = s se s x = 0 ´ ponto fixo de F . No e entanto, nossa experiˆncia computacional nos diz que e   undef se s x = 0 0 Sds [[S]]s0 =  s0 se s0 x = 0 de forma a representar o comportamento do loop.
  • 127. 9 ˆ SEMANTICA DENOTACIONAL 127 Assim, nosso ponto fixo preferencial ´ e   undef se s x = 0 g0 s =  s se s x = 0 A propriedade distintiva deste ponto fixo ´ que para e qualquer outro ponto fixo g de F , se g0 s = s ent˜o a g s = s , mas n˜o o contr´rio. a a
  • 128. 9 ˆ SEMANTICA DENOTACIONAL 128 Generalizando para qualquer funcional F : O ponto fixo desejado deve ser alguma fun¸ao parcial c˜ g0 : State → State tal que: • g0 ´ um ponto fixo de F ; e • se g ´ outro ponto fixo de F , ent˜o g0 s = s e a implica g s = s , para todos os s e s .
  • 129. 9 ˆ SEMANTICA DENOTACIONAL 129 9.5 Teoria de Pontos Fixos • Desenvolver uma teoria que permita tratar com funcionais e pontos fixos; • Garantir a existˆncia do ponto fixo preferencial. e
  • 130. 9 ˆ SEMANTICA DENOTACIONAL 130 Seja a ordem sobre as fun¸oes parciais State → State: c˜ g1 g2 quando a fun¸˜o parcial g1 compartilha seus resultados ca com a fun¸˜o parcial g2 , ou seja, se g1 s = s ent˜o ca a g2 s = s , para todo s e s . g1 g2 significa que em todos os pontos em que g1 ´ e definido, g2 tamb´m o ´, e os seus valores s˜o iguais, mas e e a o inverso n˜o ´ exigido. g1 g2 pode ser lido como g1 ´ a e e menos ou igualmente definido que g2 ou g1 aproxima g2 .
  • 131. 9 ˆ SEMANTICA DENOTACIONAL 131 g 1 1 a 2 b 3 c g 2 1 a 2 b 3 c
  • 132. 9 ˆ SEMANTICA DENOTACIONAL 132 ex: g1 s = s para todo s   s se s x ≥ 0 g2 s =  undef caso contr´rio a   s se s x = 0 g3 s =  undef caso contr´rio a   s se s x ≤ 0 g4 s =  undef caso contr´rio a
  • 133. 9 ˆ SEMANTICA DENOTACIONAL 133 g1 g1 g2 g1 g2 g2 g3 g1 g3 g2 g3 g3 g3 g4 g4 g1 g4 g4 g2 g4 g4 g2
  • 134. 9 ˆ SEMANTICA DENOTACIONAL 134 Diagrama de Hasse: g1 e } ee }} ee }}} ee }} e g2 e g4 ee } ee }}} ee }} e }} g3
  • 135. 9 ˆ SEMANTICA DENOTACIONAL 135 Exerc´ ıcio: Sejam g1 , g2 e g3 , como a seguir definidos:   s se s x ´ par e g1 s =  undef caso contr´rio a   s se s x ´ um primo e g2 s =  undef caso contr´rio a g3 s = s 1. Determine a ordem entre estas fun¸˜es; co 2. Determine uma fun¸˜o parcial g4 tal que g4 ca g1 , g4 g2 e g4 g3 ; 3. Determine uma fun¸˜o parcial g5 tal que g1 g5 , ca g2 g5 e g5 g3 , e g5 n˜o ´ igual a g1 , g2 nem a g3 . a e
  • 136. 9 ˆ SEMANTICA DENOTACIONAL 136 Uma caracteriza¸ao alternativa da ordem c˜ em State → State ´e g1 g2 se e somente se graph(g1 ) ⊆ graph(g2 ) onde graph(f ) = { x, y ∈ X × Y |f (x) = y} e f :X →Y.
  • 137. 9 ˆ SEMANTICA DENOTACIONAL 137 O conjunto State → State munido da ordem ´ um e exemplo de um conjunto parcialmente ordenado. Seja D um conjunto e d, d1 , d2 , d3 ∈ D. Um conjunto parcialmente ordenado ´ um par (D, D ), onde D ´ e e uma rela¸ao em D satisfazendo: c˜ 1. d D d (reflexividade); 2. d1 D d2 e d2 D d3 implica d1 D d3 (transitividade); 3. d1 D d2 e d2 D d1 implica d1 = d2 (anti-simetria).
  • 138. 9 ˆ SEMANTICA DENOTACIONAL 138 Um elemento d ∈ D satisfazendo d d para todo d ∈ D ´ chamado de elemento m´nimo de D. Podemos dizer que e ı ele n˜o cont´m informa¸˜o. a e ca
  • 139. 9 ˆ SEMANTICA DENOTACIONAL 139 Teorema 5 Se um conjunto parcialmente ordenado (D, D ) tem um elemento m´nimo d, ent˜o d ´ unico. ı a e´ Prova: Assuma que D tem dois elementos m´nimos d1 e ı d2 . Desde que d1 ´ elemento m´nimo, d1 d2 . Como d2 e ı tamb´m ´ elemento m´nimo, d2 d1 . Pela propriedade e e ı da anti-simetria de obtemos d1 = d2 .
  • 140. 9 ˆ SEMANTICA DENOTACIONAL 140 1 aa ÑÑ aa ÑÑ aa ÑÑÑ a 2 aa 3 aa aa ÑÑÑ aa aa ÑÑ aa a ÑÑ a 4 5
  • 141. 9 ˆ SEMANTICA DENOTACIONAL 141 ex: Seja S um conjunto n˜o vazio e defina: a P(S) = {K|K ⊆ S} chamado conjunto das partes. Ent˜o (P(S), ⊆) ´ um conjunto parcialmente ordenado a e porque • ⊆ ´ reflexiva: K ⊆ K; e • ⊆ ´ transitiva: se K1 ⊆ K2 e K2 ⊆ K3 ent˜o e a K1 ⊆ K3 ; • ⊆ ´ anti-sim´trica: se K1 ⊆ K2 e K2 ⊆ K1 ent˜o e e a K1 = K2 .
  • 142. 9 ˆ SEMANTICA DENOTACIONAL 142 No caso em que S = {a, b, c}, P(S) = {∅, {a}, {b}, {c}, {a, b}, {a, c}, {b, c}, {a, b, c}}, e temos: {a, b, c} t tt tt tt t tt ttt tt tt t {a, b} {a, c} {b, c} tt tt tt ttt tt ttt tt tt ttt t tt t tt t t tt ttt tt ttt t {a} t {b} {c} tt t tt ttt tt tt ttt tt tt tt ∅ (P(S), ⊆) tem um elemento m´ ınimo, ∅.
  • 143. 9 ˆ SEMANTICA DENOTACIONAL 143 Exerc´ıcio: Mostre que (P(S), ⊇) ´ um conjunto e parcialmente ordenado e determine o elemento m´ınimo. Desenhe o diagrama de Hasse no caso em que S = {a, b, c}.
  • 144. 9 ˆ SEMANTICA DENOTACIONAL 144 Lema 2 (State → State, ) ´ um conjunto e parcialmente ordenado. A fun¸˜o parcial ca ⊥ : State → State definida como ⊥ s = undef para todo s ´ o elemento m´nimo de State → State. e ı
  • 145. 9 ˆ SEMANTICA DENOTACIONAL 145 Prova: Primeiro provamos que ´ ordem parcial: e Reflexiva Trivialmente g g, porque g s = s implica g s=s; Transitiva Assumimos g1 g2 e g2 g3 . Assumimos g1 s = s e de g1 g2 concluimos g2 s = s , e ent˜o a g2 g3 fornece g3 s = s ; Anti-sim´trica Assumimos g1 g2 e g2 g1 . e Assumimos que g1 s = s . Ent˜o, g2 s = s segue de a g1 g2 , e neste caso ambas as fun¸˜es d˜o valores co a iguais. No caso em que g1 s = undef, ´ necess´rio e a que g2 s = undef, j´ que caso contr´rio, g2 s = s e a a de g2 g1 obteriamos g1 s = s , que ´ uma e contradi¸˜o. ca
  • 146. 9 ˆ SEMANTICA DENOTACIONAL 146 Finalmente, temos que provar que ⊥ ´ o elemento e ı ´ a m´nimo de State → State. E f´cil ver que ⊥ ´ um e elemento de State → State e trivialmente ⊥ g vale para todos g, dado que ⊥ s = s implica g s = s por vacuidade.
  • 147. 9 ˆ SEMANTICA DENOTACIONAL 147 Formalizando os requisitos de FIX F : • FIX F ´ ponto fixo de F , isto ´, F (FIX F ) = FIX F ; e e • FIX F ´ o menor ponto fixo de F , isto ´, se F g = g e e ent˜o FIX F g. a
  • 148. 9 ˆ SEMANTICA DENOTACIONAL 148 Exerc´ ıcio: Mostre que se F tem um menor ponto fixo g0 ent˜o g0 ´ unico. a e´ Exerc´ıcio: Determine o menor ponto fixo dos funcionais associados aos programas: 1. while ¬(x = 0) do x:=x − 1 2. while ¬(x = 1) do (y:=y ∗ x; x:=x − 1)
  • 149. 9 ˆ SEMANTICA DENOTACIONAL 149 • Seja (D, ), e assumimos um subconjunto Y ⊆ D; • Existe um elemento de D que resume toda a informa¸˜o de Y ; ca • Um elemento d ´ chamado de limite superior de Y se: e ∀d ∈ Y d d • Um limite superior d de Y ´ um menor limite e superior (ou supremo) se e somente se d ´ limite superior de Y implica que d e d • O supremo de Y tem pouca informa¸ao a mais que a c˜ presente nos elementos de Y .
  • 150. 9 ˆ SEMANTICA DENOTACIONAL 150 Exerc´ıcio: Mostre que se Y tem um supremo, ent˜o ele ´ a e unico. ´
  • 151. 9 ˆ SEMANTICA DENOTACIONAL 151 Nota¸ao: o (´nico) supremo de Y ´ denotado por c˜ u e Y.
  • 152. 9 ˆ SEMANTICA DENOTACIONAL 152 Um subconjunto Y ´ chamado de cadeia se ele ´ e e consistente no sentido que quaisquer dois elementos de Y compartilham informa¸ao um com o outro, ou seja, c˜ ∀d1 , d2 ∈ Y d1 d2 ∨ d2 d1
  • 153. 9 ˆ SEMANTICA DENOTACIONAL 153 ex: Considere o conjunto parcialmente ordenado (P({a, b, c}), ⊆). Ent˜o, o subconjunto a Y0 = {∅, {a}, {a, c}} ´ uma cadeia. Neste caso, {a, b, c} e {a, c} s˜o limites e a superiores de Y0 e {a, c} ´ o supremo. e contra-ex: O subconjunto {∅, {a}, {c}, {a, c}} n˜o ´ uma a e cadeia. Por que?
  • 154. 9 ˆ SEMANTICA DENOTACIONAL 154 ex: Seja gn : State → State definido como:   undef  se s x n  gn s = s[x → −1] se 0 ≤ s x e s x ≤ n    s se s x 0 e gn gm se n ≤ m. Seja Y0 = {gn |n ≥ 0}. Y0 ´ uma cadeia porque gn e gm se n ≤ m. A fun¸ao parcial c˜   s[x → −1] se 0 ≤ s x gs=  s se s x 0 ´ o supremo de Y0 . e
  • 155. 9 ˆ SEMANTICA DENOTACIONAL 155 Exerc´ ıcio: Seja gn a fun¸ao parcial definida por: c˜   s[y → (s x)!][x → 1] se 0 s x e s x ≤ n gn s =  undef se s x ≤ 0 ou s x n Definimos Y0 = {gn |n ≥ 0}. Mostre que Y0 ´ uma cadeia. e Caracterize os limites superiores de Y0 e determine o supremo.
  • 156. 9 ˆ SEMANTICA DENOTACIONAL 156 Um conjunto parcialmente ordenado (D, ) ´ chamado e de cadeia completa parcialmente ordenada (ccpo) se Y existe para todas as cadeias Y de D. Ele ´ um reticulado e completo se Y existe para todos os subconjuntos Y de D.
  • 157. 9 ˆ SEMANTICA DENOTACIONAL 157 Exerc´ ıcio: Mostre que (P(S), ⊆) ´ um reticulado e completo e um ccpo para todos os conjuntos n˜o vazios S. a
  • 158. 9 ˆ SEMANTICA DENOTACIONAL 158 Contra-exemplo de ccpo: Seja Pfin (S) = {K ⊆ S|K ´ finito}. Considere (Pfin (N), ⊆). e Ent˜o a Y = {{0}, {0, 1}, {0, 1, 2}, . . . , {0, 1, 2, . . . , n}, . . .} ´ cadeia. A uni˜o cont´vel dos elementos Ai da cadeia ´ e a a e ∞ Ai = N , i=1 por´m ele n˜o pode ser o supremo da cadeia pois n˜o e a a pertence a ela.
  • 159. 9 ˆ SEMANTICA DENOTACIONAL 159 Teorema 6 Se (D, ) ´ um ccpo ent˜o existe um e a elemento m´nimo ⊥ dado por ⊥ = ∅. ı Prova: 1. ∅ ´ uma cadeia pois ∀d1 , d2 ∈ ∅ d1 e d2 ∨ d2 d1 (por vacuidade); 2. Como (D, ) ´ uma ccpo ent˜o existe e a ∅ pois ∅ ⊆ D ´ cadeia de D; e 3. ∅ d, d ∈ D, ent˜o a ∅ ´ elemento m´ e ınimo de D.
  • 160. 9 ˆ SEMANTICA DENOTACIONAL 160 Lema 3 (State → State, ) ´ um ccpo. O supremo e Y da cadeia Y de State → State ´ dado por: e graph( Y)= {graph(g)|g ∈ Y } isto ´, ( Y ) s = s se e somente se g s = s para algum e g ∈Y. Observa¸˜es: co • graph(f ) = { x, y ∈ X × Y |f (x) = y} e f :X →Y; • State → State n˜o ´ um reticulado, mas ´ um ccpo a e e e suas cadeias possuem supremo.
  • 161. 9 ˆ SEMANTICA DENOTACIONAL 161 Sejam (D, ) e (D , ) duas ccpo’s e considere a fun¸ao c˜ (total) f : D → D . f ´ monotˆnica se e somente se e o d1 d2 implica f (d1 ) f (d2 ) para todos os d1 e d2 .
  • 162. 9 ˆ SEMANTICA DENOTACIONAL 162 Exerc´ıcio: Considere o ccpo (P(N), ⊆). Determine quais das seguintes fun¸˜es em P(N) → P(N) s˜o co a monotˆnicas: o • f1 (X) = NX • f2 (X) = X {27} • f3 (X) = X {7, 9, 13} • f4 (X) = {n ∈ X|n ´ primo} e • f5 (X) = {2∗n|n ∈ X}
  • 163. 9 ˆ SEMANTICA DENOTACIONAL 163 Exerc´ ıcio: Determine quais dos seguintes funcionais em (State → State) → (State → State) s˜o monotˆnicos: a o • F0 g = g   g se g = g2 1 • F1 g = onde g1 = g2  g2 caso contr´rio a   g s se s x = 0 • (F g) s =  s se s x = 0
  • 164. 9 ˆ SEMANTICA DENOTACIONAL 164 Teorema 7 Sejam (D, ), (D , ) e (D , ) trˆs e ccpo’s e sejam f : D → D e f : D → D duas fun¸˜es co monotˆnicas. Ent˜o, f ◦ f : D → D ´ uma fun¸˜o o a e ca monotˆnica. o Prova: Assumimos que d1 d2 . A monotonicidade de f resulta em f (d1 ) f (d2 ). A monotonicidade de f resulta em f (f (d1 )) f (f (d2 )), como queriamos provar. Observa¸˜o: Isto significa que a opera¸˜o de composi¸ao ca ca c˜ de fun¸oes preserva a monotonicidade. c˜
  • 165. 9 ˆ SEMANTICA DENOTACIONAL 165 Lema 4 Sejam (D, ) e (D , ) duas ccpo’s e seja f : D → D uma fun¸˜o monotˆnica. Se Y ´ cadeia de D ca o e ent˜o {f (d)|d ∈ Y } ´ uma cadeia de D . Al´m disto, a e e {f (d)|d ∈ Y } f( Y ) Observa¸˜o: Isto significa que: ca • a imagem de uma cadeia sob uma fun¸ao monotˆnica c˜ o tamb´m ´ uma cadeia; e e • o supremo desta segunda cadeia aproxima a imagem do supremo da primeira.
  • 166. 9 ˆ SEMANTICA DENOTACIONAL 166 Prova: Se Y = ∅ o enunciado ´ trivialmente v´lido porque e a {f (d)|d ∈ ∅} f (⊥) ∅ f (⊥) ⊥ f (⊥)
  • 167. 9 ˆ SEMANTICA DENOTACIONAL 167 Assumimos Y = ∅. Seja A = {f (d)|d ∈ Y } e sejam d1 , d2 ∈ A. Ent˜o, existe d1 , d2 ∈ Y tal que d1 = f (d1 ) e a d2 = f (d2 ). Desde que Y ´ cadeia ent˜o d1 d2 ou e a d2 d1 . Pela monotonicidade de f vale o mesmo entre d1 e d2 . Ou seja, A ´ cadeia de D . e
  • 168. 9 ˆ SEMANTICA DENOTACIONAL 168 Para a segunda parte da prova, assumimos d ∈ Y . Ent˜o, a d Y , e pela monotonicidade de f , f (d) f ( Y ). Desde que isto vale para todos os d ∈ Y , ent˜o f ( Y ) ´ a e limite superior de A.
  • 169. 9 ˆ SEMANTICA DENOTACIONAL 169 Estamos interessados em fun¸oes f que preservem os c˜ limites superiores de cadeias, ou seja, que satisfazem: {f (d)|d ∈ Y } = f ( Y ) (1) Uma fun¸ao f : D → D definida sobre duas ccpo’s c˜ (D, ) e (D , ) ´ cont´nua se ela ´ monotˆnica e (1) e ı e o vale para todas as cadeias n˜o vazias Y . a Observa¸˜o: Isto significa que obtemos a mesma ca informa¸ao independente de determinarmos o supremo c˜ antes ou depois de aplicar f .
  • 170. 9 ˆ SEMANTICA DENOTACIONAL 170 Se vale tamb´m ⊥ = f (⊥) ent˜o dizemos que f ´ estrita. e a e
  • 171. 9 ˆ SEMANTICA DENOTACIONAL 171 Lema 5 Sejam (D, ),(D , ) e (D , )trˆs ccpo’s e e sejam f : D → D e f : D → D duas fun¸˜es cont´ co ınuas. Ent˜o, f ◦ f : D → D ´ uma fun¸˜o cont´ a e ca ınua. Prova: Do Teorema 7 sabemos que f ◦ f ´ monotˆnica. e o Da continuidade de f obtemos: {f (d)|d ∈ Y } = f ( Y )
  • 172. 9 ˆ SEMANTICA DENOTACIONAL 172 Desde que {f (d)|d ∈ Y } ´ uma cadeia n˜o vazia de D e e a usando a continuidade de f obtemos: {f (d )|d ∈ {f (d)|d ∈ Y }} = f ( {f (d)|d ∈ Y }) que ´ equivalente a e {f (f (d))|d ∈ Y } = f (f ( Y )) provando o resultado.
  • 173. 9 ˆ SEMANTICA DENOTACIONAL 173 Exerc´ ıcio: Prove que se f e f s˜o estritas, f ◦ f tamb´m a e o ´. e
  • 174. 9 ˆ SEMANTICA DENOTACIONAL 174 Exerc´ ıcio: Mostre que o funcional associado ao programa while ¬(x = 0) do x:=x − 1 ´ cont´ e ınuo.
  • 175. 9 ˆ SEMANTICA DENOTACIONAL 175 Contra-exemplo de fun¸˜o cont´ ca ınua: Seja (P(N ∪ {a}), ⊆) um ccpo. Considere a fun¸˜o ca f : P(N ∪ {a}) → P(N ∪ {a}) definida como:   X se X ´ finito e f X=  X ∪ {a} se X ´ infinito e f ´ monotˆnica, j´ que X1 ⊆ X2 implica f X1 ⊆ f X2 . e o a No entanto, n˜o ´ cont´ a e ınua. Considere Y = {{0, 1, . . . , n}|n ≥ 0} que ´ uma cadeia, com e Y = N. Aplicando f obtemos: {f X|X ∈ Y } = Y = N e f ( Y ) = f N = N ∪ {a}.
  • 176. 9 ˆ SEMANTICA DENOTACIONAL 176 Teorema 8 Seja f : D → D uma fun¸˜o cont´nua sobre ca ı um ccpo (D, ) com elemento m´nimo ⊥. Ent˜o, ı a FIX f = {f n (⊥)|n ≥ 0} define um elemento de D e este elemento ´ o menor e ponto fixo de f . Observa¸˜es: co • f 0 = id e f n+1 = f ◦ f n para n ≥ 0; • Esta ´ a defini¸ao de ponto fixo desejado. e c˜
  • 177. 9 ˆ SEMANTICA DENOTACIONAL 177 Prova: 1. f 0 (⊥) = ⊥, e ⊥ d para todo d ∈ D. Por indu¸˜o ca podemos mostrar que f n (⊥) f n (d), j´ que f ´ a e monotˆnica. Segue que f n (⊥) f m (⊥) para n ≤ m. o Assim, {f n (⊥)|n ≥ 0} ´ uma cadeia de D e FIX f e existe porque D ´ um ccpo; e
  • 178. 9 ˆ SEMANTICA DENOTACIONAL 178 2. Precisamos mostrar que FIX f ´ um ponto fixo, isto e ´, f (FIX f ) = FIX f : e f (FIX f ) = f ( {f n (⊥)|n ≥ 0}) = {f (f n (⊥))|n ≥ 0} = {f n (⊥)|n ≥ 1} = ({f n (⊥)|n ≥ 1} ∪ {⊥}) = {f n (⊥)|n ≥ 0} = FIX f
  • 179. 9 ˆ SEMANTICA DENOTACIONAL 179 3. Para mostrar que FIX f ´ o menor ponto fixo basta e assumir que d ´ algum outro ponto fixo. Assim, e ⊥ d e pela monotonicidade de f obtemos f n (⊥) f n (d), para n ≥ 0. Como d ´ ponto fixo, e f n (⊥) d, e sabendo que FIX f ´ supremo da cadeia e {f n (⊥)|n ≥ 0}, FIX f d, o que prova o resultado.
  • 180. 9 ˆ SEMANTICA DENOTACIONAL 180 ex: Considere o funcional:   g s se s x = 0 (F g) s =  s se s x = 0 Tomamos ⊥ s = undef para todo s, que ´ o menor e elemento de State → State, para determinar os elementos de {F n (⊥)|n ≥ 0}.
  • 181. 9 ˆ SEMANTICA DENOTACIONAL 181 0 (F ⊥) s = (id ⊥) s = undef 1 (F ⊥) s = (F ⊥) s   ⊥ s se s x = 0 =  s se s x = 0   undef se s x = 0 =  s se s x = 0
  • 182. 9 ˆ SEMANTICA DENOTACIONAL 182 2 (F ⊥) s = F (F 1 ⊥) s   (F 1 ⊥) s se s x = 0 =  s se s x = 0   undef se sx=0 =  s se sx=0
  • 183. 9 ˆ SEMANTICA DENOTACIONAL 183 n n+1 No caso geral, nos temos F ⊥=F ⊥ para n 0. Al´m disto, e n 0 1 1 {F ⊥|n ≥ 0} = {F ⊥, F ⊥} = F ⊥ 0 porque F ⊥ = ⊥. Assim, o menor ponto fixo de F ´ a e fun¸ao c˜   undef se s x = 0 g1 s =  s se s x = 0
  • 184. 9 ˆ SEMANTICA DENOTACIONAL 184 Exerc´ıcio: Determine o ponto fixo dos funcionais associados aos seguintes comandos: 1. while ¬(x = 0) do x:=x − 1 2. while ¬(x = 1) do (y:=y ∗ x; x:=x − 1)
  • 185. 9 ˆ SEMANTICA DENOTACIONAL 185 9.6 Existˆncia e Teorema 9 As equa¸˜es da semˆntica denotacional co a definem uma fun¸˜o total Sds em ca Stm → (State → State).
  • 186. 9 ˆ SEMANTICA DENOTACIONAL 186 9.7 Um Resultado de Equivalˆncia e Teorema 10 Para todo comando S da linguagem exemplo While, n´s temos SSOS [[S]] = Sds [[S]]. o
  • 187. 10 ˆ ´ SEMANTICA AXIOMATICA 187 10 Semˆntica Axiom´tica a a • Corre¸˜o parcial: estabelece certa rela¸ao entre os ca c˜ valores iniciais e finais das vari´veis (se o programa a terminar); • Corre¸˜o parcial+termina¸ao=corre¸˜o total ca c˜ ca