métodos formais - unidade acadêmica de sistemas e...

56
Métodos Formais Notação Z - Revisão

Upload: others

Post on 21-Oct-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

  • Métodos Formais

    Notação Z - Revisão

  • Notação Z

    ✔ Utiliza lógica de predicado e teoria de conjuntos

    ✔ Permite dividir uma especificação em esquemas

    ✔ Esquemas descrevem aspectos estáti-cos e dinâmico

  • Notação Z

    ✔ Aspectos estáticos:✔ Estado que um sistema ocupa✔ As invariantes de relacionamento que são

    mantidas

  • Notação Z

    ✔ Aspectos dinâmicos:✔ Operações possíveis✔ O relacionamento entre entradas e saídas✔ As mudanças de estado que acontecem

  • Notação Z

    ✔ Uma especificação Z consiste de pará-grafos matemáticos:

    ✔ Matemática: conjuntos, sequências, coleções, funções e relações

    ✔ Tipos básicos✔ Variáveis✔ Descrições axiomáticas

  • Notação Z

    ✔ Uma especificação Z consiste de pará-grafos matemáticos:

    ✔ 'Constraints'✔ Esquemas✔ Abreviações✔ Comentários ?

  • Notação Z - Tipos

    ✔ Tipos são interpretados como conjun-tos

    ✔ Fortemente tipada ✔ Todas as variáves, constantes e expressões

    devem ter um nome✔ Tipos podem ser simples e compostos

  • Notação Z - Tipos

    ✔ Tipos simples podem ser:✔ Primitivos e básicos

    ✔ Tipo primitivo: ✔ Como todos os tipos são tratados como

    conjuntos, operações como = e ∈ são definidas para todos os tipos

  • ✔ Tipos básicos:✔ São definidos para uma especificação✔ [Nome_1,...,Nome_n][NOME,MATRICULA]✔ Operações de conjuntos

    [NOME]

    Notação Z - Tipos

    ∀ x ,y :NOME •x≠y ⇒ ......x ∈ NOME ⇒ ...

  • Notação Z - Tipos

    ✔ Tipos compostos✔ Conjuntos✔ Produtos cartesianos✔ Esquemas

    ✔ Variáveis, predicados, expressões

  • ✔ Conjuntos✔ Enumeração

    status = {pronto, executando}✔ Compressão

    pares = {x : | x < 1000 ∧ x mod 2 = 0}

    Notação Z - Tipos

  • Notação Z - Tipos

    ✔ Abreviações✔ Pode ser útil definir um novo nome no

    modelo para representar expressões complexas

    ✔ ExemploTítulo X Autor X AnoLivro == Título X Autor X Ano

  • Notação Z - Tipos

    ✔ Tuplas e produto cartesianoLivro : Titulo X Autor X AnoLivro = (The Notation Z, J.M. Spivey, 2001)

  • Notação Z - Variáveis

    ✔ Variáveis✔ As variáveis são associadas a um tipo

    através de declarações✔ ident_1, ..., ident_n : expressãop, q : 1..10livro : Titulo X Autor X Ano

  • Notação Z - Variáveis

    ✔ Expressões axiomáticas✔ Introduz variáveis e 'constraints' sobre

    seus valores✔ Predicados podem não ser declarados

    Declaração

    Predicado;...;Predicado

    Declaração

    Predicado;...;Predicado

    square : ℕℕ

    ∀n :ℕ•squaren=n∗n

  • Notação Z - Predicados

    ✔ Predicados✔ Expressões booleanas✔ Podem ser definidos isoladamente✔ Sobre variáveis pré-definidas✔ Exemplo: n_client < 5

  • Notação Z - Esquemas

    ✔ Esquemas

    Declarações

    Predicado;...;PredicadoPredicado;...;Predicado

    Nome Esquema

    NomeEsquema =̂⇔

    nome : seq Char

    ∀n:nome,m:senha • n ≠m

    Usuario

    senha : seq Char ⇔ Usuario =̂[ nome : seq Char; senha : seq Char |

    ∀n:nome,m:senha • nome ≠senha ]

    [D1,...,Dn | P1,...,Pm]

  • Notação Z

    ✔ Tipos✔ Simples e compostos

    ✔ Abreviações✔ Produtos Cartesianos✔ Expressões✔ Predicados✔ Variáveis✔ Esquemas

  • Notação Z - Predicados

    ✔ Formas de montar predicados em Z= ∀∈ ∃¬ ∃1∧ ∨ ⇒⇔

  • Notação Z - Operações

    ✔ Operações sobre tipos primitivosℤ ℕ+ < - >* ≤div ≥mod ..ℕ1 succ

  • Notação Z - Operações

    ✔ Operações sobre conjuntos∈ - pertence∪ - união∩ - intersecção\ - diferença# - cardinalidade⊆ - subconjunto⊂ - subconjunto próprio

  • Notação Z - Operações

    ✔ Operações sobre conjuntos= - igualdadeU - união generalizadaP - powerset

  • Notação Z - Operações

    ✔ Relações e funções✔ Relações binárias modelam objetos

    que relacionam membros de dois con-juntos

    A ↔ B = P(A x B)r : A ↔ B

  • Notação Z - Operações

    ✔ Funçõestotal

    parcial

    total injetora

    parcial injetora

    total sobrejetora

    parcial sobrejetora

    parcial bijetora

    total bijetora

  • Notação Z - Operações

    ✔ Operadores em relações e funções↔ relação binária→ mapletdom domínioran contra-domínio 9 composição relacional

    q:X↔Y,r:Y↔Z => X↔Zº            volta da composição relacional

    °

  • Notação Z - Operações

    ✔ Operadores em relações e funções◁ restrição de domínio

    Conj ◁ Relação▷ restrição de contra-domínio◁ subtração de domínio▷ subtração de contra-domínio~ inverso relação_ ( _ ) imagem relacional

    Relação ( Conj ) => AB X PA --> PB

  • Notação Z - Operações

    ✔ Sequência✔ Tipos são definidos a partir dos símbolos 〈

    e 〉S1 = 〈a, b, c, d〉

    ✔ Variáveis são especificadas:✔ Sequência vazia - palavra chave seq✔ Sequência não vazia - palavra chave seq₁✔ Sequência com elementos duplicados - palavra

    iseq

  • Notação Z - Operações

    ✔ Operações sobre sequências# – tamanho ⌒ – concatenaçãorev – reverso da sequênciahead – primeiro elementolast – último elementotail – sequência sem o primeiro elementofront – sequência sem o último elemento

  • Notação Z - Operações

    ✔ Operações sobre sequência ⌒/ – concatenação distribuída – sequência de sequência - ⌒/q

    prefix – prefixosuffix – sufixoin – segmento⌉ – subsequência = índice + sequência⌈ – subsequência = sequência + elementos

  • Notação Z - Operações

    ✔ Coleções (Bags)✔ Conjunto contendo a quantidade de cada

    elementos armazenado✔ Definido a partir de uma função parcial

    nos naturaisBagX == X → ℕ1TipoFicha == {vermelho, amarelo, azul}BagFicha == {vermelho → 3, amarelo → 5}

    ✔ São especificados através da palavra reservada bag

  • Notação Z - Operações

    ✔ Operações em 'bags'count ou # – quantidade de um elemento no

    bag⊗ – elemento que aparece 'n' vezes em um

    bag – pertence

    U –uniãoU – diferença – está contido

    +

    -

  • Notação Z - Exemplos

    ✔ Conta de usuário✔ Um usuário possui nome e senha✔ O nome é diferente da senha✔ A senha não deve ter mais que 8 dígitosCaracter = {a, b, c, d, ..., z}

    nome : seq1 Caracter

    nome ≠ senha#senha < 8

    Login

    senha : seq1 Caracter

  • Notação Z - Exemplos

    ✔ Livro de Aniversário✔ De uma lista de pessoas conhecidas, dese-

    jo representar uma agenda que armazene datas de aniversário

    ✔ A agenda deve armazenar nomes e datas de aniversário

    [NOME, DATA]

    lNomes : P NOME

    lNomes = dom aniversarios

    Agenda

    aniversarios : NOME →DATA

  • Notação Z - Exemplos

    ✔ Cliente X Servidor✔ Não podem existir 2 servidores com mes-

    mo id✔ Um servidor pode atender até no máximo

    5 requisiçõeslimite == ℕlimite < 5

    Servidor

    req: limiteid: ℕ lServ : P Servidor

    SisServ

    ∀ s1, s2 ∈ lServ •s1.id = s2.id ⇔ s1 = s2

  • Notação Z - Exemplos

    ✔ Turmas X Alunos✔ Uma turma é formada por um conjunto de

    disciplinas✔ Cada disciplina pode ter no máximo 30

    alunos[DISCIPLINA]

    lTurma : bag DISCIPLINATurma

    ∀n : ℕ • (n > 30 ∧ n ⊗ lTurma = ∅)

  • Notação Z - Decoração

    ✔ Z é uma linguagem que estrutura um conjunto de teorias matemáticas

    ✔ Convenções são utilizadas para permi-tir o uso desta teoria matemática es-truturada na descrição de programas

    ✔ O uso destas convenções permite-nos descrever espaço de estados e oper-ações

  • Notação Z - Decoração

    ✔ Espaço de estados:✔ Conjunto de estados iniciais✔ Operações

    ✔ Cada operação possui variáveis de entrada e saída

    ✔ As operações são especificadas pela relação en-tre as variáveis de entrada e saída e um par de estados (o estado antes e depois da operação)

  • Notação Z - Decoração

    ✔ Em Z, um esquema especifica um es-paço de estados sobre um tipo abstra-do

    valor, limite : ℕContador

    valor < limite

    ✔ O espaço de estados aqui é formado por todas as instâncias do contador que obedecem a invariante 0 ≤  valor

  • Notação Z - Decoração

    ✔ Para uma especificação descrever sis-temas é necessário um estado inicial

    ContadorIniciaContador

    valor = 0limite = 100

    Teorema: ∃Contador • IniciaContador

  • Notação Z - Decoração

    ✔ Uma operação especifica um estado anterior e posterior sobre um espaço de estados

    ✔ O símbolo ' identifica o estado final

    ContadorContador '

    Incrementa

    valor ' = valor + 1limite ' = limite

    ✔ As invariantes de relacionamentos de-vem ser mantidas antes e depois da operação

  • Notação Z - Decoração

    ✔ Uma operação pode conter valores de entrada e saída

    ✔ Valores de entrada são decorados no esquema que descreve a operação com o símbolo '?'

    ContadorContador 'incr? : ℕ

    Add

    valor ' = valor + incr?limite' = limite

  • Notação Z - Decoração

    ✔ Valores de saída são decorados no es-quema que descreve a operação com o símbolo '!'

    ContadorContador 'incr? : ℕretorno! : ℕ

    AddComRetorno

    valor ' = valor + incr?limite' = limiteretorno! = valor '

  • Notação Z - Decoração

    ✔ O símbolo ∆  é usado para abreviar a escrita de operações em que há mu-dança de estado

    ✔ É apenas uma convenção, não é uma operação

    ∆ ContadorIncrementa

    valor ' = valor + 1limite ' = limite

    valor, limite : ℕvalor ', limite ' : ℕ

    Incrementa

    valor < limite valor ' < limite 'valor ' = valor + 1limite ' = limite

    valor, limite : ℕContador

    valor < limite

  • Notação Z - Decoração

    ✔ O símbolo Ξ  é usado para abreviar a escrita de operações em que não há mudança de estado

    ✔ Como ∆ , é apenas uma convenção, não é uma operação

    ∆ ContadorIncrementa

    valor ' = valor + 1limite ' = limite

    valor, limite : ℕContador

    valor < limite

    Ξ Incrementaretorno! : ℕ

    RetornaAposIncrementa

    retorno! = valor '

    valor, limite : ℕvalor ', limite ': ℕretorno! : ℕ

    RetornaAposIncrementa

    valor < limitevalor ' < limite 'valor ' = valor + 1limite ' = limiteretorno! = valor '

  • Notação Z - Exemplo

    ✔ Exemplo do livro de aniversário✔ Uma agenda para armazenar nomes e

    datas de aniversário[NOME, DATA]

    lNome : P NOME

    lNome = dom aniversario

    Livro

    aniverisario : lNomes →DATA

  • Notação Z - Exemplo

    ✔ Adicionar um novo nome no livro

    ∆ Livronome? : NOMEdata? : DATA

    nome? ∉ lNomeaniversario ' = aniversario ∪ {nome? → data?}

    AdicionaNoLivro

  • Notação Z - Exemplo

    ✔ Encontrar uma data de aniversário

    Ξ Livronome? : NAMEdata! : DATA

    nome? ∈lNomedata! = aniversario(nome?)

    EncontrarAniversario

  • Notação Z - Exemplo

    ✔ Lembrete

    Ξ Livrodia? : DATAaniversariantes! : P NOME

    aniversariantes! = {a : lNome | aniversario(a) = dia?}

    Lembrete

  • Notação Z - Exemplo

    ✔ Estado inicial

    Livro

    lNome = ∅

    Inicializacao

  • Notação Z - Exemplo

    ✔ A especificação está correta, mas não considera entrada de dados não es-perados

    ✔ Adição de nomes que já existem✔ Busca de nomes que não existem

    ✔ O sistema deve parar ? Deve contin-uar operando e desconsiderar entrada de dados não esperadas ?

  • Notação Z - Exemplo

    ✔ Especificação adicional✔ Identificação de possíveis

    erros/exceções✔ Cada operação vai possuir uma saída

    resultado!✔ Operações com sucesso retornam ok✔ Os outros retornos são

    entrada_existente ou entrada_nao_existente

    RETORNO = {ok, entrada_existente,entrada_nao_existente}

  • Notação Z - Exemplo

    ✔ Retorno de sucesso para a opreação AdicionaNoLivro

    ✔ O retorno é ok

    ∆ Livronome? : NAMEdata? : DATA

    nome? ∉ lNomeaniversario ' = aniversario ∪ {nome? → data?}

    AdicionaNoLivro

    resultado! : RETORNO

    resultado! = ok

    Sucesso

    AdicionaNoLivro ∧ Sucesso

  • Notação Z - Exemplo

    ✔ Para completar a operação Adicio-naNoLivro falta considerar o caso de que uma entrada existir

    Ξ Livronome? : NOMEresultado! : RETORNO

    nome? ∈lNomeresultado! = entrada_existente

    EntradaExistente

  • Notação Z - Exemplo

    ✔ Um esquema AdicionarNoLivro mais robusto NovoAdicionarNoLivro =

    (AdicionaNoLivro ∧ Sucesso) ∨EntradaExistente

    ^

    ∆ Livronome? : NAMEdata? : DATA

    nome? ∉ lNomeaniversario ' = aniversario ∪ {nome? → data?}

    AdicionaNoLivro

    resultado! : RETORNO

    resultado! = ok

    Sucesso

    Ξ Livronome? : NOMEresultado! : RETORNO

    nome? ∈ lNomeresultado! = entrada_existente

    EntradaExistente

    ∆ Livronome? : NOMEdata? : DATAresultado! : RETORNO

    (nome? ∉lNome ∧aniversario ' = aniversario ∪ {nome? → data?} ∧ resultado! = ok) ∨ (nome? ∈lNome ∧aniversario ' = aniversario ∧ resultado! = entrada_existente)

    NovoAdicionarNoLivro

  • Notação Z - Exemplo

    ✔ No caso da operação Encon-trarAniversario o nome pode não exis-tir

    Ξ Livronome? : NOMEresultado! : RETORNO

    nome? ∉lNomeresultado! = entrada_nao_existente

    EntradaNaoExistente

    NovoEncontrarAniversario = (EncontrarAniversario ∧ Sucesso) ∨

    EntradaNaoExistente

    ^

    Ξ Livronome? : NAMEdata! : DATA

    nome? ∈ lNomedata! = aniversario(nome?)

    EncontrarAniversario

  • Notação Z - Exemplo

    ✔ No caso da operação Lembrete não há erro a ser registrado

    ✔ Se não existe aniversariante na data pas-sada, o retorno é um conjunto vazio

    Ξ Livrodia? : DATAaniversariantes! : P NOMEaniversariantes! =

    {a : lNome | aniversario(a) = dia?}

    Lembrete

    resultado! : RETORNOSucesso

    resultado! = ok

    NovoLembrete = Lembrete ∧ Sucesso ^