Modelos de sistema: Larch Linguagem de especificação algébrica: Larch Arthur Bispo de Castro ra992659 Luciano Antonio Digiampietri ra992075.

Slides:



Advertisements
Apresentações semelhantes
Semáforos Eduardo Nicola F. Zagari
Advertisements

ABSTRAÇÃO processo de representar um grupo de entidades através de seus atributos comuns feita a abstração, cada entidade particular (instância) do grupo.
Banco de Dados Prof. Antonio.
Banco de Dados I Aula 20.
Prof.: Bruno Rafael de Oliveira Rodrigues
Prof.: Bruno Rafael de Oliveira Rodrigues
SISTEMAS DE INFORMAÇÃO Sistemas de Bancos de Dados 2º Semestre – 2010 Pedro Antonio Galvão Junior Fone:
Programação Concorrente
Maurício Edgar Stivanello
Monitores.
Análise de Perigos MO828 – Eng. Software II Prof
Towards Specification, Modelling and Analysis of Fault Tolerance in Self Managed Systems Jeff Magee Imperial College London, London, UK Tom Maibaum McMaster.
1 MODELAGEM COM A UML (UNIFIED MODELING LANGUAGE) BREVE HISTÓRICO CARACTERÍSTICAS CONCEITOS DE PROGRAMAÇÃO ORIENTADA A OBJETOS MODELAGEM DE ANÁLISE E DE.
Rafael Pinto Frederico Corrêa
Tipos de dados Existentes BIT - {0, 1} BIT_VECTOR - {vetor de BIT}
7 Abstração Genérica Unidades genéricas e instanciação.
Slides: Prof. João Fabro UTFPR - Curitiba
Robson Godoi / Sandra Siebra
Banco de dados Profª Kelly Medeiros.
Paradigmas de programação
Escopo do teste.
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Sub-programas. Mecanismo de composição de programas Sub-programa está para peça de LEGO assim como um programa está para a construção.
Aula prática - análise contextual
Prof. Natalia Castro Fernandes Engenharia de Telecomunicações – UFF 2º semestre/2012.
Bancos de Dados Espaciais
Chamada Remota de Procedimentos
Paradigmas e Ferramentas de Desenvolvimento de Software – Revisão da linguagem C++ Lúbia Vinhas DPI - INPE.
Organização do Ambiente de Execução (Runtime System)
Tipos Abstratos de Dados
Detalhes sobre o curso
Semântica de Linguagens de Programação
Linguagem Funcional 2 Linguagem Funcional 2 - LF2 Estende LF1 com funções de alta ordem Uma função passa a ser um valor O contexto inclui um único componente:
Organização do Ambiente de Execução (Runtime system) Representação de dados Avaliação de expressões Alocação de memória Rotinas Objetos e métodos.
Paradigmas de Linguagens de Programação Linguagem Orientada a Objetos 1 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal.
Oracle 9i: SQL e PL/SQL Bruno Celso Cunha de Freitas
Curso Prático de Métodos Formais
Indução Matemática Recursão
Desenvolvendo um script SQL
VIEW - VISÕES Professor Esp. Diego André Sant’Ana
Orientação a Objetos e Java Graduação em Ciência da Computação
Pilhas Profa. Nádia Félix.
Estruturas de Dados PROFESSOR DIÓGENES FURLAN. Estruturas de Dados (ED) Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar.
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
Tradução Dirigida por Sintaxe
Campus de Caraguatatuba Aula 2: Introdução a Tecnologia de BD
Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta.
©Silberschatz, Korth and Sudarshan (modificado)4.1.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
Métodos Formais.
MPI - Message Passing Interface Mestrado em Matemática Computacional 2003.
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
Triggers (Gatilhos) Professor Esp. Diego André Sant’Ana
Hukarz Open Source Process D01 Alan Kelon, Silvio Meira Recife, 01/12/2006.
1 Communicating Sequential Processes (CSP) MO409 – Eng. de Software Profa. Eliane Martins Fernando J. C. de Lima F o - RA Rodrigo Teruo Tomita –
Shared Variables Analyser (SVA) Ferramenta desenvolvida pelo Computing Laboratory (Oxford University) Analisa programas concorrentes com variáveis compartilhadas.
A Linguagem Formal de Especificação VDM-SL
Banco de Dados I I Comandos SQL
Recursividade Profs. De Prog2 e Lab2.
Remote Procedure Call (RPC) e Rendezvous
Semântica de Linguagens de Programação
Introdução a VHDL Monitoria de Digitais.
Métodos Formais Juan Andrés Mussini.
Semântica de Ações Conceitos Básicos de Semântica de Ações, Especificações em Semântica de Ações, Primeiros Exemplos de Ações, WebAni.
Semântica em Linguagens de Programação Semântica Denotacional
Paulo Borba e Augusto Sampaio Departamento de Informática Universidade Federal de Pernambuco Especificação de Sistemas Distribuídos Parte 2.
Computadores vs. Programas / Algoritmos Computadores vs. Programas -> Algoritmos O tratamento de problemas através do computador geralmente envolve uma.
MATA56 Tipos, Verificação de Tipos Agenda Objetivo desta aula: Introduzir os principais aspectos semânticos de variáveis Palavras-chave – nomes.
Estrutura de Dados Prof. André Cypriano M. Costa
IF E ITERAÇÃO WHILE Dilvan Moreira (baseado no livro Big Java e T. Munzner)
Transcrição da apresentação:

