Reducibilidad
Def.: Sean L1, L2 ⊆ Σ∗ se dirá que L1 se reduce a L2 (L1 α L2) si existe una función total computable (o recursiva) f: Σ∗→Σ∗ tal que ∀w ∈Σ∗, w ∈ L1 ⇔ f(w) L2.
Se dice que f es computable si existe una MT que la computa y que siempre se detiene.
Nota: la reducibilidad es una transformación de instancias de un problema en instancias de otro problema. Ejercicio 1: Σ = {0, 1} L1 = {w ∈ Σ* / cant1(w) es par} L2 = {w ∈ Σ* / cant1(w) es impar}
Donde cant1(w) es la cantidad de 1 que hay en w Demostrar que L1 α L2.
Se construye Mf, una MT que computa la función de reducibilidad. Mf = <{q0, q1}, {a, b}, {a, b, B}, δ, q0, ∅>
Hay que demostrar que Mf siempre se detiene y que w ∈ L1 ⇔ Mf(w) ∈ L2 1) Mf siempre se detiene: claramente sí, pues solamente ejecuta un movimiento.
q0 B → (1, S) q1 δ: 0 → (1, S) 1 → (0, S)
M
fw
f(w)
Mf nunca loopea. A veces, usaremos la expresión Mf(w) para referirnos a la función computada por la MT Mf w . L1 w’ . Σ∗ f(w) . L1 f(w’) . Σ∗2) w ∈ L1 ⇔ Mf(w) L2
Claramente si w comienza con 1 entonces cant1(Mf(w)) = cant1(w) – 1, y si w no comienza con 1 cant1(Mf(w)) = cant1(w) + 1. Por lo tanto
a) Si w ∈ L1⇒ cant1(w) es par ⇒ cant1(Mf(w)) es impar ⇒ Mf(w) ∈ L2 b) Si w ∉ L1 ⇒ cant1(w) es impar ⇒ cant1(Mf(w)) es par ⇒ Mf(w) ∉ L2 De a) y b) se tiene que w ∈ L1 ⇔ Mf(w) L2.
Para practicar: Sean L1 = {w ∈ {0, 1}* tq cant1(w) es par} L2 = {w ∈ {0, 1}* tq cant1(w) = 1} Mf la siguiente máquina de Turing
Demostrar que Mf computa una función de reducibilidad patra L1 α L2. Es decir que: w ∈ L1 ⇔ Mf(w) L2
Ejercicio 2: Sea L un lenguaje recursivo (L ∈ R) y
L1 = {<M> tq L(M) = L y M siempre se detiene} L2 = {<M> tq L(M) = L}
Demostrar que L1 α L2
Para demostrar que L1 α L2 hay que encontrar una MT Mf que siempre se detenga para la cual sea cierto que <M> ∈ L1⇔ Mf(<M>) ∈ L2
Se construye Mf que trabaja de la siguiente manera: recorre todas las quíntuplas de <M>, si en la 3ra posición encuentra qA lo reemplaza por qR, si encuentra qR lo reemplaza por qA. Hay que demostrar que Mf se detiene y que <M> ∈ L1 ⇔ Mf(<M>) ∈ L2.
1) Mf siempre se detiene porque la entrada es finita. 2) <M> ∈ L1 ⇔ Mf(<M>) ∈ L2.
a) <M> ∈ L1⇒ Mf(<M>) ∈ L2. Si <M> ∈ L1⇒ L(M) = L ⇒
si w ∈ L ⇒ M para en qA⇒ Mf(<M>) para en qR para la misma entrada si w ∉ L ⇒ M para en qR ⇒ Mf(<M>) para en qA para la misma entrada por lo tanto Mf(<M>) acepta L
q0 1 → (B, D) 0 → (B, D) B → (1, S) q1 q2 1 → (B, D) 0 → (B, D)
⇒ Mf(<M>) ∈ L2.
b) Mf (<M>) ∈ L2⇒ Mf(<M>) acepta L ⇒ M acepta L (idem anterior) ⇒ <M> ∈ L1 También se puede hacer con <M> ∉ L1 ⇒ Mf(<M>) ∉ L2.
Nota: si L1 α L2 significa que se puede resolver L1 a partir de la resolución de L2.
Teorema: L1, L2 ∈Σ y existe la reducción L1 α L2, si L2 ∈ R ⇒ L1 ∈ R.
Dem.: L2∈ R ⇒ existe una máquina de Turing M2 tq L2 = L(M2) y M2 siempre se detiene. Se construye M1 que hace:
1) Simula Mf sobre w y obtiene f(w)
2) Simula M2 sobre f(w) y acepta sii M2 acepta a) ¿L1 = L(M1)? porque L1 α L2
w ∈ L1 ⇒ f(w) ∈ L2 ⇒ M2 para en qA con input f(w) ⇒ M1 para en qA con input w ⇒ w ∈ L(M1)
porque L1α L2
w ∉ L1⇒ f(w) ∉ L2⇒ M2 para en qR con input f(w) ⇒ M1 para en qR con input w ⇒ w ∉ L(M1)
Por lo tanto, L1 = L(M1)
b) ¿M1 se detiene siempre? Sí, pues Mf y M2 se detienen siempre por hipótesis. De a) y b) L1 ∈ R.
Teorema: Sean L1, L2 ⊆ ∑* y la reducción L1 α L2, se cumple que L2 ∈ RE ⇒ L1 ∈ RE. Se demuestra de manera similar a la demostración del teorema anterior.
Corolario: Sean L1, L2 ⊆ ∑* y la reducción L1 α L2, se cumplen que Si L1∉ R ⇒ L2∉ R
Por las contrarrecíprocas Si L1∉ RE ⇒ L2∉ RE
M
fw
f(w)
M
2q
Aq
REjercicio 3: sea HP = {(<M>, w) / M se detiene con input w}, (Halting Problem), demostrar que HP ∈ (RE-R)
1) HP ∈ RE. Se construye una MT MHP tq L(MHP) = HP. MHP simula M sobre w, si M para (en qA o en qR) MHP para en qA, si M no para, MHP no para.
2) HP ∉ R. Se puede probar con una reducción desde un lenguaje que no sea R, específicamente utilizando Lu α HP, y como Lu ∉ R será cierto HP ∉ R.
Dem. Sea la siguiente máquina de Turing Mf que computa la función f Mf((<M>,w))=(<M’>,w)
Mf trabaja de la siguiente manera:
Busca en las quíntupas de <M> el estado qR y lo reemplaza por un nuevo estado q. Luego agrega las quíntuplas (q,0,q,0,S); (q,1,q,1,S); (q,B,q,B,S) para hacerla loopear. Es decir que la máquina construida por Mf loopea cuando M para en qR.
Hay que demostrar que Mf es una máquina que computa la función de reducibilidad
1) f es computable pues Mf siempre se detiene pues la entrada es finita y luego de recorrerla agrega un número finito de quíntuplas y se detiene.
2) (<M>,w)∈Lu ⇔ (<M’>,w)∈HP ?
a) si (<M>,w)∈Lu ⇒ M acepta w ⇒ M para en qA con input w ⇒ M’ para en qA con input w ⇒ M’ se detiene con input w ⇒ (<M’>,w) ∈HP
b) si (<M>,w)∉ Lu ⇒
i. Si <M> es un código inválido de máquina de Turing ⇒M’ también lo es ⇒(<M’>,w) ∉HP
o bien
ii. M rechaza w ⇒ M loopea o para en qR con input w ⇒M’ loopea con input w ⇒(<M’>,w) ∉HP
Por a) y b) se tiene que (<M>,w)∈Lu ⇔ (<M’>,w)∈HP
dónde (<M’>,w) es Mf((<M>,w))
de 1) y 2) se tiene que Mf computa la función de reducibilidad buscada y por lo tanto queda demostrado que Lu α HP.
M
w
q
Aq
RM
HPq
AComo Lu ∉ R ⇒ HP ∉ R
Ejercicio 4: Probar que LΣ* = {<M> / L(M) = Σ*} no es recursivo.
Mostraremos que existe una reducción Lu α LΣ*
Hay que encontrar una función total computable tal que (<M>,w)∈Lu ⇔ f (<M>,w) ∈ LΣ*
Sea Mf la máquina de Turing que computa la función f (<M>,w) = <M'> y trabaja de la siguiente manera:
Mf construye <M'> escribiendo las quíntuplas necesarias para que M' borre la entrada y escriba w en la cinta, posicione el cabezal y simule M sobre w. Así M' para en qA ⇔ M acepta w
1) f((<M>,w)) es computable? Claramente sí, pues Mf para luego de realizar una cantidad finita de acciones
2) (<M>,w)∈Lu ⇔ <M’> ∈ LΣ* ?
a) Sea (<M>,w)∈Lu ⇒ M para en qA con input w ⇒M' para en qA con cualquier input ⇒<M'> ∈ LΣ*
b) Sea (<M>,w) ∉ Lu⇒
i. <M> no es un código válido de máquina de Turing ⇒ <M'> no es un código válido ⇒ <M'> ∉ LΣ*
ii. M rechaza w ⇒ M' rechaza todo input ⇒<M'> ∉ LΣ* De a) y b) se tiene que (<M>,w)∈Lu ⇔ <M’> ∈ LΣ*
De 1) y 2) se tiene que Lu α LΣ*
Por lo tanto LΣ* ∉ a R (porque Lu ∉ a R)
Nota: Puede demostrarse también que existe una reducción Lu α LΣ* y como Lu ∉ RE se tiene que LΣ* ∉ a RE
Para practicar. Demostrar que existe una reducción de Luα L∅ con L∅={<M>/ L(M)= ∅} Teorema. LEQ = {(<M1>,<M2>) / L(M1)=L(M2)} ∉ RE
Prueba: LΣ* α LEQ
La función f de reducibilidad que computa Mf es
f (<M>)=(<M>,<MΣ*>) Siendo <MΣ*> el código de una máquina de turing que acepta LΣ* Claramente Mf se detiene, por lo tanto f es computable