You are on page 1of 35

Funciones computables

Las funciones computables son las 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 slo un poco ms precisa, para consideraremos

El programa P calcula, o computa, a la funcin

donde

En este caso definimos,

En adelante omitiremos los subndices n,m y k.

es computable si existe un programa-while tal que f=fP.

Computabilidad-Turing Una funcin se dice ser computable-T, o computable-Turing, si existe una mquina de Turing que la calcula. Aunque bsicamente es correcta esta definicin, es evidente que quedan algunos elementos en ella que an no han sido precisados. Antes que nada, consideraremos en esta seccin que los nmeros naturales se estn representando en base 2, utilizando nicamente a los dgitos 0,1. Consideraremos tambin al menos dos smbolos ms: la coma ``,'' para separar nmeros, y el ``blanco'', ``b'', para marcar en su totalidad, salvo un nmero finito de casillas, a la cinta de cualquier mquina de Turing. As, por ejemplo, el vector (1,2,3) se representa

por la cadena b1,10,11b. Sea cuatro smbolos. Dado es

el alfabeto consistente de esos la representacin de

donde para cada nmero

, (m)2 es la

representacin binaria dem. Aunque y son dos entes distintos (uno es un objeto, un vector, y el otro es la representacin de ese objeto), en la prctica los confundiremos y no haremos ms distincin entre objetos y sus representaciones. Sea A un alfabeto que contenga a A0 y sea M una mquina de Turing sobre A con estado inicial q0. Sea . Por denotamos a la descripcin instantnea que dice que el contenido de la cinta de la mquina de Turing es la representacin del vector , que el estado actual de la mquina es el inicial q0 y que se est escudriando la casilla ms a la izquierda de que no est en blanco. Si q es un estado final, con la

notacin designaremos la situacin de que la mquina ha arribado al estado q y la cadena de 0's, 1's y comas inmediatamente a la izquierda de la casilla escudriada corresponde a un vector de nmeros naturales. Escribiremos para indicar que mediante computaciones , en algn . Si la

legales de M, partiendo de la descripcin instantnea momento se deriva la descripcin mquina no se para a partir de que calcula M es

. En tal caso, escribimos escribiremos . La funcin es

. As pues, una funcin

computable-T si y slo si existe una mquina de Turing sobre un alfabeto tal que f=fM. Comparemso pues las nociones de computabilidad introducidas hasta ahora: Lema 6.1 Toda funcin computable-T es computable (mediante programaswhile ). La demostracin formal de este lema puede ser muy engorrosa y acaso poco ilustrativa. Lo que hay que ver, en esencia, es que el programa de cualquier mquina de Turing, es decir, su mecanismo de control visto como una lista de quntuplas, puede ser convertido en un programa-while . En otras palabras, lo que hay que ver es que toda mquina de Turing puede ser simulada por un programa-while . Lo que no es otra cosa sino que las mquinas de Turing pueden ser programables en el marco de la programacin-while . Cualquier programador con experiencia media quedar convencido de que esto ltimo, en efecto, s es posible. Recprocamente, se tiene Lema 6.2 Toda funcin computable es computable-T. En efecto, observemos las reglas que definen a los programas-while en la figura (1.6). Primeramente observamos que el decidir si acaso el contenido de una variable es nulo o no lo podemos hacer con mquinas de Turing. Tambin mediante ellas podemos calcular a las funciones x++ y x-. Ahora es claro que dadas dos mquinas de Turing M1 y M2, se puede construir una tercera mquina de Turing M3 tal que, para cualquier posible entrada se tiene . Por tanto, si los programas-while P1 y P2 fueran simulados por las mquinas de Turing M1 y M2 entonces la concatenacin P1;P2 se simula por M3. En otras palabras, la clase de mquinas de Turing es cerrada bajo composicin. Tambin, tenemos que si el programa-while P1 fuese simulado por una mquina de Turing M entonces el esquema se puede tambin simular por una mquina de Turing. De ambos lemas, obtenemos, Teorema 6.1 Las nociones de computabilidad-Turing y computabilidad (mediante programas-while ) coinciden.

Inicio

Pruebas por contradiccin


La funcin define nmeros primos al inicio.

Sin embargo,

De la repeticin de un patrn no necesariamente se sigue una regla general! Es necesario presentar pruebas de enunciados que se quieran probar en general. En las pruebas por contradiccin para demostrar que una tesis sigue de una secuencia de hiptesis , en smbolos y junto con las hiptesis se deriva una contradiccin, en se

