A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Modelos de sistema: Larch Linguagem de especificação algébrica: Larch Arthur Bispo de Castro ra992659 Luciano Antonio Digiampietri ra992075."— Transcrição da apresentação:

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

2 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

3 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

4 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

5 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

6 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

7 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

8 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

9 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

10 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

11 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

12 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

13 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

14 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

15 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 2003 19: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

16 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

17 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 2003 19:03:49. Recent Success Failure Total ------ Count Time Count Time Time Ordering 11 0.01 9 0.00 0.01 Rewriting 43 0.02 273 0.01 0.03 Deductions 0 0.00 9 0.00 0.00 Unification 20 0.02 41 0.00 0.02 Prover 0.02 GC's 1 Total time 0.14 17

18 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

19 Bibliografia Larch: Languages and Tools for Formal Specification, J.V. Guttang and J.J. Horning Larch Home Page http://nms.lcs.mit.edu/Larch/http://nms.lcs.mit.edu/Larch/ Archive-name: larch-faq http://www.cs.iastate.edu/~leavens/larch-faq.html http://www.cs.iastate.edu/~leavens/larch-faq.html An Introduction to Larch: http://www.cs.utah.edu/~sjt/seminar/larch/ http://www.cs.utah.edu/~sjt/seminar/larch/ 19 OBRIGADO !

20 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

21 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); }

22 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

23 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

24 lista.lplog LP (the Larch Prover), Release 3.1b (98/06/09) logging to `/mnt/lista.lplog' on 14 May 2003 19: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 2003 19:03:49. Recent Success Failure Total ------ Count Time Count Time Time Ordering 11 0.01 9 0.00 0.01 Rewriting 43 0.02 273 0.01 0.03 Deductions 0 0.00 9 0.00 0.00 Unification 20 0.02 41 0.00 0.02 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 2003 19:03:49. Recent Success Failure Total ------ Count Time Count Time Time Ordering 3 0.00 1 0.00 0.00 Rewriting 53 0.01 154 0.00 0.01 Deductions 0 0.00 3 0.00 0.00 Unification 23 0.02 74 0.01 0.03 Prover 0.00 GC's 1 Total time 0.08 Cumulative Success Failure Total ---------- Count Time Count Time Time Ordering 14 0.01 10 0.00 0.01 Rewriting 96 0.03 427 0.01 0.04 Deductions 0 0.00 12 0.00 0.00 Unification 43 0.04 115 0.01 0.05 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 2003 19:03:49. Recent Success Failure Total ------ Count Time Count Time Time Ordering 2 0.00 0 0.00 0.00 Rewriting 18 0.00 82 0.00 0.00 Deductions 0 0.00 2 0.00 0.00 Unification 3 0.01 10 0.00 0.01 Prover 0.00 GC's 1 Total time 0.07 Cumulative Success Failure Total ---------- Count Time Count Time Time Ordering 16 0.01 10 0.00 0.01 Rewriting 114 0.03 509 0.01 0.04 Deductions 0 0.00 14 0.00 0.00 Unification 46 0.05 125 0.01 0.06 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'.


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

Apresentações semelhantes


Anúncios Google