Verifica¸˜o de Programas
               ca

        Adolfo Neto (DAINF-UTFPR)
http://www.dainf.ct.utfpr.edu.br/~adolfo



                 November 6, 2012




   Adolfo Neto (DAINF-UTFPR)   Verifica¸˜o de Programas
                                      ca
Uma linguagem de programa¸˜o
                         ca




  Sintaxe da linguagem:
      Express˜es Aritm´ticas:
             o         e
      E ::= n|x|(−E )|(E + E )|(E − E )|(E ∗ E )
      Express˜es L´gicas:
             o     o
      B ::= true|false|(!B)|(B&B)|(E < E )|(E == E )|(E ! = E )
      Comandos: C ::= x := E |C ; C |if B{C } else {C }|while B{C }




              Adolfo Neto (DAINF-UTFPR)   Verifica¸˜o de Programas
                                                 ca
Semˆntica Operacional
   a


      A semˆntica operacional “denota o efeito sobre o estado do
            a
      programa de cada comando da linguagem.”
      Representa¸˜o da execu¸˜o de um comando C :
                ca          ca

                                     C, σ → σ

      onde σ ´ o estado antes da execu¸˜o do comando e σ ´ o
             e                        ca                 e
      estado depois da execu¸˜o do comando C .
                            ca
      “A semˆntica operacional deve denotar os efeitos de todos os
             a
      comandos da linguagem e, para isso, deve ser definida sobre
      todos os comandos e express˜es da linguagem”
                                 o
      Fonte: (SILVA; FINGER; MELO, 2006, p.189).



              Adolfo Neto (DAINF-UTFPR)   Verifica¸˜o de Programas
                                                 ca
Regras da Semˆntica Operacional
             a




   Exemplo de regra (ex. 7.2.1 de (SILVA; FINGER; MELO, 2006,
   p.189)) – Atrib-Operacional:

                                 E, σ → m
                            x := E , σ → σ[m/x]




               Adolfo Neto (DAINF-UTFPR)   Verifica¸˜o de Programas
                                                  ca
Exemplo




  Exemplo 7.2.2 (SILVA; FINGER; MELO, 2006, p.190).
  ´
  E preciso definir a semˆntica operacional de todas as express˜es
                          a                                   o
  aritm´ticas e l´gicas, al´m dos comandos.
       e         o         e




               Adolfo Neto (DAINF-UTFPR)   Verifica¸˜o de Programas
                                                  ca
Mais sobre a Semˆntica Operacional
                a

   De (SILVA; FINGER; MELO, 2006, p.191):
       A semˆntica operacional n˜o faz uma representa¸˜o expl´
             a                   a                    ca      ıcita
       entre asser¸˜es que denotam as pr´ e p´s-condi¸˜es dos
                  co                    e    o       co
       programas.
        ϕ Prog ψ (tripla de Hoare)
       Corre¸˜o parcial: para todo estado σ que satisfaz ϕ, se a
            ca
       execu¸˜o de Prog a partir do estado σ termina, produzindo
            ca
       um estado σ , ent˜o σ satisfaz ψ.
                         a
       Queremos um sistema (c´lculo) de provas para provar a
                               a
       validade da asser¸˜o “ ϕ Prog ψ ”:
                        ca

                                           ϕ Prog ψ



               Adolfo Neto (DAINF-UTFPR)     Verifica¸˜o de Programas
                                                    ca
Mais sobre a Semˆntica Operacional
                a

   De (SILVA; FINGER; MELO, 2006, p.192):
       As precondi¸˜es ϕ s˜o propriedades sobre o estado inicial do
                  co      a
       programa Prog.
       Podemos ter um estado σ que satisfa¸a a asser¸˜o ϕ:
                                          c         ca

                                           σ     ϕ

       Portanto, ap´s a execu¸˜o de Prog sobre o estado σ, um
                   o         ca
       estado σ ´ produzido. E σ satisfaz ψ:
                 e

                              σ     ϕ → Prog           σ     ψ

       onde Prog termina se executado sobre um estado que satisfaz
       ϕ e Prog σ representa o estado produzido por Prog ap´s sua
                                                           o
       execu¸˜o sobre o estado σ.
            ca

               Adolfo Neto (DAINF-UTFPR)       Verifica¸˜o de Programas
                                                      ca