, se niega la tesis

smbolos . La aceptacin de este tipo de razonamiento conlleva la aceptacin delPrincipio del tercero excludo y del Principio de consistencia de las matemticas, los cuales rezan: Principio del tercero excludo. Para toda sentencia , es decir, para frmula cerrada bien formada, y , se ha de tener que se

para toda interpretacin M de los smbolos de se cumple en M, en smbolos cumple enM, en smbolos .

, o bien que la negacin de

Principio de consistencia de las matemticas. En toda teora matemtica T (digna de estudio), se tiene que no existe una sentencia ambas y formulada en el lenguaje de la teora T tal que sean demostrables en T, es decir, tal que

y . Aunque de mucho sentido comn, ambos principios son cuestionables desde diversos supuestos formales. Como meras ilustraciones de estos cuestionamientos mencionamos dos de ellos: 1. El principio del tercero excludo permite demostrar existencia de objetos de manera no constructiva. En efecto, veamos que existen dos nmeros irracionales tales que uno elevado al otro da un racional. Sea . Si rfuera racional, considrese y . En

otro caso, considrese p=r y . En cualquier caso se tiene que q ambos p y q son irracionales y p es racional. Tenemos pues demostrada as la afirmacin formulada. Sin embargo, esta demostracin no da ejemplos de irracionales cuya potencia de uno al otro da un racional. 2. La aritmtica de Peano se realiza naturalmente en el conjunto de los nmeros naturales. Estos conforman el modelo estndar de la aritmtica. Sin embargo, de acuerdo con el Segundo Teorema de Incompletitud de Gdel, la misma aritmtica de Peano no puede demostrar su propia consistencia. Los siguientes teoremas se prueban por contradiccin y los citamos como ejemplos de este tipo de demostraciones. Teorema 1.1 (Pitgoras, 582-500 AC) En efecto, si no es un nmero racional. , entonces

fuesen dos enteros tales que

consecuentemente p2 es un mltiplo de 2, y por esto mismo p=2p1 tambin lo es. En la ec. (*) vemos un 2 a la derecha. Falta al menos uno ms, pues es al menos divisible por 4. Luego hemos de tener necesariamente queq2 es un mltiplo de 2, y por esto mismo q=2q1 tambin lo

es. Hemos pues encontrado

tales que

Reiterando las relaciones (**) tenemos que para cualquier existen tales que

p y q seran pues divisibles por potencias arbitrariamente grandes de 2. Esto no es posible, dado que esos nmeros son enteros (estndares). Por tanto, no pueden existir p y q. Teorema 1.2 (Euclides, tex2html_wrap_inline$$300 AC) Hay una infinidad de nmeros primos. En efecto, si se no fuera el caso, denotemos por al conjunto finito de, digamos que n, nmeros primos. Consideremos el nmero entero . Es evidente que ningn primo puede dividir a qn, pero, de acuerdo con el Teorema Fundamental de la Aritmtica, qn ha de ser divisible por algn nmero primo pn, que acaso puede ser tal que pn=qn. El primo pn no est en P y esto contradice que P comprenda a todos los primos. Teorema 1.3 Si y son tales que ax=xa entonces

En efecto, supongamos que se no fuera el caso y que que aparezca en x. Sea k la mnima posicin, contada desde la izquierda de x donde aparezca un smbolo distinto a a, digamos b. Entonces en la palabra ax hasta antes de la posicin k+1 slo hay a-es, en tanto que en la palabra xa hay una b exactamente en la posicin k. Por tanto no puede ocurrir que ax=xa.

Induccin matemtica
Este procedimiento de demostracin de frmulas cuantificadas universalmente, es decir, del tipo , verifica primero que se cumple para los casos llamados bsicos, y despus, suponiendo que se cumple para los casos anteriores, se verifica para un elemento tpico x arbitrario. Este

ltimo paso es llamado ``inductivo''. Se concluye entonces que la frmula vale para cualquier x. En la prxima seccin veremos dos esquemas de induccin cuando el dominio de la variable x son los nmeros naturales. En la seccin subsiguiente veremos un esquema de induccin sobre conjuntos numerables definidos de manera recurrente.
Induccin numrica

Sea

