Lógica de Árvore de Computação
# Lógica de Árvore de Computação

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

## Sintaxe da LAC

A linguagem das fórmulas bem formadas para LAC é gerada pela seguinte gramática:
    $\phi ::=\bot |\top |p|(\neg \phi )|(\phi \land \phi )|(\phi \lor \phi )|(\phi \Rightarrow \phi )|(\phi \Leftrightarrow \phi )|{\mbox{AX }}\phi |{\mbox{EX }}\phi |{\mbox{AF }}\phi |{\mbox{EF }}\phi |{\mbox{AG }}\phi |{\mbox{EG }}\phi |{\mbox{A }}[\phi {\mbox{ U }}\phi ]|{\mbox{E }}[\phi {\mbox{ U }}\phi ]$
onde $p$ varia sobre o conjunto das fórmulas atômicas. Nem todas esses conectivos são necessários – por exemplo, $\{\neg ,\land ,{\mbox{AX}},{\mbox{AU}},{\mbox{EU}}\}$ Comprime um completo conjunto de conectivos , e os outros podem ser definidos utilizando eles.
* ${\mbox{A}}$ significa por todos os Caminhos (Inevitável)
* ${\mbox{E}}$ significa pelo menos (existe) um caminho (Possível)
Por exemplo, a seguinte é uma fórmula LAC bem formada:
    ${\mbox{EF }}({\mbox{EG }}p\Rightarrow {\mbox{AF }}r$)
Por exemplo, a seguinte não é uma fórmula LAC bem formada:
    ${\mbox{EF }}{\bigr{\mbox{ U }}q{\big )}$
O problema com essa string é que $U$ pode ocorrer quando emparelhada com $A$ ou $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.

## Operadores
### Operadores Lógicos

Os operadores lógicos são os usuais: $\neg ,\lor ,\land ,\Rightarrow$ e $\Leftrightarrow$. Por todos esses operadores, fórmulas LAC podem ser também fzer uso de constantes booleanas Verdadeiro e Falso.

### Operadores Temporais

Os operadores temporais são os seguintes:
* Quantificadores através de caminhos
** A $\phi$ – All: $\phi$ tem que dizer para manter todos os caminhos começando do estado atual.
** E $\phi$ – Exists: existe ao menos um caminho começando do estado atual onde $\phi$ é mantido.
* Quantificadores de caminhos-específicos
** X $\phi$ – Next: $\phi$ precisa para manter o próximo estado (este operador é algumas vezes notado como N em vez de X).
** G $\phi$ – Globally: $\phi$ tem que manter todo o caminho subsequente.
** F $\phi$ – Finally: $\phi$ eventualmente tem que manter (em alguns momentos no caminho subsequente).
** $\phi$ U $\psi$ – Until: $\phi$ precisa manter ao menos antes de alguma posição $\psi$ manter. Isso implica que $\psi$ irá ser verificada no futuro.
** $\phi$ W $\psi$ – Weak até: $\phi$ tiver que manter $\psi$ mantém.
A diferença com U É que aqui não é garantido que $\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.

### Conjunto mínimo de operadores

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, $\lor ,\neg$, EG, EU, EX}.
Algumas das transformações usadas para operadores temporais são:
* EF$\phi$ == E[trueU($\phi$)] ( porque F$\phi$ == [trueU($\phi$)] )
* AX$\phi$ == $\neg$EX($\neg$$\phi$)
* AG$\phi$ == $\neg$EF($\neg$$\phi$) == $\neg$ E[trueU($\neg$$\phi$)]
* AF$\phi$ == A[trueU$\phi$] == $\neg$EG($\neg$$\phi$)
* A[$\phi$U$\psi$] == $\neg$( E[($\neg$$\psi$)U$\neg$($\phi$$\lor$$\psi$)] $\lor$ EG($\neg$$\psi$) )

## Semanticas da LAC
### Definição