Modelos de sistema: Larch Linguagem de especificação algébrica: Larch Arthur Bispo de Castro ra Luciano Antonio Digiampietri ra992075

Tópicos abordados: Histórico Modelo utilizado Ferramentas associadas Aspectos do sistema cobertos pelo modelo Aplicação ao estudo de caso Conclusão (pontos fracos e fortes) 2

Histórico 1973 – Steve Zilles apresentou 3 operações para conjuntos; 1974 – especificação algébrica + operacional; 1980 – especificação algébrica em duas camadas; 1990 – softwares com suporte a Larch (para verificação de especificações); Colaboradores: DARPA, NSF, the Digital Equipment Corporation e Xerox 3

Modelo utilizado Especificação como meio de comunicação. Especificação dem duas camadas: – Larch Shared Language (LSL) – Bottom tier construções básicas – Larch interface languages (BISL) – Top tier detalhes do programa 4

Modelo utilizado (II) Larch Shared Language (LSL) – Enfatiza o uso de abstrações e especificação de tipos abstratos de dados; – Permite melhor reuso; – Semanticamente mais simples; – Mais fácil de fazer e checar; 5

Modelo utilizado (III) Larch interface languages (BISL) Define as interfaces entre os componentes do programa; Deve conter as informações necessárias para a implementação do programa; – Estados do programa – Especificação dos procedimentos 6

Diferenças entre LSL e BISL LSL – Definição de teorias; – Operações sobre teorias; – Definições de operadores. BISL – Estado; – Controle; – Estruturas de programação; – Implementação. 7

Ferramentas associadas LP, the Larch proof assistant – Faz provas de especificações em Larch para multi- tipos de dados, cujos axiomas utilizem de lógica de primeira ordem; SPLINT – provador de programas em C que utiliza o Larch para as provas; 8

Aspectos do sistema cobertos pelo modelo Cobertura: – definições de tipos; – estados (ações sobre estados); – operações. Não oferece cobertura : – interfaces com usuário; – requisitos de desempenho; – requisitos de hardware (limitações de disco rígido, etc); 9

Aplicação ao estudo de caso Especificação simplificada – elevador (I) includes Lista includes Sentido includes Andar includes Emergencia includes SomaSubtrai declare Elevador tuple of Andar, Sentido, List, Emergencia declare variables a1, a2: Andar, l1: List, emergencia : e1; declare operators novo : -> Elevador apertar_botao_andar : Andar, Elevador -> Elevador apertar_botao_emergencia : Elevador -> Elevador subir : Elevador -> Elevador descer : Elevador -> Elevador.. 10

