Conjuntos recursivos(=calculables)

Anuncio
1. CONCEPTOS BÁSICOS
Lenguajes (L):
Alfabeto () = conjunto finito de símbolos.
Palabra (w) = secuencia de símbolos de un alfabeto.
Longitud de palabra (|w|) = tamaño de la palabra.
Número de apariciones del símbolo  en la palabra w ( | w | )
Todas las palabras formadas con símbolos del alfabeto  se representa como *
Lenguaje A = L(A). Se cumple que L( A)  *
Lenguaje de las partes (conjunto de los subconjuntos del conjunto A): P( A)  B | B  A
Definición de lenguajes:
1) Enumeración: válido solamente para conjuntos finitos.
2) Inducción.
3) Conjuntos.
4) Reconocedores de lenguajes:
a. Autómatas finitos: reconocen lenguajes regulares.
b. Autómatas con pila: reconocen lenguajes incontextuales.
c. MT: reconocen lenguajes recursivos (calculables mediante algún programa).
5) Generadores de lenguajes:
a. Expresiones regulares: generan lenguajes regulares.
b. Gramáticas incontextuales: generan lenguajes incontextuales.
c. MT: generan lenguajes recursivos (calculables mediante algún programa).
6) Analizadores sintácticos o parses: híbrido entre generador y reconocedor.
Relaciones (R):
Entre dos conjuntos A y B una relación R es cualquier subconjunto de A x B.  R  A x B
Dom(R)  x  A | y  B,( x, y)  R; Im(R)   y  B | x  A,( x, y)  R
Función (f):
Todo elemento de A tiene 1 única imagen. Un elemento de B está relacionado con ninguno, uno o muchos
elementos de A. ( x, y)  R  ( x, z)  R  y  z
Si f  A x B es una función se representa como f : A  B;( x, y)  f  f ( x)  y; Dom( f )  A  Im( f )  B
Función parcial es aquella en la que existe algún elemento de A que no tiene imagen.
Función total es aquella en la que todos los elementos de A tienen imagen, es decir, Dom( f )  A
Si x  Dom( f )  f SI está definida en x, f ( x)  ; Si x  Dom( f )  f NO está definida en x, f ( x) 
Función característica  A :
nos dice si un elemento pertenece(1) o no(0) al conjunto A.
Funciones de codificación x, y :
permite codificar y descodificar palabras de un lenguaje en otro. Deben ser funciones biyectivas.
Función Inversa 1  1  x, y
Función Inversa 2  2
  x : Permite obtener el valor de x teniendo la palabra codificada.
 x, y   y : Permite obtener el valor de y teniendo la palabra codificada.
Problemas:
De decisión: la respuesta es “sí” o “no”.
De cálculo..: la respuesta consiste en calcular un valor.
La pregunta a responder es: ¿este problema tiene solución algorítmica?, ¿es calculable?.
Codificación de problemas en forma de lenguaje:
Problema de decisión P3 =”¿es un número primo?”.
Es una función entre las entradas y las respuestas posibles (SI,NO).
 Sí , es primo 
f : E P  Si, No , donde E P  N y f (n)  

3
3
No
,
no
es
primo