Fórmulas LAC são interpretadas através de sistemas de transições. Um sistema de transação é uma tripla ${\mathcal {M}}=(S,\rightarrow ,L)$, onde $S$ é um conjunto de estados, $\rightarrow \subseteq S\times S$ é uma transição relativa, assumida para ser serializada, isto é, cada estado tem ao menos um sucessor, e $L$ é uma função de rotulação, assinando letras proposicionais à estados. Deixe ${\mathcal {M}}=(S,\rightarrow ,L)$ ser uma transição de modelo :with $s\in S,\phi \in F$ onde F é o conjunto de fórmulas bem formadas sobre a linguagem de ${\mathcal {M}}$.
Então a relação de semântica $({\mathcal {M}},s\models \phi )$ é definida por indução estrutural em $\phi$:
* ${\Big({\mathcal {M}},s)\models \top {\Big )}\Leftrightarrow {\Big({\mathcal {M}},s)\not \models \bot {\Big )}$
* ${\Big({\mathcal {M}},s)\models p{\Big )}\Leftrightarrow {\Bigp\in L(s){\Big )}$
* ${\Big({\mathcal {M}},s)\models \neg \phi {\Big )}\Leftrightarrow {\Big({\mathcal {M}},s)\not \models \phi {\Big )}$
* ${\Big({\mathcal {M}},s)\models \phi _{1}\land \phi _{2}{\Big )}\Leftrightarrow {\Big{\big({\mathcal {M}},s)\models \phi _{1}{\big )}\land {\big({\mathcal {M}},s)\models \phi _{2}{\big )}{\Big )}$
* ${\Big({\mathcal {M}},s)\models \phi _{1}\lor \phi _{2}{\Big )}\Leftrightarrow {\Big{\big({\mathcal {M}},s)\models \phi _{1}{\big )}\lor {\big({\mathcal {M}},s)\models \phi _{2}{\big )}{\Big )}$
* ${\Big({\mathcal {M}},s)\models \phi _{1}\Rightarrow \phi _{2}{\Big )}\Leftrightarrow {\Big{\big({\mathcal {M}},s)\not \models \phi _{1}{\big )}\lor {\big({\mathcal {M}},s)\models \phi _{2}{\big )}{\Big )}$
* ${\bigg({\mathcal {M}},s)\models \phi _{1}\Leftrightarrow \phi _{2}{\bigg )}\Leftrightarrow {\bigg{\Big{\big({\mathcal {M}},s)\models \phi _{1}{\big )}\land {\big({\mathcal {M}},s)\models \phi _{2}{\big )}{\Big )}\lor {\Big\neg {\big({\mathcal {M}},s)\models \phi _{1}{\big )}\land \neg {\big({\mathcal {M}},s)\models \phi _{2}{\big )}{\Big )}{\bigg )}$
* ${\Big({\mathcal {M}},s)\models AX\phi {\Big )}\Leftrightarrow {\Big\forall \langle s\rightarrow s_{1}\rangle {\big({\mathcal {M}},s_{1})\models \phi {\big )}{\Big )}$
* ${\Big({\mathcal {M}},s)\models EX\phi {\Big )}\Leftrightarrow {\Big\exists \langle s\rightarrow s_{1}\rangle {\big({\mathcal {M}},s_{1})\models \phi {\big )}{\Big )}$
* ${\Big({\mathcal {M}},s)\models AG\phi {\Big )}\Leftrightarrow {\Big\forall \langle s_{1}\rightarrow s_{2}\rightarrow \ldots \rangle (s=s_{1})\forall i{\big({\mathcal {M}},s_{i})\models \phi {\big )}{\Big )}$
* ${\Big({\mathcal {M}},s)\models EG\phi {\Big )}\Leftrightarrow {\Big\exists \langle s_{1}\rightarrow s_{2}\rightarrow \ldots \rangle (s=s_{1})\forall i{\big({\mathcal {M}},s_{i})\models \phi {\big )}{\Big )}$
* ${\Big({\mathcal {M}},s)\models AF\phi {\Big )}\Leftrightarrow {\Big\forall \langle s_{1}\rightarrow s_{2}\rightarrow \ldots \rangle (s=s_{1})\exists i{\big({\mathcal {M}},s_{i})\models \phi {\big )}{\Big )}$
* ${\Big({\mathcal {M}},s)\models EF\phi {\Big )}\Leftrightarrow {\Big\exists \langle s_{1}\rightarrow s_{2}\rightarrow \ldots \rangle (s=s_{1})\exists i{\big({\mathcal {M}},s_{i})\models \phi {\big )}{\Big )}$
* ${\bigg({\mathcal {M}},s)\models A[\phi _{1}U\phi _{2}]{\bigg )}\Leftrightarrow {\bigg\forall \langle s_{1}\rightarrow s_{2}\rightarrow \ldots \rangle (s=s_{1})\exists i{\Big{\big({\mathcal {M}},s_{i})\models \phi _{2}{\big )}\land {\big\forall (j<i)({\mathcal {M}},s_{j})\models \phi _{1}{\big )}{\Big )}{\bigg )}$
* ${\bigg({\mathcal {M}},s)\models E[\phi _{1}U\phi _{2}]{\bigg )}\Leftrightarrow {\bigg\exists \langle s_{1}\rightarrow s_{2}\rightarrow \ldots \rangle (s=s_{1})\exists i{\Big{\big({\mathcal {M}},s_{i})\models \phi _{2}{\big )}\land {\big\forall (j<i)({\mathcal {M}},s_{j})\models \phi _{1}{\big )}{\Big )}{\bigg )}$

