Modelos de sistema: Larch Linguagem de especificação algébrica: Larch Arthur Bispo de Castro...

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

Transcript of Modelos de sistema: Larch Linguagem de especificação algébrica: Larch Arthur Bispo de Castro...

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

Modelos de sistema:

Linguagem de

especificação algébrica: LarchLarch

Arthur Bispo de Castro ra992659

Luciano Antonio Digiampietri ra992075

Page 2: Modelos de sistema: Larch Linguagem de especificação algébrica: Larch Arthur Bispo de Castro ra992659 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

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

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 Xerox3

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

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

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

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

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

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

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

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

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

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

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

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

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

Aplicação ao estudo de casoEspecificação simplificada – elevador (I)

includes Listaincludes Sentidoincludes Andarincludes Emergenciaincludes SomaSubtrai

declare Elevador tuple of Andar, Sentido, List, Emergenciadeclare 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

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

Aplicação ao estudo de casoEspecificaçã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

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

Aplicação ao estudo de casoEspecificação completa – lista (I)

set script listaset log listaclearset trace 0set name lista

declare sorts Elemento, Listadeclare variables e, e1: Elemento, x, y, z: Listadeclare operators null : -> Lista cons : Elemento, Lista -> Lista append : Lista, Lista -> Lista rev : Lista -> Lista pertence : Elemento, Lista -> Bool ..

12

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

Aplicação ao estudo de casoEspecificaçã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

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

Aplicação ao estudo de casoEspecificação completa – lista (III)

% Teoremas

set name theoremassert rev(rev(x)) = xcompletestatisticsdelete theoremcompleteassert append(append(x, y), z) = append(x, append(y, z))completeassert rev(append(x, y)) = append(rev(y), rev(x))completestatisticsassert pertence(e, append(x,y)) = pertence(e,x) \/

pertence(e,y)completestatistics14

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

Aplicação ao estudo de casoProva 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: clearLP0.1.6: set trace 0The trace-level is now 0.LP0.1.7: set name listaThe name-prefix is now `lista'.LP0.1.8: LP0.1.9: declare sorts Elemento, ListaLP0.1.10: declare variables e, e1: Elemento, x, y, z: ListaLP0.1.11: declare operators null : -> Lista cons : Elemento, Lista -> Lista append : Lista, Lista -> Lista rev : Lista -> Lista pertence : Elemento, Lista -> Bool ..

15

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

Aplicação ao estudo de caso Prova completa – lista (II)

LP0.1.12: LP0.1.13: % AxiomasLP0.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: completeThe system is complete.LP0.1.18: 16

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

Aplicação ao estudo de casoProva completa – lista (III)

LP0.1.19: % TeoremasLP0.1.20: LP0.1.21: set name theoremThe name-prefix is now `theorem'.LP0.1.22: assert rev(rev(x)) = xLP0.1.23: completeThe system is complete.LP0.1.24: statisticsStatistics as of 14 May 2003 19:03:49.

Recent Success Failure Total------ Count Time Count Time TimeOrdering 11 0.01 9 0.00 0.01Rewriting 43 0.02 273 0.01 0.03Deductions 0 0.00 9 0.00 0.00Unification 20 0.02 41 0.00 0.02Prover 0.02GC's 1Total time 0.1417

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

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

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

Bibliografia

Larch: Languages and Tools for Formal Specification, J.V. Guttang and J.J. Horning

Larch Home Page http://nms.lcs.mit.edu/Larch/ Archive-name: larch-faq

http://www.cs.iastate.edu/~leavens/larch-faq.html An Introduction to Larch:

http://www.cs.utah.edu/~sjt/seminar/larch/

19OBRIGADO !

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

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

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

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

}

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

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

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

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

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

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'.