Par crítico

Origem: Wikipédia, a enciclopédia livre.
(Redirecionado de Par Crítico)

Em sistemas de reescrita de termos quando existem duas regras num sistema renomeadas de modo a não terem variáveis de mesmo símbolo e exista em um subtermo que não seja uma variável que possa ser unificado com gerando um substituição s, então dizemos que o par <> é um par crítico do sistema onde é o resultado da aplicação de s sobre e é o resultado da substituição s aplicado a do subtermo de usado na unificação.

Teoria[editar | editar código-fonte]

Dada duas regras do sistema de reescrita de termos dizemos que elas se sobrepõem se após renomearmos as variáveis das regras, de modo que não haja variáveis em comum entre elas, exista um subtermo de (ou ele próprio), que não seja uma variável, que possa ser unificada com gerando uma substituição s.

Dada duas regras que se sobrepõem e uma substituição s sendo o resultado da unificação de com um subtermo de numa posição p, dizemos que o par <> é um par crítico onde é o resultado da aplicação de s sobre e é o resultado da substituição de s aplicado a na posição p de .

Os pares críticos de um sistema de reescrita de termos são os pares críticos obtidos da cada sobreposição de regras do sistema. Observe que isto inclui a sobreposição de uma regra com ela mesma, isto é, a sobreposição de uma regra l com ela mesma renomeada. Observe que os pares críticos são únicos a menos de uma renomeação.

Quando os termos do par crítico são iguais dizemos que é um par crítico trivial. Veremos mais adiante que eles não são importantes e podem ser desconsiderados no conjunto dos pares críticos.

Quando um dos termos do par crítico pode ser reescrito no outro termo do par através de uma cadeia de redução de zero ou mais passos dizemos que o par crítico é convergente.

Exemplo[editar | editar código-fonte]

Mostraremos como construir o conjunto dos pares críticos de um sistema de reescrita.

Seja o R = { f(g(f(x))) x, f(g(x)) g(f(x)) } um sistema de reescrita.

Construir o conjunto dos pares críticos do sistema é o processo de verificar para cada par de regras do sistema se existe uma sobreposição e neste caso determinar o par crítico.

  • Caso 1: Verificando a primeira regra com ela mesma:

1: f(g(f(x))) x

Renomeando:

2: f(g(f(y))) y

Observando as duas regras vemos que existe somente um subtermo de 1 que pode ser unficado com 2, o qual é f(x) na posição 11, isto é, o primeiro subtermo de f(g(f(x))) o qual é g(f(x)) e o primeiro subtermo de g(f(x)) o qual é f(x). Unificando f(x) com f(g(f(y))) obtemos a substituição = { x g(f(y)) }.

Aplicando a x que é o lado direito da regra 1 obtemos g(f(y)).

1.1: Aplicando a f(g(f(x))) obtemos f(g(f(g(f(y))))).

1.2: Aplicando a x que é o lado direito da regra 2 obtemos g(f(y)).

Substituindo 1.2 em 1.1 na posição 11 obtemos f(g(y)).

Logo temos o par crítico <g(f(y)),f(g(y))> resultante da sobreposição da primeira regra com ela mesma na posição 11.

  • Caso 2: Verificando a primeira regra com a segunda:

1: f(g(f(x))) x

Renomeando:

2: f(g(y)) g(f(y))

Observando as duas regras vemos que existe somente um subtermo de 1 que pode ser unificado com 2, o qual é o próprio. Unificando f(g(f(x))) com f(g(y)) obtemos a substituição = { y f(x) }.

Aplicando a x que é o lado direito da regra 1 obtemos x;

1.1: Aplicando a f(g(f(x))) obtemos f(g(f(x))).

1.2: Aplicando a g(f(y)) que é o lado direito da regra 2 obtemos g(f(f(x))).

Substituindo 1.1 por 1.2, pois é o próprio termo, obtemos f(x).

Logo temos o par crítico <x,g(f(f(x)))> resultante da sobreposição da primeira regra com ela mesma na posição vazia (o próprio termo).

  • Caso 3: Verificando a segunda regra com ela mesma:

1: f(g(x)) g(f(x))

Renomeando:

2: f(g(y)) g(f(y))

Observando as duas regras vemos que existe somente um subtermo de 1 que pode ser unificado com 2, o qual é o próprio. Unificando f(g(x)) com f(g(y)) obtemos a substituição = { x y }.

Aplicando a g(f(x)) que é o lado direito da regra 1 obtemos g(f(x)).

1.1: Aplicando a f(g(x)) obtemos f(g(y)).

1.2: Aplicando a g(f(y)) que é o lado direito da regra 2 obtemos g(f(y)).

Substituindo 1.1 por 1.2, pois é o próprio termo, obtemos g(f(y)).

Logo temos o par crítico <g(f(y)),g(f(y))> resultante da sobreposição da segunda regra com ela mesma. Observe que o par crítico é trivial.

  • Caso 4: Verificando a segunda regra com a primeira

Chegaremos a um par crítico equivalente ao caso 2.

Como examinos as sobreposições de todos os casos possíveis de combinações de duas regras obtemos o conjunto dos pares críticos para o sistema R a seguir: { <g(f(y)),f(g(y))>, <x,g(f(f(x)))>, <g(f(y)),g(f(y))>};

Principais Resultados[editar | editar código-fonte]

Como principais resultados podemos citar que se um sistema de reescrita de termos não é confluente então existe um par crítico que não é convergente, assim os pares críticos são fontes potenciais de falhas de confluência. Esse fato motivou os dois resultados a seguir:

  • Lema do par crítico: Se um termo s pode derivar dois termos distintos e pela aplicação de duas regras do sistema de reescrita de termos, então existe uma cadeia de redução iniciada por até ou existem subtermos e de s tais que e . Neste caso <> ou <> é um par crítico de R.
  • Teorema do Par Crítico: Um sistema de reescrita de termos é localmente confluente se e somente se para cada par crítico <> do sistema existir uma cadeia de redução iniciada por até .
Associando o teorema do par crítico com o lema de Newman obtemos que um sistema de reescrita de termos é confluente se e somente se para cada par crítico <> do sistema existir uma cadeia de redução iniciada por  até . Por essa razaão podemos desconsiderar os pares críticos onde os dois termos são iguais já que não podem ser fontes de problemas para a confluência.

Bibliografia[editar | editar código-fonte]

  • Term Rewriting Systems, Terese, Cambridge Tracts in Theoretical Computer Science, 2003.
  • Term Rewriting and All That, Franz Baader and Tobias Nipkow, Cambridge University Press, 1998.

Ver também[editar | editar código-fonte]