Lógica de Árvore de Computação (LAC) é uma ramificação-temporal da Lógica, significando que seu modelo de tempo é como a estrutura árvore no qual o futuro não é determinado. Não tem caminhos diferentes no futuro, qualquer um deles pode ser um caminho atual que é realizado. É usado na verificação formal de artefatos de software ou hardware, tipicamente por aplicações de software conhecidas como verificadores de modelos que determina se um dado artefato possui propriedades de segurança ou liveness. Por exemplo, LAC pode especificar que quando alguma condição inicial é satisfeita (ex: todas as variáveis do programa são positivas ou não há carros na estrada que escarrancham duas pistas ), então todas as possíveis execuções do programa evitam alguma condição indesejável (ex: dividir um número por zero ou o a colisão de dois carros na estrada) . Neste exemplo, a propriedade de segurança pode ser verificada por um modelo verificador que explora todas as possibilidades de transações para fora de um programa de estados satisfazendo a condição inicial que garante que todos as execuções satisfazem esta propriedade. Lógica de Árvore de Computação está na classe de Lógica temporal que inclui Lógica Temporal (LLT). Embora aqui existam propriedades expressáveis em apenas uma das LAC ou LLT, todas as propriedades em ambas as lógicas podem ser expressas em LAC*.
A linguagem das fórmulas bem formadas para LAC é gerada pela seguinte gramática:
onde p {\displaystyle p} varia sobre o conjunto das fórmulas atômicas. Nem todas esses conectivos são necessários – por exemplo, { ¬ , ∧ , AX , AU , EU } {\displaystyle \{\neg ,\land ,{\mbox{AX}},{\mbox{AU}},{\mbox{EU}}\}} Comprime um completo conjunto de conectivos , e os outros podem ser definidos utilizando eles.
Por exemplo, a seguinte é uma fórmula LAC bem formada:
Por exemplo, a seguinte não é uma fórmula LAC bem formada:
O problema com essa string é que U {\displaystyle U} pode ocorrer quando emparelhada com A {\displaystyle A} ou E {\displaystyle E} . Essa usa proposições atômicas como essa constrói os blocos para fazer declarações sobre os estados do sistema. LAC então combina essas proposições em fórmulas utilizando operadores lógicos e lógica temporal.
Os operadores lógicos são os usuais: ¬ , ∨ , ∧ , ⇒ {\displaystyle \neg ,\lor ,\land ,\Rightarrow } e ⇔ {\displaystyle \Leftrightarrow } . Por todos esses operadores, fórmulas LAC podem ser também fzer uso de constantes booleanas Verdadeiro e Falso.
Os operadores temporais são os seguintes:
A diferença com U É que aqui não é garantido que ψ {\displaystyle \psi } nunca irá ser verificada. O operador W é algumas vezes chamado de "ao menos".
Na LAC*, os operadores temporais podem ser livremente misturados. Na LAC, o operador precisa sempre estar agrupado em dois: um operador de caminho seguido de um operador de estado. Veja o exemplo abaixo. LAC* é estritamente mais expressiva que LAC.
Na LAC existe um conjunto mínimo de operadores. Todas fórmulas LAC podem ser transformadas para usarem apenas aqueles operadores. Isto é útil na Checagem de modelo. Um conjunto mínimo de operadores é: {true, ∨ , ¬ {\displaystyle \lor ,\neg } , EG, EU, EX}.
Algumas das transformações usadas para operadores temporais são:
Fórmulas LAC são interpretadas através de sistemas de transições. Um sistema de transação é uma tripla M = ( S , → , L ) {\displaystyle {\mathcal {M}}=(S,\rightarrow ,L)} , onde S {\displaystyle S} é um conjunto de estados, →⊆ S × S {\displaystyle \rightarrow \subseteq S\times S} é uma transição relativa, assumida para ser serializada, isto é, cada estado tem ao menos um sucessor, e L {\displaystyle L} é uma função de rotulação, assinando letras proposicionais à estados. Deixe M = ( S , → , L ) {\displaystyle {\mathcal {M}}=(S,\rightarrow ,L)} ser uma transição de modelo :with s ∈ S , ϕ ∈ F {\displaystyle s\in S,\phi \in F} onde F é o conjunto de fórmulas bem formadas sobre a linguagem de M {\displaystyle {\mathcal {M}}} .
Então a relação de semântica ( M , s ⊨ ϕ ) {\displaystyle ({\mathcal {M}},s\models \phi )} é definida por indução estrutural em ϕ {\displaystyle \phi } :
As 10 à 15 regras acima referem-se à caminhos de computação em modelos e são o que ultimamente caracterizam a "Árvore de Computação"; São assertivas sobre a natureza do profundo infinito da árvore de computação enraizada no dado estado s {\displaystyle s} .
A fórmula ϕ {\displaystyle \phi } e ψ {\displaystyle \psi } são ditas como semanticamente equivalentes se algum estado em algum modelo que satisfaz uma também satisfaz a outra. Isso é chamado ϕ ≡ ψ {\displaystyle \phi \equiv \psi }
Nisto pode ser ver que A e A são duplas, sendo quantificadores de caminhos de computações universais e existencies respectivamente: ¬ A ϕ ≡ E ¬ ϕ {\displaystyle \neg A\phi \equiv E\neg \phi } .
Ainda mais são G e F.
E uma instância da Lei de De Morgan pode ser formulada em LAC:
Isto ppde ser mostrado usando os identificadores que subconjunto de conectivos temporais de LAC é adequado se ele contém E U {\displaystyle EU} , ao menos um de { A X , E X } {\displaystyle \{AX,EX\}} e ao menos um de { E G , A F , A U } {\displaystyle \{EG,AF,AU\}} e os conectivos booleanos.
A equivalência importante abaixo chamada de lei da expansão; elas permitem para desvirar as verificações de um conectivo LAC à frente de seu sucessor no tempo.
Seja "P" significando "Eu amo chocolate" e Q significando "Está frio lá fora"
(Note: não apenas o resto da minha vida, desde que minha vida é finita, enquanot G é infinito).
Os dois examplos seguintes mostram o exempre entre LAC e LAC*, assim como eles permitem o operador para não ser qualificado com nenhum operador de caminho (A or E):
Lógica de Árvore de Computação (LAC) é um subconjunto de de LAC* assim como da modal µ cLACulus. LAC é também um fragmento de Alur, Henzinger and Kupferman's Lógica Temporal Alternativa (LTA).
Lógica de Árvore de Computação (LAC) e Lógica Temporal (LLT) são todos subconjuntos de LAC*. CTL e LLT não são equivalentes e eles não possuem subconjuntos em comum, o que é um próprio subconjunto de LAC e LLT.