Como um model checker é usado?
Opcionalmente, também pode detectar deadlocks.
Vantagens
Desvantagens
No geral, é um método bom para encontrar falhas em software, que permite a verificação com certas restrições.
Comparado a testes e simulações aleatórias, pode ser mais eficiente em encontrar casos de borda onde falhas ocorrem.
Linguagens de especificação fornecem diferentes abstrações para como definir uma máquina de estados. Exemplos: Redes de Petri, TLA+ (Temporal Logic of Actions+), CSP (Communicating Sequential Processes), Alloy, entre outras.
Dois operadores temporais principais:
Fórmulas de lógica temporal são sobre um comportamento (execução) do sistema modelado.
Invariantes são predicados sobre estados individuais do sistema. Um invariante é satisfeito se e somente se ele é verdadeiro para todos os estados do sistema.
Invariantes Indutivos são tipos especiais de invariantes que podem ser provados com indução matemática, isso é, sem necessidade de explorar todos os estados.
Entradas:
Execução do model checker
Saída - Contra-exemplo:
Ótimo artefato para reprodução de bugs e geração de testes automatizados.
\faLightbulb Dica: Um invariante é uma fórmula a ser avaliada em cada estado do sistema.
Resposta: 3
Figure 1: Fonte (BULTAN, 2023)
Na lógica temporal linear (LTL), temos operadores para descrever eventos ao longo de uma única execução.
Seja \(AP\) um conjunto finito de proposições atômicas (i.e. \(\{ p_0, p_1, ..., p_n \}\)), o conjunto de fórmulas LTL sobre \(AP\) é definido indutivamente por:
\[\phi ::= \bot\mid\top\mid p\mid \neg\phi \mid \phi \lor \psi \mid \mathbf{X} \psi \mid \phi \mathbf{U} \psi\]
Os operadores G, F e R podem ser definidos usando somente X e U.
Uma formula ser falsa não significa que sua negação é verdadeira. Por exemplo, a fórmula a seguir não é necessariamente verdadeira:
\[\mathbf{F}p_1 \lor \neg\mathbf{F}p_1\]
Exemplo:
Qual dos operadores temporais G (Globally), F (Finally), X (Next), U (Until) e R (Release) pode ser representado pelo diagrama a seguir?
Resposta: X, Next
Qual dos operadores temporais G (Globally), F (Finally), X (Next), U (Until) e R (Release) pode ser representado pelo diagrama a seguir?
Resposta: G, Globally
Qual dos operadores temporais G (Globally), F (Finally), X (Next), U (Until) e R (Release) pode ser representado pelo diagrama a seguir?
Resposta: U, Until
Qual dos operadores temporais G (Globally), F (Finally), X (Next), U (Until) e R (Release) pode ser representado pelo diagrama a seguir?
Resposta: F, Finally
Qual dos operadores temporais G (Globally), F (Finally), X (Next), U (Until) e R (Release) pode ser representado pelo diagrama a seguir?
Resposta: R, Release
Uma fórmula LTL é verdadeira para uma estrutura de Kripke se ela é verdadeira no(s) estado(s) inicial(is).
Uma fórmula LTL é verdadeira em um estado se ela é verdadeira para todas as execuções iniciando naquele estado.
Ou seja, a fórmula deve ser verdadeira para todos as execuções (comportamentos) da estrutura.
A gramática a seguir define fórmulas em CTL (sendo \(p \in AP\)):
\[\phi ::= \bot\mid\top\mid p\mid \neg\phi \mid \phi \lor \psi \mid A[\phi\mathbf{U}\psi]\mid E[\phi\mathbf{U}\psi]\mid A\mid E\]
Todos os operadores temporais devem ser precedidos de A (All, Todo) ou E (Exists, Existe).
Figure 2: Fonte (RAJU, 2014)
Atenção: \(LTL \nsubseteq CTL\) and \(CTL \nsubseteq LTL\)
PS: Release é V
nesse sistema
CTL:
EF(cem_graus)
: trueesquentando -> AF cem_graus
: falseesquentando -> EF temperatura_ambiente
: trueEF(EG(!cem_graus))
: true
LTL:
F(temperatura_ambiente | cem_graus)
: falseF(esquentando | esfriando)
: truetemperatura_ambiente
CTL:
EF trabalho
: trueAF trabalho
: false
LTL:
F trabalho
: falseEF trabalho
formatura -> X(G(trabalho | adulto_dormir))
: trueformatura -> X(trabalho U adulto_dormir)
: true(F brincar) U formatura
: false
Na prática, quando queremos verificar o equivalente a EF p
onde p
é uma proposição (não uma fórmula temporal), fazemos o seguinte:
Definimos p
como uma invariante (isso é, p
deve ser verdade em todos os estados)
Rodamos o model checker
Invertemos o resultado:
EF p
é falsaEF p
é verdadeira (e o contra-exemplo é um exemplo de execução onde F p
é verdade).