Aplicação ao estudo de caso Especificação simplificada – elevador (II) % Axions assert sort Elevador genereted by novo, apertar_botao_andar, apertar_botao_emergencia apertar_botao_andar(a2, (a1, s1, l1, e1)) = (if pertence(a2, l1) then (a1, s1, l1, e1) else (a1, s1, cons(a2, l1), e1))); apertar_botao_emergencia(a1, s1, l1, e1) = (a1, s1, l1, sim); subir(a1, s1, l1, e1) = (if s1 == descer \/ e1 == sim \/ a1 == ultimo_andar then (a1, s1, l1, e1) else (soma_1(a1), s1, l1, e1); descer(a1, s1, l1, e1) = (if s1 == subir \/ e1 == sim \/ a1 == primeiro_andar then (a1, s1, l1, e1) else (subtrai_1(a1), s1, l1, e1);.. complete 11

Aplicação ao estudo de caso Especificação completa – lista (I) set script lista set log lista clear set trace 0 set name lista declare sorts Elemento, Lista declare variables e, e1: Elemento, x, y, z: Lista declare operators null : -> Lista cons : Elemento, Lista -> Lista append : Lista, Lista -> Lista rev : Lista -> Lista pertence : Elemento, Lista -> Bool.. 12

Aplicação ao estudo de caso Especificação completa – lista (II) % Axiomas assert sort Lista generated by null, cons; append(null, x) = x; append(cons(e, y), z) = cons(e, append(y, z)); rev(null) = null; rev(cons(e, y)) = append(rev(y), cons(e, null)); cons(e, x) ~= null; cons(e1, x) = cons(e, y) e = e1 /\ x = y; pertence(e,null) = true; pertence(e,cons(e1,x)) = (if e = e1 then true else pertence(e,x)).. complete 13

Aplicação ao estudo de caso Especificação completa – lista (III) % Teoremas set name theorem assert rev(rev(x)) = x complete statistics delete theorem complete assert append(append(x, y), z) = append(x, append(y, z)) complete assert rev(append(x, y)) = append(rev(y), rev(x)) complete statistics assert pertence(e, append(x,y)) = pertence(e,x) \/ pertence(e,y) complete statistics 14

Aplicação ao estudo de caso Prova completa – lista (I) LP (the Larch Prover), Release 3.1b (98/06/09) logging to `/mnt/lista.lplog' on 14 May :03:49. LP0.1.5: clear LP0.1.6: set trace 0 The trace-level is now 0. LP0.1.7: set name lista The name-prefix is now `lista'. LP0.1.8: LP0.1.9: declare sorts Elemento, Lista LP0.1.10: declare variables e, e1: Elemento, x, y, z: Lista LP0.1.11: declare operators null : -> Lista cons : Elemento, Lista -> Lista append : Lista, Lista -> Lista rev : Lista -> Lista pertence : Elemento, Lista -> Bool.. 15

Aplicação ao estudo de caso Prova completa – lista (II) LP0.1.12: LP0.1.13: % Axiomas LP0.1.14: LP0.1.15: assert sort Lista generated by null, cons; append(null, x) = x; append(cons(e, y), z) = cons(e, append(y, z)); rev(null) = null; rev(cons(e, y)) = append(rev(y), cons(e, null)); cons(e, x) ~= null; cons(e1, x) = cons(e, y) e = e1 /\ x = y; pertence(e,null) = true; pertence(e,cons(e1,x)) = (if e = e1 then true else pertence(e,x)).. LP0.1.16: LP0.1.17: complete The system is complete. LP0.1.18: 16

Aplicação ao estudo de caso Prova completa – lista (III) LP0.1.19: % Teoremas LP0.1.20: LP0.1.21: set name theorem The name-prefix is now `theorem'. LP0.1.22: assert rev(rev(x)) = x LP0.1.23: complete The system is complete. LP0.1.24: statistics Statistics as of 14 May :03:49. Recent Success Failure Total Count Time Count Time Time Ordering Rewriting Deductions Unification Prover 0.02 GC's 1 Total time

Conclusão (pontos fracos e fortes) As especificações em Larch enfatizam concisão e clareza ao invés de execução; Para execução de algumas especificações se faz necessário que façamos asserções redundantes para checagem mecânica; Necessidade de requisição manual de provas (o usuário deve elaborar os teoremas a serem provados). 18

Bibliografia Larch: Languages and Tools for Formal Specification, J.V. Guttang and J.J. Horning Larch Home Page Archive-name: larch-faq An Introduction to Larch: OBRIGADO !

Exemplo LSL - Tabela Table: trait includes Integer introduces new: -> Tab add: -> Tab, Ind, Val -> Tab _  _: Ind, Tab -> Bool lookup: Tab, Ind -> Val size: Tab -> Int asserts  i, i1: Ind, v: Val, t: Tab; ¬(i  new); i  add(t, i1, v) == i = i1  i  t lookup(add(t,i,v), i1) == if i = i1 then v else lookup(t, i1); size(new) == 0 size(add(t,i,v)) == if i  t then size(t) else size(t) + 1

Exemplo LCL - Tabela mutable type table; use Table(table for Tab, char for Ind, char for Val, int for Int); Constant int maxTabSize; table table_create(void){ ensures result’ = new  fresh(result); } bool table_add(table t, char i, char c){ modifies t; ensures result = (size(t^) < maxTabSize  i  t^)  (if result then t’ = add(t^,i,c) else t’ = t^); } char table_read(table t, char i){ requires i  t^; ensures result = lookup(t^,i); }

elevador.lp includes Lista includes Sentido includes Andar includes Emergencia includes SomaSubtrai declare Elevador tuple of Andar, Sentido, List, Emergencia declare variables a1, a2: Andar, l1: List, emergencia : e1; declare operators novo : -> Elevador apertar_botao_andar : Andar, Elevador -> Elevador apertar_botao_emergencia : Elevador -> Elevador subir : Elevador -> Elevador descer : Elevador -> Elevador.. % Axions assert sort Elevador genereted by novo, apertar_botao_andar, apertar_botao_emergencia apertar_botao_andar(a2, (a1, s1, l1, e1)) = (if pertence(a2, l1) then (a1, s1, l1, e1) else (a1, s1, cons(a2, l1), e1))); apertar_botao_emergencia(a1, s1, l1, e1) = (a1, s1, l1, sim); subir(a1, s1, l1, e1) = (if s1 == descer \/ e1 == sim \/ a1 == ultimo_andar then (a1, s1, l1, e1) else (soma_1(a1), s1, l1, e1); descer(a1, s1, l1, e1) = (if s1 == subir \/ e1 == sim \/ a1 == primeiro_andar then (a1, s1, l1, e1) else (subtrai_1(a1), s1, l1, e1);.. complete

lista.lp set script lista set log lista clear set trace 0 set name lista declare sorts Elemento, Lista declare variables e, e1: Elemento, x, y, z: Lista declare operators null : -> Lista cons : Elemento, Lista -> Lista append : Lista, Lista -> Lista rev : Lista -> Lista pertence : Elemento, Lista -> Bool.. % Axiomas assert sort Lista generated by null, cons; append(null, x) = x; append(cons(e, y), z) = cons(e, append(y, z)); rev(null) = null; rev(cons(e, y)) = append(rev(y), cons(e, null)); cons(e, x) ~= null; cons(e1, x) = cons(e, y) e = e1 /\ x = y; pertence(e,null) = true; % pertence(e,cons(e,null)) = true; pertence(e,cons(e1,x)) = (if e = e1 then true else pertence(e,x)).. complete % Teoremas set name theorem assert rev(rev(x)) = x complete statistics delete theorem complete assert append(append(x, y), z) = append(x, append(y, z)) complete assert rev(append(x, y)) = append(rev(y), rev(x)) complete statistics assert pertence(e, append(x,y)) = pertence(e,x) \/ pertence(e,y) complete statistics

lista.lplog LP (the Larch Prover), Release 3.1b (98/06/09) logging to `/mnt/lista.lplog' on 14 May :03:49. LP0.1.5: clear LP0.1.6: set trace 0 The trace-level is now 0. LP0.1.7: set name lista The name-prefix is now `lista'. LP0.1.8: LP0.1.9: declare sorts Elemento, Lista LP0.1.10: declare variables e, e1: Elemento, x, y, z: Lista LP0.1.11: declare operators null : -> Lista cons : Elemento, Lista -> Lista append : Lista, Lista -> Lista rev : Lista -> Lista pertence : Elemento, Lista -> Bool.. LP0.1.12: LP0.1.13: % Axiomas LP0.1.14: LP0.1.15: assert sort Lista generated by null, cons; append(null, x) = x; append(cons(e, y), z) = cons(e, append(y, z)); rev(null) = null; rev(cons(e, y)) = append(rev(y), cons(e, null)); cons(e, x) ~= null; cons(e1, x) = cons(e, y) e = e1 /\ x = y; pertence(e,null) = true; % pertence(e,cons(e,null)) = true; pertence(e,cons(e1,x)) = (if e = e1 then true else pertence(e,x)).. LP0.1.16: LP0.1.17: complete The system is complete. LP0.1.18: LP0.1.19: % Teoremas LP0.1.20: LP0.1.21: set name theorem The name-prefix is now `theorem'. LP0.1.22: assert rev(rev(x)) = x LP0.1.23: complete The system is complete. LP0.1.24: statistics Statistics as of 14 May :03:49. Recent Success Failure Total Count Time Count Time Time Ordering Rewriting Deductions Unification Prover 0.02 GC's 1 Total time 0.14 Heap size = 135,379 words Free space = 5,728,821 words LP0.1.25: delete theorem LP0.1.26: complete The system is complete. LP0.1.27: assert append(append(x, y), z) = append(x, append(y, z)) LP0.1.28: complete The system is complete. LP0.1.29: assert rev(append(x, y)) = append(rev(y), rev(x)) LP0.1.30: complete The system is complete. LP0.1.31: statistics Statistics as of 14 May :03:49. Recent Success Failure Total Count Time Count Time Time Ordering Rewriting Deductions Unification Prover 0.00 GC's 1 Total time 0.08 Cumulative Success Failure Total Count Time Count Time Time Ordering Rewriting Deductions Unification Prover 0.02 GC's 2 Total time 0.22 Heap size = 139,495 words Free space = 5,727,740 words LP0.1.32: assert pertence(e, append(x,y)) = pertence(e,x) \/ pertence(e,y) LP0.1.33: complete The system is complete. LP0.1.34: statistics Statistics as of 14 May :03:49. Recent Success Failure Total Count Time Count Time Time Ordering Rewriting Deductions Unification Prover 0.00 GC's 1 Total time 0.07 Cumulative Success Failure Total Count Time Count Time Time Ordering Rewriting Deductions Unification Prover 0.02 GC's 3 Total time 0.29 Heap size = 138,145 words Free space = 5,728,056 words End of input from file `/mnt/excalibur-download/lista.lp'. End of input from file `command line arguments'.