Mais sobre a Semˆntica Operacional
                a


   De (SILVA; FINGER; MELO, 2006, p.192):
       A asser¸˜o
              ca     ϕ Prog ψ deve ser v´lida para TODOS os
                                        a
       estados que satisfazem ϕ:

                          ∀σ(σ       ϕ) → Prog        σ     ψ

       Assumimos que Prog termina quando executado sobre os
       estados σ. Na pr´tica temos programas que n˜o param.
                       a                           a
       As provas de programas podem ser divididas em:
           provas quando assumimos que o programa p´ra; e
                                                    a
           provas que tem como tarefa tamb´m provar a termina¸˜o do
                                          e                  ca
           programa.




              Adolfo Neto (DAINF-UTFPR)   Verifica¸˜o de Programas
                                                 ca
Mais sobre a Semˆntica Operacional: Corre¸˜o Parcial
                a                        ca


   De (SILVA; FINGER; MELO, 2006, p.192), def. 7.3.1:
       Corre¸˜o parcial: A tripla
            ca

                                       ϕ Prog ψ

       ´ satisfeita sob corre¸˜o parcial se, para todos os estados que
       e                     ca
       satisfazem ϕ, o estado resultante da execu¸˜o do programa
                                                    ca
       Prog satisfaz a p´s-condi¸˜o ψ, se Prog termina.
                         o       ca
       Nesse caso,   par   ´ a rela¸˜o de satisfazibilidade para corre¸˜o
                           e       ca                                 ca
       parcial:
                                     par   ϕ Prog ψ




               Adolfo Neto (DAINF-UTFPR)    Verifica¸˜o de Programas
                                                   ca
Mais sobre a Semˆntica Operacional: Corre¸˜o Parcial
                a                        ca



   De (SILVA; FINGER; MELO, 2006, p.192), def. 7.3.1:
       Corre¸˜o parcial ´ um requisito ineficiente, na pr´tica, porque
            ca          e                               a
       n˜o garante a termina¸˜o do programa.
        a                   ca
       Qualquer programa que n˜o termina satisfaz a sua
                              a
       especifica¸˜o.
                ca
       Na outra no¸˜o de corre¸˜o (corre¸˜o total), a
                     ca         ca       ca
       satisfazibilidade, bem como a termina¸˜o do programa, deve
                                            ca
       ser provada.




               Adolfo Neto (DAINF-UTFPR)   Verifica¸˜o de Programas
                                                  ca
Mais sobre a Semˆntica Operacional: Corre¸˜o Total
                a                        ca


   De (SILVA; FINGER; MELO, 2006, p.193), def. 7.3.2:
       Corre¸˜o total: A tripla
            ca

                                       ϕ Prog ψ

       ´ satisfeita sob corre¸˜o total se, para todos os estados que
       e                     ca
       satisfazem ϕ, o estado resultante da execu¸˜o do programa
                                                    ca
       Prog satisfaz a p´s-condi¸˜o ψ e Prog termina.
                         o       ca
       Nesse caso,   tot   ´ a rela¸˜o de satisfazibilidade para corre¸˜o
                           e       ca                                 ca
       total:
                                     tot   ϕ Prog ψ




               Adolfo Neto (DAINF-UTFPR)    Verifica¸˜o de Programas
                                                   ca
Mais sobre a Semˆntica Operacional: Corre¸˜o Total
                a                        ca




   De (SILVA; FINGER; MELO, 2006, p.193):
       Qualque programa que entra em um la¸o infinito de repeti¸˜o
                                              c                  ca
       n˜o satisfaz sua especifica¸˜o sob a rela¸˜o de corre¸˜o total.
        a                        ca             ca         ca
       Essa rela¸˜o ´ muito mais util na pr´tica.
                ca e              ´        a
       Provar corre¸˜o total de programas pode ser dividido em:
                   ca
        1. provar corre¸˜o parcial
                       ca
        2. provar que o programa termina




               Adolfo Neto (DAINF-UTFPR)   Verifica¸˜o de Programas
                                                  ca