### Caracterização de uma LAC

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

### Equivalências semânticas

A fórmula $\phi$ e $\psi$ são ditas como semanticamente equivalentes se algum estado em algum modelo que satisfaz uma também satisfaz a outra. Isso é chamado $\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: $\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:
    $\neg AF\phi \equiv EG\neg \phi$
    $\neg EF\phi \equiv AG\neg \phi$
    $\neg AX\phi \equiv EX\neg \phi$
Isto ppde ser mostrado usando os identificadores que subconjunto de conectivos temporais de LAC é adequado se ele contém $EU$, ao menos um de $\{AX,EX\}$ e ao menos um de $\{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.
    $AG\phi \equiv \phi \land AXAG\phi$
    $EG\phi \equiv \phi \land EXEG\phi$
    $AF\phi \equiv \phi \lor AXAF\phi$
    $EF\phi \equiv \phi \lor EXEF\phi$
    $A[\phi U\psi ]\equiv \psi \lor (\phi \land AXA[\phi U\psi ])$
    $E[\phi U\psi ]\equiv \psi \lor (\phi \land EXE[\phi U\psi ])$

## Exemplos

Seja "P" significando "Eu amo chocolate" e Q significando "Está frio lá fora"
* AG.P
    "Eu irei gostar de chocolate a partir de agora, não importa o que aconteça"
* EF.P
    "É possível que eu ame chocolate algum dia, ao menos por um dia."
* AF.EG.P
    "É sempre possível (AF) que eu comece a amar chocolate pelo resto de minha vida."
(Note: não apenas o resto da minha vida, desde que minha vida é finita, enquanot G é infinito).
* EG.AF.P
    "Isso é um momento crítico da vida. Dependendo do que venha a acontecer (E), é sempre possível que pelo resto de meu tempo (G), irá existir sempre algo no tempo no futuro (AF) quando eu amar chocolate. De qualquer maneira, se a coisa errada acontecer em seguinte, então todas as apostas são desligadas e não há garantias se eu irei sempre amar chocolate."
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):
* AG(PUQ)
    "A partir de agora, antes que fique quente lá fora, eu irei amar chocolate todo dia. Uma vez que fique quente lá fora, todas as apostas são desligadas para se eu irei gostar de chocolate mais. Ah, e é garantido ficar quente lá fora eventualmente, mesmo se por apenas um único dia."
* EF((EX.P)U(AG.Q))
    "É possível que: irá eventualmente existir um tempo quando ficar quente para sempre (AG.Q) e que antes desse tempo irá existir sempre algum jeito de eu vir a gostar de chocolate no próximo dia (EX.P)."

## Relações com outras lógicas

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.
* FG.P existe em LLT mas não em LAC.
* AG(P$\Rightarrow$((EX.Q)$\land$(EX¬Q))) existe em LAC mas não existe em LLT.