Autómato de árvore – Wikipédia, a enciclopédia livre
Um autómato de árvore é um tipo de máquina de estados que lida com estruturas em árvore (de topologia em árvore), ao invés de strings como as máquinas de estado mais convencionais.
Tal como acontece com os autómatos clássicos, um autómato de árvores finito (FTA) pode ser um autómato determinístico ou não. De acordo com a maneira que o autómato processa a árvore de entrada, o autómato de árvores finito pode ser de dois tipos: (a) bottom-up, (b) top-down. Essa é uma questão importante, pois apesar de os autómatos finitos de árvore não-determinísticos bottom-up e top-down serem equivalentes em poder expressivo, os autómatos determinísticos top-down são estritamente menos poderosos do que seus homólogos em bottom-up, por que as propriedades especificadas pelo autómato de árvores determinístico dependem apenas das propriedades do caminho. (Autómatos de árvore determinísticos bottom-up são tão poderosos quanto os autómatos em árvore não-determinísticos)
Definições
[editar | editar código-fonte]Um alfabeto classificado é um par com um alfabeto e uma função . Cada letra tem a sua aridade para que ela possa ser usada para construir termos. Elementos nulos (com aridade zero) são também chamados constantes. Termos construídos com símbolos unários e constantes podem ser considerados como [string (ciência da computação)|strings]]. Maiores aridades formam árvores.
Um autómato de árvores finito bottom-up sobre é definida por:
Onde é um conjunto de letras unárias (estados), é um alfabeto classificado, é um conjunto de estados finais, e é um conjunto de regras de transição, ou seja, rescreve as regras dos nós cujas raízes dos filhos são estados, para nós cujas raízes são estados. Assim o estado de um nó é deduzido do estado de seus filhos.
Não há estado inicial como tal, mas as regras de transição para símbolos constantes (folhas) podem ser consideradas como estados iniciais. A árvore é aceita se o estado rotulado na raiz é um estado de aceitação.
Um autómato de árvore finito sobre é definido por:
Existem duas diferenças no autómato de árvore bottom-up: primeiro, , o conjunto de seus estados iniciais, substitui ; segundo, suas regras de transição são o inverso, ou seja, rescreve as regras dos nós cujas raízes são estados para nós cujas raízes dos filhos são estados. A árvore é aceite se todo ramo pode passar por esse caminho.
Rescrever as regras fazem os símbolos de 'viajarem' ao longo dos ramos da árvore.
Pode-se facilmente imaginar que os autómatos de árvore não-determinísticos top-down são equivalentes aos não-deterministas bottom-up; as regras de transição são simplesmente invertidas, e os estados finais se tornam os estados iniciais.
A razão pela qual os deterministas top-down (FTA) são menos poderosos do que os seus homólogos bottom-up relaciona-se com o facto de um FTA determinista ser, por definição, aquele em que não há duas regras de transição contendo o mesmo lado esquerdo. Para autómatos de árvore, regras de transição são regras de reescrita; e para top-down, o lado esquerdo serão os nós pai. Consequentemente, um autómato de árvore determinístico top-down só será capaz de testar as árvore cujas propriedades são verdadeiras em todos os ramos, porque a escolha do estado para escrever em cada ramo do filho é determinado no nó pai, sem saber o conteúdo dos ramos filhos.
Propriedades
[editar | editar código-fonte]Determinismo
[editar | editar código-fonte]Como dito anteriormente, um autómato de árvore é determinístico quando não há duas regras de transição com o mesmo lado esquerdo. Esta definição corresponde à ideia intuitiva de que para um autómato ser determinístico, uma e apenas uma transição deve ser possível para um determinado nó.
Reconhecibilidade
[editar | editar código-fonte]Para um autómato bottom-up, um termo-chão t (isto é, uma árvore) é aceito se existe uma redução que começa a partir de t e termina com q(t), onde q é um estado final. Para um autómato de top-down, um termo-chão t é aceite se existe uma redução que começa a partir de q(t) e termina com t, onde q(t) é um estado inicial.
A linguagem de árvore reconhecida por um autómato de árvore é o conjunto de todos os termos-chão aceitos por . Um conjunto de termos-chão é reconhecível se existe um autómato de árvore que o reconhece.
Uma propriedade importante é que homomorfismos lineares (isto é, que preservam a aridade) preservam a reconhecibilidade.
Completude e Redução
[editar | editar código-fonte]Um autômato de árvore finito não-determinístico é completo se houver pelo menos uma regra de transição disponível para cada possível combinação de símbolo estados. Um estado é acessível se existe um termo chão, que tem uma redução de t para q (t). Um FTA é reduzido se todos os seus estados são acessíveis.
Lema do Bombeamento
[editar | editar código-fonte]Seja um conjunto de termos chão reconhecíveis. Então, existe uma constante satisfazendo: para cada termo chão em que tenha , existe um contexto , um contexto não-trivial e um termo chão tal que and, for all .
Fechamento ou Clausura
[editar | editar código-fonte]A classe de linguagens árvore reconhecível é fechada sob união, sob complementação, e sob cruzamento.
Teorema de Myhill-Nerode
[editar | editar código-fonte]Uma congruência nas linguagens-árvore é uma relação como se segue:
Será de índice finito se o número de classes de equivalência é finito.
Para uma dada linguagem árvore , defina se para todos os contextos , .
O teorema de Myhill-Nerode para autómatos de árvore afirma que as 3 seguintes afirmações são equivalentes:
- L é uma linguagem árvore reconhecível
- L é a união de algumas classes de equivalência de congruência de índice finito
- a relação é uma congruência de índice finito
Ligações externas
[editar | editar código-fonte]Todas as informações nessa página foram tiradas do Capítulo 1 de http://tata.gforge.inria.fr
Implementations
[editar | editar código-fonte]- (OCaml) Grappa - Ranked and Unranked Tree Automata Libraries (http://www.grappa.univ-lille3.fr/~filiot/tata/)
- (OCaml) Timbuk - Tools for Reachability Analysis and Tree Automata Calculations (http://www.irisa.fr/celtique/genet/timbuk/)
- (Java) LETHAL - Library for working with finite tree and hedge automata (http://lethal.sf.net/)
- (Isabelle [OCaml, SML, Haskell]) - Machine-Checked Tree Automata Library (http://afp.sourceforge.net/entries/Tree-Automata.shtml)
- (C++) VATA: A Library for Efficient Manipulation of Non-Deterministic Tree Automata - (http://www.fit.vutbr.cz/research/groups/verifit/tools/libvata/)