FO (complexidade)

Origem: Wikipédia, a enciclopédia livre.

FO é uma classe de complexidade de estruturas que podem ser reconhecidas por fórmulas da lógica de primeira ordem. É a base do campo da teoria da complexidade descritiva e é equivalente à classe de complexidade AC0 FO-regulares. Várias extensões de FO, formadas pela adição de certos operadores, dão origem a outras classes de complexidade conhecidas [1], permitindo que a complexidade de certos problemas seja provada sem ter que recorrer ao nível algorítmico.

Definição e exemplos[editar | editar código-fonte]

A ideia[editar | editar código-fonte]

Quando usamos o formalismo lógico para descrever um problema computacional, a entrada é uma estrutura finita e os elementos dessa estrutura formam o domínio de discurso. Usualmente a entrada é ou uma string (de bits ou sobre um alfabeto) dos elementos que são posições da string, ou um grafo cujos elementos são vértices. O comprimento da entrada será dado pelo tamanho da respectiva estrutura. Qualquer que seja a estrutura, podemos assumir que há relações que podem ser testadas, por exemplo “ é verdadeiro se e somente se existe uma aresta de para ” ( no caso da estrutura estar em um grafo), ou “ é verdadeiro se e somente se o -ésimo carácter da string é 1”. Essas relações são os predicados para a lógica de primeira ordem. Também há constantes, que são elementos especiais da respectiva estrutura. Um exemplo é verificar se um dado vértice é alcançável em um certo grafo. Para isso teremos que escolher duas constantes s(início) e t(fim).

Na teoria da complexidade descritiva temos quase sempre que supor que há uma ordem total sobre os elementos e que podemos checar a igualdade entre os elementos. Isso nos permite considerar elementos como números: o elemento representa o número se e somente se há elementos com . Graças a isso podemos considerar a primitiva “bit”, onde é verdadeiro se e somente se o -ésimo bit de é 1. Podemos substituir a adição e multiplicação por relações ternárias tal que adição é verdadeiro se e somente se e multiplicação se e somente se ).

Definição formal[editar | editar código-fonte]

A semântica das fórmulas em FO é direta, é verdadeira se e somente se é falso, é verdadeiro e é verdadeiro se e somente se é verdadeiro e é verdadeiro, e é verdadeiro se e somente se é verdadeiro para todos os valores que pode ter no universo fundamental.

Propriedades[editar | editar código-fonte]

Justificativa[editar | editar código-fonte]

Dado que elementos computacionais são apenas ponteiros, i.e strings de bits, na complexidade descritiva as premissas que temos tem uma ordem sobre o elemento de uma estrutura faz sentido. Pela mesma razão comumente supomos que ou bit é um predicado ou +, e X, visto que essas funções primitivas podem ser calculadas na maioria das classes de complexidade menores.

FO sem essas primitivas é estudada com mais ênfase na teoria de modelos finitos, e seu equivalente para classes de complexidade menores; essas classes são as decidiveis pela máquina relacional.

Aviso[editar | editar código-fonte]

Um consulta FO irá então ser a avaliação de se uma formula na lógica de primeira ordem é verdadeira sobre uma estrutura representando a entrada para o problema. Não se deve confundir esse tipo de problema com o da checagem de se uma fórmula booleana é verdadeira, que é a definição de QBF, que é PSPACE-completo. A diferença entre esses dois problemas é que em QBF o tamanho do problema é o tamanho da fórmula e elementos são somente valores booleanos, enquanto no FO o tamanho do problema, isto é, o tamanho da estrutura e fórmula, são fixos.

Isso é similar a Complexidade parametrizada mas o tamanho da fórmula não é um parâmetro fixo.

Forma normal[editar | editar código-fonte]

Toda fórmula tem uma equivalente na forma normal prenex (onde todos os quantificadores são escritos primeiramente, seguidos de uma fórmula livre de quantificadores).

Operadores[editar | editar código-fonte]

FO quaisquer operadores[editar | editar código-fonte]

Na complexidade de circuitos, pode-se mostrar a equivalência entre FO e AC0, a primeira classe na hierarquia AC. De fato, há uma tradução natural de símbolos de FO a nós de um circuito, com sendo e de tamanho .

Ponto fixo parcial pertence a PSPACE[editar | editar código-fonte]

FO(PFP) é o conjunto de consultas booleanas definível em FO onde adicionamos um operador de ponto fixo parcial.

Seja um inteiro , de variáveis, uma variável de segunda ordem com aridade k e uma função FO(PFP) que usa e como variáveis. Podemos iterativamente definir tal que e (significando com substituído pela variável de sugunda ordem ). Assim, ou há um ponto fixo ou a lista de s é cíclica.