una frmula con una variable libre x, definida en el lenguaje de la , un primer esquema de y luego, suponiendo que se ; un segundo esquema de y luego, suponiendo que se

aritmtica. Para demostrar la sentencia induccin verifica primero que se cumple cumple demuestra que se cumple

induccin verifica primero que se cumple

cumple , para cualquier m<n, demuestra que se cumple . Estos esquemas, puestos como reglas de deduccin quedan como sigue:

Teorema 2.1 Ambos esquemas son equivalentes. En efecto: 1. ): Supongamos vlido el una frmula tal que se cumplen . Sea

Mostremos primero que

Para esto usemos el frmula que para cualquier frmula

aplicado a la . , la frmula se cumple en virtud de es un teorema del . se

clculo de predicados puro. Ahora, supongamos que vale Hemos de probar que vale tiene que es vlido tambin . Supongamos . Por (*) se cumple . Por

. As pues, la frmula

es vlida, se cumple. . Dado , puesto que y por (*) resulta ya es

con lo cual se ve que, en efecto, la frmula Demostremos ahora que vale un n cualquiera, suponiendo que se cumple cierto, se cumple por (**) que demostrado consecuencia 2. ): Supongamos vlido el una frmula tal que se cumplen

. Por el Esquema I, resulta como una . Tenemos pues que se cumple el Esquema II.

. Sea

Resulta evidente que se cumple la frmula pues, para cada n>0 la condicin frmula subsume a la

, la cual, de acuerdo con la segunda frmula en (*) de . Por el Esquema II, resulta como una . Tenemos pues que se cumple tambin

este apartado implica consecuencia el Esquema I.

Induccin recurrente Este esquema se utiliza para demostrar predicados cuantificados universalmente definidos sobre conjuntos determinados constructivamente

de manera recurrente. Sea T un conjunto numerable. Sea conjunto inicial. Supongamos reglas siguientes:

un

definido recurrentemente con las

para , donde cada funcin una regla de composicin. Para todo predicado demostracin siguiente:

es, en la prctica, se tiene el esquema de

Como un ejemplo de construccin mediante este tipo de reglas, consideremos al siguiente: Ejemplo. Sea T el conjunto formado por las palabras (de longitud finita) sobre el alfabeto (0+1), i.e. T=(0+1)*. Definimos el conjunto de palabras 0-preponderadas de manera recurrente como sigue:

El conjunto anterior, donde

de palabras 0-preponderadas se ajusta a la construccin consta nicamente de la palabra vaca y hay dos

reglas de composicin , dadas por sendas reglas. Ms adelante veremos que una palabra es 0-preponderada si cualquier prefijo de ella posee ms ceros que unos. Proposicin 2.1 El esquema III se prueba mediante el esquema II por induccin en el nmero de reglas para generar un elemento en A. En efecto, con la notacin utilizada en la formulacin del Esquema III, sea

Como A se define nicamente por las reglas enlistadas, la frmula es lgicamente equivalente a la frmula Mostremos pues que esta ltima es vlida a partir de las hiptesis .

La primera de estas ecuaciones equivale a equivalente a cumple

. La segunda es claramente

. Por el Esquema II tenemos que se , y con esto queda demostrado el Esquema III.

Ejemplo. Retomando nuestro ejemplo anterior, sea A el conjunto de palabras 0-preponderadas. Sea la proposicin

Procedamos de acuerdo con el Esquema III para ver que . Inicialmente tenemos, trivialmente, que para la palabra vaca se cumple es decir, vale . Ahora, de manera inductiva:

Enumeracin de Cantor
A finales del siglo pasado y principios de ste el matemtico alemn Georg Cantor (1845-1918) estableci las bases de los nmeros tranfinitos. El primer numeral infinito, denotado por , puede ser identificado con la cardinalidad de los nmeros naturales. En el estudio de las cardinalidades es importante reconocer como equipotentes, es decir ``con la misma cardinalidad'', a cualesquiera dos conjuntos que, en efecto, lo sean. Una gran constribucin de Cantor es su anlisis de los conjuntos numerables. Consideremos la funcin , . En la tabla (1.1) presentamos como una matriz (infinita) los valores de esta funcin. En la entrada correspondiente al rengln y y a la columna x presentamos el valor c(x,y). Obsrvese que los valores de c son consecutivos a lo largo de cada diagonal x+y=d, polinomio cuadrtico. . Obsrvese tambin que c est dado por un