El lenguaje sería LP3  n  N | f (n)  Sí  que contiene todas las palabras que
representan un elemento que supone la respuesta Si al problema P.
Algoritmos = Programas:
Es un conjunto finito y explícito para resolver un problema. Este conjunto es susceptible de ser automatizado.
Algoritmo (da instrucciones)  función matemática (realiza la operación).
El programa Pi calcula la función  i
UN ALGORITMO SIEMPRE CALCULA UNA FUNCIÓN, NO TODA FUNCIÓN ES CALCULABLE.
Cálculos:
Lo que un ordenador puede hacer.
MT = modelo abstracto de cálculo.
Resultado fundamental de la calculabilidad: Todos los modelos abstractos de cálculo son equivalentes.
Cálculo es, por tanto, lo que una MT puede hacer.
Las funciones calculables son aquellas que se pueden calcular con una MT.
Demostraciones:
Una teoría no es simplemente una colección de hechos.
Programas:
Un lenguaje de programación de alto nivel para poder usarse como modelo abstracto de cálculo debe tener:
1) variables enteras y booleanas
2) expresiones aritméticas sencillas
3) expresiones booleanas.
4) Lista de instrucciones:
a. Skip
b. asignación  x : E 
c. concatenación  S1; S2 
d. si B entonces S1 si no S2 fsi
e. mientras B hacer S fmientras
Programas que resuelven problemas de cálculo: tienen como entrada y salida una cadena de caracteres.
Programas que resuelven problemas de decisión: tienen como entrada un valor y devuelven un booleano.
Notación sobre programas:
p( x)  = el programa p con entrada x se detiene (converge).
p( x)  = el programa p con entrada x NO se detiene (diverge).
p( x) = el valor devuelto por el programa p con entrada x.
Si un programa se detiene entonces da un valor de salida, p ( x )  y | p ( x )  y
L( p) = es el lenguaje aceptado por p. L ( p )   x  * | p ( x )  Si
Compiladores e intérpretes:
Cada programa puede codificarse como una cadena finita de caracteres sobre un alfabeto dado.
Cada programa se puede codificar de muchas formas y cada una de ella se le puede asignar un número que lo
identifica de forma unívoca. Este número se denomina de Gödel.
Existe un programa compilador que nos dice si una cadena es un programa sintacticamente correcto.
pi ( x)  intérp(i, x)  pi ( x)
Existe un programa intérprete que simula cualquier otro:
pi ( x)  intérp(i, x) 
2. ENUMERABILIDAD
Las funciones no calculables algorítmicamente no pueden resolverse con un ordenador (problemas indecidibles).
Conjuntos enumerables:
Un conjunto S es enumerable si es FINITO o existe una función TOTAL y BIYECTIVA f : N  S
Diagonalización:
Si un conjunto es ENUMERABLE entonces CUALQUIER SUBCONJUNTO también.
Si un conjunto es NO ENUMERABLE entonces CUALQUIER SUBCONJUNTO tampoco.
El conjunto de las FUNCIONES CALCULABLES es enumerable.
3. FUNCIONES Y CONJUNTOS RECURSIVOS(=CALCULABLES)
Funciones recursivas totales y parciales:
Función recursiva parcial es aquella que es calculada por algún programa con un lenguaje de programación.
Claves: CUANDO SE PARA,  K Y APARECE  EN SU DEFINICIÓN.
“División entera”
entrada x;
si x  2 entonces r : 57
sino repetir
hasta que 1  2
fsi;
salida r
Función recursiva total es aquella que es recursiva parcial y está definida para TODAS las entradas.
Claves: CUANDO SE PARA Y NO APARECE  EN SU DEFINICIÓN.
“Producto de 2 naturales”.
entrada x;
salida x
La función calculada por un programa SIEMPRE es RECURSIVA.
Conjuntos recursivos(=calculables):
L es un conjunto recursivo si su función característica
La clase de los conjuntos recursivos se denomina REC.
L
es recursiva total.
Problemas decidibles
Son aquellos que representadas sus soluciones en forma de conjunto, este es recursivo.
Ejemplos:
Los números impares, Los números primos, N y , Los finitos, Los Cofinitos ( finitosc ).
La funciones NO recursivas existen:
Dada f :    f es total pero no es recursiva (no puede ser calculada por ningún programa) definida como:
 n (n)  1 si  n ( n) 
f ( n)  
si  n ( n) 
1
Por reducción al absurdo: Suponemos que sí es recursiva (existe una máquina m que la calcula).
f   m  f ( m)   m ( m)
Pero, por la definición de f (n) tenemos que f (m)   m (m)  1.
El error nos indica que esta máquina m no existe, y por lo tanto, no es recursiva.
Procedimiento efectivo
1) Se lleva a cabo en finitos pasos de tiempo finito
2) Siempre debe dar una salida (no se puede colgar).
K, el conjunto de las codificaciones de programas que se paran cuando leen su
propio código como entrada : K   x |  x ( x) 
¿Es el conjunto K recursivo?
Supongamos que lo es. Su función característica será, por tanto:
1
0
 K ( x)  
