1. UNIVERSIDAD AUTÓNOMA DE GUERERO
FACULTAD DE MATEMATICAS
ASIGNATURA: LENGUAJES FORMALES Y
AUTÓMATAS
TEMA:FUNCIÓN COMPUTABLE Y
PARCIALMENTE COMPUTABLE
PROFESOR:EUGENIO AVILUZ RAMIREZ
ALUMNA: ANA MENDEZ MARTINEZ
SEXTO SEMESTRE
FECHA: 07/05/2013
2. INTRODUCCION
El presente trabajo nos muestra que existen funciones que no conocíamos, y que son difíciles de
resolver mediante un algoritmo de algún lenguaje de programación.
No trataremos de resolverlas pero si veremos que algunas se pueden resolver, y otras
definitivamente no tienen solución
Lo interesante de este tema es mostrar que existen diferentes funciones o problemas computables
y parcialmente computables que han venido surgiendo desde hace algunos años y que gracias a
algunas personas como Alan Turing, Kurt Gödel etc. nos han ayudado a demostrar que si hay
solución para ciertas funciones
4. INDICE DE FIGURAS
Imagen 1 resolver problemas mediante una computadora.......................................................................... 8
Imagen 2 cajero automático (ejemplo de función computable)................................................................ 10
5. 5
OBJETIVO:
Conocer cuáles son las funciones computables, las formas tan complicadas que son de
solucionarlas y lo mucho que son usadas en nuestros días.
Definir y conocer las funciones parcialmente computables y los problemas no computables ya
que algunos no tienen solución y no son muy usados en los sistemas de trabajo más sin embargo
es importante conocerlos y plantearnos por qué no tienen solución.
6. 6
1. FUNCION COMPUTABLE Y PARCIALMENTE
COMPUTABLE
Comenzaremos nuestra investigación considerando el poder expresivo de un determinado
lenguaje de programación. Recordemos que existen funciones que no pueden calcularse con
ningún programa escrito en ese lenguaje. La pregunta que debemos plantearnos ahora es si esta
limitación es debida al diseño del lenguaje, o si, por el contrario, es un reflejo de las limitaciones
de los procesos algorítmicos en general. Es decir, nos preguntamos si la imposibilidad de calcular
una función por un programa en un determinado lenguaje significa que el lenguaje es incapaz de
expresar un algoritmo, o más bien que no existe ningún algoritmo que pueda calcular esa función.
Para responder esta pregunta, primero identificaremos una clase de funciones que contiene la
totalidad de las funciones computables, es decir, todas aquellas funciones que pueden calcularse
por medios algorítmicos, sin importar como pueda expresarse o implementarse ese algoritmo.
Después mostraremos que las funciones de esta clase pueden calcularse por medio de las
máquinas de Turing, y también mediante algoritmos expresados en un subconjunto muy
sencillo de la mayoría de los lenguajes de programación. A partir de esto llegaremos a la
conclusión de que los limites detectados en las máquinas de Turing y en la mayor parte de los
lenguajes de programación son el reflejo de las limitaciones de los procesos computacionales,
no del diseño de la máquina o del lenguaje que se emplee.
7. 7
1.2. FUNCIÓN COMPUTABLE:
Las funciones computables son el objeto básico de estudio de la teoría de la computabilidad y
son, específicamente, las funciones que pueden ser calculadas por una máquina de Turing.
Un problema es computable cuando existe un procedimiento efectivo (algoritmo) que permite
obtener, para cualquier entrada, una cadena que le corresponde como solución del problema.
Las funciones computables son una formalización de la noción intuitiva de algoritmo y según
la Tesis de Church-Turing son exactamente las funciones que pueden ser calculadas con una
máquina de cálculo. La noción de la computabilidad de una función puede ser relativizada a
unconjunto arbitrario de números naturales A, o equivalentemente a una función arbitraria f de los
naturales a los naturales, por medio de máquinas de Turing extendidas con un oráculo por A o f.
Tales funciones pueden ser llamadas A-computable o f-computablerespectivamente. Antes de la
definición precisa de una función computable los matemáticos usaban el término
informal efectivamente computable.
Las funciones computables son usadas para discutir sobre computabilidad sin referirse a
ningún modelo de computación concreto, como el de la máquina de Turing o el de la máquina de
registros. Los axiomas de Blum pueden ser usados para definir una teoría de complejidad
computacional abstracta sobre el conjunto de funciones computables.
Según la Tesis de Church-Turing, la clase de funciones computables es equivalente a la clase de
funciones definidas por funciones recursivas, cálculo lambda, o algoritmos de Markov
Alternativamente se pueden definir como los algoritmos que pueden ser calculados por
una máquina de Turing, unamáquina de Post, o una máquina de registros.
En teoría de la complejidad computacional, el problema de determinar la complejidad de una
función computable es conocido como un problema de funciones. [1].
9. 9
1.2.1TEORIA DE LA COMPUTABILIDAD:
La Teoría de la computabilidad es la parte de la computación que estudia los problemas de
decisión que pueden ser resueltos con un algoritmo o equivalentemente con una máquina de
Turing.
Un problema de decisión es un problema en donde las respuestas posibles son «sí» o «no». Un
ejemplo típico de problema de decisión es la pregunta: ¿Es un número entero dado primo? Una
instancia de este problema sería: ¿Es 17 primo? [2].
FUNCIONES COMPUTABLES CALCULADAS POR PROGRAMAS -While
Hay funciones computables que se calculan por programas-while. Si P es un programa-while y
es la lista de variables en P entonces consideraremos a las primeras variables como
variables de entrada y a las últimas como de salida, de manera sólo un poco más precisa, para
consideraremos
El programa Pcalcula, o computa, a la función
Donde
En este caso definimos,
10. 10
En adelante omitiremos los subíndices n,m y k.
escomputable si existe un programa-while tal que f=fP.
EJEMPLO: un ejemplo de función computable, es una máquina que devuelve el cambio (cajero
automático)
Imagen 2 cajero automático (ejemplo de función computable)
11. 11
1.3. FUNCION PARCIALMENTE COMPUTABLE
Una función parcialmente computable posee un algoritmo que nos permite computar su valor
para elementos de su dominio, pero que nos tendrá computando eternamente si intentamos
obtener un valor funcional para un elemento que no está en su dominio, sin asegurarnos nunca
que no obtendremos un valor. En otras palabras, cuando es posible una respuesta, el algoritmo la
provee; cuando no es posible, el algoritmo nos mantiene buscando la respuesta en vano por un
tiempo infinito [3].
Si una función es parcialmente computable, la máquina que la calcula puede no parar, o parar
con una salida indefinida, para aquellos valores en los que la función no esté definida.
1.4. PROBLEMAS NO COMPUTABLES
Siempre se había creído que todo problema, ya fuera fácil o difícil, podía resolverse en una serie
de pasos. Además esta idea se remonta miles de años atrás.Pero no, esto es una idea errónea ya
que una computadora no lo puede solucionar todo.
Para David Hilbert, un notable matemático, el hecho de que hubiera problemas que no contaran con una
solución exacta, supuso una gran insatisfacción, porque él mismo pensaba en lo siguiente:“Todo
problema matemático definido debe ser necesariamente susceptible de un planteamiento exacto, ya sea
en forma de una respuesta real a la pregunta planteada o debido a la constatación de la imposibilidad
de resolverlo, a lo que se debería la falla necesaria de todos los intentos... una de las cosas que
nos atrae más cuando nos dedicamos a un problema matemático es precisamente a que dentro de
nosotros siempre escuchamos la llamada: aquí el problema, busca la solución; puedes
encontrarla por pensamiento puro, ya que en matemáticas no existe cosa alguna que no pueda
conocerse”.
Lo que en realidad quería Hilbert era disponer de un sistema que pudiera resolver con precisión
un determinado problema. Es decir, disponer de un algoritmo para resolver cualquier problema.
Esto no fue así ya que demostraron que ciertos problemas resultaban ser no computables. Con
esto se venía abajo la teoría de Hilbert. Todo ello supuso una gran sorpresa para los matemáticos
sobre todo después de que Kurt Gödel publicara su “teorema de la incompletitud”. El primer
12. 12
teorema de la incompletitud de Gödel afirma: “En cualquier formalización consistente de las
matemáticas que sea lo bastante fuerte para definir el concepto de números naturales, se puede
construir una afirmación que ni se puede demostrar ni se puede refutar dentro de ese sistema”.
El segundo teorema de la incompletitud de Gödel afirma: “Ningún sistema consistente se puede
usar para demostrarse a sí mismo”. No sólo Gödel encontró problemas que no tuvieran solución
sino también importantes matemáticos como Alonso Church, Stephen Kleene, Mil Post, Alan
Turing.
Ejemplos de problemas no computables:
Su demostración se basa en el método de la diagonal.
El problema de la palabra para Grupos. “Dado un subconjunto S de elementos de un grupo G, se
trata de decidir si una expresión compuesta por elementos de S y con las operaciones del grupo
es igual al elemento neutro del grupo”.
Décimo problema de Hilbert. “Una ecuación diofántica es la ecuación de los ceros enteros de un
polinomio con coeficientes enteros. El décimo problema de Hilbert trata de encontrar un
algoritmo que determine si una ecuación diofántica polinómica dada con coeficientes enteros
tiene solución entera”. Matiyasevich demostró que no existe dicho algoritmo.
Decidibilidad de las teorías lógicas:
El cálculo de predicados no es decidible. Esto lo demostraron Church y Turing.
13. 13
CONCLUSION
Concluimos en que las funciones computables son aquellas que pueden resolverse por medio de
un algoritmo, las funciones parcialmente computables son las de recursividad o las indefinidas en
algunos valores de la función, y por ultimo las no computables son las que no tienen solución