Table 1.1: Funcin diagonal de Cantor.

De los valores mostrados en la Tabla 1 se puede tener una idea muy precisa de la enumeracin que hace c de . Resulta evidente que cada entrada de la tabla tiene asociado un nmero natural y, viceversa, cada nmero natural estar en correspondencia con alguna entrada en la tabla. c es pues una biyeccin, es decir, es una funcin inyectiva y suprayectiva. c se dice ser la enumeracin de Cantor. As pues, es numerable, es decir, de la misma cardinalidad que . A partir de esto es fcil ver por induccin que es tambin numerable. De hecho, la enumeracin de Cantor da procedimientos para enumerar a cada potencia . En efecto, reiterando

la enumeracin de Cantor, hagamos

Es fcil ver tambin que la funcin biyeccin. Para cada secuencia de nmeros naturales nmero dado un nmero se dice ser el cdigo de la secuencia la secuencia tal que

es una el . Recprocamente, es la secuencia

codificada por n y, en tal caso, escribimos . En la tabla (1.2) se ejemplifica la relacin entre secuencias y cdigos.
Table: Valores de para .

En la tabla (1.3) se ejemplifica la relacin inversa entre cdigos y secuencias.


Table: Valores de (f*)-1(n) para .

Resumiendo, tenemos la Proposicin 3.1 Para cada n>0 la potencia cartesiana es numerable, y lo es tambin el conjunto consistente de las secuencias de nmeros naturales. Ms an cada uno de estos conjuntos posee una enumeracin efectivamente calculable con inversa tambin efectivamente calculable. es enumerable mediante la enumeracin c que est dada por un polinomio. Por lo cual es efectivamente calculable. En la figura (1.1) mostramos un seudocdigo, que se explica por s mismo, para calcular a la funcin fn.
Figure 1.1: Clculo de la funcin fn.

En la figura (1.2) mostramos un seudocdigo para calcular a la funcin f*.


Figure 1.2: Clculo de la funcin fn.

En la figura (1.3) mostramos un seudocdigo para calcular a la inversa de la enumeracin c.


Figure 1.3: Clculo de la inversa de c.

En la figura (1.4) mostramos un seudocdigo recursivo en n para calcular a la inversa de cada una de las funciones fn.
Figure 1.4: Clculo de la inversa de fn.

Finalmente, en la figura (1.5) mostramos un seudocdigo para calcular a la inversa de la funcin f*.

Figure 1.5: Clculo de la inversa de f*.

Lenguajes formales de programacin


Todo lenguaje de programacin consta de una sintaxis bien determinada que permite identificar a los programas bien formados y de una semntica que permite interpretar procedimentalmente a los programas. Toda sintaxis se establece sobre un alfabeto, es decir, un conjunto finito de smbolos, mediante reglas gramaticales o producciones para generar diversas clases de palabras sobre el alfabeto.

Programas-while Macros o Asignamientos o Operaciones aritmticas o Pruebas compuestas o Macros de programacin Semntica de los programas-while o Reglas de transformacin

Programas-while

Los smbolos de funciones unarias ++ y - se interpretan naturalmente:

En la figura (1.6) se resume la sintaxis de los programas-while .

Figure 1.6: Reglas de produccin en el lenguaje de los programas- while .

Los programas-while constan pues de una sintaxis muy sencilla.


Macros

Asignamientos Operaciones aritmticas Pruebas compuestas Macros de programacin

A pesar de su sencillez los programas-while son muy expresivos. Definimos en esta seccin algunos procedimientos mediante correspondientes programas-while . Ulteriormente, en la presentacin de estos programas nos referiremos a algunos de los macros aqu definidos. Sin embargo, el lector ha de tener en cuenta que, estrictamente, toda vez que aparezca un macro se ha de sustituir ese macro por el esquema que aqu se presenta para tener un programa-while .
Asignamientos

Asignar valores a variables. 1. x:=0:

2. x:=y:

3. x:=n, donde n es un nmero natural. Ejercicio.


Operaciones aritmticas

Algunos macros para calcular funciones elementales son los siguientes. 1. Suma: z:=x+y

2.

Diferencia acotada:

3. Producto: z:=x*y Ejercicio. 4. Divisin entera:

5. Parte entera del logaritmo en base 2:

Pruebas compuestas