si x  K
si x  K
,que es recursiva total, es decir la calcula algún programa pi
Sea, ahora, f la función premeditadamente elegida y definida como
1 si  K ( x)  0 (x  K )
f ( x)  
 si  K ( x)  1 (x  K )
Esta función es recursiva parcial. Es decir, existirá una máquina j que la calcula f   j
Entonces:
j  K   j ( j )   K ( j )  1  f ( j )   j ( j )  j  K
j  K   j ( j )  f ( j )   K ( j )  1   j ( j )  j  K
Tenemos un error por lo que podemos concluir que:
No existe un programa pi que calcule  K , por tanto; K  REC (K NO es recursivo)
Nota:
Al ser este problema un subconjunto del problema general de saber si cualquier programa
se para al recibir como entrada su propio código podemos concluir que el problema general
es igualmente indecidible o no recursivo.
Propiedades de los conjuntos recursivos:
El complementario de un conjunto recursivo es recursivo
A  REC  A  REC  A ( x)  1   A ( x)
La unión de dos conjuntos recursivos es recursiva
La intersección de dos conjuntos recursivos es recursiva
 A  B  REC
A, B  REC  
 AB ( x)   A ( x)   B ( x)
 A  B  REC
Hola compañeros...
Voy a intentar dar mi versión a ver que os parece. Para empezar reducire el ejemplo a cadenas de 5 digitos que serán 0 o
1. Esto lo hago sólo para ver el ejemplo luego deberemos abstraerlo para infinitos caracteres. Esto es importante ya que,
sólo con cinco caracteres, obtenemos un conjunto finito y por tanto si sería enumerable pero como digo esto es sólo un
ejemplo.
Imaginemos que tenemos estas 5 MT escogidas al "tun-tun".
0 01001
1 11111
2 00110
3 11000
4 00001
Ahora de lo que se trata es de adivinar si existe alguna MT que se nos pudiese ocurrir con 5 caracteres y que no este en la
lista. Como ya he dicho esto es un ejemplo y se ve a simple vista que está "chupao". Una solución sería, por ejemplo,
"00000" que ciertamente no está en la lista.
La solución no sería tan sencilla si trabajásemos con 10 millones de caracteres y 20 billones de MT's (o infinitas que es lo
que nos preocupa a nosotros). Por tanto tenemos que encontrar un método que nos permita estar seguros de encontar la
MT que no está. ¿Cómo lo hacemos?, con la diagonalización. Veamos el ejemplo:
Crearemos una máquina que tenga el digito contrario en la posición i que la máquina que se encuentre en la misma fila i.
Esto es un poco enrevesado pero muy sencillo:
*La máquina 1 es "01001" y su dígito 1 es "0"
*La máquina 2 es "11111" y su dígito 2 es "1"
*La máquina 3 es "00110" y su dígito 3 es "1"
*La máquina 4 es "11000" y su dígito 4 es "0"
*La máquina 5 es "00001" y su dígito 5 es "1"
Cambiamos la diagonal principal 01101 y obtenemos la nueva MT: "10010".
Que, como queríamos, no se encuentra en la lista.
¿Por qué sabemos que con este sistema el resultado nunca estará en la lista?. ¿Cómo sabemos que el resultado no se
encuentra, por ejemplo, en la fila 3?. Pues porque, tal y como hemos construido el resultado, sabemos que en la fila tres al
menos el elemento 3 de la MT resultado es distinto (recordad que hemos puesto el dígito contrario).
Bueno espero que después de todo este rollo lo que cuento sea todo cierto ;)
Luis Somolinos
Conjuntos recursivos en términos de programas enumeradores:
Los conjuntos recursivos son los que tienen una función característica recursiva y total.
Programa enumerador : programa que, sin entrada, genera una lista (infinita o no) de
palabras.
Un lenguaje es recursivo  es generado en orden y sin repeticiones por un programa generador.
Teorema de parametrización s-m-n:
Si f ( x1 ,..., xm , y1... yn ) es recursiva (no es necesario que sea total), existe una función recursiva total s
que cumple que:x1 ,..., xm : f ( x1 ,..., xm , y1... yn )   s ( x1 ,..., xm ) ( y1... yn )
¿Es la función f ( x) con Im( f )  múltiplos de x recursiva?
Sabiendo que g ( x, y )  x  y es recursiva (parcial), existe s que cumple que s ( x ) ( y )  g ( x, y )  x, y :  s ( x ) ( y )  x  y
4. CONJUNTOS ENUMERABLES RECURSIVAMENTE (ER)
Definiciones:
 x  L  p( x)  cierto