PFP( é definida como o valor de um ponto fixo de em se há um ponto fixo, caso contrário falso. Desde que Since s são propriedades de aridade k, há no máximo valores para s, então com um countador de espaço polinomial podemos checar se há um loop ou não.

É provado que FO(PFP) pertence a PSPACE. Essa definição é equivalente a ().

Menor ponto fixo é P[editar | editar código-fonte]

FO(LFP) é o conjunto de consultas booleanas definíveis in FO(PFP) onde o ponto fixo parcial é limitado para ser monótono. Isso é, se a variável de segunda ordem é , então sempre implica .

Podemos garantir a monoticidade restringindo a fórmula para as únicas ocorrências positivas de ( isso é, ocorrências precedidas por um número par de negações). Nós podemos alternativamente descrever LFP() como PFP() onde .

Devido à monoticidade, somente adicionamos vetores para a tabela verdade de , e uma vez que há somente vetores possíveis sempre encontraremos um ponto fixo antes iterações. Assim sendo, pode ser visto que FO(LFP) = P. Essa definição é equivalente a FO().

Fecho transitivo é NL[editar | editar código-fonte]

FO(TC) é o conjunto de consultas booleanas definíveis in FO com um operador de fecho transitivo (TC).

TC é definido da seguinte maneira: seja um inteiro positivo e um vetor de variáveis. Então TC( é verdadeiro se existe vetores de variáveis tal que z, e para todos , é verdadeiro. Aqui, é uma fórmula escrita no FO(TC) e significa que as variáveis e são substituídas por e .

Essa classe é equivalente a NL.

Fecho transitivo determinístico é L[editar | editar código-fonte]

FO(DTC) é definido como FO(TC) onde o operador do fecho transitivo é determinístico. Isso significa que quando nós aplicamos DTC(), nós sabemos que para todo , existe no máximo um tal que .

Podemos supor que DTC() é açúcar sintático para TC()) onde

Isso mostra que essa classe é equivalente a L.

Forma normal[editar | editar código-fonte]

Qualquer forma normal com um operador de ponto fixo (correspondendo o fecho transitivo) pode, sem perda de generalidade, ser escrito com apenas um operador dos operadores aplicados a 0 (correspondendo ).

Iteração[editar | editar código-fonte]

Definimos primeira ordem com iteração, 'FO[]'; onde aqui é uma classe de funções que mapeiam inteiros em inteiros e, para classes diferentes de funções obteremos diferentes classes de complexidade FO[].

Nessa seção escreveremos como equivalente de e como equivalente a . Primeiramente precisamos definir blocos quantificadores(QB do inglês) como uma lista onde is são quantificadores livres de fórmulas FO e is são ou ou . Se é um bloco quantificador então chamaremos o operador iteração que é definido como escrito vezes. Deve-se observar que aqui há quantificadores na lista mas somente variáveis sendo cada uma dessas variáveis usadas vezes.

Definimos ainda FO[] como as FO-fórmulas com um operador iteração cujo expoente está na classe , assim obtendo as seguintes igualdades:

  • FO[] é equivalente ao FO-Uniforme ACi e de fato FO[t(n)] é FO-Uniforme AC em profundidade .
  • FO[] é equivalente a NC.
  • FO[] é equivalente a PTIME, o que também é uma moutra maneira de escrever |FO(LFP).
  • FO[] é equivalente a PSPACE, uma outra forma de escrever FO(PFP).

Lógica sem relações aritméticas[editar | editar código-fonte]

Seja a relação sucessor, succ, uma relação binária tal que é verdadeira se e somente se . Sobre a lógica de primeira ordem, succ é estritamente menos expressiva que < que é menos expressiva que + que é menos expressiva que bit. + e X são menos expressivas que bit.

Usando sucessor para definir bit[editar | editar código-fonte]

É possível definir as relações adição e então bit com um fecho transitivo determinístico.

e

com

Isso significa que quando consultamos para o bit 0 checamos a paridade e vamos para (1,0) se é impar (que é um estado de aceitação), caso contrário rejeitamos. Se checarmos um bit , dividimos a por 2 e checamos bit .

Assim não faz sentido falar de apenas com sucessores, sem outros predicados.

Lógicas sem sucessores[editar | editar código-fonte]

Ná lógica sem succ, +, x, < ou bit, é formada a igualdade de FO(LFP) para p-relacional e FO(PFP) para PSPACE-relacional, com as classes P e PSPACE sobre máquinas relacionais.[2] O teorema de Abiteboul-Vianu afirma que FO(LFP) = FO(PFP) se e somente se FO(<, LFP) = FO(PFP) e se somente se P = PSPACE. Esse resultado tem sido estendido a outros pontos fixos.[2] Isso nos mostra que o problema de ordem na lógica de primeira ordem é muito mais um problema técnico que um problema fundamental.

Referências

  1. N. Immerman Descriptive complexity (1999 Springer)
  2. a b Serge Abiteboul, Moshe Y. Vardi, Victor Vianu: logics, relational machines, and computational complexity Journal of the ACM (JACM) archive, Volume 44 , Issue 1 (January 1997), Pages: 30-56, ISSN:0004-5411

Bibliografia[editar | editar código-fonte]

Ligações externas[editar | editar código-fonte]