Métodos Formais - Unidade Acadêmica de Sistemas e...
Transcript of Métodos Formais - Unidade Acadêmica de Sistemas e...
-
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 ^