p acepta L  * cuando x 
 x  L  p( x)  falso  p( x) 
L es un CONJUNTO ENUMERABLE RECURSIVAMENTE si hay un PROGRAMA P que acepta L.
UN PROGRAMA RECURSIVO ES SIEMPRE ENUMERABLE RECURSIVAMENTE
REC  ER
Problemas semidecidibles: expresadas sus soluciones en forma de conjunto,
 ER.
Relación con los problemas recursivos:
Teorema del complementario:
A  REC  A  ER  A  ER
Posibilidades para situar un lenguaje y su complementario:
 REC 
 ER 
 ER 
LyL 
 ; L
 y L  ER ; L 
 y L  ER

ER

REC

REC






Propiedades de la clausura:
A,B  REC   A  B  ER   A  B  ER
Caracterización en términos de programas enumeradores:

El orden no es necesario
 A es generado por un programa generador 
Y pueden haber repeticiones


A  ER   A es la imagen de una función recursiva.

 A es el dominio de una función recursiva.
 A    A es la imagen de un función recursiva total.
En este caso las simulaciones para generar el conjunto A se deben hacer en tiempo finito para
evitar que la máquina parezca que se ha colgado al no pararse. Para ello añadimos una nueva
variable i que contará el número de pasos k que ponemos como “medidor del tiempo”.
K  ER por que es el dominio de la función calculada por px ( x) 
La función calculada por un programa es, por definición, siempre recursiva.
¿ A, B  ER 
 A  B
 ER ?
Si A, B  ER  i, j A  Dom(i )  B  Dom( j )
Sea f ( x)  i ( x)   j ( x) que es recursiva
f ( x)  i ( x)    j ( x) 
Por tanto Dom( f )  Dom(i )  Dom( j )  A  B  ER
A  B  REC  C A B  AND(C A , CB )  C A * CB
A  B  REC  C A B  OR(C A , CB )  C A  CB
Predicados recursivos. Teorema de proyección:
Predicado = sentencia, con variables, que podemos clasificar como cierta o falsa.
Soluciones al Predicado = son los valores de las variables que hacen cierto el predicado.
Las soluciones a un predicado se pueden expresar en forma de conjunto.
x 2  4 es un predicado.


Las soluciones del predicado se puede expresar como el conjunto S  x x 2  4
UN PREDICADO ES RECURSIVO SI SU CONJUNTO DE SOLUCIONES ES RECURSIVO.
Teorema de proyección: la parte que no podemos decidir, en este caso la y, la sacamos de
la expresión con un símbolo . Se habla de semidecibilidad por este motivo.
A  ER  R  REC x : x  A  y R( x, y)
Función reloj: es una función que, pasados un determinado número de pasos, se detiene
dando, siempre una respuesta cierta o falsa.
se para en t o menos pasos
cierto si px ( y )
r ( x, y , t )  
 falso si px ( y ) NO se para en t o menos pasos
Es recursiva total, y por tanto, el predicado
T   x, y, t  el programa número x con entrada y se para en  t pasos es un predicado recursivo.
Ejemplo aplicación del teorema de proyección:
Demostrar que el conjunto K  ER:
Recordemos que
K   x  x ( x) 
entonces podemos añadir t pasos como parámetro de semidecibilidad y decir que
K   x  x ( x)    x t T ( x, x, t )
5. REDUCCIONES
Definición de m-reducción:
Se trata de reducir un conjunto A a otro conjunto B que sea un caso especial de A. Para ello tenemos que codificar
los enunciados del conjunto A como enunciados del conjunto B. Lo que tenemos que conseguir es una función
que codifique el enunciado de A en otro equivalente pero con el conjunto B.
Sean A y B dos conjuntos distintos.
A se podrá m  reducir a B, A  m B, si encontramos una función recursiva y total f x  * : x  A  f ( x)  B