Exemplos




  Demonstra¸˜es informais:
           co
      Exemplo 7.3.1 (SILVA; FINGER; MELO, 2006, p.193).
      Exemplo 7.3.2 (SILVA; FINGER; MELO, 2006, p.194-195).




              Adolfo Neto (DAINF-UTFPR)   Verifica¸˜o de Programas
                                                 ca
Corre¸˜o Parcial de Programas
     ca

       O sistema de provas prova ´ definido sobre cada elemento
                                 e
       sint´tico da linguagem
           a
       As provas s˜o realizadas usando indu¸˜o sobre as estruturas
                  a                        ca
       dos programas
       Ou seja, as regras provam a corre¸˜o de uma asser¸˜o para
                                        ca              ca
       um comando mais complexo pela prova de corre¸˜o das
                                                     ca
       asser¸˜es de seus subcomandos.
            co
       Devemos distinguir dois elementos no sistema de provas:
        1. as regras de inferˆncia sobre cada um dos elementos sint´ticos
                             e                                     a
           dos programas
        2. o mecanismo de prova usando as regras definidas
       As regras s˜o chamadas regras de Hoare. O conjunto das
                  a
       regras forma a l´gica de Hoare.
                       o
   Fonte: (SILVA; FINGER; MELO, 2006, p.195).

               Adolfo Neto (DAINF-UTFPR)   Verifica¸˜o de Programas
                                                  ca
Regras da Semˆntica Operacional
             a




   Composi¸˜o:
          ca
                             ϕ C1 η        η C2 ψ
                                 ϕ C 1; C 2 ψ




                 Adolfo Neto (DAINF-UTFPR)   Verifica¸˜o de Programas
                                                    ca
Regras da Semˆntica Operacional
             a




   Atribui¸˜o:
          ca

                                ψ[E /x] x := E ψ
   A propriedade a ser satisfeita antes da atribui¸˜o ´ a pr´pria ψ com
                                                  ca e      o
   todas as ocorrˆncias de x substitu´
                 e                    ıdas pela express˜o E , ψ[E /x].
                                                       a




                 Adolfo Neto (DAINF-UTFPR)   Verifica¸˜o de Programas
                                                    ca
Regras da Semˆntica Operacional
             a




   IfElse:
                 φ ∧ B C1 ψ        φ ∧ ¬B C 2 ψ
                     φ if B{C 1}else {C 2} ψ




             Adolfo Neto (DAINF-UTFPR)   Verifica¸˜o de Programas
                                                ca
Regras da Semˆntica Operacional
             a




   WhileParcial:
                                    η∧B C η
                               η while B{C } η ∧ ¬B
   Obs.: η ´ um invariante que deve ser satisfeito antes e depois de o
           e
   comando C ser executado.




                   Adolfo Neto (DAINF-UTFPR)   Verifica¸˜o de Programas
                                                      ca
Regras da Semˆntica Operacional
             a


   Implica¸˜o:
          ca

                      ϕ →ϕ              ϕC ψ                ψ→ψ
                                        ϕ C ψ

   Observa¸˜es:
          co
       Esta regra faz a conex˜o entre as provas que podemos ter na
                              a
       l´gica de predicados, usada na especifica¸˜o dos problemas,
        o                                      ca
       com a l´gica de programas aqui apresentada.
               o
       Isto nos permite considerar as provas na l´gica de predicados
                                                 o
       como parte das provas de programas
       Estabelece o elo de liga¸˜o entre especifica¸˜o e programas
                               ca                 ca



                  Adolfo Neto (DAINF-UTFPR)   Verifica¸˜o de Programas
                                                     ca
