Existe alguma ferramenta para prototipar uma semântica da linguagem de programação e um sistema de tipos que também permita algum tipo de verificação de modelo de propriedades padrão, como a solidez do tipo?
Estou perguntando isso, porque estou lendo um livro sobre o Alloy e ele fornece a funcionalidade exata que eu quero, mas para modelos expressos usando lógica relacional.
Estou ciente do Ott , mas ele não possui esse tipo de recurso de "verificação de modelo", pois está focado na geração de código para sistemas assistentes de prova.
Qualquer referência à existência dessa ferramenta seria legal.
reference-request
programming-languages
semantics
model-checking
Rodrigo Ribeiro
fonte
fonte
Respostas:
Embora existam estruturas criadas especificamente para a finalidade de prototipar linguagens de programação (incluindo semântica, sistemas de tipos, avaliação e verificação de propriedades sobre elas), a melhor opção depende do seu caso particular e das necessidades específicas.
Dito isso, existem várias alternativas (talvez não tão distintas) que você pode adotar (incluindo as que você já mencionou):
Observe que existe o compromisso entre a facilidade de uso da estrutura / ferramenta (por exemplo, tão fácil quanto a definição da definição no papel ou no Latex) e a potência dos mecanismos para verificar as propriedades do idioma (por exemplo, incorporar o linguagem em um provador de teoremas pode permitir a verificação de propriedades muito elaboradas).
[1] Casey Klein, John Clements, Christos Dimoulas, Carl Eastlund, Matthias Felleisen, Matthew Flatt, Jay A. McCarthy, Jon Rafkind, Sam Tobin-Hochstadt e Robert Bruce Findler. Execute sua pesquisa: sobre a eficácia da mecanização leve. POPL, 2012.
[2] Daniel Jackson. Liga: uma notação leve de modelagem de objetos. TOSEM, 2002.
[3] Greg Dennis, Felix Chang e Daniel Jackson. Verificação modular de código com SAT. ISSTA, 2006
[4] Sistema formal de gestão de provas Coq
[5] raciocínio formal Sobre Programas. Adam Chlipala, 2016
[6] Sistema automatizado Leon para verificar, reparar e sintetizar programas Scala funcionais.
fonte