No puede ocurrir que un enunciado
de A dé un enunciado que NO sea de B.
No puede ocurrir que un enunciado que NO sea de A dé un enunciado que
sea de B.
Propiedades de la m-reducibilidad:
1.
Dado A  REC  B   y B  *  A m B
Ejemplo: Dado A  n n es par  REC 
K   y K   *  A  m K
A m B 

  A  REC ;
  B  REC
B  REC
A  REC
A m B 
A m B 
3.
  A  ER ;
  B  REC
B  ER 
A  REC 
2.
4.
5.
6.
A m B
A m A
 A m B   B m C    A m C 
 A m B   B m A
Clases de m-equivalencia:
 A m B   B m A  A m B
m-grado: cada una de las clases de m-equivalencia (conjunto de conjuntos m-equivalentes entre si).
 Dado A  REC  B   y B   *  A m B  
todos los conjuntos REC menos el  y el conjunto   son m-equivalentes
*
implicaciones:
A  *   m A  A NO m *
A    * m A  A NO m 
Completitud:Un conjunto es completo si es el más difícil de su clase.
Sea L una clase (conjunto de conjuntos).
A es m-completo para L si  A  L    B  L B m A
propiedades:
1)
A es m-completo para L 

BL
  B es m-completo para L

A m B

2)
K es m-completo para la clase ER
3)
Los conjuntos m-completos forman un m-grado
conclusiones:
Para comprobar si A es NO recursivo intentamos reducir K a A.
Para comprobar si A es NO enumerable recursivamente intentamos reducir K a A.
demostración:
Sabemos que K  ER, pero ¿K  ER ?
Por el teorema del complementario sabemos que:
 A  REC  A  ER  A  ER 
Por lo que si K  ER  K  REC lo que no es cierto.
6. PROBLEMAS INDECIDIBLES. EJEMPLOS
El problema de la parada y K:
PARO 
 x, y

 x ( y) 


Sabemos que K  x  x ( x)   REC
Reducimos K a PARO :
x  * x  K   x ( x)  x, x  PARO
La función f ( x)  x, x es recursiva y total, y puesto que x  K  f ( x)  PARO,
f reduce K a PARO.
Recordando una de las propiedades de la m-reducibilidad
A m B 
  B  REC
A  REC 
podemos concluir que PARO  REC
Problemas indecidibles similares:
A   x, y, z  x ( y )  z. Es un problema indecidible.
Observamos que la pertenencia al conjunto A depende de z que es una constante.
En este caso hacemos una reducción algorítmica de K a A
Suponemos un hipotético pa que decide la pertenencia al conjunto A según el algoritmo:
entrada x;



Codificación de h( x)  si pa  h( x), x, x   cierto




entrada w;
  entonces r : cierto  h( x), x, x  A
 r : px ( x);
  sino
r : falso  h( x), x, x  A



salida x
 fsi


salida r

El algoritmo decide la pertenencia a K : h( x), x, x  A   h ( x ) ( x)  x  px ( x)  x  K
Por tanto pa no puede existir  A no es recursivo
Teorema de Rice:
Conjuntos de índices:
Es un conjunto S de programas equivalentes, dos a dos, tales que, para la misma entrada, devuelven la misma
salida o no contestan. La pertenencia de un programa a S no depende de la sintáxis del programa sino de la
función que calcula. El par de programas equivalentes pueden pertenecer a S o no pertenecer a S. Es decir, nunca
tienen decisiones contradictorias. px  py  x   y   S ( x)   S ( y)
Ejemplo :
A   x 7  Im( x )
Suponemos que x  A   x   y .
Entonces tenemos un y  A ya que, por  x   y , 7  Im( x )  7  Im( y ).
Si x  A  y  A
 A es un conjunto de índices
Si y  A  x  A 
Teorema de Rice:
Solamente podemos saber la decibilidad de lo que no cumple ninguna función recursiva
o de lo que cumplen todas.
Sea P el conjunto de todas las funciones recursivas (totales y no totales).
Sea S un conjunto de índices de las funciones de programas equivalentes.
Si S  P  S  REC  S    S  P
Siempre que podamos encontrar una función que pertenezca al conjunto problema y otra que no ya
sabemos que no es recursivo.
Documentos relacionados
Descargar