Las pruebas compuestas se definen como sigue

Proposicin 4.1 La proposicin

es un macro en el lenguaje de los programas-while . Demostracin: Para cada prueba P construimos una expresin EP tal que

De manera recursiva:

Macros de programacin

Proposicin 4.2 Las proposiciones (if - then ), (if - then - else ), (repeat until ) son macros en los programas-while . Demostracin: Como un mero ejemplo, tenemos que al esquema [if PC then Prog] se le puede expresar como sigue

Proposicin 4.3 La proposicin (for en los programas-while .

to

do ) es un macro

Demostracin: De manera ms bien tosca, tenemos que el esquema [for to do Prog(w)] es equivalente al siguiente

Semntica de los programas-while En cuanto a la semntica de los programas-while , introduciremos primero la nocin de estados y a cada programa lo veremos como un proceso que transforma estados en estados. As pues, si P es un programa-

while y es la lista de variables que aparecen en P, entonces es el espacio de estados o configuraciones de P. Los estados se transforman entre s mediante la aplicacin de programas o instrucciones. Si P es un programa o instruccin y es un estado, denotaremos por al estado al cual P transforma la entrada . Introducimos como un estado suplementario al estado de indefinicin o indeterminado, denotado usualmente por el smbolo .
Reglas de transformacin

Escribiremos

En el primer caso, diremos que el programa P converge apara los datos el segundo, naturalmente, diverge.

. En

http://delta.cs.cinvestav.mx/~gmorales/complex/node8.html

Numerabilidad de las funciones computables

Numerabilidad de las funciones computables o Codificacin de programas-while Escritura de variables Codificacin de smbolos Codificacin de programas y tiras de smbolos Observaciones sobre la codificacin Primera lista de ejercicios Primera lista de programas

Veremos en esta seccin que la clase de los programs-while es numerable. Un numeral es la representacin formal de un nmero natural en una teora dada. As, por ejemplo, la cadena de (n+1) 1's, 1n+1, es el numeral del nmero nen la teora 1*. La representacin en base 10 de un nmero natural n puede ser vista como el numeral de n en el lenguaje (0+1+2+3+4+5+6+7+8+9)*. Se sabe bien que en este ltimo lenguaje, el numeral de un nmero es nico salvo 0's a la izquierda, ``pues sos no cuentan''. Observacin 9.1 Los nmero naturales son expresables mediante numerales constructibles como programas-while . En la tabla 1.5 presentamos una descripcin inductiva de esos numerales.
Table 1.5: Numerales como programas- while .

Esta propiedad de los programas-while hace que los programas-while se puedan codificar mediante ellos mismos, simplemente componiendo las correspondencias siguientes:

donde es la funcin de enumeracin de los programas-while , de cuya existencia nos ocuparemos inmediatamente, y es la correspondencia entre nmeros y numerales descrita en la tabla 1.5.
Escritura de variables

Fijemos primero un acuerdo para utilizar variables en los programas-while . Supondremos a las variables formadas por el prefijo X y una cadena en . As pues, las variables son las cadenas formadas de acuerdo con las siguientes reglas gramaticales:

Codificacin de smbolos

El alfabeto de los programas-while consta de 11 smbolos. Puesto que 23<11<24 utilizaremos 4 bits para referirnos a cada uno de los smbolos y utilizaremos un bit ms como ``separador'' de smbolos. En la tabla 1.6 presentamos la codificacin de los smbolos de los programaswhile que utilizaremos en esta seccin.

Table 1.6: Codificacin del alfabeto de los programas- while . Smbolo Cdigo binario Cdigo decimal while do { } 10000 10001 10010 10011 16 17 18 19

++ -

10100 10101 10110

20 21 22 23 24 25 26

X 0 1 ;

10111 11000 11001 11010

Codificacin de programas y tiras de smbolos

Cada palabra P, en el alfabeto de los programas-while , se codifica por el nmero cuya representacin binaria coincide con la yuxtaposicin de los cdigos de los smbolos en las palabras. Esto define una funcin

Ejemplos: 1.

2.

3. 4. De manera recursiva, tenemos :

As se tiene que los cdigos de los primeros 6 numerales son:

Observaciones sobre la codificacin

Denotemos por while . 1.

al conjunto de tiras sobre el alfabeto de los programas-

