• Nenhum resultado encontrado

4 Integração de solucionadores SMT à Plataforma Rodin

4.2 Histórico

No Capítulo 2, esclarece-se que o processo Event-B é baseado no método B de desen- volvimento formal de software. A seguir são citados trabalhos que demonstram suporte de solucionadores SMT na verificação de obrigações de prova geradas na aplicação de B. A evolução destes trabalhos e, principalmente, o fato de ambos Event-B e B utilizarem basicamente a mesma lógica − e, portanto, sendo necessário o suporte de provadores auto- máticos − caracterizam parte do histórico e motivação para a integração de solucionadores SMT na Plataforma Rodin.

4.2.1

SMT e Método B

Couchot et al. (2003) apresentam uma técnica de descarte automático de obrigações de prova por meio de transformações de especificações B e posterior aplicação do provador harVEy (DÉHARBE; FONTAINE, 2006). Em Tavares (2008) descreve-se a integração de

suporte à teoria de conjuntos em harVEy, possibilitando sua aplicação na verificação de obrigações de prova produzidas pelo método B.

Gurgel et al. (2010) descrevem o pacote ZB2SMT que tem como objetivo integrar ferramentas de apoio aos métodos B e Z, tais como Batcave (MARINHO et al., 2007) e CRefine (OLIVEIRA; GURGEL; CASTRO, 2008), a solucionadores SMT. Os autores explicam que a ferramenta integra os formalismos em B e Z e os traduz para SMT-LIB. Esta tradução pode, então, ser utilizada como entrada de provadores compatíveis tais como veriT (BOUTON et al., 2009).

Mentré et al. (2012) explicam uma outra abordagem de tradução de obrigações de prova produzidas pelo método B, para viabilizar a verificação por meio de solucionadores SMT. A técnica descrita envolve a conversão das POs para o formato de entrada do front- end para provadores Why3 (FILLIÂTRE; PASKEVICH, 2013). Conchon e Iguernelala (2014)

apresentam modificações propostas ao solucionador Alt-Ergo (CONCHON; CONTEJEAN,

4.2.2

SMT e Event-B

Mais recentemente, iniciativas têm sido tomadas para prover suporte a solucionadores SMT para uso com Event-B. Assim, este trabalho relaciona-se de forma mais direta àqueles que descrevem o desenvolvimento do plugin SMT para a Plataforma Rodin. Os trabalhos citados nesta seção serviram de embasamento para o restante deste capítulo.

Déharbe (2010) apresenta a ideia inicial de verificação de obrigações de prova produzi- das no desenvolvimento com Event-B por meio de um solucionador SMT. São introduzidos os aspectos de tradução da linguagem utilizada nas obrigações de prova para o formato SMT-LIB. A formalização matemática também é apresentada. Um descrição expandida da abordagem pode ser encontrada em Déharbe (2013). Enfatiza-se que o mecanismo de tradução desenvolvido pode, potencialmente, ser aplicado também à classe de obrigações de prova de B, Z, VDM e TLA+ (LAMPORT, 2001).

Apresenta-se uma descrição do trabalho voltado à implementação do plug-in em Al- meida e Déharbe (2010). Os autores demonstram as características da versão até então desenvolvida, como por exemplo o suporte ao provador veriT e sua versão estendida do formato SMT-LIB. Um detalhamento da implementação da técnica de tradução com de- finições macro pode ser encontrada em Almeida (2013).

Déharbe et al. (2012, 2014a, 2014b) descrevem a evolução do plug-in. Discutem-se duas abordagens diferentes de tradução de sequentes Event-B para SMT-LIB. Explicam- se ainda particularidades do comportamento interno de solucionadores SMT em relação às fórmulas suportadas. A validação da proposta é feita por meio da verificação de um número considerável de obrigações de prova advindas de projetos industriais e acadêmicos.

4.2.3

Retorno para obrigações de prova não descartadas em Ro-

din

A ideia de prover feedback útil ao usuário quando uma PO em Rodin não é verifi- cada pode ser encontrada também em trabalhos que utilizam o verificador de modelos e animador ProB (LEUSCHEL; BUTLER, 2008) como um raciocinador.

Ligot, Bendisposto e Leuschel (2007) apresentam o ProB Disprover: um plug-in para Rodin que faz uso do solucionador de restrições de ProB. O plug-in traduz sequentes Event-B em uma máquina B, contendo as hipóteses e o objetivo a ser provado, além de uma operação disprove, cuja pré-condição é formada pela conjunção das hipóteses e a negação da conclusão. Após esta etapa de tradução, ProB é executado para tentar

encontrar um contra-exemplo da fórmula. Caso este seja encontrado, a PO é inválida e o resultado é exibido na interface da plataforma. Esta versão da ferramenta, porém, ainda não era capaz de ser utilizada como provador já que ProB apresentava limitações relacionadas à manipulação de conjuntos infinitos ou não-enumerados e variáveis inteiras de valor não estabelecido na especificação. Nestes casos, não encontrar um contra-exemplo da fórmula não era garantia de que a PO era inválida.

Krings, Bendisposto e Leuschel (2014) descrevem a integração do rastreamento de enumeração de conjuntos infinitos e busca exaustiva (funcionalidades implementadas em ProB) ao Disprover, viabilizando seu uso como provador. Os autores avaliaram o plug-in, comparando sua eficácia com a de outros provadores disponíveis para Rodin no descarte de um conjunto de obrigações de prova. Demonstrou-se, como resultados, que ProB Disprover é uma alternativa complementar aos provadores padrão de Rodin e ao plug-in SMT, já que é capaz de descartar tipos diferentes de obrigações de prova em relação às táticas comumente disponíveis. A respeito das diferenças de classe de POs, destaca-se que:

• Os provadores padrão de Rodin (PP, newPP e ML) são eficazes no descarte de POs que contêm estruturas de teoria dos conjuntos e expressões relacionais;

• Solucionadores SMT apresentam melhores resultados que os outros provadores em algumas POs com expressões aritméticas;

• ProB Disprover é mais bem aplicado a predicados sobre conjuntos enumerados e apresenta suporte para aritmética de inteiros sobre domínios finitos.

Documentos relacionados