Regras da Semˆntica Operacional
             a




           E, σ → m                             ϕ C1 η        η C2 ψ
      x := E , σ → σ[m/x]                           ϕ C 1; C 2 ψ

                                          φ ∧ B C1 ψ        φ ∧ ¬B C 2 ψ
       ψ[E /x] x := E ψ                       φ if B{C 1}else {C 2} ψ

          η∧B C η                         ϕ →ϕ            ϕC ψ         ψ→ψ
     η while B{C } η ∧ ¬B                                 ϕ C ψ




              Adolfo Neto (DAINF-UTFPR)    Verifica¸˜o de Programas
                                                  ca
Sistema de Provas

   Provar que o programa P
                                             C0;
                                             C1;
                                             C2;
                                              .
                                              .
                                              .
                                             Cn
   satisfaz a especifica¸˜o
                       ca
                                       Pre: ϕ
                                       Pos: ψ
                                     par ϕ P ψ


   corresponde a . . .


                 Adolfo Neto (DAINF-UTFPR)         Verifica¸˜o de Programas
                                                          ca
Sistema de Provas

   Provar cada um dos comandos para as suas pr´ e p´s-condi¸˜es
                                              e    o       co
   individuais
                                            ϕ
                                           C0;
                                           ϕ1
                                           C1;
                                           ϕ2
                                            .
                                            .
                                            .
                                           ϕn
                                           Cn
                                           ψ

   O que corresponde a . . . Fonte: (SILVA; FINGER; MELO, 2006,
   p.199).

               Adolfo Neto (DAINF-UTFPR)         Verifica¸˜o de Programas
                                                        ca
Sistema de Provas




   O que corresponde a

                                 par   ϕ C0 ϕ1
                                par    ϕ1 C1 ϕ2
                                         .
                                         .
                                         .
                                 par   ϕ n Cn ψ

   Fonte: (SILVA; FINGER; MELO, 2006, p.200).




               Adolfo Neto (DAINF-UTFPR)   Verifica¸˜o de Programas
                                                  ca
Sistema de Provas



       A regra a ser aplicada para provar cada comando ´ detectada
                                                       e
       pela pr´pria sintaxe do comando: se ´ uma Atribui¸˜o, um
               o                            e           ca
       IfElse, etc.
       Mas aqui foram introduzidas asser¸˜es intermedi´rias entre os
                                        co            a
       comandos. Como encontrar tais asser¸˜es quando temos
                                           co
       apenas a especifica¸˜o das pr´ (ϕ) e p´s-condi¸˜es (ψ) do
                         ca        e        o       co
       problema?
       Exemplo 7.4.1 (SILVA; FINGER; MELO, 2006, p.200-201)
   Fonte: (SILVA; FINGER; MELO, 2006, p.200-201).




               Adolfo Neto (DAINF-UTFPR)   Verifica¸˜o de Programas
                                                  ca
Sistema de Provas



       Mas aqui foram introduzidas asser¸˜es intermedi´rias entre os
                                        co            a
       comandos. Como encontrar tais asser¸˜es quando temos
                                           co
       apenas a especifica¸˜o das pr´ (ϕ) e p´s-condi¸˜es (ψ) do
                         ca        e        o       co
       problema?
       Olhamos o que queremos provar para, ent˜o, introduzir
                                                  a
       asser¸˜es intermedi´rias para verificar se a premissa ´
            co            a                                 e
       suficiente para provar a asser¸˜o do topo do programa.
                                    ca
   Fonte: (SILVA; FINGER; MELO, 2006, p.201).




               Adolfo Neto (DAINF-UTFPR)   Verifica¸˜o de Programas
                                                  ca
Pr´ximos Passos
  o




      Tablˆ de provas
          o
      Exemplos de provas
      Corre¸˜o e completude do sistema de provas
           ca
      Corre¸˜o total de programas
           ca
      Notas bibliogr´ficas
                    a




              Adolfo Neto (DAINF-UTFPR)   Verifica¸˜o de Programas
                                                 ca