es una funcin (a) efectivamente calculable, es decir, dada una tira cualquiera se obtiene de manera procedimental su cdigo (b) inyectiva, pues para que cualesquiera que sean las tiras (c) que no es suprayectiva, pues la representacin binaria de cualquier nmero en la imagen de ha de tener una longitud que es un mltiplo de 5 y en cada posicin mltiplo de 5, contada de derecha a izquierda, ha de estar ``prendido'' el bit correspondiente. En otras palabras, un nmero est en la imagen de si y slo si al escribir a ese nmero en base 32=25, slo aparecen los dgitos que, en decimal, estn entre 16 y 26 inclusive. 2. Puesto que la clase de los programas-while es un subconjunto propio de while , 3. Sin embargo, dado es algortmicamente decidible si acaso tenemos que el conjunto de cdigos de programas, es un subconjunto propio de la imagen de . es necesario que P1=P2, ,y ,

existe un programa-while P tal que . En efecto, dado n se puede calcular, mediante la ``divisin larga'' de enteros, la representacin en base 32 de ny, obtenida sta, hacer la conversin a

una palabra mediante la codificacin descrita en la tabla 1.6. Luego, mediante un autmata de pila, se puede ver si acaso pn se ajusta a la gramtica de los programas-while . 4. El procedimiento descrito en el punto anterior para obtener dado es un procedimiento efectivo para calcular la inversa de .

la codificacin 5. La codificacin

mencionada inmediatamente despus de la restringida a la

observacin 1.9.1 es, precisamente, la codificacin clase de programas-while .

Para cada programa-while P, el nmero es el ndice del programa P. Consecuentemente, P se dice ser el iP-simo programawhile P=PiP. Ahora bien, las funciones computables son las que se calculan mediante programas-while . Por tanto, podemos generalizar la nocin de ndice a las funciones computables como sigue: , el i-simo programa-while Pi calcula a la funcin y para cada

donde y es el valor obtenido como sigue: 1. Si es la lista de variables de Pi, la instanciamos con , donde, en funcin de cmo se compare a n con k, la instanciacin se hace como sigue:

2. El valor que queda en la ltima variable Xk cuando termina Pi, si acaso terminare, es el asignado a y.

Si

es computable y f=f(n)i entonces i se dice ser un ndice de f.

Proposicin 9.1 Toda funcin computable tiene una infinidad de ndices. En efecto, sin entrar en minucias, tenemos que dos programaswhile calculan a una misma funcin si, por ejemplo, uno posee variables ``mudas'', es decir, irrelevantes para el clculo, que no aparecen en el otro, o bien si uno posee ``instrucciones ociosas'', digamos (x++;x-;) y, en lo dems, coincide con el otro programa.

Primera lista de

ejercicios

1. Pruebe que no existen dos enteros p,q tales que 2. Demuestre que si que x=(ab)n.

es tal que abx=xab entonces existe n tal

3. Encuentre la falacia de la siguiente ``prueba'' de que cualesquiera dos nmeros son iguales. Sea

Evidentemente P(0) es verdadera. Ahora, suponga que se cumple P(n). Veamos que se ha de cumplir P(n+1). Si entonces , donde x1=x-1 y y1=y-1. Por la hiptesis de induccin se ha de tener x1=y1. Luego x=y, por lo que P(n+1) es cierto. 4. Encuentre la falacia de la siguiente ``prueba'' de que

Demostracin: Sea

Probemos por induccin en que cualesquiera dos elementos en GN son de un mismo color. Si n=1 la aseveracin es correcta. Supongamos que hay n+1 gatos. Quitemos uno, que llamamos Yago. Los restantes son ny por la hiptesis de induccin son todos del mismo color. Devolvemos a Yago y quitamos otro, digamos Prudence. Quedan n y por tanto todos ellos son del mismo color. Yago y Prudence han de ser del mismo color y consecuentemente todos los gatos son del mismo color. 5. Estime el nmero de bits necesarios para almacenar el cdigo de Cantor de una sucesin de m nmeros enteros, cada uno de los cuales se escribe con a lo sumo n bits. 6. Decida cules de los siguientes conjuntos son numerables. Justifique su respuesta: a) El conjunto de mquinas de Turing. b) El conjunto de nmeros complejos. c) El conjunto de nmeros racionales. d) El conjunto de intervalos en los reales, abiertos o cerrados, con extremos racionales. e) El conjunto de funciones INYECTIVAS de N en N. f) El conjunto de polinomios con coeficientes racionales. h) El conjunto de programas en C. 7. Un programa-while sin instrucciones while se dice ser un programa rectilneo. a) Muestre que todo programa-while que posee exactamente una variable es equivalente a un programa rectilneo, en el sentido de que ambos calculan a la misma funcin. b) Muestre que toda funcin calculada por un programa rectilneo es total. c) Construya un programa-while con exactamente dos variables que no sea equivalente a

programa rectilneo alguno. Sugerencia: Utilice lo mostrado en el inciso b). 8. Escriba programas-while 's para calcular cada una de las siguientes funciones:

9. Escriba un programa-while que calcule a la funcin z:=x- en trminos de las funciones z:=0 y z:=x++. 10. Muestre que se obtiene exactamente a la misma clase de programaswhile 's si sustitumos las pruebas de la forma forma . por las de la

11. Muestre que ningn programa-while de una sola variable puede calcular a la funcin . 12. Clasifique a las funciones que se calculan por a) los programas rectilneos de una sola variable. b) los programas rectilneos con cualquier nmero de variables. 13. a) Muestre que la funcin que cuadrado tal

es computable. b) Muestre que el exceso de es computable.

14. Muestre que las siguientes funciones son computables: a) b)

15. a) Muestre que las funciones computables son computables, tambin, por mquinas de Turing. b) Muestre que las funciones computables por mquinas de Turing son, tambin, computables por programas-while 's. 16. Muestre que las siguientes funciones son computables

17. Muestre que si funciones

son funciones computables, entonces las y son computables tambin.

18. Muestre que si g,h,c son computables, entonces las funciones y son computables tambin.

19. Muestre que si en el esquema de minizacin se omite la exigencia de que la funcin f sobre la que se aplica sea total entonces habra funciones computables cuya minimizacin no lo sera. 20. Para una funcin definamos las funciones siguientes:

a) Muestre que la clase de funciones computables de un solo argumento son cerradas bajo los operadores B y C. b) Muestre que la clase de funciones computables de un solo argumento que adems son crecientes y tienen una imagen infinita son cerradas bajo A pero no bajo B y C.

b)

Primera lista de programas


es una palabra que seala

c) En esta seccin, al construir un programa-while hay que utilizar

variables de la forma Xw, donde el orden de aparicin de la variable.

1. Expansor de macros condicionales: Escriba un programa que traduzca macros ``programticos''.

Entrada: Salida:

2. Expansor de macros de pruebas complejas: Escriba un programa que traduzca pruebas compuestas.

Entrada:

Salida:

3. Expansor de macros de expresiones aritmticas: Escriba un programa que reescriba expresiones aritmticas como programas-

while 's. Las expresiones aritmticas se forman con constantes y variables e involucran a las cuatro operaciones aritmticas, a la exponenciacin, div, mod, sqrt, parte entera, entero ms prximo por arriba, etc.

Entrada:

Salida:

4. Esquema de recursin: Escriba un programa que aplique el esquema de recursin.

Entrada:

Salida:

5. Compresin sintctica de programas: Considerando la codificacin de smbolos mostrada en la tabla 1.7, d)


Table 1.7: Codificacin de smbolos de los programas-while . Smbolo Cdigo hexadecimal while do 0 1

{ } ++ -

2 3 4 5 6

X 0 1 ;
e)

7 8 9 A

escriba a cualquier programa-while como una sucesin de bytes. 6. Decompresin sintctica de programas: Para la misma codificacin de smbolos en el programa anterior, decida cundo una sucesin de bytes es el cdigo de un programa-while . Cuando lo sea, reescriba el programa como una cadena de caracteres ASCII. 7. Simulador de programas-while 's: Dado un programa-while y una configuracin inicial a su lista de variables, aplicar el programa a esa configuracin y visualizar el cmputo paso a paso.

Entrada: Salida:

8. Traductor de mquinas de Turing a programas-while 's: Dada una mquina de Turing escriba el programa-while que calcula a la misma funcin calculada por la mquina de Turing. Aqu hay que suponer que la mquina de Turing est definida sobre el alfabeto , que el 0 hace el papel de ``blanco'' y que representa a los nmeros en unario.

http://delta.cs.cinvestav.mx/~gmorales/ComplexConf/complex.pdf

You might also like