Referˆncias
     e




      SILVA, Fl´vio S. C. da; FINGER, Marcelo; MELO, Ana C. V.
               a
      de. L´gica para Computa¸˜o. S˜o Paulo: Thomson
           o                     ca   a
      Learning, 2006.




              Adolfo Neto (DAINF-UTFPR)   Verifica¸˜o de Programas
                                                 ca

Verificação de Programas

  • 1.
    Verifica¸˜o de Programas ca Adolfo Neto (DAINF-UTFPR) http://www.dainf.ct.utfpr.edu.br/~adolfo November 6, 2012 Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 2.
    Uma linguagem deprograma¸˜o ca Sintaxe da linguagem: Express˜es Aritm´ticas: o e E ::= n|x|(−E )|(E + E )|(E − E )|(E ∗ E ) Express˜es L´gicas: o o B ::= true|false|(!B)|(B&B)|(E < E )|(E == E )|(E ! = E ) Comandos: C ::= x := E |C ; C |if B{C } else {C }|while B{C } Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 3.
    Semˆntica Operacional a A semˆntica operacional “denota o efeito sobre o estado do a programa de cada comando da linguagem.” Representa¸˜o da execu¸˜o de um comando C : ca ca C, σ → σ onde σ ´ o estado antes da execu¸˜o do comando e σ ´ o e ca e estado depois da execu¸˜o do comando C . ca “A semˆntica operacional deve denotar os efeitos de todos os a comandos da linguagem e, para isso, deve ser definida sobre todos os comandos e express˜es da linguagem” o Fonte: (SILVA; FINGER; MELO, 2006, p.189). Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 4.
    Regras da SemˆnticaOperacional a Exemplo de regra (ex. 7.2.1 de (SILVA; FINGER; MELO, 2006, p.189)) – Atrib-Operacional: E, σ → m x := E , σ → σ[m/x] Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 5.
    Exemplo Exemplo7.2.2 (SILVA; FINGER; MELO, 2006, p.190). ´ E preciso definir a semˆntica operacional de todas as express˜es a o aritm´ticas e l´gicas, al´m dos comandos. e o e Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 6.
    Mais sobre aSemˆntica Operacional a De (SILVA; FINGER; MELO, 2006, p.191): A semˆntica operacional n˜o faz uma representa¸˜o expl´ a a ca ıcita entre asser¸˜es que denotam as pr´ e p´s-condi¸˜es dos co e o co programas. ϕ Prog ψ (tripla de Hoare) Corre¸˜o parcial: para todo estado σ que satisfaz ϕ, se a ca execu¸˜o de Prog a partir do estado σ termina, produzindo ca um estado σ , ent˜o σ satisfaz ψ. a Queremos um sistema (c´lculo) de provas para provar a a validade da asser¸˜o “ ϕ Prog ψ ”: ca ϕ Prog ψ Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 7.
    Mais sobre aSemˆntica Operacional a De (SILVA; FINGER; MELO, 2006, p.192): As precondi¸˜es ϕ s˜o propriedades sobre o estado inicial do co a programa Prog. Podemos ter um estado σ que satisfa¸a a asser¸˜o ϕ: c ca σ ϕ Portanto, ap´s a execu¸˜o de Prog sobre o estado σ, um o ca estado σ ´ produzido. E σ satisfaz ψ: e σ ϕ → Prog σ ψ onde Prog termina se executado sobre um estado que satisfaz ϕ e Prog σ representa o estado produzido por Prog ap´s sua o execu¸˜o sobre o estado σ. ca Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 8.
    Mais sobre aSemˆntica Operacional a De (SILVA; FINGER; MELO, 2006, p.192): A asser¸˜o ca ϕ Prog ψ deve ser v´lida para TODOS os a estados que satisfazem ϕ: ∀σ(σ ϕ) → Prog σ ψ Assumimos que Prog termina quando executado sobre os estados σ. Na pr´tica temos programas que n˜o param. a a As provas de programas podem ser divididas em: provas quando assumimos que o programa p´ra; e a provas que tem como tarefa tamb´m provar a termina¸˜o do e ca programa. Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 9.
    Mais sobre aSemˆntica Operacional: Corre¸˜o Parcial a ca De (SILVA; FINGER; MELO, 2006, p.192), def. 7.3.1: Corre¸˜o parcial: A tripla ca ϕ Prog ψ ´ satisfeita sob corre¸˜o parcial se, para todos os estados que e ca satisfazem ϕ, o estado resultante da execu¸˜o do programa ca Prog satisfaz a p´s-condi¸˜o ψ, se Prog termina. o ca Nesse caso, par ´ a rela¸˜o de satisfazibilidade para corre¸˜o e ca ca parcial: par ϕ Prog ψ Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 10.
    Mais sobre aSemˆntica Operacional: Corre¸˜o Parcial a ca De (SILVA; FINGER; MELO, 2006, p.192), def. 7.3.1: Corre¸˜o parcial ´ um requisito ineficiente, na pr´tica, porque ca e a n˜o garante a termina¸˜o do programa. a ca Qualquer programa que n˜o termina satisfaz a sua a especifica¸˜o. ca Na outra no¸˜o de corre¸˜o (corre¸˜o total), a ca ca ca satisfazibilidade, bem como a termina¸˜o do programa, deve ca ser provada. Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 11.
    Mais sobre aSemˆntica Operacional: Corre¸˜o Total a ca De (SILVA; FINGER; MELO, 2006, p.193), def. 7.3.2: Corre¸˜o total: A tripla ca ϕ Prog ψ ´ satisfeita sob corre¸˜o total se, para todos os estados que e ca satisfazem ϕ, o estado resultante da execu¸˜o do programa ca Prog satisfaz a p´s-condi¸˜o ψ e Prog termina. o ca Nesse caso, tot ´ a rela¸˜o de satisfazibilidade para corre¸˜o e ca ca total: tot ϕ Prog ψ Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 12.
    Mais sobre aSemˆntica Operacional: Corre¸˜o Total a ca De (SILVA; FINGER; MELO, 2006, p.193): Qualque programa que entra em um la¸o infinito de repeti¸˜o c ca n˜o satisfaz sua especifica¸˜o sob a rela¸˜o de corre¸˜o total. a ca ca ca Essa rela¸˜o ´ muito mais util na pr´tica. ca e ´ a Provar corre¸˜o total de programas pode ser dividido em: ca 1. provar corre¸˜o parcial ca 2. provar que o programa termina Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 13.
    Exemplos Demonstra¸˜esinformais: co Exemplo 7.3.1 (SILVA; FINGER; MELO, 2006, p.193). Exemplo 7.3.2 (SILVA; FINGER; MELO, 2006, p.194-195). Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 14.
    Corre¸˜o Parcial deProgramas ca O sistema de provas prova ´ definido sobre cada elemento e sint´tico da linguagem a As provas s˜o realizadas usando indu¸˜o sobre as estruturas a ca dos programas Ou seja, as regras provam a corre¸˜o de uma asser¸˜o para ca ca um comando mais complexo pela prova de corre¸˜o das ca asser¸˜es de seus subcomandos. co Devemos distinguir dois elementos no sistema de provas: 1. as regras de inferˆncia sobre cada um dos elementos sint´ticos e a dos programas 2. o mecanismo de prova usando as regras definidas As regras s˜o chamadas regras de Hoare. O conjunto das a regras forma a l´gica de Hoare. o Fonte: (SILVA; FINGER; MELO, 2006, p.195). Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 15.
    Regras da SemˆnticaOperacional a Composi¸˜o: ca ϕ C1 η η C2 ψ ϕ C 1; C 2 ψ Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 16.
    Regras da SemˆnticaOperacional a Atribui¸˜o: ca ψ[E /x] x := E ψ A propriedade a ser satisfeita antes da atribui¸˜o ´ a pr´pria ψ com ca e o todas as ocorrˆncias de x substitu´ e ıdas pela express˜o E , ψ[E /x]. a Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 17.
    Regras da SemˆnticaOperacional a IfElse: φ ∧ B C1 ψ φ ∧ ¬B C 2 ψ φ if B{C 1}else {C 2} ψ Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 18.
    Regras da SemˆnticaOperacional a WhileParcial: η∧B C η η while B{C } η ∧ ¬B Obs.: η ´ um invariante que deve ser satisfeito antes e depois de o e comando C ser executado. Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 19.
    Regras da SemˆnticaOperacional a Implica¸˜o: ca ϕ →ϕ ϕC ψ ψ→ψ ϕ C ψ Observa¸˜es: co Esta regra faz a conex˜o entre as provas que podemos ter na a l´gica de predicados, usada na especifica¸˜o dos problemas, o ca com a l´gica de programas aqui apresentada. o Isto nos permite considerar as provas na l´gica de predicados o como parte das provas de programas Estabelece o elo de liga¸˜o entre especifica¸˜o e programas ca ca Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 20.
    Regras da SemˆnticaOperacional a E, σ → m ϕ C1 η η C2 ψ x := E , σ → σ[m/x] ϕ C 1; C 2 ψ φ ∧ B C1 ψ φ ∧ ¬B C 2 ψ ψ[E /x] x := E ψ φ if B{C 1}else {C 2} ψ η∧B C η ϕ →ϕ ϕC ψ ψ→ψ η while B{C } η ∧ ¬B ϕ C ψ Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 21.
    Sistema de Provas Provar que o programa P C0; C1; C2; . . . Cn satisfaz a especifica¸˜o ca Pre: ϕ Pos: ψ par ϕ P ψ corresponde a . . . Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 22.
    Sistema de Provas Provar cada um dos comandos para as suas pr´ e p´s-condi¸˜es e o co individuais ϕ C0; ϕ1 C1; ϕ2 . . . ϕn Cn ψ O que corresponde a . . . Fonte: (SILVA; FINGER; MELO, 2006, p.199). Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 23.
    Sistema de Provas O que corresponde a par ϕ C0 ϕ1 par ϕ1 C1 ϕ2 . . . par ϕ n Cn ψ Fonte: (SILVA; FINGER; MELO, 2006, p.200). Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 24.
    Sistema de Provas A regra a ser aplicada para provar cada comando ´ detectada e pela pr´pria sintaxe do comando: se ´ uma Atribui¸˜o, um o e ca IfElse, etc. Mas aqui foram introduzidas asser¸˜es intermedi´rias entre os co a comandos. Como encontrar tais asser¸˜es quando temos co apenas a especifica¸˜o das pr´ (ϕ) e p´s-condi¸˜es (ψ) do ca e o co problema? Exemplo 7.4.1 (SILVA; FINGER; MELO, 2006, p.200-201) Fonte: (SILVA; FINGER; MELO, 2006, p.200-201). Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 25.
    Sistema de Provas Mas aqui foram introduzidas asser¸˜es intermedi´rias entre os co a comandos. Como encontrar tais asser¸˜es quando temos co apenas a especifica¸˜o das pr´ (ϕ) e p´s-condi¸˜es (ψ) do ca e o co problema? Olhamos o que queremos provar para, ent˜o, introduzir a asser¸˜es intermedi´rias para verificar se a premissa ´ co a e suficiente para provar a asser¸˜o do topo do programa. ca Fonte: (SILVA; FINGER; MELO, 2006, p.201). Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 26.
    Pr´ximos Passos o Tablˆ de provas o Exemplos de provas Corre¸˜o e completude do sistema de provas ca Corre¸˜o total de programas ca Notas bibliogr´ficas a Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca
  • 27.
    Referˆncias e SILVA, Fl´vio S. C. da; FINGER, Marcelo; MELO, Ana C. V. a de. L´gica para Computa¸˜o. S˜o Paulo: Thomson o ca a Learning, 2006. Adolfo Neto (DAINF-UTFPR) Verifica¸˜o de Programas ca