Ya que el concepto de procedimiento efectivo es un concepto intuitivo, impreciso y a priori no expresado en el formalismo matemático, los conceptos de
adhocprefix-adhocsufix Función \(\Sigma\)-efectivamente computable
adhocprefix-adhocsufix Conjunto \(\Sigma\)-efectivamente computable
adhocprefix-adhocsufix Conjunto \(\Sigma\)-efectivamente enumerable
también son imprecisos y están fuera del formalismo matemático, debido a que los tres se definen en términos de la existencia de procedimientos efectivos. Por supuesto, los tres conceptos son fundamentales en el estudio teórico de la computabilidad por lo que es muy importante poder dar un modelo o formalización matemática de estos conceptos. Pero nótese que los dos últimos se definen en función del primero por lo que una formalización matemática precisa del concepto de función \(\Sigma\)-efectivamente computable, resuelve el problema de modelizar en forma matemática estos tres conceptos.
En este capítulo daremos las tres modelizaciones matemáticas mas clásicas del concepto de función \(\Sigma\)-efectivamente computable. La primera y la mas apegada a la idea intuitiva de procedimiento efectivo es la dada por Alan Turing vía la matematización del concepto de máquina. Llamaremos a esta modelización el paradigma de Turing. La segunda, es la dada por Godel en su estudio de sistemas formales de la lógica de primer orden. Llamaremos a esta modelización el paradigma de Godel o el paradigma funcional o el paradigma recursivo. Por último veremos una formalización vía un lenguaje de programación imperativo. En honor a la influencia que tuvo Von Neumann en el diseño de la primer computadora de carácter universal (i.e. programable de propósito general), llamaremos a este paradigma el paradigma de Neumann o el paradigma imperativo. Dada la naturaleza filosófica e imprecisa del concepto de procedimiento efectivo y de sus conceptos derivados (i.e. función \(\Sigma\)-efectivamente computable, etc) a este conjunto de conceptos fundamentales para las ciencias de la computación lo llamaremos el paradigma filosófico. En honor al filosofo y matemático Gottfried Leibniz llamaremos también al paradigma filosófico, el paradigma de Leibniz. Cabe destacar que Leibniz creo la primera máquina de calcular, llamada la Stepped Reckoner.
Con esta manera de hablar nótese que los paradigmas matemáticos de Turing, Godel y Neumann intentan modelizar al paradigma de Leibniz. Para darle un toque de humor expresaremos esto diciendo que Turing, Godel y Neumann intentan vencer a Leibniz.
Estudiaremos el concepto de máquina de Turing, el cual fue introducido por Alan Turing para formalizar o modelizar matemáticamente la idea de procedimiento efectivo. Una vez definidas las máquinas podremos dar una modelización matemática precisa del concepto de función \(\Sigma\)-efectivamente computable. Llamaremos a estas funciones \(\Sigma\)-Turing computables y serán aquellas que (en algún sentido que será bien precisado matemáticamente) pueden ser computadas por una máquina de Turing. Por supuesto, la fidedignidad de este concepto, es decir cuan buena es la modelización matemática dada por Turing, puede no ser clara al comienzo pero a medida que vayamos avanzando en nuestro estudio y conozcamos además los otros paradigmas y su relación, quedara claro que el modelo de Turing es acertado.
Vivimos en un mundo plagado de máquinas (ascensores, celulares, relojes, taladros, etc). Una característica común a todas las máquinas es que tienen distintos estados posibles. Un estado es el conjunto de características que determinan un momento concreto posible de la máquina cuando esta funcionando. Por ejemplo un estado posible de un ascensor seria:
adhocprefix-adhocsufix esta en el tercer piso, con la primer puerta abierta y la otra cerrada, esta apretado el botón de ir al sexto piso, etc
donde ponemos etc porque dependiendo del tipo de ascensor (si es con memoria, a que pisos puede ir, etc) habrá mas datos que especificar para determinar un estado concreto.
Otra característica común de las máquinas es que interactúan de distintas formas con el usuario o mas generalmente su entorno. Dependiendo de que acción se ejecute sobre la máquina y en que estado este, la máquina realizará alguna tarea y además cambiará de estado. En general las máquinas son deterministicas en el sentido que siempre que estén en determinado estado y se les aplique determinada acción, realizarán la misma tarea y pasarán al mismo estado.
Son un modelo abstracto de máquina con una cantidad finita de estados la cual trabaja sobre una cinta de papel dividida en cuadros e interactuá o recibe acciones externas por medio de una cabeza lectora que lee de a un cuadro de la cinta a la ves y además puede borrar el contenido del cuadro leído y escribir en el un símbolo. También la cabeza lectora puede moverse un cuadro hacia la izquierda o hacia la derecha o quedarse en el mismo cuadro. La cinta tiene un primer cuadro hacia su izquierda pero hacia la derecha puede extenderse todo lo necesario. En un cuadro de la cinta podrá haber un símbolo o un cuadro puede simplemente estar en blanco. Es decir que habrá un alfabeto \(\Gamma\) el cual consiste de todos los símbolos que pueden figurar en la cinta. Esto será parte de los datos o características de cada máquina, es decir, \(\Gamma\) puede cambiar dependiendo de la máquina. La máquina, en función del estado en que se encuentre y de lo que vea su cabeza lectora en el cuadro escaneado, podrá moverse a lo sumo un cuadro (izquierda, derecha o quedarse quieta), modificar lo que encuentre en dicho cuadro (borrando y escribiendo algún nuevo símbolo) y cambiar de estado (posiblemente al mismo que tenia). Para simplificar supondremos que hay en \(\Gamma\) un símbolo el cual si aparece en un cuadro de la cinta, significara que dicho cuadro esta sin escribir o en blanco. Esto nos permitirá describir mas fácilmente el funcionamiento de la máquina. En gral llamaremos \(B\) a tal símbolo. También por lo general llamaremos \(Q\) al conjunto de estados de la máquina.
También cada máquina tendrá un estado especial el cual será llamado su estado inicial, generalmente denotado con \(q_{0}\), el cual será el estado en el que estará la máquina al comenzar a trabajar sobre la cinta. Hay otras características que tendrán las máquinas de Turing pero para dar un primer ejemplo ya nos basta. Describiremos una máquina de Turing \(M\) que tendrá \(\Gamma=\{@,a,b,B\}\) y tendrá dos estados, es decir \(Q=\{q_{0},q_{1}\}\). Obviamente \(q_{0}\) será su estado inicial y además el "comportamiento o personalidad" de \(M\) estará dado por las siguientes clausulas:
adhocprefix-adhocsufix Estando en estado \(q_{0}\) si ve ya sea \(b\) o \(B\) o \(@\), entonces se queda en estado \(q_{0}\) y se mueve a la derecha
adhocprefix-adhocsufix Estando en estado \(q_{0}\) si ve \(a\) entonces reescribe \(@\), se mueve a la izquierda y cambia al estado \(q_{1}\)
adhocprefix-adhocsufix Estando en estado \(q_{1}\) si ve \(a\) o \(b\) o \(B\) o \(@\) entonces lo deja como esta, se mueve a la izquierda y queda en estado \(q_{1}\)
Supongamos ahora que tomamos una palabra \(\alpha\in\Gamma^{\ast}\) y la distribuimos en la cinta dejando el primer cuadro en blanco y luego poniendo los símbolos de \(\alpha\) en los siguientes cuadros. Supongamos además que ponemos la máquina en estado \(q_{0}\) y con su cabeza lectora escaneando el primer cuadro de la cinta. Esto lo podemos representar gráficamente de la siguiente manera \[\begin{array}{cccccccc} B & \alpha_{1} & ... & \alpha_{n} & B & B & B & ...\\ \uparrow\\ q_{0} \end{array}\] donde \(\alpha_{1},...,\alpha_{n}\) son los sucesivos símbolos de \(\alpha\). Supongamos además que \(a\) ocurre en \(\alpha\). Dejamos al lector ir aplicando las clausulas de \(M\) para convencerse que luego de un rato de funcionar \(M\), la situación será \[\begin{array}{cccccccc} B & \beta_{1} & ... & \beta_{n} & B & B & B & ...\\ \uparrow\\ q_{1} \end{array}\] donde \(\beta_{1}...\beta_{n}\) es el resultado de reemplazar en \(\alpha\) la primer ocurrencia de \(a\) por \(@\). Dejamos como ejercicio para el lector averiguar que sucede cuando \(a\) no ocurre en \(\alpha\)
Una cosa que puede pasar es que para un determinado estado \(p\) y un \(\sigma\in\Gamma\), la máquina no tenga contemplada ninguna acción posible. Por ejemplo sea \(M\) la máquina de Turing dada por \(Q=\{q_{0}\}\), \(\Gamma=\{@,\$,B\}\) y por la siguiente clausula:
adhocprefix-adhocsufix Estando en estado \(q_{0}\) si ve ya sea \(@\) o \(B\), entonces se queda en estado \(q_{0}\) y se mueve a la derecha
Es fácil ver que si partimos de una situación \[\begin{array}{cccccccc} B & \alpha_{1} & ... & \alpha_{n} & B & B & B & ...\\ \uparrow\\ q_{0} \end{array}\] donde \(\alpha_{1},...,\alpha_{n}\in\Gamma\), entonces si ningún \(\alpha_{i}\) es igual a \(\$\), la máquina se moverá indefinidamente hacia la derecha y en caso contrario se moverá \(i\) pasos a la derecha y se detendrá, donde \(i\) es el menor \(l\) tal que \(\alpha_{l}=\$\).
Otro caso posible de detención de una máquina de Turing es cuando esta escaneando el primer cuadro de la cinta y su única acción posible implica moverse un cuadro a la izquierda. También en estos casos diremos que la máquina se detiene ya que la cinta no es extensible hacia la izquierda.
Otra característica de las máquinas de Turing es que poseen un alfabeto de entrada el cual esta contenido en el alfabeto \(\Gamma\) y en el cual están los símbolos que se usaran para formar la configuración inicial de la cinta (excepto \(B\)). En general lo denotaremos con \(\Sigma\) al alfabeto de entrada y los símbolos de \(\Gamma-\Sigma\) son considerados auxiliares. También habrá un conjunto \(F\) contenido en el conjunto \(Q\) de los estados de la máquina, cuyos elementos serán llamados estados finales.
Diremos que una palabra \(\alpha=\alpha_{1}...\alpha_{n}\in\Sigma^{\ast}\) es aceptada por \(M\) por alcance de estado final si partiendo de \[\begin{array}{cccccccc} B & \alpha_{1} & ... & \alpha_{n} & B & B & B & ...\\ \uparrow\\ q_{0} \end{array}\] en algún momento de la computación \(M\) esta en un estado de \(F\). Llamaremos \(L(M)\) al conjunto formado por todas las palabras que son aceptadas por alcance de estado final
Diremos que una palabra \(\alpha=\alpha_{1}...\alpha_{n}\in\Sigma^{\ast}\) es aceptada por \(M\) por detención si partiendo de \[\begin{array}{cccccccc} B & \alpha_{1} & ... & \alpha_{n} & B & B & B & ...\\ \uparrow\\ q_{0} \end{array}\] en algún momento \(M\) se detiene. Llamaremos \(H(M)\) al conjunto formado por todas las palabras que son aceptadas por detención
Seguiremos bastante fidedignamente el tratamiento dado en el libro de Hopcroft y Ullman. Una máquina de Turing es una 7-upla \(M=\left(Q,\Sigma,\Gamma,\delta,q_{0},B,F\right)\) donde
adhocprefix-adhocsufix \(Q\) es un conjunto finito cuyos elementos son llamados estados
adhocprefix-adhocsufix \(\Gamma\) es un alfabeto que contiene a \(\Sigma\)
adhocprefix-adhocsufix \(\Sigma\) es un alfabeto llamado el alfabeto de entrada
adhocprefix-adhocsufix \(B\in\Gamma-\Sigma\) es un símbolo de \(\Gamma\) llamado el blank symbol
adhocprefix-adhocsufix \(\delta:D_{\delta}\subseteq Q\times\Gamma\rightarrow Q\times\Gamma\times\{L,R,K\}\)
adhocprefix-adhocsufix \(q_{0}\) es un estado llamado el estado inicial de \(M\)
adhocprefix-adhocsufix \(F\subseteq Q\) es un conjunto de estados llamados finales
Nótese que la función \(\delta\) da la "personalidad" de la máquina. Describiremos esto informalmente y después cuando definamos la relación \(\vdash\) mas abajo esta idea quedara precisada en forma matemática.
adhocprefix-adhocsufix \(\delta(p,\sigma)=(q,\gamma,L)\) significara que: si \(M\) esta en estado \(p\) y su cabezal esta escaneando una casilla distinta de la primera, en la cual esta dibujado el símbolo \(\sigma\), entonces la máquina hará lo siguiente:
borrara \(\sigma\) y escribirá \(\gamma\) en su lugar, luego
se moverá un cuadro a la izquierda y luego
pasara al estado \(q\)
adhocprefix-adhocsufix \(\delta(p,\sigma)=(q,\gamma,K)\) significara que: si \(M\) esta en estado \(p\) y su cabezal esta escaneando una casilla en la cual esta dibujado el símbolo \(\sigma\), entonces la máquina hará lo siguiente:
borrara \(\sigma\) y escribirá \(\gamma\) en su lugar, luego
pasara al estado \(q\)
(es decir que el cabezal se queda kieto)
adhocprefix-adhocsufix \(\delta(p,\sigma)=(q,\gamma,R)\) significara que: si \(M\) esta en estado \(p\) y su cabezal esta escaneando una casilla en la cual esta dibujado el símbolo \(\sigma\), entonces la máquina hará lo siguiente:
borrara \(\sigma\) y escribirá \(\gamma\) en su lugar, luego
se moverá un cuadro a la derecha y luego
pasara al estado \(q\)
Los casos arriba descriptos son los únicos en los cuales la máquina \(M\) trabajara. O sea que si \((p,\sigma)\in(Q\times\Gamma)-D_{\delta}\) entonces \(M\) estando en estado \(p\) y con el cabezal leyendo el símbolo \(\sigma\) no puede hacer nada es decir solo permanecer quieta en el lugar de la cinta que este. También si \(\delta(p,\sigma)=(q,\gamma,L)\), entonces cuando \(M\) este en estado \(p\), con su cabezal escaneando la primer casilla y en la cual este dibujado el símbolo \(\sigma\), \(M\) no podrá hacer nada, lo cual es razonable ya que la cinta no es extensible hacia la izquierda.
Si bien en nuestra definición de máquina de Turing no hay ninguna restricción acerca de la naturaleza de los elementos de \(Q\), para continuar nuestro análisis asumiremos siempre que \(Q\) es un alfabeto disjunto con \(\Gamma\). Esto nos permitirá dar definiciones matemáticas precisas que formalizaran el funcionamiento de las máquinas de Turing en el contexto de las funciones mixtas. Debería quedar claro que el hecho que solo trabajemos con máquinas en las cuales \(Q\) es un alfabeto disjunto con \(\Gamma\), no afectara la profundidad y generalidad de nuestros resultados y definiciones.
Una descripción instantánea será una palabra de la forma \(\alpha q\beta\), donde \(\alpha,\beta\in\Gamma^{\ast}\), \(\left[\beta\right]_{\left\vert \beta\right\vert }\neq B\) y \(q\in Q\). Nótese que la condición \(\left[\beta\right]_{\left\vert \beta\right\vert }\neq B\) nos dice que \(\beta=\varepsilon\) o el último símbolo de \(\beta\) es distinto de \(B\). La descripción instantánea \(\alpha_{1}...\alpha_{n}q\beta_{1}...\beta_{m}\), con \(\alpha_{1},...,\alpha_{n}\), \(\beta_{1},...,\beta_{m}\in\Gamma\), \(n,m\geq0\) representara la siguiente situación \[\begin{array}{cccccccccccc} \alpha_{1} & \alpha_{2} & ... & \alpha_{n} & \beta_{1} & \beta_{2} & ... & \beta_{m} & B & B & B & ...\\ & & & & \uparrow\\ & & & & q \end{array}\] Nótese que aquí \(n\) y \(m\) pueden ser \(0\). Por ejemplo si \(n=0\) tenemos que \(\alpha_{1}...\alpha_{n}q\beta_{1}...\beta_{m}=q\beta_{1}...\beta_{m}\) y representa la siguiente situación \[\begin{array}{cccccccccccc} \beta_{1} & \beta_{2} & ... & \beta_{m} & B & B & B & ...\\ \uparrow\\ q \end{array}\] Si \(m=0\) tenemos que \(\alpha_{1}...\alpha_{n}q\beta_{1}...\beta_{m}=\alpha_{1}...\alpha_{n}q\) y representa la siguiente situación \[\begin{array}{cccccccccccc} \alpha_{1} & \alpha_{2} & ... & \alpha_{n} & B & B & ... & & & & ...\\ & & & & \uparrow\\ & & & & q \end{array}\] Si ambos \(n\) y \(m\) son \(0\) entonces tenemos que \(\alpha_{1}...\alpha_{n}q\beta_{1}...\beta_{m}=q\) y representa la siguiente situación \[\begin{array}{cccccccccccc} B & B & B & ...\\ \uparrow\\ q \end{array}\] La condición de que en una descripción instantánea \(\alpha q\beta\) deba suceder que \(\left[\beta\right]_{\left\vert \beta\right\vert }\neq B\) es para que haya una correspondencia biunívoca entre descripciones instantáneas y situaciones de funcionamiento de la máquina. Dejamos al lector meditar sobre esto hasta convencerse de su veracidad. Pero siempre debe tener presente que las descripciones instantáneas son palabras que describen una situación real de algún instante en el funcionamiento de la máquina
Usaremos \(Des\) para denotar el conjunto de las descripciones instantáneas. Definamos la función \(St:Des\rightarrow Q\), de la siguiente manera \[St(d)=\text{unico simbolo de }Q\text{ que ocurre en }d\]
Dado \(\alpha\in(Q\cup\Gamma)^{\ast}\), definamos \(\left\lfloor \alpha\right\rfloor\) de la siguiente manera \[\begin{aligned} \left\lfloor \varepsilon\right\rfloor & =\varepsilon\\ \left\lfloor \alpha\sigma\right\rfloor & =\alpha\sigma\text{, si }\sigma\neq B\\ \left\lfloor \alpha B\right\rfloor & =\left\lfloor \alpha\right\rfloor \end{aligned}\] Es decir \(\left\lfloor \alpha\right\rfloor\) es el resultado de remover de \(\alpha\) el tramo final mas grande de la forma \(B^{n}\). Dada cualquier palabra \(\alpha\) definimos \[^{\curvearrowright}\alpha=\left\{ \begin{array}{lll} \left[\alpha\right]_{2}...\left[\alpha\right]_{\left\vert \alpha\right\vert } & \text{si} & \left\vert \alpha\right\vert \geq2\\ \varepsilon & \text{si} & \left\vert \alpha\right\vert \leq1 \end{array}\right.\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \alpha^{\curvearrowleft}=\left\{ \begin{array}{lll} \left[\alpha\right]_{1}...\left[\alpha\right]_{\left\vert \alpha\right\vert -1} & \text{si} & \left\vert \alpha\right\vert \geq2\\ \varepsilon & \text{si} & \left\vert \alpha\right\vert \leq1 \end{array}\right.\]
Observación: Nótese que si \(\alpha p\beta\) es una descripción instantánea, entonces en la situación real que ella describe la cabeza lectora de la máquina esta leyendo el símbolo \(\left[\beta B\right]_{1}\) (o sea el 1er símbolo de \(\beta\) si \(\beta\neq\varepsilon\) y \(B\) en caso contrario). Esta forma cheta de describir que símbolo lee la cabeza lectora nos será útil para definir a continuación la relación \(\vdash\). Dadas \(d_{1},d_{2}\in Des\), escribiremos \(d_{1}\vdash d_{2}\) cuando existan \(\sigma\in\Gamma\), \(\alpha,\beta\in\Gamma^{\ast}\) y \(p,q\in Q\) tales que se cumple alguno de los siguientes casos
Caso 1. \[\begin{aligned} d_{1} & =\alpha p\beta\\ \delta\left(p,\left[\beta B\right]_{1}\right) & =(q,\sigma,R)\\ d_{2} & =\alpha\sigma q^{\curvearrowright}\beta \end{aligned}\]
Caso 2. \[\begin{aligned} d_{1} & =\alpha p\beta\\ \delta\left(p,\left[\beta B\right]_{1}\right) & =(q,\sigma,L)\text{ y }\alpha\neq\varepsilon\\ d_{2} & =\left\lfloor \alpha^{\curvearrowleft}q\left[\alpha\right]_{\left\vert \alpha\right\vert }\sigma^{\curvearrowright}\beta\right\rfloor \end{aligned}\]
Caso 3. \[\begin{aligned} d_{1} & =\alpha p\beta\\ \delta(p,\left[\beta B\right]_{1}) & =(q,\sigma,K)\\ d_{2} & =\left\lfloor \alpha q\sigma^{\curvearrowright}\beta\right\rfloor \end{aligned}\] Escribiremos \(d\nvdash d^{\prime}\) para expresar que no se da \(d\vdash d^{\prime}\). Para \(d,d^{\prime}\in Des\) y \(n\geq0\), escribiremos \(d\overset{n}{\vdash}d^{\prime}\) si existen \(d_{1},...,d_{n+1}\in Des\) tales que \[\begin{aligned} d & =d_{1}\\ d^{\prime} & =d_{n+1}\\ d_{i} & \vdash d_{i+1}\text{, para }i=1,...,n. \end{aligned}\] Nótese que \(d\overset{0}{\vdash}d^{\prime}\) sii \(d=d^{\prime}\). Finalmente definamos \[d\overset{\ast}{\vdash}d^{\prime}\text{ sii }(\exists n\in\omega)\;d\overset{n}{\vdash}d^{\prime}\text{.}\]
Dada \(d\in Des\), diremos que \(M\) se detiene partiendo de \(d\) si existe \(d^{\prime}\in Des\) tal que
adhocprefix-adhocsufix \(d\overset{\ast}{\vdash}d^{\prime}\)
adhocprefix-adhocsufix \(d^{\prime}\nvdash d^{\prime\prime}\), para cada \(d^{\prime\prime}\in Des\)
Debería quedar claro que es posible que \(\alpha p\beta\nvdash d\), para cada descripción instantánea \(d\), y que \(\delta(p,[\beta B]_{1})\) sea no vacío.
Diremos que una palabra \(\alpha\in\Sigma^{\ast}\) es aceptada por \(M\) por alcance de estado final cuando \[\left\lfloor q_{0}B\alpha\right\rfloor \overset{\ast}{\vdash}d\text{, con }d\text{ tal que }St(d)\in F.\] El lenguaje aceptado por \(M\) por alcance de estado final se define de la siguiente manera \[L(M)=\{\alpha\in\Sigma^{\ast}:\alpha\text{ es aceptada por }M\text{ por alcance de estado final}\}\text{.}\]
Diremos que una palabra \(\alpha\in\Sigma^{\ast}\) es aceptada por \(M\) por detención cuando \(M\) se detiene partiendo de \(\left\lfloor q_{0}B\alpha\right\rfloor\). El lenguaje aceptado por \(M\) por detención se define de la siguiente manera \[H(M)=\{\alpha\in\Sigma^{\ast}:\alpha\text{ es aceptada por }M\text{ por detencion}\}\]
Para poder computar funciones mixtas con una máquina de Turing necesitaremos un símbolo para representar números sobre la cinta. Llamaremos a este símbolo unit y lo denotaremos con \(\shortmid\). Mas formalmente una máquina de Turing con unit es una 8-upla \(M=\left(Q,\Sigma,\Gamma,\delta,q_{0},B,\shortmid,F\right)\) tal que \(\left(Q,\Sigma,\Gamma,\delta,q_{0},B,F\right)\) es una máquina de Turing y \(\shortmid\) es un símbolo distinguido perteneciente a \(\Gamma-(\{B\}\cup\Sigma)\).
Diremos que una función \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\Sigma^{\ast}\) es \(\Sigma\)-Turing computable si existe una máquina de Turing con unit, \(M=\left(Q,\Sigma,\Gamma,\delta,q_{0},B,\shortmid,F\right)\) tal que:
adhocprefix(1)adhocsufix Si \((\vec{x},\vec{\alpha})\in D_{f}\), entonces hay un \(p\in Q\) tal que \[\left\lfloor q_{0}B\shortmid^{x_{1}}B...B\shortmid^{x_{n}}B\alpha_{1}B...B\alpha_{m}\right\rfloor \overset{\ast}{\vdash}\left\lfloor pBf(\vec{x},\vec{\alpha})\right\rfloor\] y \(\left\lfloor pBf(\vec{x},\vec{\alpha})\right\rfloor \nvdash d\), para cada \(d\in Des\)
adhocprefix(2)adhocsufix Si \((\vec{x},\vec{\alpha})\in\omega^{n}\times\Sigma^{\ast m}-D_{f}\), entonces \(M\) no se detiene partiendo de \[\left\lfloor q_{0}B\shortmid^{x_{1}}B...B\shortmid^{x_{n}}B\alpha_{1}B...B\alpha_{m}\right\rfloor .\]
En forma similar, una función \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast}{}^{m}\rightarrow\omega\), es llamada \(\Sigma\)-Turing computable si existe una máquina de Turing con unit, \(M=\left(Q,\Sigma,\Gamma,\delta,q_{0},B,\shortmid,F\right)\), tal que:
adhocprefix(1)adhocsufix Si \((\vec{x},\vec{\alpha})\in D_{f}\), entonces hay un \(p\in Q\) tal que \[\left\lfloor q_{0}B\shortmid^{x_{1}}B...B\shortmid^{x_{n}}B\alpha_{1}B...B\alpha_{m}\right\rfloor \overset{\ast}{\vdash}\left\lfloor pB\shortmid^{f(\vec{x},\vec{\alpha})}\right\rfloor\] y \(\left\lfloor pB\shortmid^{f(\vec{x},\vec{\alpha})}\right\rfloor \nvdash d\), para cada \(d\in Des\)
adhocprefix(2)adhocsufix Si \((\vec{x},\vec{\alpha})\in\omega^{n}\times\Sigma^{\ast m}-D_{f}\), entonces \(M\) no se detiene partiendo de \[\left\lfloor q_{0}B\shortmid^{x_{1}}B...B\shortmid^{x_{n}}B\alpha_{1}B...B\alpha_{m}\right\rfloor\]
Cabe destacar que la condición \[\left\lfloor pBf(\vec{x},\vec{\alpha})\right\rfloor \nvdash d,\text{ para cada }d\in Des\] es equivalente a que \((p,B)\) no este en el dominio de \(\delta\) o que si lo este y que la tercer coordenada de \(\delta(p,B)\) sea \(L\).
Cuando una máquina de Turing con unit \(M\) cumpla los items (1) y (2) de la definición anterior, diremos que \(M\) computa a la función \(f\) o que \(f\) es computada por \(M\). Por supuesto esta definición no tendría sentido como modelo matemático del concepto de función \(\Sigma\)-efectivamente computable si no sucediera que toda función \(\Sigma\)-Turing computable fuera \(\Sigma\)-efectivamente computable. Este hecho es intuitivamente claro y lo presentamos a continuación en forma de proposición. En algún sentido esto nos dice que el paradigma filosófico es mas amplio (o igual) al paradigma de Turing. Para darle un toque de humor expresaremos esto diciendo que Leibniz vence a Turing.
4.1 (Leibniz vence a Turing). Sean \(n,m\in\omega\) y \(O\in\{\omega,\Sigma^{\ast}\}\). Si \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast}{}^{m}\rightarrow O\) es computada por una máquina de Turing con unit \(M=\left(Q,\Sigma,\Gamma,\delta,q_{0},B,\shortmid,F\right)\), entonces \(f\) es \(\Sigma\)-efectivamente computable.
Proof. Haremos el caso \(O=\Sigma^{\ast}\). Sea \(\mathbb{P}\) el siguiente procedimiento efectivo.
- Conjunto de datos de entrada de \(\mathbb{P}\) igual a \(\omega^{n}\times\Sigma^{\ast}{}^{m}\)
- Conjunto de datos de salida de \(\mathbb{P}\) contenido en \(O\)
- Funcionamiento: Hacer funcionar paso a paso la máquina \(M\) partiendo de la descripción instantánea \(\left\lfloor q_{0}B\shortmid^{x_{1}}B...B\shortmid^{x_{n}}B\alpha_{1}B...B\alpha_{m}\right\rfloor\). Si en alguna instancia \(M\) termina, dar como salida el resultado de remover de la descripción instantánea final los dos primeros símbolos.
Nótese que este procedimiento termina solo en aquellos elementos \((\vec{x},\vec{\sigma})\in\omega^{n}\times\Sigma^{\ast}{}^{m}\) tales que la máquina \(M\) termina partiendo desde \[\left\lfloor q_{0}B\shortmid^{x_{1}}B...B\shortmid^{x_{n}}B\alpha_{1}B...B\alpha_{m}\right\rfloor\] por lo cual termina solo en los elementos de \(D_{f}\) ya que \(M\) computa a \(f\). Además es claro que en caso de terminación el procedimiento da como salida \(f(\vec{x},\vec{\sigma})\).
Sin embargo el modelo Turingniano podría a priori no ser del todo correcto ya que podría pasar que haya una función que sea computada por un procedimiento efectivo pero que no exista una máquina de Turing que la compute. En otras palabras el modelo podría ser incompleto. La completitud de este modelo puede no ser clara al comienzo pero a medida que vayamos avanzando en nuestro estudio y conozcamos además los otros paradigmas y su relación, quedara claro que el modelo de Turing es acertado, es decir que también pasa que Turing vence a Leibniz.
Ya que la noción de función \(\Sigma\)-Turing computable es el modelo matemático de Turing del concepto de función \(\Sigma\)-efectivamente computable, nos podríamos preguntar entonces cual es el modelo matemático de Turing del concepto de conjunto \(\Sigma\)-efectivamente enumerable. Si prestamos atención a la definición de conjunto \(\Sigma\)-efectivamente enumerable, notaremos que depende de la existencia de cierta función \(F\) por lo cual la siguiente definición cae de maduro:
Diremos que un conjunto \(S\subseteq\omega^{n}\times\Sigma^{\ast m}\) será llamado \(\Sigma\)-Turing enumerable cuando sea vacío o haya una función \(F:\omega\rightarrow\omega^{n}\times\Sigma^{\ast m}\) tal que \(I_{F}=S\) y \(F_{(i)}\) sea \(\Sigma\)-Turing computable, para cada \(i\in\{1,...,n+m\}\).
Debería quedar claro que si el concepto de función \(\Sigma\)-Turing computable modeliza correctamente al concepto de función \(\Sigma\)-efectivamente computable, entonces el concepto de conjunto \(\Sigma\)-Turing enumerable recién definido modeliza correctamente al concepto de conjunto \(\Sigma\)-efectivamente enumerable. Nótese que según la definición que acabamos de escribir, un conjunto no vacío \(S\subseteq\omega^{n}\times\Sigma^{\ast m}\) es \(\Sigma\)-Turing enumerable si y solo si hay máquinas de Turing con unit \[\begin{aligned} M_{1} & =\left(Q_{1},\Sigma,\Gamma_{1},\delta_{1},q_{01},B,\shortmid,F_{1}\right)\\ M_{2} & =\left(Q_{2},\Sigma,\Gamma_{2},\delta_{2},q_{02},B,\shortmid,F_{2}\right)\\ & \vdots\\ M_{n+m} & =\left(Q_{n+m},\Sigma,\Gamma_{n+m},\delta_{n+m},q_{0n+m},B,\shortmid,F_{n+m}\right) \end{aligned}\] tales que
adhocprefix-adhocsufix cada \(M_{i}\), con \(i=1,...,n\), computa una función \(F_{i}:\omega\rightarrow\omega\)
adhocprefix-adhocsufix cada \(M_{i}\), con \(i=n+1,...,n+m\), computa una función \(F_{i}:\omega\rightarrow\Sigma^{\ast}\)
adhocprefix-adhocsufix \(S=\mathrm{Im}([F_{1},...,F_{n+m}])\)
Como puede notarse las máquinas \(M_{1},...,M_{n+m}\) puestas secuencialmente a funcionar desde la descripciones instantáneas \[\begin{aligned} & \left\lfloor q_{01}B\shortmid^{x}\right\rfloor \\ & \left\lfloor q_{02}B\shortmid^{x}\right\rfloor \\ & \ \ \ \ \ \ \ \ \ \vdots\\ & \left\lfloor q_{0n+m}B\shortmid^{x}\right\rfloor \end{aligned}\] producen en forma natural un procedimiento efectivo (con dato de entrada \(x\in\omega\)) que enumera a \(S\). Por supuesto podemos decir que en tal caso las máquinas \(M_{1},...,M_{n+m}\) enumeran a \(S\). La siguiente proposición muestra que también las cosas se pueden hacer con una sola máquina de Turing.
4.2. Sea \(S\subseteq\omega^{n}\times\Sigma^{\ast m}\) un conjunto no vacío. Entonces \(S\) es \(\Sigma\)-Turing enumerable si y solo si hay una máquina de Turing con unit \(M=\left(Q,\Sigma,\Gamma,\delta,q_{0},B,\shortmid,F\right)\), tal que:
adhocprefix(1)adhocsufix Para cada \(x\in\omega\), tenemos que \(M\) se detiene partiendo de \(\left\lfloor q_{0}B\shortmid^{x}\right\rfloor\) y llega a una descripción instantánea de la forma \(\left\lfloor qB\shortmid^{x_{1}}B...B\shortmid^{x_{n}}B\alpha_{1}B...B\alpha_{m}\right\rfloor\), con \((\vec{x},\vec{\alpha})\in S\).
adhocprefix(2)adhocsufix Para cada \((\vec{x},\vec{\alpha})\in S\) hay un \(x\in\omega\) tal que \(M\) se detiene partiendo de \(\left\lfloor q_{0}B\shortmid^{x}\right\rfloor\) y llega a una descripción instantánea de la forma \(\left\lfloor qB\shortmid^{x_{1}}B...B\shortmid^{x_{n}}B\alpha_{1}B...B\alpha_{m}\right\rfloor\)
Proof. Queda como ejercicio ver como construir la máquina \(M\) utilizando las máquinas \(M_{1},...,M_{n+m}\) y recíprocamente ver como a partir de una máquina \(M\) con las propiedades (1) y (2) se pueden construir las máquinas \(M_{1},...,M_{n+m}\).
La versión Turingniana del concepto de conjunto \(\Sigma\)-efectivamente computable es fácil de dar: un conjunto \(S\subseteq\omega^{n}\times\Sigma^{\ast m}\) será llamado \(\Sigma\)-Turing computable cuando la función \(\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}\) sea \(\Sigma\)-Turing computable. O sea que \(S\subseteq\omega^{n}\times\Sigma^{\ast m}\) es \(\Sigma\)-Turing computable sii hay una máquina de Turing con unit \(M=\left(Q,\Sigma,\Gamma,\delta,q_{0},B,\shortmid,F\right)\) la cual computa a \(\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}\), es decir:
adhocprefix-adhocsufix Si \((\vec{x},\vec{\alpha})\in S\), entonces hay un \(p\in Q\) tal que \[\left\lfloor q_{0}B\shortmid^{x_{1}}B...B\shortmid^{x_{n}}B\alpha_{1}B...B\alpha_{m}\right\rfloor \overset{\ast}{\vdash}\left\lfloor pB\shortmid\right\rfloor\] y \(\left\lfloor pB\shortmid\right\rfloor \nvdash d\), para cada \(d\in Des\)
adhocprefix-adhocsufix Si \((\vec{x},\vec{\alpha})\in(\omega^{n}\times\Sigma^{\ast m})-S\), entonces hay un \(p\in Q\) tal que \[\left\lfloor q_{0}B\shortmid^{x_{1}}B...B\shortmid^{x_{n}}B\alpha_{1}B...B\alpha_{m}\right\rfloor \overset{\ast}{\vdash}\left\lfloor pB\right\rfloor\] y \(\left\lfloor pB\right\rfloor \nvdash d\), para cada \(d\in Des\)
Si \(M\) es una máquina de Turing la cual computa a \(\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}\), diremos que \(M\) decide la pertenencia a \(S\), con respecto al conjunto \(\omega^{n}\times\Sigma^{\ast m}\).
En esta sección desarrollaremos el modelo matemático del concepto de función \(\Sigma\)-efectivamente computable, dado por Godel. Dichas funciones serán llamadas \(\Sigma\)-recursivas. La idea es partir de un conjunto inicial de funciones muy simples y obviamente \(\Sigma\)-efectivamente computables y luego obtener nuevas funciones \(\Sigma\)-efectivamente computables usando constructores que preservan la computabilidad efectiva. Las funciones \(\Sigma\)-recursivas serán las que se obtienen iterando el uso de estos constructores, partiendo del conjunto inicial de funciones antes mencionado. Nos referiremos a este paradigma como el paradigma Godeliano o recursivo. A veces también lo llamaremos el paradigma funcional.
La familia de funciones simples y obviamente \(\Sigma\)-efectivamente computables de la que partiremos es la siguiente \[\left\{ Suc,Pred,C_{0}^{0,0},C_{\varepsilon}^{0,0}\right\} \cup\left\{ d_{a}:a\in\Sigma\right\} \cup\left\{ p_{j}^{n,m}:1\leq j\leq n+m\right\}\] Los constructores que usaremos son:
adhocprefix-adhocsufix Composición
adhocprefix-adhocsufix Recursión primitiva
adhocprefix-adhocsufix Minimización de predicados \(\Sigma\)-totales
Estos constructores nos permiten dadas ciertas funciones construir o definir una nueva función y tienen la propiedad de preservar la computabilidad efectiva en el sentido que si las funciones iniciales son \(\Sigma\)-efectivamente computables, entonces la función obtenida también lo es. Un concepto fundamental es el de función \(\Sigma\)-recursiva primitiva. Estas funciones serán aquellas que se obtienen a partir de las del conjunto inicial usando solo los dos primeros constructores: composición y recursión primitiva. Nuestro primer objetivo es definir el concepto de función \(\Sigma\)-recursiva primitiva para lo cual en las próximas dos secciones definiremos y estudiaremos los constructores de composición y recursión primitiva. Luego definiremos el concepto de función \(\Sigma\)-recursiva primitiva y nos abocaremos a desarrollar este concepto fundamental. Recién después estudiaremos el constructor de Minimización y definiremos el concepto de función \(\Sigma\)-recursiva. La última parte de la sección esta destinada a probar un teorema que nos dice que los conceptos de función \(\Sigma\)-recursiva y \(\Sigma\)-recursiva primitiva son independientes del alfabeto \(\Sigma\).
Dadas funciones \(\Sigma\)-mixtas \(f,f_{1},...,f_{r}\), con \(r\geq1\), diremos que la función \(f\circ[f_{1},...,f_{r}]\) es obtenida por composición a partir de las funciones \(f,f_{1},...,f_{r}\). Para probar que la composición preserva la computabilidad efectiva necesitaremos el siguiente lema.
4.1 (Composición no Vacía). Supongamos que \(f,f_{1},...,f_{r}\) son funciones \(\Sigma\)-mixtas, con \(r\geq1\). Supongamos además que \(f\circ[f_{1},...,f_{r}]\neq\emptyset\). Entonces hay \(n,m,k,l\in\omega\) y \(s\in\{\#,\ast\}\) tales que
adhocprefix-adhocsufix \(r=n+m\)
adhocprefix-adhocsufix \(f\) es de tipo \((n,m,s)\)
adhocprefix-adhocsufix \(f_{i}\) es de tipo \((k,l,\#)\), para cada \(i=1,...,n\)
adhocprefix-adhocsufix \(f_{i}\) es de tipo \((k,l,\ast)\), para cada \(i=n+1,...,n+m\)
Mas aun, en tal caso la función \(f\circ[f_{1},...,f_{n+m}]\) es de tipo \((k,l,s)\) y: \[\begin{aligned} D_{f\circ[f_{1},...,f_{n+m}]} & =\left\{ (\vec{x},\vec{\alpha})\in\bigcap_{i=1}^{n+m}D_{f_{i}}:(f_{1}(\vec{x},\vec{\alpha}),...,f_{n+m}(\vec{x},\vec{\alpha}))\in D_{f}\right\} \\ f\circ[f_{1},...,f_{n+m}](\vec{x},\vec{\alpha}) & =f(f_{1}(\vec{x},\vec{\alpha}),...,f_{n+m}(\vec{x},\vec{\alpha})). \end{aligned}\]
Proof. Nótese que \(f\neq\emptyset\) y \([f_{1},...,f_{r}]\neq\emptyset\) (por que?). Además \(f_{i}\neq\emptyset\), para cada \(i=1,...,r\) (por que?). Ya que \(f\neq\emptyset\) tenemos que hay únicos \(n,m\in\omega\) y \(s\in\{\#,\ast\}\) tales que \(f\) es de tipo \((n,m,s)\). Ya que \(f\circ[f_{1},...,f_{r}]\neq\emptyset\) y \(I_{[f_{1},...,f_{r}]}\subseteq I_{f_{1}}\times...\times I_{f_{r}}\), tenemos que
adhocprefix-adhocsufix \(r=n+m\)
adhocprefix-adhocsufix \(I_{f_{i}}\subseteq\omega\), para cada \(i=1,...,n\)
adhocprefix-adhocsufix \(I_{f_{i}}\subseteq\Sigma^{\ast}\), para cada \(i=n+1,...,n+m\)
Ya que \([f_{1},...,f_{r}]\neq\emptyset\) tenemos que \(D_{[f_{1},...,f_{r}]}=\bigcap_{i=1}^{r}D_{f_{i}}\neq\emptyset\), por lo cual los conjuntos \(D_{f_{1}},...,D_{f_{n+m}}\) deberán ser todos de un mismo tipo, digamos de tipo \((k,l)\). Es decir que \(f_{i}\) es de tipo \((k,l,\#)\), para cada \(i=1,...,n\) y \(f_{i}\) es de tipo \((k,l,\ast)\), para cada \(i=n+1,...,n+m\).
Las últimas observaciones del lema son directas de las definiciones de \([f_{1},...,f_{n+m}]\) y de composición de funciones
Ahora sí podemos probar fácilmente que el constructor composición preserva la computabilidad efectiva
4.2. Si \(f,f_{1},...,f_{r}\), con \(r\geq1\), son \(\Sigma\)-efectivamente computables, entonces \(f\circ[f_{1},...,f_{r}]\) lo es.
Proof. Si \(f\circ[f_{1},...,f_{r}]=\emptyset\), entonces claramente es \(\Sigma\)-efectivamente computable. Supongamos entonces que \(f\circ[f_{1},...,f_{r}]\neq\emptyset\). Por el lema anterior hay \(n,m,k,l\in\omega\) y \(s\in\{\#,\ast\}\) tales que
adhocprefix-adhocsufix \(r=n+m\)
adhocprefix-adhocsufix \(f\) es de tipo \((n,m,s)\)
adhocprefix-adhocsufix \(f_{i}\) es de tipo \((k,l,\#)\), para cada \(i=1,...,n\)
adhocprefix-adhocsufix \(f_{i}\) es de tipo \((k,l,\ast)\), para cada \(i=n+1,...,n+m\)
Sean \(\mathbb{P},\mathbb{P}_{1},...,\mathbb{P}_{n+m}\) procedimientos efectivos los cuales computen computen las funciones \(f,f_{1},...,f_{n+m}\), respectivamente. Usando estos procedimientos es fácil definir un procedimiento efectivo el cual compute a \(f\circ[f_{1},...,f_{n+m}]\).
La recursión primitiva es un tipo muy particular de recursión. Consideremos por ejemplo las siguientes ecuaciones:
adhocprefix(1)adhocsufix \(R(0)=1\)
adhocprefix(2)adhocsufix \(R(t+1)=1+R(t)+R(t)^{2}\)
Nótese que hay una única función \(R:\omega\rightarrow\omega\) la cual cumple (1) y (2). Esto es ya que el valor de \(R\) en \(t\) esta determinado por sucesivas aplicaciones de las ecuaciones (1) y (2). Por ejemplo la ecuación (1) nos dice que \(R(0)=1\) pero entonces la ecuación (2) nos dice que \(R(1)=1+1+1^{2}=3\) por lo cual nuevamente la ecuación (2) nos dice que \(R(2)=1+3+3^{2}=13\) y así podemos notar fácilmente que \(R\) esta determinada por dichas ecuaciones.
Se suele decir que las ecuaciones (1) y (2) definen recursivamente a la función \(R\) pero hay que tener cuidado porque esto es una manera de hablar ya que la función \(R\) podría en nuestro discurso ya haber sido definida de otra manera. Mas propio es pensar que dichas ecuaciones determinan a \(R\) en el sentido que \(R\) es la única que las cumple. Por ejemplo las ecuaciones:
adhocprefix(a)adhocsufix \(R(0)=50\)
adhocprefix(b)adhocsufix \(R(t+1)=R(t)\)
“definen recursivamente” a la función \(C_{50}^{1,0}\) pero esta claro que la definición de \(C_{50}^{1,0}\) en esta materia no fue dada de esta forma.
Hay casos de recursiones en las cuales el valor de \(R(t+1)\) no solo depende de \(R(t)\) sino que también depende de \(t\). Por ejemplo
adhocprefix(i)adhocsufix \(R(0)=1\)
adhocprefix(ii)adhocsufix \(R(t+1)=t.R(t)+1\)
De todas maneras debería quedar claro que las ecuaciones (i) y (ii) determinan una única función \(R:\omega\rightarrow\omega\) que las satisface.
También podemos generalizar pensando que la función \(R\) depende no solo de un parámetro \(t\) sino que su dominio es \(\omega^{4}\), es decir depende de \(t\) y \(x_{1},x_{2},x_{3}\). Por ejemplo
adhocprefix(p)adhocsufix \(R(0,x_{1},x_{2},x_{3})=x_{1}+2x_{3}\)
adhocprefix(q)adhocsufix \(R(t+1,x_{1},x_{2},x_{3})=t+x_{1}+x_{2}+x_{3}+R(t,x_{1},x_{2},x_{3})\)
Dejamos al lector convencerse de que (p) y (q) son cumplidas por una única función \(R:\omega^{4}\rightarrow\omega\). También podríamos tener variables alfabéticas. Por ejemplo consideremos
adhocprefix(r)adhocsufix \(R(0,x_{1},x_{2},\alpha_{1},\alpha_{2})=x_{1}+\left\vert \alpha_{1}\right\vert ^{x_{2}}\)
adhocprefix(s)adhocsufix \(R(t+1,x_{1},x_{2},\alpha_{1},\alpha_{2})=t+x_{1}+x_{2}+\left\vert \alpha_{1}\right\vert +\left\vert \alpha_{2}\right\vert +R(t,x_{1},x_{2},\alpha_{1},\alpha_{2})\)
Es claro aquí que las ecuaciones (r) y (s) determinan una única función \(R:\omega^{3}\times\Sigma^{\ast2}\rightarrow\omega\) que las cumple. Esto se puede explicar de la siguiente manera:
adhocprefix-adhocsufix La ecuación (r) determina los valores de \(R\) sobre el conjunto \(\{0\}\times\omega\times\omega\times\Sigma^{\ast}\times\Sigma^{\ast}\). Pero una ves determinados estos valores, la ecuación (s) tomada con \(t=0\), determina los valores de \(R\) sobre el conjunto \(\{1\}\times\omega\times\omega\times\Sigma^{\ast}\times\Sigma^{\ast}\). Pero una ves determinados estos valores, la ecuación (s) tomada con \(t=1\), determina los valores de \(R\) sobre el conjunto \(\{2\}\times\omega\times\omega\times\Sigma^{\ast}\times\Sigma^{\ast}\), etc
El caso anterior podría generalizarse de la siguiente manera: Si tenemos dadas dos funciones \[\begin{aligned} f & :\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\\ g & :\omega^{n+2}\times\Sigma^{\ast m}\rightarrow\omega \end{aligned}\] entonces las ecuaciones:
adhocprefix(a)adhocsufix \(R(0,\vec{x},\vec{\alpha})=f(\vec{x},\vec{\alpha})\)
adhocprefix(b)adhocsufix \(R(t+1,\vec{x},\vec{\alpha})=g(R(t,\vec{x},\vec{\alpha}),t,\vec{x},\vec{\alpha})\)
determinan una única función \(R:\omega^{n+1}\times\Sigma^{\ast m}\rightarrow\omega\) que las cumple. Nótese que para el caso \[\begin{aligned} n & =m=2\\ f & =\lambda x_{1}x_{2}\alpha_{1}\alpha_{2}[x_{1}+\left\vert \alpha_{1}\right\vert ^{x_{2}}]\\ g & =\lambda xtx_{1}x_{2}\alpha_{1}\alpha_{2}[t+x_{1}+x_{2}+\left\vert \alpha_{1}\right\vert +\left\vert \alpha_{2}\right\vert +x] \end{aligned}\] las ecuaciones (a) y (b) se transforman en las ecuaciones (r) y (s).
El primer caso de recursión primitiva que definiremos a continuación engloba los ejemplos vistos recién dentro de un marco general.
Supongamos tenemos dadas funciones \[\begin{aligned} f & :S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\omega\\ g & :\omega\times\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\omega \end{aligned}\] con \(S_{1},...,S_{n}\subseteq\omega\) y \(L_{1},...,L_{m}\subseteq\Sigma^{\ast}\) conjuntos no vacíos. Usando el razonamiento inductivo usado en los ejemplos anteriores, se puede probar que hay una única función \[R:\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\omega\] la cual cumple las ecuaciones
adhocprefix-adhocsufix \(R(0,\vec{x},\vec{\alpha})=f(\vec{x},\vec{\alpha})\)
adhocprefix-adhocsufix \(R(t+1,\vec{x},\vec{\alpha})=g(R(t,\vec{x},\vec{\alpha}),t,\vec{x},\vec{\alpha})\)
Llamaremos \(R(f,g)\) a esta única función que cumple las ecuaciones anteriores. Resumiendo este hecho, diremos que las ecuaciones
adhocprefix(1)adhocsufix \(R(f,g)(0,\vec{x},\vec{\alpha})=f(\vec{x},\vec{\alpha})\)
adhocprefix(2)adhocsufix \(R(f,g)(t+1,\vec{x},\vec{\alpha})=g(R(f,g)(t,\vec{x},\vec{\alpha}),t,\vec{x},\vec{\alpha})\)
definen recursivamente a la función \(R(f,g)\). También diremos que \(R(f,g)\) es obtenida por recursión primitiva a partir de \(f\) y \(g\).
NOTA IMPORTANTE: No confundirse y pensar que \(R(f,g)\) es el resultado de aplicar una función \(R\) al par \((f,g)\), de hecho hasta el momento no hemos definido ninguna función \(R\) cuyo dominio sea cierto conjunto de pares ordenados de funciones!
Nótese que cuando \(m=n=0\), se tiene que \(D_{f}=\{\lozenge\}\) y (1) y (2) se transforman en
adhocprefix(1)adhocsufix \(R(f,g)(0)=f(\lozenge)\)
adhocprefix(2)adhocsufix \(R(f,g)(t+1)=g(R(f,g)(t),t)\)
Veamos algunos ejemplos
adhocprefix(E1)adhocsufix Tomemos \(f=p_{1}^{1,0}\) y \(g=Suc\circ p_{1}^{3,0}\). De la definición de \(R(f,g)\), obtenemos que su dominio es \(\omega^{2}\) y \[\begin{aligned} R(f,g)(0,x_{1}) & =p_{1}^{1,0}(x_{1})=x_{1}\\ R(f,g)(t+1,x_{1}) & =\left(Suc\circ p_{1}^{3,0}\right)(R(f,g)(t,x_{1}),t,x_{1})=R(f,g)(t,x_{1})+1 \end{aligned}\] Es fácil notar que la única función que cumple estas dos ecuaciones es \(\lambda tx_{1}\left[t+x_{1}\right]\), lo cual implica que \(\lambda tx_{1}\left[t+x_{1}\right]=R\left(p_{1}^{1,0},Suc\circ p_{1}^{3,0}\right)\)
adhocprefix(E2)adhocsufix Sean \(f=C_{0}^{0,0}\) y \(g=p_{1}^{2,0}\). De la definición de \(R(f,g)\), obtenemos que su dominio es \(\omega\) y \[\begin{aligned} R(f,g)(0) & =C_{0}^{0,0}(\lozenge)=0\\ R(f,g)(t+1) & =p_{1}^{2,0}(R(f,g)(t),t)=R(f,g)(t) \end{aligned}\] Es fácil notar que la única función que cumple estas dos ecuaciones es \(C_{0}^{1,0}\) lo cual implica que \(C_{0}^{1,0}=R\left(C_{0}^{0,0},p_{1}^{2,0}\right)\)
Como era de esperar, este caso del constructor de recursión primitiva preserva la computabilidad efectiva
4.3. Sean \[\begin{aligned} f & :S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\omega\\ g & :\omega\times\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\omega \end{aligned}\] con \(S_{1},...,S_{n}\subseteq\omega\) y \(L_{1},...,L_{m}\subseteq\Sigma^{\ast}\) conjuntos no vacíos. Si \(f\) y \(g\) son \(\Sigma\)-efectivamente computables, entonces \(R(f,g)\) lo es.
Proof. Sean \(\mathbb{P}_{f}\) y \(\mathbb{P}_{g}\) procedimientos efectivos que computan a \(f\) y \(g\), respectivamente. Es fácil construir entonces un procedimiento efectivo que compute a \(R(f,g)\).
Nota importante: En los ejemplos anteriores y en todos los casos que manejaremos en esta primera etapa, en las aplicaciones del constructor de recursión primitiva (en sus cuatro formas) las funciones iniciales serán \(\Sigma\)-totales (es decir \(S_{1}=...=S_{n}=\omega\) y \(L_{1}=...=L_{m}=\Sigma^{\ast}\)). Mas adelante veremos aplicaciones con funciones no \(\Sigma\)-totales.
Ahora haremos el caso en el que la función determinada recursivamente tiene imagen contenida en \(\Sigma^{\ast}\). Es claro que entonces \(f\) y \(g\) también deberán tener imagen contenida en \(\Sigma^{\ast}\). El único detalle a tener en cuenta en la definición de este caso es que si solo hiciéramos estos cambios y pusiéramos las mismas ecuaciones la función \(g\) no resultaría \(\Sigma\)-mixta en general. Para que la \(g\) de la recursión siga siendo \(\Sigma\)-mixta deberemos modificar levemente su dominio en relación al caso ya hecho
Supongamos \(\Sigma\) es un alfabeto finito. Sean \[\begin{aligned} f & :S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\Sigma^{\ast}\\ g & :\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\times\Sigma^{\ast}\rightarrow\Sigma^{\ast} \end{aligned}\] con \(S_{1},...,S_{n}\subseteq\omega\) y \(L_{1},...,L_{m}\subseteq\Sigma^{\ast}\) conjuntos no vacíos. Definamos \[R(f,g):\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\Sigma^{\ast}\] de la siguiente manera
adhocprefix(1)adhocsufix \(R(f,g)(0,\vec{x},\vec{\alpha})=f(\vec{x},\vec{\alpha})\)
adhocprefix(2)adhocsufix \(R(f,g)(t+1,\vec{x},\vec{\alpha})=g(t,\vec{x},\vec{\alpha},R(f,g)(t,\vec{x},\vec{\alpha}))\)
Diremos que \(R(f,g)\) es obtenida por recursión primitiva a partir de \(f\) y \(g\). Nótese que cuando \(m=n=0\), se tiene que \(D_{f}=\{\lozenge\}\) y (1) y (2) se transforman en
adhocprefix(1)adhocsufix \(R(f,g)(0)=f(\lozenge)\)
adhocprefix(2)adhocsufix \(R(f,g)(t+1)=g(t,R(f,g)(t))\)
Veamos algunos ejemplos
adhocprefix(E1)adhocsufix Tomemos \(f=C_{\varepsilon}^{0,1}\) y \(g=\lambda\alpha\beta\left[\alpha\beta\right]\circ\left[p_{3}^{1,2},p_{2}^{1,2}\right]\). De la definición de \(R(f,g)\), obtenemos que \[\begin{aligned} R(f,g)(0,\alpha_{1}) & =C_{\varepsilon}^{0,1}(\alpha_{1})=\varepsilon\\ R(f,g)(t+1,\alpha_{1}) & =\lambda\alpha\beta\left[\alpha\beta\right]\circ\left[p_{3}^{1,2},p_{2}^{1,2}\right](t,\alpha_{1},R(f,g)(t,\alpha_{1}))=R(f,g)(t,\alpha_{1})\alpha_{1} \end{aligned}\] Es fácil notar que la única función que cumple estas dos ecuaciones es \(\lambda t\alpha_{1}\left[\alpha_{1}{}^{t}\right]\), lo cual implica que \(\lambda t\alpha_{1}\left[\alpha_{1}{}^{t}\right]=R\left(C_{\varepsilon}^{0,1},\lambda\alpha\beta\left[\alpha\beta\right]\circ\left[p_{3}^{1,2},p_{2}^{1,2}\right]\right)\)
adhocprefix(E2)adhocsufix Sean \(f=C_{\varepsilon}^{0,0}\) y \(g=p_{2}^{2,0}\). De la definición de \(R(f,g)\), obtenemos que \[\begin{aligned} R(f,g)(0) & =C_{\varepsilon}^{0,0}(\lozenge)=\varepsilon\\ R(f,g)(t+1) & =p_{2}^{2,0}(t,R(f,g)(t))=R(f,g)(t) \end{aligned}\] Es fácil notar que la única función que cumple estas dos ecuaciones es \(C_{\varepsilon}^{1,0}\) lo cual implica que \(C_{\varepsilon}^{1,0}=R\left(C_{\varepsilon}^{0,0},p_{2}^{2,0}\right)\)
La prueba del siguiente lema es completamente análoga a la del lema anterior que fue dejada como ejercicio.
4.4. Sean \[\begin{aligned} f & :S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\Sigma^{\ast}\\ g & :\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\times\Sigma^{\ast}\rightarrow\Sigma^{\ast} \end{aligned}\] con \(S_{1},...,S_{n}\subseteq\omega\) y \(L_{1},...,L_{m}\subseteq\Sigma^{\ast}\) conjuntos no vacíos. Si \(f\) y \(g\) son \(\Sigma\)-efectivamente computables, entonces \(R(f,g)\) lo es.
Ya vimos dos casos de recursión donde el parámetro que comanda la recursión es numérico. Daremos a continuación un ejemplo de recursión en el cual el parámetro principal es alfabético. Sea \(\Sigma=\{\%,@,?\}\) y consideremos las siguientes ecuaciones:
adhocprefix(1)adhocsufix \(R(\varepsilon)=15\)
adhocprefix(2)adhocsufix \(R(\alpha\%)=R(\alpha)+1\)
adhocprefix(3)adhocsufix \(R(\alpha@)=R(\alpha).5\)
adhocprefix(4)adhocsufix \(R(\alpha?)=R(\alpha)^{20}\)
Nótese que las ecuaciones anteriores determinan una función \(R:\Sigma^{\ast}\rightarrow\omega\). Esto es ya que \(R\) en \(\varepsilon\) debe valer \(15\) y sabiendo esto las ecuaciones (2), (3) y (4) (con \(\alpha=\varepsilon\)) nos dicen que \[\begin{aligned} R(\%) & =16\\ R(@) & =75\\ R(?) & =15^{20} \end{aligned}\] por lo cual podemos aplicarlas nuevamente a dichas ecuaciones (con \(\alpha\in\{\%,@,?\}\)) para calcular \(R\) en todas las palabras de longitud \(2\); y así sucesivamente.
Daremos otro ejemplo un poco mas complicado para seguir aproximándonos al caso general. Nuevamente supongamos que \(\Sigma=\{\%,@,?\}\) y supongamos tenemos una función \[f:\omega\times\Sigma^{\ast}\rightarrow\omega\] y tres funciones \[\begin{aligned} \mathcal{G}_{\%} & :\omega\times\omega\times\Sigma^{\ast}\times\Sigma^{\ast}\rightarrow\omega\\ \mathcal{G}_{@} & :\omega\times\omega\times\Sigma^{\ast}\times\Sigma^{\ast}\rightarrow\omega\\ \mathcal{G}_{?} & :\omega\times\omega\times\Sigma^{\ast}\times\Sigma^{\ast}\rightarrow\omega \end{aligned}\] Entonces hay una única función \(R:\omega\times\Sigma^{\ast}\times\Sigma^{\ast}\rightarrow\omega\) la cual cumple las siguientes ecuaciones
adhocprefix(1)adhocsufix \(R(x_{1},\alpha_{1},\varepsilon)=f(x_{1},\alpha_{1})\)
adhocprefix(2)adhocsufix \(R(x_{1},\alpha_{1},\alpha\%)=\mathcal{G}_{\%}(R(x_{1},\alpha_{1},\alpha),x_{1},\alpha_{1},\alpha)\)
adhocprefix(3)adhocsufix \(R(x_{1},\alpha_{1},\alpha@)=\mathcal{G}_{@}(R(x_{1},\alpha_{1},\alpha),x_{1},\alpha_{1},\alpha)\)
adhocprefix(4)adhocsufix \(R(x_{1},\alpha_{1},\alpha?)=\mathcal{G}_{?}(R(x_{1},\alpha_{1},\alpha),x_{1},\alpha_{1},\alpha)\)
(Justifique que las ecuaciones anteriores determinan a la función \(R\).)
El ejemplo anterior nos muestra que para hacer recursión sobre parámetro alfabético nos hace falta "una función \(g\) por cada símbolo de \(\Sigma\)". Esto motiva la siguiente definición. Dado un alfabeto \(\Sigma\), una familia \(\Sigma\)-indexada de funciones será una función \(\mathcal{G}\) tal que \(D_{\mathcal{G}}=\Sigma\) y para cada \(a\in D_{\mathcal{G}}\) se tiene que \(\mathcal{G}(a)\) es una función. Algunos ejemplos:
adhocprefix(E1)adhocsufix Sea \(\mathcal{G}\) dada por \[\begin{array}{rcl} \mathcal{G}:\{\square,\%,\blacktriangle\} & \rightarrow & \{Suc,Pred\}\\ \square & \rightarrow & Suc\\ \% & \rightarrow & Suc\\ \blacktriangle & \rightarrow & Pred \end{array}\] Claramente \(\mathcal{G}\) es una familia \(\{\square,\%,\blacktriangle\}\)-indexada de funciones. Notar que \[\mathcal{G}=\{(\square,Suc),(\%,Suc),(\blacktriangle,Pred)\}\] Se tiene también por ejemplo que \(\mathcal{G}(\%)=Suc\) por lo cual también es cierto que \(\mathcal{G}(\%)(22)=23\), etc.
adhocprefix(E2)adhocsufix Si \(\Sigma\) es un alfabeto no vacío, la función \[\begin{array}{rcl} \mathcal{G}:\Sigma & \rightarrow & \{f:f\text{ es una función de }\Sigma^{\ast}\text{ en }\Sigma^{\ast}\}\\ a & \rightarrow & d_{a} \end{array}\] es una familia \(\Sigma\)-indexada de funciones. Notar que \[\mathcal{G}=\{(a,d_{a}):a\in\Sigma\}\]
adhocprefix(E3)adhocsufix \(\emptyset\) es una flia \(\emptyset\)-indexada de funciones
Si \(\mathcal{G}\) es una familia \(\Sigma\)-indexada de funciones, entonces para \(a\in\Sigma\), escribiremos \(\mathcal{G}_{a}\) en lugar de \(\mathcal{G}(a)\). Ahora sí, nuestro caso de recursión primitiva. Sea \[f:S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\omega\] con \(S_{1},...,S_{n}\subseteq\omega\) y \(L_{1},...,L_{m}\subseteq\Sigma^{\ast}\) conjuntos no vacíos y sea \(\mathcal{G}\) una familia \(\Sigma\)-indexada de funciones tal que \[\mathcal{G}_{a}:\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\times\Sigma^{\ast}\rightarrow\omega\] para cada \(a\in\Sigma.\) Definamos \[R(f,\mathcal{G}):S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\times\Sigma^{\ast}\rightarrow\omega\] de la siguiente manera
adhocprefix(1)adhocsufix \(R(f,\mathcal{G})(\vec{x},\vec{\alpha},\varepsilon)=f(\vec{x},\vec{\alpha})\)
adhocprefix(2)adhocsufix \(R(f,\mathcal{G})(\vec{x},\vec{\alpha},\alpha a)=\mathcal{G}_{a}(R(f,\mathcal{G})(\vec{x},\vec{\alpha},\alpha),\vec{x},\vec{\alpha},\alpha)\)
Diremos que \(R(f,\mathcal{G})\) es obtenida por recursión primitiva a partir de \(f\) y \(\mathcal{G}\). Nótese que cuando \(m=n=0\), se tiene que \(D_{f}=\{\lozenge\}\) y (1) y (2) se transforman en
adhocprefix(1)adhocsufix \(R(f,\mathcal{G})(\varepsilon)=f(\lozenge)\)
adhocprefix(2)adhocsufix \(R(f,\mathcal{G})(\alpha a)=\mathcal{G}_{a}(R(f,\mathcal{G})(\alpha),\alpha)\)
4.5. Sea \[f:S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\omega\] con \(S_{1},...,S_{n}\subseteq\omega\) y \(L_{1},...,L_{m}\subseteq\Sigma^{\ast}\) conjuntos no vacíos y sea \(\mathcal{G}\) una familia \(\Sigma\)-indexada de funciones tal que \[\mathcal{G}_{a}:\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\times\Sigma^{\ast}\rightarrow\omega\] para cada \(a\in\Sigma.\) Si \(f\) y cada \(\mathcal{G}_{a}\) son \(\Sigma\)-efectivamente computables, entonces \(R(f,\mathcal{G})\) lo es.
Proof. Es dejada al lector
Supongamos \(\Sigma\) es un alfabeto finito. Sea \[f:S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\Sigma^{\ast}\] con \(S_{1},...,S_{n}\subseteq\omega\) y \(L_{1},...,L_{m}\subseteq\Sigma^{\ast}\) conjuntos no vacíos y sea \(\mathcal{G}\) una familia \(\Sigma\)-indexada de funciones tal que \[\mathcal{G}_{a}:S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\times\Sigma^{\ast}\times\Sigma^{\ast}\rightarrow\Sigma^{\ast}\] para cada \(a\in\Sigma\). Definamos \[R(f,\mathcal{G}):S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\times\Sigma^{\ast}\rightarrow\Sigma^{\ast}\] de la siguiente manera
adhocprefix(1)adhocsufix \(R(f,\mathcal{G})(\vec{x},\vec{\alpha},\varepsilon)=f(\vec{x},\vec{\alpha})\)
adhocprefix(2)adhocsufix \(R(f,\mathcal{G})(\vec{x},\vec{\alpha},\alpha a)=\mathcal{G}_{a}(\vec{x},\vec{\alpha},\alpha,R(f,\mathcal{G})(\vec{x},\vec{\alpha},\alpha)).\)
Diremos que \(R(f,\mathcal{G})\) es obtenida por recursión primitiva a partir de \(f\) y \(\mathcal{G}\). Nótese que cuando \(m=n=0\), se tiene que \(D_{f}=\{\lozenge\}\) y (1) y (2) se transforman en
adhocprefix(1)adhocsufix \(R(f,\mathcal{G})(\varepsilon)=f(\lozenge)\)
adhocprefix(2)adhocsufix \(R(f,\mathcal{G})(\alpha a)=\mathcal{G}_{a}(\alpha,R(f,\mathcal{G})(\alpha))\)
Tenemos que
4.6. Sea \[f:S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\Sigma^{\ast}\] con \(S_{1},...,S_{n}\subseteq\omega\) y \(L_{1},...,L_{m}\subseteq\Sigma^{\ast}\) conjuntos no vacíos y sea \(\mathcal{G}\) una familia \(\Sigma\)-indexada de funciones tal que \[\mathcal{G}_{a}:S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\times\Sigma^{\ast}\times\Sigma^{\ast}\rightarrow\Sigma^{\ast}\] para cada \(a\in\Sigma\). Si \(f\) y cada \(\mathcal{G}_{a}\) son \(\Sigma\)-efectivamente computables, entonces \(R(f,\mathcal{G})\) lo es.
Como hemos visto muchas veces para poder aplicar mas naturalmente algún lema, nos es útil cambiar las variables que están siendo usadas en la notación lambda que describe alguna función. Por ejemplo si queremos ver que la función \(\lambda xy\alpha[x+y]\) es de la forma \(R(f,g)\), con \(f\) de tipo \((1,1,\#)\) y \(g\) de tipo \((3,1,\#)\), nos conviene escribir a la función \(\lambda xy\alpha[x+y]\) en la forma \(\lambda tx_{1}\alpha_{1}[t+x_{1}]\), donde se ve mejor cual es el parámetro de la recursión primitiva y cual es el bloque fijo. Obviamente esto es posible ya que \(\lambda xy\alpha[x+y]=\lambda tx_{1}\alpha_{1}[t+x_{1}]\). Esto da lugar a nuestra regla de cosmética:
REGLA DE COSMÉTICA: Si Ud tiene una expresión lambda \(\lambda x_{1}...x_{n}\alpha_{1}...\alpha_{m}\left[E\right]\) que denota una función \(f\), entonces puede reemplazar en dicha expresión cada ocurrencia de una de las variables de la lista \(x_{1}...x_{n}\alpha_{1}...\alpha_{m}\) por una nueva variable (del mismo tipo, i.e. numérica o alfabética) la cual no figure en la lista y el resultado será una expresión lambda que también denota a \(f.\)
Por supuesto que dicha regla la puede aplicar varias veces para modificar su notación lambda. Por ejemplo en el caso de \(\lambda xy\alpha[x+y]\) aplicamos tres veces la regla y obtenemos \(\lambda tx_{1}\alpha_{1}[t+x_{1}]\).
Intuitivamente hablando una función es \(\Sigma\)-recursiva primitiva si se puede obtener de las iniciales usando los constructores de composición y recursión primitiva. Daremos ahora una definición matemática de este concepto. Definamos los conjuntos \(\mathrm{PR}_{0}^{\Sigma}\subseteq\mathrm{PR}_{1}^{\Sigma}\subseteq\mathrm{PR}_{2}^{\Sigma}\subseteq...\subseteq\mathrm{PR}^{\Sigma}\) de la siguiente manera \[\begin{array}{lll} \mathrm{PR}_{0}^{\Sigma} & = & \left\{ Suc,Pred,C_{0}^{0,0},C_{\varepsilon}^{0,0}\right\} \cup\left\{ d_{a}:a\in\Sigma\right\} \cup\left\{ p_{j}^{n,m}:1\leq j\leq n+m\right\} \\ \mathrm{PR}_{k+1}^{\Sigma} & = & \mathrm{PR}_{k}^{\Sigma}\cup\left\{ f\circ[f_{1},...,f_{r}]:f,f_{1},...,f_{r}\in\mathrm{PR}_{k}^{\Sigma}\text{, }r\geq1\right\} \cup\\ & & \;\;\;\;\left\{ R(f,\mathcal{G}):R(f,\mathcal{G})\text{ está definida y }\{f\}\cup\{\mathcal{G}_{a}:a\in\Sigma\}\subseteq\mathrm{PR}_{k}^{\Sigma}\right\} \cup\\ & & \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\left\{ R(f,g):R(f,g)\text{ está definida y }f,g\in\mathrm{PR}_{k}^{\Sigma}\right\} \\ \mathrm{PR}^{\Sigma} & = & \bigcup_{k\geq0}\mathrm{PR}_{k}^{\Sigma} \end{array}\] Una función es llamada \(\Sigma\)-recursiva primitiva (\(\Sigma\)-p.r.) si pertenece a \(\mathrm{PR}^{\Sigma}\).
4.3. Si \(F\in\mathrm{PR}^{\Sigma}\), entonces \(F\) es \(\Sigma\)-efectivamente computable.
Proof. Lo probaremos usando la Regla de Inducción desde 0. Para cada \(k\in\omega\) sea \(\mathrm{Enu}_{k}\) el siguiente enunciado:
adhocprefix\(\mathrm{Enu}_{k}\):adhocsufix Si \(F\in\mathrm{PR}_{k}^{\Sigma}\), entonces \(F\) es \(\Sigma\)-efectivamente computable.
Es claro que si todos los enuciados \(\mathrm{Enu}_{k}\) son verdaderos, entonces la proposición lo es. Claramente \(\mathrm{Enu}_{0}\) es verdadero. Supongamos entonces que \(\mathrm{Enu}_{k}\) es verdadero y probemos que \(\mathrm{Enu}_{k+1}\) lo es. Sea \(F\in\mathrm{PR}_{k+1}^{\Sigma}\). Si \(F\in\mathrm{PR}_{k}^{\Sigma}\), entonces \(\mathrm{Enu}_{k}\) nos garantiza que \(F\) es \(\Sigma\)-efectivamente computable. Supongamos entonces que \(F\in\mathrm{PR}_{k+1}^{\Sigma}-\mathrm{PR}_{k}^{\Sigma}\). Por definición de \(\mathrm{PR}_{k+1}^{\Sigma}\) tenemos que \(F\) se obtiene usando los constructores de composición y recursión primitiva a partir de funciones de \(\mathrm{PR}_{k}^{\Sigma}\). Pero \(\mathrm{Enu}_{k}\) nos garantiza que dichas funciones son \(\Sigma\)-efectivamente computables por lo cual los Lemas 4.3, 4.4, 4.5, 4.6 y 4.2 nos dicen que siempre \(F\) será \(\Sigma\)-efectivamente computable.
En los siguientes lemas se prueba que varias funciones bien conocidas son \(\Sigma\)-recursivas primitivas.
4.7. Sea \(\Sigma\) un alfabeto finito.
adhocprefix(1)adhocsufix \(\emptyset\in\mathrm{PR}^{\Sigma}\).
adhocprefix(2)adhocsufix \(\lambda xy\left[x+y\right]\in\mathrm{PR}^{\Sigma}\).
adhocprefix(3)adhocsufix \(\lambda xy\left[x.y\right]\in\mathrm{PR}^{\Sigma}\).
adhocprefix(4)adhocsufix \(\lambda x\left[x!\right]\in\mathrm{PR}^{\Sigma}\).
Proof. (1) Nótese que \(\emptyset=Pred\circ C_{0}^{0,0}\in\mathrm{PR}_{1}^{\Sigma}\)
(2) Notar que \[\begin{aligned} \lambda xy\left[x+y\right](0,x_{1}) & =x_{1}=p_{1}^{1,0}(x_{1})\\ \lambda xy\left[x+y\right](t+1,x_{1}) & =\lambda xy\left[x+y\right](t,x_{1})+1\\ & =\left(Suc\circ p_{1}^{3,0}\right)\left(\lambda xy\left[x+y\right](t,x_{1}),t,x_{1}\right) \end{aligned}\] lo cual implica que \(\lambda xy\left[x+y\right]=R\left(p_{1}^{1,0},Suc\circ p_{1}^{3,0}\right)\in\mathrm{PR}_{2}^{\Sigma}.\)
(3) Primero note que \[\begin{aligned} C_{0}^{1,0}(0) & =C_{0}^{0,0}(\lozenge)\\ C_{0}^{1,0}(t+1) & =C_{0}^{1,0}(t) \end{aligned}\] lo cual implica que \(C_{0}^{1,0}=R\left(C_{0}^{0,0},p_{1}^{2,0}\right)\in\mathrm{PR}_{1}^{\Sigma}.\) También note que \[\lambda tx\left[t.x\right]=R\left(C_{0}^{1,0},\lambda xy\left[x+y\right]\circ\left[p_{1}^{3,0},p_{3}^{3,0}\right]\right),\] lo cual por (2) implica que \(\lambda tx\left[t.x\right]\in\mathrm{PR}_{4}^{\Sigma}\).
(4) Note que \[\begin{aligned} \lambda x\left[x!\right](0) & =1=C_{1}^{0,0}(\lozenge)\\ \lambda x\left[x!\right](t+1) & =\lambda x\left[x!\right](t).(t+1), \end{aligned}\] lo cual implica que \[\lambda x\left[x!\right]=R\left(C_{1}^{0,0},\lambda xy\left[x.y\right]\circ\left[p_{1}^{2,0},Suc\circ p_{2}^{2,0}\right]\right).\] Ya que \(C_{1}^{0,0}=\) \(Suc\circ C_{0}^{0,0}\), tenemos que \(C_{1}^{0,0}\in\mathrm{PR}_{1}^{\Sigma}\). Por (3), tenemos que \[\lambda xy\left[x.y\right]\circ\left[p_{1}^{2,0},Suc\circ p_{2}^{2,0}\right]\in\mathrm{PR}_{5}^{\Sigma},\] obteniendo que \(\lambda x\left[x!\right]\in\mathrm{PR}_{6}^{\Sigma}\).
Ahora consideraremos dos funciones las cuales son obtenidas naturalmente por recursión primitiva sobre variable alfabética.
4.8. Supongamos \(\Sigma\) es un alfabeto finito.
adhocprefix(a)adhocsufix \(\lambda\alpha\beta\left[\alpha\beta\right]\in\mathrm{PR}^{\Sigma}\)
adhocprefix(b)adhocsufix \(\lambda\alpha\left[\left\vert \alpha\right\vert \right]\in\mathrm{PR}^{\Sigma}\)
Proof. (a) Ya que \[\begin{aligned} \lambda\alpha\beta\left[\alpha\beta\right](\alpha_{1},\varepsilon) & =\alpha_{1}=p_{1}^{0,1}(\alpha_{1})\\ \lambda\alpha\beta\left[\alpha\beta\right](\alpha_{1},\alpha a) & =d_{a}(\lambda\alpha\beta\left[\alpha\beta\right](\alpha_{1},\alpha)),\ a\in\Sigma \end{aligned}\] tenemos que \(\lambda\alpha\beta\left[\alpha\beta\right]=R\left(p_{1}^{0,1},\mathcal{G}\right)\), donde \(\mathcal{G}_{a}=d_{a}\circ p_{3}^{0,3}\), para cada \(a\in\Sigma\).
(b) Ya que \[\begin{aligned} \lambda\alpha\left[\left\vert \alpha\right\vert \right](\varepsilon) & =0=C_{0}^{0,0}(\lozenge)\\ \lambda\alpha\left[\left\vert \alpha\right\vert \right](\alpha a) & =\lambda\alpha\left[\left\vert \alpha\right\vert \right](\alpha)+1 \end{aligned}\] tenemos que \(\lambda\alpha\left[\left\vert \alpha\right\vert \right]=R\left(C_{0}^{0,0},\mathcal{G}\right)\), donde \(\mathcal{G}_{a}=\) \(Suc\circ p_{1}^{1,1}\), para cada \(a\in\Sigma.\).
4.9. Sea \(\Sigma\) un alfabeto finito. Entonces \(C_{k}^{n,m},C_{\alpha}^{n,m}\in\mathrm{PR}^{\Sigma}\), para cada \(n,m,k\geq0\) y \(\alpha\in\Sigma^{\ast}\).
Proof. Note que \(C_{k+1}^{0,0}=\) \(Suc\circ C_{k}^{0,0}\), lo cual implica \(C_{k}^{0,0}\in\mathrm{PR}_{k}^{\Sigma}\), para \(k\geq0\). También note que \(C_{\alpha a}^{0,0}=d_{a}\circ C_{\alpha}^{0,0}\), lo cual dice que \(C_{\alpha}^{0,0}\in\mathrm{PR}^{\Sigma}\), para \(\alpha\in\Sigma^{\ast}\). Para ver que \(C_{k}^{0,1}\in\mathrm{PR}^{\Sigma}\) notar que \[\begin{aligned} C_{k}^{0,1}(\varepsilon) & =k=C_{k}^{0,0}(\lozenge)\\ C_{k}^{0,1}(\alpha a) & =C_{k}^{0,1}(\alpha)=p_{1}^{1,1}\left(C_{k}^{0,1}(\alpha),\alpha\right) \end{aligned}\] lo cual implica que \(C_{k}^{0,1}=R\left(C_{k}^{0,0},\mathcal{G}\right)\), con \(\mathcal{G}_{a}=p_{1}^{1,1}\), \(a\in\Sigma\). En forma similar podemos ver que \(C_{k}^{1,0},C_{\alpha}^{1,0},C_{\alpha}^{0,1}\in\mathrm{PR}^{\Sigma}\). Supongamos ahora que \(m>0\). Entonces \[\begin{aligned} C_{k}^{n,m} & =C_{k}^{0,1}\circ p_{n+1}^{n,m}\\ C_{\alpha}^{n,m} & =C_{\alpha}^{0,1}\circ p_{n+1}^{n,m} \end{aligned}\] de lo cual obtenemos que \(C_{k}^{n,m},C_{\alpha}^{n,m}\in\mathrm{PR}^{\Sigma}\). El caso \(n>0\) es similar.
4.10. Sea \(\Sigma\) un alfabeto finito.
adhocprefix(a)adhocsufix \(\lambda xy\left[x^{y}\right]\in\mathrm{PR}^{\Sigma}\).
adhocprefix(b)adhocsufix \(\lambda t\alpha\left[\alpha^{t}\right]\in\mathrm{PR}^{\Sigma}\).
Proof. (a) Note que \[\lambda tx\left[x^{t}\right]=R\left(C_{1}^{1,0},\lambda xy\left[x.y\right]\circ\left[p_{1}^{3,0},p_{3}^{3,0}\right]\right)\in\mathrm{PR}^{\Sigma}.\] O sea que \(\lambda xy\left[x^{y}\right]=\lambda tx\left[x^{t}\right]\circ\left[p_{2}^{2,0},p_{1}^{2,0}\right]\in\mathrm{PR}^{\Sigma}\).
(b) Note que \[\lambda t\alpha\left[\alpha^{t}\right]=R\left(C_{\varepsilon}^{0,1},\lambda\alpha\beta\left[\alpha\beta\right]\circ\left[p_{3}^{1,2},p_{2}^{1,2}\right]\right)\in\mathrm{PR}^{\Sigma}.\]
Ahora probaremos que si \(\Sigma\) es no vacío, entonces las biyecciones naturales entre \(\Sigma^{\ast}\) y \(\omega\), dadas en el Lema 2.3, son \(\Sigma\)-p.r..
4.11. Si \(\leq\) es un orden total sobre un alfabeto no vacío \(\Sigma\), entonces \(s^{\leq}\), \(\#^{\leq}\) y \(\ast^{\leq}\) pertenecen a \(\mathrm{PR}^{\Sigma}\)
Proof. Supongamos \(\Sigma=\{a_{1},...,a_{k}\}\) y \(\leq\) es dado por \(a_{1}<...<a_{k}\). Ya que \[\begin{aligned} s^{\leq}(\varepsilon) & =a_{1}\\ s^{\leq}(\alpha a_{i}) & =\alpha a_{i+1}\text{, para }i<k\\ s^{\leq}(\alpha a_{k}) & =s^{\leq}(\alpha)a_{1} \end{aligned}\] tenemos que \(s^{\leq}=R\left(C_{a_{1}}^{0,0},\mathcal{G}\right)\), donde \(\mathcal{G}_{a_{i}}=d_{a_{i+1}}\circ p_{1}^{0,2}\), para \(i=1,...,k-1\) y \(\mathcal{G}_{a_{k}}=d_{a_{1}}\circ p_{2}^{0,2}.\) O sea que \(s^{\leq}\in\mathrm{PR}^{\Sigma}.\) Ya que \[\begin{aligned} \ast^{\leq}(0) & =\varepsilon\\ \ast^{\leq}(t+1) & =s^{\leq}(\ast^{\leq}(t)) \end{aligned}\] podemos ver que \(\ast^{\leq}\in\mathrm{PR}^{\Sigma}\). Ya que \[\begin{aligned} \#^{\leq}(\varepsilon) & =0\\ \#^{\leq}(\alpha a_{i}) & =\#^{\leq}(\alpha).k+i\text{, para }i=1,...,k, \end{aligned}\] tenemos que \(\#^{\leq}=R\left(C_{0}^{0,0},\mathcal{G}\right)\), donde \[\mathcal{G}_{a_{i}}=\lambda xy\left[x+y\right]\circ\left[\lambda xy\left[x.y\right]\circ\left[p_{1}^{1,1},C_{k}^{1,1}\right],C_{i}^{1,1}\right]\text{, para }i=1,...,k\text{.}\] O sea que \(\#^{\leq}\in\mathrm{PR}^{\Sigma}\).
Recordemos que llamábamos numerales a los siguientes símbolos \[0\ 1\ 2\ 3\ 4\ 5\ 6\ 7\ 8\ 9\] También recordemos que \(Num\) denotaba el conjunto de los numerales. Sea \(Sig:Num^{\ast}\rightarrow Num^{\ast}\) definida de la siguiente manera \[\begin{aligned} Sig(\varepsilon) & =1\\ Sig(\alpha0) & =\alpha1\\ Sig(\alpha1) & =\alpha2\\ Sig(\alpha2) & =\alpha3\\ Sig(\alpha3) & =\alpha4\\ Sig(\alpha4) & =\alpha5\\ Sig(\alpha5) & =\alpha6\\ Sig(\alpha6) & =\alpha7\\ Sig(\alpha7) & =\alpha8\\ Sig(\alpha8) & =\alpha9\\ Sig(\alpha9) & =Sig(\alpha)0 \end{aligned}\] Definamos \(Dec:\omega\rightarrow Num^{\ast}\) de la siguiente manera \[\begin{aligned} Dec(0) & =\varepsilon\\ Dec(n+1) & =Sig(Dec(n)) \end{aligned}\] Nótese que para \(n\in\mathbf{N}\), la palabra \(Dec(n)\) es la notación usual decimal de \(n\). Nótese que \(Sig=R(C_{1}^{0,0},\mathcal{G})\), donde \(\mathcal{G}\) es la familia \(Num\)-indexada de funciones dada por: \[\begin{aligned} \mathcal{G}_{0}=d_{1}\circ p_{1}^{0,2}\\ \mathcal{G}_{1}=d_{2}\circ p_{1}^{0,2}\\ \mathcal{G}_{2}=d_{3}\circ p_{1}^{0,2}\\ \mathcal{G}_{3}=d_{4}\circ p_{1}^{0,2}\\ \mathcal{G}_{4}=d_{5}\circ p_{1}^{0,2}\\ \mathcal{G}_{5}=d_{6}\circ p_{1}^{0,2}\\ \mathcal{G}_{6}=d_{7}\circ p_{1}^{0,2}\\ \mathcal{G}_{7}=d_{8}\circ p_{1}^{0,2}\\ \mathcal{G}_{8}=d_{9}\circ p_{1}^{0,2}\\ \mathcal{G}_{9}=d_{0}\circ p_{2}^{0,2} \end{aligned}\] por lo cual \(Sig\) es \(Num\)-p.r.. También tenemos que \(Dec=R(C_{\varepsilon}^{0,0},Sig\circ p_{2}^{1,1})\) por lo cual \(Dec\) es \(Num\)-p.r.. En la batalla Godel vence a Neumann utilizaremos el siguiente resultado.
4.12. Sea \(\Gamma\) un alfabeto que contiene a \(Num\). Entonces \(Dec\) es \(\Gamma\)-p.r..
Proof. Sea \(\widetilde{Sig}:\Gamma^{*}\rightarrow\Gamma^{*}\) definida de la siguiente manera: \[\begin{aligned} \widetilde{Sig}(\varepsilon) & =1\\ \widetilde{Sig}(\alpha0) & =\alpha1\\ \widetilde{Sig}(\alpha1) & =\alpha2\\ \widetilde{Sig}(\alpha2) & =\alpha3\\ \widetilde{Sig}(\alpha3) & =\alpha4\\ \widetilde{Sig}(\alpha4) & =\alpha5\\ \widetilde{Sig}(\alpha5) & =\alpha6\\ \widetilde{Sig}(\alpha6) & =\alpha7\\ \widetilde{Sig}(\alpha7) & =\alpha8\\ \widetilde{Sig}(\alpha8) & =\alpha9\\ \widetilde{Sig}(\alpha9) & =Sig(\alpha)0\\ \widetilde{Sig}(\alpha a) & =\varepsilon\text{, para cada }a\in\Gamma-Num \end{aligned}\] Nótese que \(\widetilde{Sig}=R(C_{1}^{0,0},\mathcal{\widetilde{G}})\), donde \(\mathcal{\widetilde{G}}\) es la familia \(\Gamma\)-indexada de funciones dada por: \[\begin{aligned} \mathcal{\widetilde{G}}_{0}=d_{1}\circ p_{1}^{0,2}\\ \mathcal{\widetilde{G}}_{1}=d_{2}\circ p_{1}^{0,2}\\ \mathcal{\widetilde{G}}_{2}=d_{3}\circ p_{1}^{0,2}\\ \mathcal{\widetilde{G}}_{3}=d_{4}\circ p_{1}^{0,2}\\ \mathcal{\widetilde{G}}_{4}=d_{5}\circ p_{1}^{0,2}\\ \mathcal{\widetilde{G}}_{5}=d_{6}\circ p_{1}^{0,2}\\ \mathcal{\widetilde{G}}_{6}=d_{7}\circ p_{1}^{0,2}\\ \mathcal{\widetilde{G}}_{7}=d_{8}\circ p_{1}^{0,2}\\ \mathcal{\widetilde{G}}_{8}=d_{9}\circ p_{1}^{0,2}\\ \mathcal{\widetilde{G}}_{9}=d_{0}\circ p_{2}^{0,2}\\ \mathcal{\widetilde{G}}_{a}=C_{\varepsilon}^{0,2}\text{, para }a\in\Gamma-Num \end{aligned}\] por lo cual \(\widetilde{Sig}\) es \(\Gamma\)-p.r. (ojo que aquí las funciones \(p_{2}^{0,2}\), \(C_{\varepsilon}^{0,2}\), \(C_{1}^{0,0}\) y \(d_{0},d_{1},d_{2},...,d_{9}\) son relativas al alfabeto \(\Gamma\)). Pero nótese que \[\begin{aligned} Dec(0) & =\varepsilon\\ Dec(n+1) & =\widetilde{Sig}(Dec(n))\text{, para cada }n\in\omega \end{aligned}\] lo cual nos dice que \(Dec=R(C_{\varepsilon}^{0,0},\widetilde{Sig}\circ p_{2}^{1,1})\) por lo cual \(Dec\) es \(\Gamma\)-p.r. (de nuevo, aquí las funciones \(C_{\varepsilon}^{0,0}\) y \(p_{2}^{1,1}\) son relativas al alfabeto \(\Gamma\)).
Dados \(x,y\in\omega\), definamos \[x\dot{-}y=\max(x-y,0).\]
4.13. Sea \(\Sigma\) un alfabeto finito.
adhocprefix(a)adhocsufix \(\lambda xy\left[x\dot{-}y\right]\in\mathrm{PR}^{\Sigma}.\)
adhocprefix(b)adhocsufix \(\lambda xy\left[\max(x,y)\right]\in\mathrm{PR}^{\Sigma}.\)
adhocprefix(c)adhocsufix \(\lambda xy\left[x=y\right]\in\mathrm{PR}^{\Sigma}.\)
adhocprefix(d)adhocsufix \(\lambda xy\left[x\leq y\right]\in\mathrm{PR}^{\Sigma}.\)
adhocprefix(e)adhocsufix \(\lambda\alpha\beta\left[\alpha=\beta\right]\in\mathrm{PR}^{\Sigma}\)
Proof. (a) Primero notar que \(\lambda x\left[x\dot{-}1\right]=R\left(C_{0}^{0,0},p_{2}^{2,0}\right)\in\mathrm{PR}^{\Sigma}.\) También note que \[\lambda tx\left[x\dot{-}t\right]=R\left(p_{1}^{1,0},\lambda x\left[x\dot{-}1\right]\circ p_{1}^{3,0}\right)\in\mathrm{PR}^{\Sigma}.\] O sea que \(\lambda xy\left[x\dot{-}y\right]=\lambda tx\left[x\dot{-}t\right]\circ\left[p_{2}^{2,0},p_{1}^{2,0}\right]\in\mathrm{PR}^{\Sigma}\).
(b) Note que \(\lambda xy\left[\max(x,y)\right]=\lambda xy\left[x+(y\dot{-}x)\right]\).
(c) Note que \(\lambda xy\left[x=y\right]=\lambda xy\left[1\dot{-}((x\dot{-}y)+(y\dot{-}x))\right]\).
(d) Note que \(\lambda xy\left[x\leq y\right]=\lambda xy\left[1\dot{-}(x\dot{-}y)\right]\).
(e) Sea \(\leq\) un orden total sobre \(\Sigma.\) Ya que \[\alpha=\beta\text{ sii }\#^{\leq}(\alpha)=\#^{\leq}(\beta)\] tenemos que \[\lambda\alpha\beta\left[\alpha=\beta\right]=\lambda xy\left[x=y\right]\circ\left[\#^{\leq}\circ p_{1}^{0,2},\#^{\leq}\circ p_{2}^{0,2}\right]\] lo cual nos dice que \(\lambda\alpha\beta\left[\alpha=\beta\right]\) es \(\Sigma\)-p.r.
Dados predicados \(P:S\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) y \(Q:S\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\), predicados con el mismo dominio, definamos nuevos predicados \((P\vee Q)\), \((P\wedge Q)\) y \(\lnot P\) de la siguiente manera \[\begin{aligned} & \begin{array}{rll} (P\vee Q):S & \rightarrow & \omega\\ (\vec{x},\vec{\alpha}) & \rightarrow & \left\{ \begin{array}{lll} 1 & & \text{si }P(\vec{x},\vec{\alpha})=1\text{ o }Q(\vec{x},\vec{\alpha})=1\\ 0 & & \text{caso contrario} \end{array}\right. \end{array}\\ & \begin{array}{rll} (P\wedge Q):S & \rightarrow & \omega\\ (\vec{x},\vec{\alpha}) & \rightarrow & \left\{ \begin{array}{lll} 1 & & \text{si }P(\vec{x},\vec{\alpha})=1\text{ y }Q(\vec{x},\vec{\alpha})=1\\ 0 & & \text{caso contrario} \end{array}\right. \end{array}\\ & \begin{array}{rll} \lnot P:S & \rightarrow & \omega\\ (\vec{x},\vec{\alpha}) & \rightarrow & \left\{ \begin{array}{lll} 1 & & \text{si }P(\vec{x},\vec{\alpha})=0\\ 0 & & \text{si }P(\vec{x},\vec{\alpha})=1 \end{array}\right. \end{array} \end{aligned}\]
4.14. Si \(P:D_{P}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) y \(Q:D_{Q}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) son predicados \(\Sigma\)-p.r. tales que \(D_{P}=D_{Q}\), entonces \((P\vee Q)\), \((P\wedge Q)\) y \(\lnot P\) son \(\Sigma\)-p.r..
Proof. Note que \[\begin{aligned} \lnot P & =\lambda xy\left[x\dot{-}y\right]\circ\left[C_{1}^{n,m},P\right]\\ (P\wedge Q) & =\lambda xy\left[x.y\right]\circ[P,Q]\\ (P\vee Q) & =\lnot(\lnot P\wedge\lnot Q). \end{aligned}\]
Un conjunto \(\Sigma\)-mixto \(S\subseteq\omega^{n}\times\Sigma^{\ast m}\) es llamado \(\Sigma\)-recursivo primitivo si su función característica \(\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}\) es \(\Sigma\)-p.r.. (Nótese que \(\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}\) es el predicado \(\lambda\vec{x}\vec{\alpha}\left[(\vec{x},\vec{\alpha})\in S\right]\).)
4.15. Si \(S_{1},S_{2}\subseteq\omega^{n}\times\Sigma^{\ast m}\) son \(\Sigma\)-p.r., entonces \(S_{1}\cup S_{2}\), \(S_{1}\cap S_{2}\) y \(S_{1}-S_{2}\) lo son.
Proof. Note que \[\begin{aligned} \chi_{S_{1}\cup S_{2}}^{\omega^{n}\times\Sigma^{\ast m}} & =(\chi_{S_{1}}^{\omega^{n}\times\Sigma^{\ast m}}\vee\chi_{S_{2}}^{\omega^{n}\times\Sigma^{\ast m}})\\ \chi_{S_{1}\cap S_{2}}^{\omega^{n}\times\Sigma^{\ast m}} & =(\chi_{S_{1}}^{\omega^{n}\times\Sigma^{\ast m}}\wedge\chi_{S_{2}}^{\omega^{n}\times\Sigma^{\ast m}})\\ \chi_{S_{1}-S_{2}}^{\omega^{n}\times\Sigma^{\ast m}} & =\lambda xy\left[x\dot{-}y\right]\circ\left[\chi_{S_{1}}^{\omega^{n}\times\Sigma^{\ast m}},\chi_{S_{2}}^{\omega^{n}\times\Sigma^{\ast m}}\right] \end{aligned}\]
4.1. Si \(S\subseteq\omega^{n}\times\Sigma^{\ast m}\) es finito, entonces \(S\) es \(\Sigma\)-p.r..
Proof. Si \(S=\emptyset\), entonces es claro que \(S\) es \(\Sigma\)-p.r.. Probaremos ahora el lema para el caso en que \(S\) tiene un solo elemento. Supongamos entonces \[S=\{(z_{1},...,z_{n},\gamma_{1},...,\gamma_{m})\}.\] Note que \(\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}\) es el siguiente predicado \[\left(\chi_{\{z_{1}\}}^{\omega}\circ p_{1}^{n,m}\wedge...\wedge\chi_{\{z_{n}\}}^{\omega}\circ p_{n}^{n,m}\wedge\chi_{\{\gamma_{1}\}}^{\Sigma^{\ast}}\circ p_{n+1}^{n,m}\wedge...\wedge\chi_{\{\gamma_{m}\}}^{\Sigma^{\ast}}\circ p_{n+m}^{n,m}\right).\] Ya que los predicados \[\begin{aligned} \chi_{\{z_{i}\}}^{\omega} & =\lambda xy\left[x=y\right]\circ\left[p_{1}^{1,0},C_{z_{i}}^{1,0}\right]\\ \chi_{\{\gamma_{i}\}}^{\Sigma^{\ast}} & =\lambda\alpha\beta\left[\alpha=\beta\right]\circ\left[p_{1}^{0,1},C_{\gamma_{i}}^{0,1}\right] \end{aligned}\] son \(\Sigma\)-p.r., el Lema 4.14 (aplicado \((n+m)-1\) veces), implica que \(\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}\) es \(\Sigma\)-p.r.. Cuando \(S\) tiene mas de un elemento, ya que entonces es la unión de una cantidad finita de conjuntos de un solo elemento, se puede aplicar el Lema 4.15 (\(\left\vert S\right\vert -1\) veces) para obtener que \(S\) es \(\Sigma\)-p.r..
El siguiente lema caracteriza cuando un conjunto rectangular es \(\Sigma\)-p.r..
4.16. Supongamos \(S_{1},...,S_{n}\subseteq\omega\), \(L_{1},...,L_{m}\subseteq\Sigma^{\ast}\) son conjuntos no vacíos, con \(n,m\in\omega\). Entonces \(S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\) es \(\Sigma\)-p.r. sii \(S_{1},...,S_{n},L_{1},...,L_{m}\) son \(\Sigma\)-p.r.
Proof. (\(\Rightarrow\)) Veremos por ejemplo que \(L_{1}\) es \(\Sigma\)-p.r.. Sea \((z_{1},...,z_{n},\zeta_{1},...,\zeta_{m})\) un elemento fijo de \(S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}.\) Note que \[\alpha\in L_{1}\text{ sii }(z_{1},...,z_{n},\alpha,\zeta_{2},...,\zeta_{m})\in S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m},\] lo cual implica que \[\chi_{L_{1}}^{\Sigma^{\ast}}=\chi_{S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}}^{\omega^{n}\times\Sigma^{\ast m}}\circ\left[C_{z_{1}}^{0,1},...,C_{z_{n}}^{0,1},p_{1}^{0,1},C_{\zeta_{2}}^{0,1},...,C_{\zeta_{m}}^{0,1}\right]\] (\(\Leftarrow\)) Note que \(\chi_{S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}}^{\omega^{n}\times\Sigma^{\ast m}}\) es el predicado \[\left(\chi_{S_{1}}^{\omega}\circ p_{1}^{n,m}\wedge...\wedge\chi_{S_{n}}^{\omega}\circ p_{n}^{n,m}\wedge\chi_{L_{1}}^{\Sigma^{\ast}}\circ p_{n+1}^{n,m}\wedge...\wedge\chi_{L_{m}}^{\Sigma^{\ast}}\circ p_{n+m}^{n,m}\right).\]
Dada una función \(f\) y un conjunto \(S\subseteq D_{f}\), usaremos \(f|_{S}\) para denotar la restricción de \(f\) al conjunto \(S\), i.e. \(f|_{S}=f\cap(S\times I_{f})\). Nótese que \(f|_{S}\) es la función dada por \[D_{f|_{S}}=S\ \ \ \text{y}\ \ \ f|_{S}(e)=f(e)\text{, para cada }e\in S\]
4.17. Sean \(n,m\in\omega\) y \(O\in\{\omega,\Sigma^{\ast}\}\). Supongamos \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow O\) es \(\Sigma\)-p.r.. Si \(S\subseteq D_{f}\) es \(\Sigma\)-p.r., entonces \(f|_{S}\) es \(\Sigma\)-p.r..
Proof. Supongamos \(O=\Sigma^{\ast}\). Entonces \[f|_{S}=\lambda x\alpha\left[\alpha^{x}\right]\circ\left[Suc\circ Pred\circ\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}},f\right]\] lo cual nos dice que \(f|_{S}\) es \(\Sigma\)-p.r.. El caso \(O=\omega\) es similar usando \(\lambda xy\left[x^{y}\right]\) en lugar de \(\lambda x\alpha\left[\alpha^{x}\right]\).
Usando el lema anterior en combinación con el Lema 4.14 podemos ver que muchos predicados usuales son \(\Sigma\)-p.r.. Por ejemplo sea \[P=\lambda x\alpha\beta\gamma\left[x=\left\vert \gamma\right\vert \wedge\alpha=\gamma^{Pred(\left\vert \beta\right\vert )}\right].\] Nótese que \[D_{P}=\omega\times\Sigma^{\ast}\times(\Sigma^{\ast}-\{\varepsilon\})\times\Sigma^{\ast}\] es \(\Sigma\)-p.r. ya que \[\chi_{D_{P}}^{\omega\times\Sigma^{\ast3}}=\lnot\lambda\alpha\beta\left[\alpha=\beta\right]\circ\left[p_{3}^{1,3},C_{\varepsilon}^{1,3}\right]\] También note que los predicados \[\begin{aligned} & \lambda x\alpha\beta\gamma\left[x=\left\vert \gamma\right\vert \right]\\ & \lambda x\alpha\beta\gamma\left[\alpha=\gamma^{Pred(\left\vert \beta\right\vert )}\right] \end{aligned}\] son \(\Sigma\)-p.r. ya que pueden obtenerse componiendo funciones \(\Sigma\)-p.r.. O sea que \(P\) es \(\Sigma\)-p.r. ya que \[P=\left(\lambda x\alpha\beta\gamma\left[x=\left\vert \gamma\right\vert \right]|_{D_{P}}\wedge\lambda x\alpha\beta\gamma\left[\alpha=\gamma^{Pred(\left\vert \beta\right\vert )}\right]\right).\]
4.18. Supongamos \(F:D_{F}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow O\), con \(n,m\in\omega\) y \(O\in\{\omega,\Sigma^{\ast}\}\), es una función \(\Sigma\)-p.r.. Entonces existe una función \(\Sigma\)-p.r. \(\bar{F}:\omega^{n}\times\Sigma^{\ast m}\rightarrow O\), tal que \(F=\bar{F}|_{D_{F}}\).
Proof. Lo probaremos usando la Regla de Inducción desde 0. Para cada \(k\in\omega\) sea \(\mathrm{Enu}_{k}\) el siguiente enunciado:
adhocprefix\(\mathrm{Enu}_{k}\):adhocsufix Supongamos \(F:D_{F}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow O\), con \(n,m\in\omega\) y \(O\in\{\omega,\Sigma^{\ast}\}\), es una función perteneciente a \(\mathrm{PR}_{k}^{\Sigma}\). Entonces existe una función \(\Sigma\)-p.r. \(\bar{F}:\omega^{n}\times\Sigma^{\ast m}\rightarrow O\), tal que \(F=\bar{F}|_{D_{F}}\).
Es claro que si todos los enunciados \(\mathrm{Enu}_{k}\) son verdaderos, entonces el lema lo es. Hagamos entonces lo que nos encomienda la Regla de Inducción desde \(0\).
Prueba de que \(\mathrm{Enu}_{0}\) es verdadero. Ya que \(F\in\mathrm{PR}_{0}^{\Sigma}\), salvo el caso en que \(F=Pred\), podemos tomar siempre \(\bar{F}=F\). Cuando \(F=Pred\) podemos tomar \(\bar{F}=\lambda x\left[x\dot{-}1\right]\) la cual ya hemos visto es \(\Sigma\)-p.r..
Prueba de que si \(\mathrm{Enu}_{k}\) es verdadero entonces \(\mathrm{Enu}_{k+1}\) lo es. Sea \(F\in\mathrm{PR}_{k+1}^{\Sigma}\). Si \(F\in\mathrm{PR}_{k}^{\Sigma}\), entonces \(\mathrm{Enu}_{k}\) nos garantiza que se cumple \(\mathrm{Enu}_{k+1}\) para \(F\). Supongamos entonces que \(F\in\mathrm{PR}_{k+1}^{\Sigma}-\mathrm{PR}_{k}^{\Sigma}\). Por definición de \(\mathrm{PR}_{k+1}^{\Sigma}\) tenemos varios casos:
Caso \(F=f\circ[f_{1},...,f_{r}]\), con \(f,f_{1},...,f_{r}\in\mathrm{PR}_{k}^{\Sigma}\text{, }r\geq1\) y \(O=\omega\). Si \(F=\emptyset\) es fácil ver que podemos tomar \(\bar{F}=C_{0}^{n,m}\). Supongamos entonces que \(F\neq\emptyset\). Por el Lema de Composición no Vacía tenemos que hay \(n',m'\in\omega\) tales que
adhocprefix-adhocsufix \(r=n'+m'\)
adhocprefix-adhocsufix \(f\) es de tipo \((n',m',\#)\)
adhocprefix-adhocsufix \(f_{i}\) es de tipo \((n,m,\#)\), para cada \(i=1,...,n'\)
adhocprefix-adhocsufix \(f_{i}\) es de tipo \((n,m,\ast)\), para cada \(i=n'+1,...,n'+m'\)
Ya que es veradero \(\mathrm{Enu}_{k}\) tenemos que hay funciones \(\Sigma\)-p.r.
adhocprefix-adhocsufix \(\bar{f}:\omega^{n'}\times\Sigma^{\ast m'}\rightarrow\omega\)
adhocprefix-adhocsufix \(\bar{f_{i}}:\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\), para cada \(i=1,...,n'\)
adhocprefix-adhocsufix \(\bar{f_{i}}:\omega^{n}\times\Sigma^{\ast m}\rightarrow\Sigma^{\ast}\), para cada \(i=n'+1,...,n'+m'\)
tales que
adhocprefix-adhocsufix \(\bar{f}|_{D_{f}}=f\)
adhocprefix-adhocsufix \(\bar{f_{i}}|_{D_{f_{i}}}\), para cada \(i=1,...,n'\)
adhocprefix-adhocsufix \(\bar{f_{i}}|_{D_{f_{i}}}\), para cada \(i=n'+1,...,n'+m'\)
Definamos \(\bar{F}=\bar{f}\circ[\bar{f_{1}},...,\overline{f_{n'+m'}}]\). Note que \(D_{\bar{F}}=\omega^{n}\times\Sigma^{\ast m}\). Además es claro que \(\bar{F}\) es \(\Sigma\)-p.r. ya que \(\bar{f},\bar{f_{1}},...,\overline{f_{n'+m'}}\) lo son. Dejamos al lector el fácil chequeo de que \(F=\bar{F}|_{D_{F}}\).
Caso \(F=f\circ[f_{1},...,f_{r}]\), con \(f,f_{1},...,f_{r}\in\mathrm{PR}_{k}^{\Sigma}\text{, }r\geq1\) y \(O=\Sigma^{*}\). Completamente análogo al anterior.
Los otros casos son similares y dejados al lector.
Ahora podemos probar el siguiente importante resultado
4.4. Sea \(S\) un conjunto \(\Sigma\)-mixto. Entonces \(S\) es \(\Sigma\)-p.r. sii \(S\) es el dominio de alguna función \(\Sigma\)-p.r.\(.\)
Proof. (\(\Rightarrow\)) Supongamos que \(S\subseteq\omega^{n}\times\Sigma^{\ast m}\). Ya que \(S\) es \(\Sigma\)-p.r. por definición tenemos que \(\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}\) es \(\Sigma\)-p.r.. O sea que \(Pred\circ\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}\) es \(\Sigma\)-p.r.. Pero note que \(S=D_{Pred\circ\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}}\).
(\(\Leftarrow\)) Lo probaremos usando la Regla de Inducción desde 0. Para cada \(k\in\omega\) sea \(\mathrm{Enu}_{k}\) el siguiente enunciado:
adhocprefix\(\mathrm{Enu}_{k}\):adhocsufix Si \(F\in\mathrm{PR}_{k}^{\Sigma}\), entonces \(D_{F}\) es \(\Sigma\)-p.r..
Es claro que si todos los enuciados \(\mathrm{Enu}_{k}\) son verdaderos, entonces (\(\Leftarrow\)) de la proposición lo es. Hagamos entonces lo que nos encomienda la Regla de Inducción desde \(0\).
Prueba de que \(\mathrm{Enu}_{0}\) es verdadero. Es dejada al lector.
Prueba de que si \(\mathrm{Enu}_{k}\) es verdadero entonces \(\mathrm{Enu}_{k+1}\) lo es. Supongamos \(\mathrm{Enu}_{k}\) es verdadero. Sea \(F\in\mathrm{PR}_{k+1}^{\Sigma}\). Por definición de \(\mathrm{PR}_{k+1}^{\Sigma}\) tenemos varios casos.
Caso \(F\in\mathrm{PR}_{k}^{\Sigma}\). Ya que \(\mathrm{Enu}_{k}\) es veradero, tenemos que \(D_{F}\) es \(\Sigma\)-p.r.. por lo cual se cumple \(\mathrm{Enu}_{k+1}\) para \(F\).
Caso \(F=R(f,g)\), donde \[\begin{aligned} f & :S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\Sigma^{\ast}\\ g & :\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\times\Sigma^{\ast}\rightarrow\Sigma^{\ast}, \end{aligned}\] con \(S_{1},...,S_{n}\subseteq\omega\) y \(L_{1},...,L_{m}\subseteq\Sigma^{\ast}\) conjuntos no vacíos y \(f,g\in\mathrm{PR}_{k}^{\Sigma}\). Nótese que por definición de \(R(f,g)\), tenemos que \[D_{F}=\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}.\] Ya que \(\mathrm{Enu}_{k}\) es verdadero tenemos que \(D_{f}=S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\) es \(\Sigma\)-p.r., lo cual por el Lema 4.16 nos dice que los conjuntos \(S_{1},...,S_{n}\), \(L_{1},...,L_{m}\) son \(\Sigma\)-p.r.. Ya que \(\omega\) es \(\Sigma\)-p.r., el Lema 4.16 nos dice que \(D_{F}\) es \(\Sigma\)-p.r..
Los otros casos de recursión primitiva son similares y dejados al lector.
Caso \(F=f\circ[f_{1},...,f_{r}]\) con \(f,f_{1},...,f_{r}\in\mathrm{PR}_{k}^{\Sigma}\) y \(r\geq1\). Si \(F=\emptyset\), entonces es claro que \(D_{F}=\emptyset\) es \(\Sigma\)-p.r.. Supongamos entonces que \(F\) no es la función \(\emptyset\). Por el Lema de Composición no Vacía tenemos que \(r\) es de la forma \(n+m\) y \[\begin{aligned} f & :D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow O\\ f_{i} & :D_{f_{i}}\subseteq\omega^{k}\times\Sigma^{\ast l}\rightarrow\omega\text{, }i=1,...,n\\ f_{i} & :D_{f_{i}}\subseteq\omega^{k}\times\Sigma^{\ast l}\rightarrow\Sigma^{\ast},i=n+1,...,n+m \end{aligned}\] con \(O\in\{\omega,\Sigma^{\ast}\}\) y \(k,l\in\omega\). Por Lema 4.18, hay funciones \(\Sigma\)-p.r. \(\bar{f}_{1},...,\bar{f}_{n+m}\) las cuales tienen dominio \(\omega^{k}\times\Sigma^{\ast l}\) y cumplen \[f_{i}=\bar{f}_{i}|_{D_{f_{i}}}\text{, para }i=1,...,n+m.\] Ya que \(\mathrm{Enu}_{k}\) es verdadero tenemos que los conjuntos \(D_{f}\), \(D_{f_{i}}\), \(i=1,...,n+m\), son \(\Sigma\)-p.r. y por lo tanto el Lema 4.15 aplicado \((n+m)-1\) veces nos dice que \[S=\bigcap_{i=1}^{n+m}D_{f_{i}}\] es \(\Sigma\)-p.r.. Nótese que \[\chi_{D_{F}}^{\omega^{k}\times\Sigma^{\ast l}}=(\chi_{D_{f}}^{\omega^{n}\times\Sigma^{\ast m}}\circ\left[\bar{f}_{1},...,\bar{f}_{n+m}\right]\wedge\chi_{S}^{\omega^{k}\times\Sigma^{\ast l}})\] lo cual nos dice que \(D_{F}\) es \(\Sigma\)-p.r..
Una observación interesante es que si \(f_{i}:D_{f_{i}}\rightarrow O\), \(i=1,...,k\), son funciones tales que \(D_{f_{i}}\cap D_{f_{j}}=\emptyset\) para \(i\neq j\), entonces \(f_{1}\cup...\cup f_{k}\) es la función \[\begin{array}{rll} D_{f_{1}}\cup...\cup D_{f_{k}} & \rightarrow & O\\ e & \rightarrow & \left\{ \begin{array}{clc} f_{1}(e) & & \text{si }e\in D_{f_{1}}\\ \vdots & & \vdots\\ f_{k}(e) & & \text{si }e\in D_{f_{k}} \end{array}\right. \end{array}\]
4.19 (División por Casos para Funciones \(\Sigma\)-p.r.). Supongamos \(f_{i}:D_{f_{i}}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow O\), \(i=1,...,k\), son funciones \(\Sigma\)-p.r., con \(n,m\in\omega\), \(O\in\{\omega,\Sigma^{\ast}\}\) y \(k\in\mathbf{N}\). Si \(D_{f_{i}}\cap D_{f_{j}}=\emptyset\) cada ves que \(i\neq j\), entonces \(f_{1}\cup...\cup f_{k}\) es \(\Sigma\)-p.r..
Proof. El caso \(k=1\) es trivial. Probaremos usando la Regla de Inducción desde 2 que vale para \(k\geq2\). Para cada \(k\geq2\) sea \(\mathrm{Enu}_{k}\) el siguiente enunciado:
adhocprefix\(\mathrm{Enu}_{k}\):adhocsufix Supongamos \(f_{i}:D_{f_{i}}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow O\), \(i=1,...,k\), son funciones \(\Sigma\)-p.r., con \(n,m\in\omega\) y \(O\in\{\omega,\Sigma^{\ast}\}\). Si \(D_{f_{i}}\cap D_{f_{j}}=\emptyset\) cada ves que \(i\neq j\), entonces \(f_{1}\cup...\cup f_{k}\) es \(\Sigma\)-p.r..
Hagamos entonces lo que nos encomienda la Regla de Inducción desde \(2\).
Prueba de que \(\mathrm{Enu}_{2}\) es verdadero. Supongamos \(O=\Sigma^{\ast}\). Sean \[\bar{f}_{i}:\omega^{n}\times\Sigma^{\ast m}\rightarrow\Sigma^{\ast},i=1,2,\] funciones \(\Sigma\)-p.r. tales que \(\bar{f}_{i}|_{D_{f_{i}}}=f_{i}\), \(i=1,2\) (Lema 4.18)\(.\) Por la Proposición 4.4 los conjuntos \(D_{f_{1}}\) y \(D_{f_{2}}\) son \(\Sigma\)-p.r. y por lo tanto lo es \(D_{f_{1}}\cup D_{f_{2}}\). Ya que \[f_{1}\cup f_{2}=\left(\lambda\alpha\beta\left[\alpha\beta\right]\circ\left[\lambda x\alpha\left[\alpha^{x}\right]\circ\left[\chi_{D_{f_{1}}}^{\omega^{n}\times\Sigma^{\ast m}},\bar{f}_{1}\right],\lambda x\alpha\left[\alpha^{x}\right]\circ\left[\chi_{D_{f_{2}}}^{\omega^{n}\times\Sigma^{\ast m}},\bar{f}_{2}\right]\right]\right)|_{D_{f_{1}}\cup D_{f_{2}}}\] tenemos que \(f_{1}\cup f_{2}\) es \(\Sigma\)-p.r.. El caso \(O=\omega\) es similar usando \(\lambda xy\left[x.y\right]\) y \(\lambda xy\left[y^{x}\right]\) en lugar de \(\lambda\alpha\beta\left[\alpha\beta\right]\) y \(\lambda x\alpha\left[\alpha^{x}\right]\).
Prueba de que si \(\mathrm{Enu}_{k}\) es verdadero entonces \(\mathrm{Enu}_{k+1}\) lo es. Sean \(f_{i}:D_{f_{i}}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow O\), \(i=1,...,k+1\), funciones \(\Sigma\)-p.r. tales que \(D_{f_{i}}\cap D_{f_{j}}=\emptyset\) para \(i\neq j.\) Aplicando \(\mathrm{Enu}_{k}\) a las funciones \(f_{i}:D_{f_{i}}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow O\), \(i=1,...,k\) obtenemos que \(f_{1}\cup...\cup f_{k}\) es \(\Sigma\)-p.r.. Aplicando \(\mathrm{Enu}_{2}\) (que ya fue probado) tenemos que \((f_{1}\cup...\cup f_{k})\cup f_{k+1}\) es \(\Sigma\)-p.r.. Pero \[f_{1}\cup...\cup f_{k+1}=(f_{1}\cup...\cup f_{k})\cup f_{k+1}\] por lo cual \(f_{1}\cup...\cup f_{k+1}\) es \(\Sigma\)-p.r., obteniendo que \(\mathrm{Enu}_{k+1}\) es verdadero.
4.2. Supongamos \(f\) es una función \(\Sigma\)-mixta cuyo dominio es finito. Entonces \(f\) es \(\Sigma\)-p.r..
Proof. Supongamos \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow O\), con \(n,m\in\omega\) y \(O\in\{\omega,\Sigma^{\ast}\}\). Si \(D_{f}\) es vacío entonces \(f=\emptyset\) y por lo tanto \(f\) es \(\Sigma\)-p.r.. Supongamos entonces que \(D_{f}=\{e_{1},...,e_{k}\}\) con \(k\geq1\). Por el Corolario 4.1, cada \(\{e_{i}\}\) es \(\Sigma\)-p.r. por lo cual el Lema 4.17 nos dice que \(C_{f(e_{i})}^{n,m}|_{\{e_{i}\}}\) es \(\Sigma\)-p.r.. O sea que \[f=C_{f(e_{1})}^{n,m}|_{\{e_{1}\}}\cup...\cup C_{f(e_{k})}^{n,m}|_{\{e_{k}\}}\] es \(\Sigma\)-p.r., por el lema anterior.
CONSEJO IMPORTANTE: Si uno quiere usar el lema de división por casos para probar que una función \(f\) es \(\Sigma\)-p.r., entonces lo primero que hay que hacer, antes de ver que algo sea \(\Sigma\)-p.r. o no, es (a lo mariposa) definir correctamente funciones \(f_{1},...,f_{k}\) tales que \(D_{f_{i}}\cap D_{f_{j}}=\emptyset\) para \(i\neq j\) y además \(f_{1}\cup...\cup f_{k}=f\). Consejos para encontrar dichas funciones:
Determinar el \(k\), es decir, \(k\) es justamente la cantidad de "casos" en la descripción de \(f\)
Para cada "caso" de la descripción de \(f\), asociar un subconjunto del dominio de \(f\) el cual sea justamente definido por la propiedad correspondiente a ese caso. Ojo que dijimos subconjunto de \(D_{f}\), no confundir los tipos!! (a veces los casos se describen usando no todas las variables de las cuales depende la función)
Notar que los subconjuntos \(S_{1},...,S_{k}\) así definidos deben ser disjuntos de a pares y unidos deben dar el dominio de \(f\)
Para cada \(i\) definir \(f_{i}\) de la siguiente manera:
Dominio de \(f_{i}=S_{i}\)
Regla de asignación de \(f_{i}\) dada por la regla que describe \(f\) para el caso \(i\)-ésimo
A veces se puede describir \(f_{i}\) como la restricción a \(S_{i}\) de una función con dominio mas amplio de la cual ya sabemos que es \(\Sigma\)-p.r..
Probar que cada \(f_{i}\) es \(\Sigma\)-p.r.. Cuando \(f_{i}\) es la restricción a \(S_{i}\) de una función \(\Sigma\)-p.r. con dominio mas amplio entonces basta con probar que \(S_{i}\) es \(\Sigma\)-p.r. y aplicar el Lema 4.17.
Recordemos que dados \(i\in\omega\) y \(\alpha\in\Sigma^{\ast}\), definimos \[\left[\alpha\right]_{i}=\left\{ \begin{array}{lll} i\text{-esimo elemento de }\alpha & & \text{si }1\leq i\leq\left\vert \alpha\right\vert \\ \varepsilon & & \text{caso contrario} \end{array}\right.\]
4.20. \(\lambda i\alpha\left[[\alpha]_{i}\right]\) es \(\Sigma\)-p.r..
Proof. Note que \[\begin{aligned} _{i} & =\varepsilon\\{} [\alpha a]_{i} & =\left\{ \begin{array}{lll} [\alpha]_{i} & & \text{si }i\neq\left\vert \alpha\right\vert +1\\ a & & \text{si }i=\left\vert \alpha\right\vert +1 \end{array}\right. \end{aligned}\] lo cual dice que \(\lambda i\alpha\left[[\alpha]_{i}\right]=R\left(C_{\varepsilon}^{1,0},\mathcal{G}\right)\), donde \(\mathcal{G}_{a}:\omega\times\Sigma^{\ast}\times\Sigma^{\ast}\rightarrow\Sigma^{\ast}\) es dada por \[\mathcal{G}_{a}(i,\alpha,\zeta)=\left\{ \begin{array}{lll} \zeta & & \text{si }i\neq\left\vert \alpha\right\vert +1\\ a & & \text{si }i=\left\vert \alpha\right\vert +1 \end{array}\right.\] O sea que sólo resta probar que cada \(\mathcal{G}_{a}\) es \(\Sigma\)-p.r.. Tomemos entonces \(a\in\Sigma\) fijo. Definamos \[\begin{aligned} S_{1} & =\left\{ (i,\alpha,\zeta)\in\omega\times\Sigma^{\ast}\times\Sigma^{\ast}:i\neq\left\vert \alpha\right\vert +1\right\} \\ S_{2} & =\left\{ (i,\alpha,\zeta)\in\omega\times\Sigma^{\ast}\times\Sigma^{\ast}:i=\left\vert \alpha\right\vert +1\right\} \end{aligned}\] Nótese que estos conjuntos son disjuntos y \[\mathcal{G}_{a}=p_{3}^{1,2}|_{S_{1}}\cup C_{a}^{1,2}|_{S_{2}}\] O sea que para aplicar el Lema 4.19 debemos probar que \(p_{3}^{1,2}|_{S_{1}}\) y \(C_{a}^{1,2}|_{S_{2}}\) son \(\Sigma\)-p.r.. Ya que \(p_{3}^{1,2}\) y \(C_{a}^{1,2}\) lo son, basta con probar que \(S_{1}\) y \(S_{2}\) son \(\Sigma\)-p.r. y aplicar entonces el Lema 4.17. Pero nótese que \[\begin{aligned} \chi_{S_{1}}^{\omega\times\Sigma^{\ast}\times\Sigma^{\ast}} & =\lambda xy\left[x\neq y\right]\circ\left[p_{1}^{1,2},Suc\circ\lambda\alpha\left[\left\vert \alpha\right\vert \right]\circ p_{2}^{1,2}\right]\\ \chi_{S_{2}}^{\omega\times\Sigma^{\ast}\times\Sigma^{\ast}} & =\lambda xy\left[x=y\right]\circ\left[p_{1}^{1,2},Suc\circ\lambda\alpha\left[\left\vert \alpha\right\vert \right]\circ p_{2}^{1,2}\right] \end{aligned}\] lo cual garantiza que \(S_{1}\) y \(S_{2}\) son \(\Sigma\)-p.r., concluyendo la prueba de que \(\mathcal{G}_{a}\) es \(\Sigma\)-p.r..
Sea \(\Sigma\) un alfabeto finito. Sea \(f:\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\omega\), con \(S_{1},...,S_{n}\subseteq\omega\) y \(L_{1},...,L_{m}\subseteq\Sigma^{\ast}\) no vacíos. Para \(x,y\in\omega\) y \((\vec{x},\vec{\alpha})\in S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\), definamos \[\begin{aligned} \sum\limits_{t=x}^{t=y}f(t,\vec{x},\vec{\alpha}) & =\left\{ \begin{array}{lll} 0 & & \text{si }x>y\\ f(x,\vec{x},\vec{\alpha})+f(x+1,\vec{x},\vec{\alpha})+...+f(y,\vec{x},\vec{\alpha}) & & \text{si }x\leq y \end{array}\right.\\ \prod\limits_{t=x}^{t=y}f(t,\vec{x},\vec{\alpha}) & =\left\{ \begin{array}{lll} 1 & & \text{si }x>y\\ f(x,\vec{x},\vec{\alpha}).f(x+1,\vec{x},\vec{\alpha})....f(y,\vec{x},\vec{\alpha}) & & \text{si }x\leq y \end{array}\right. \end{aligned}\] En forma similar, cuando \(I_{f}\subseteq\Sigma^{\ast}\), definamos \[\overset{t=y}{\underset{t=x}{\subset}}f(t,\vec{x},\vec{\alpha})=\left\{ \begin{array}{lll} \varepsilon & & \text{si }x>y\\ f(x,\vec{x},\vec{\alpha})f(x+1,\vec{x},\vec{\alpha})....f(y,\vec{x},\vec{\alpha}) & & \text{si }x\leq y \end{array}\right.\] Note que, en virtud de la definición anterior, el dominio de las funciones \[\lambda xy\vec{x}\vec{\alpha}\left[\sum_{t=x}^{t=y}f(t,\vec{x},\vec{\alpha})\right]\ \ \ \ \ \ \ \ \ \ \ \ \lambda xy\vec{x}\vec{\alpha}\left[\prod_{t=x}^{t=y}f(t,\vec{x},\vec{\alpha})\right]\ \ \ \ \ \ \ \ \ \ \ \ \lambda xy\vec{x}\vec{\alpha}\left[\subset_{t=x}^{t=y}f(t,\vec{x},\vec{\alpha})\right]\] es \(\omega\times\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\).
Dejamos al lector que analice en las consideraciones de recién el caso \(n=m=0\) (es decir cuando \(D_{f}=\omega\)).
4.21 (Lema de la Sumatoria). Sea \(\Sigma\) un alfabeto finito.
adhocprefix(a)adhocsufix Si \(f:\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\omega\) es \(\Sigma\)-p.r., con \(S_{1},...,S_{n}\subseteq\omega\) y \(L_{1},...,L_{m}\subseteq\Sigma^{\ast}\) no vacíos, entonces las funciones \(\lambda xy\vec{x}\vec{\alpha}\left[\sum_{t=x}^{t=y}f(t,\vec{x},\vec{\alpha})\right]\) y \(\lambda xy\vec{x}\vec{\alpha}\left[\prod_{t=x}^{t=y}f(t,\vec{x},\vec{\alpha})\right]\) son \(\Sigma\)-p.r.
adhocprefix(b)adhocsufix Si \(f:\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\Sigma^{\ast}\) es \(\Sigma\)-p.r., con \(S_{1},...,S_{n}\subseteq\omega\) y \(L_{1},...,L_{m}\subseteq\Sigma^{\ast}\) no vacíos, entonces la función \(\lambda xy\vec{x}\vec{\alpha}\left[\subset_{t=x}^{t=y}f(t,\vec{x},\vec{\alpha})\right]\) es \(\Sigma\)-p.r.
Proof. (a) Sea \(G=\lambda tx\vec{x}\vec{\alpha}\left[\sum_{i=x}^{i=t}f(i,\vec{x},\vec{\alpha})\right]\). Ya que \[\lambda xy\vec{x}\vec{\alpha}\left[\sum_{i=x}^{i=y}f(i,\vec{x},\vec{\alpha})\right]=G\circ\left[p_{2}^{n+2,m},p_{1}^{n+2,m},p_{3}^{n+2,m},...,p_{n+m+2}^{n+2,m}\right]\] solo tenemos que probar que \(G\) es \(\Sigma\)-p.r.. Primero note que \[\begin{aligned} G(0,x,\vec{x},\vec{\alpha}) & =\left\{ \begin{array}{lll} 0 & & \text{si }x>0\\ f(0,\vec{x},\vec{\alpha}) & & \text{si }x=0 \end{array}\right.\\ G(t+1,x,\vec{x},\vec{\alpha}) & =\left\{ \begin{array}{lll} 0 & & \text{si }x>t+1\\ G(t,x,\vec{x},\vec{\alpha})+f(t+1,\vec{x},\vec{\alpha}) & & \text{si }x\leq t+1 \end{array}\right. \end{aligned}\] O sea que si definimos \[\begin{array}{rll} h:\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m} & \rightarrow & \omega\\ (x,\vec{x},\vec{\alpha}) & \rightarrow & \left\{ \begin{array}{lll} 0 & & \text{si }x>0\\ f(0,\vec{x},\vec{\alpha}) & & \text{si }x=0 \end{array}\right. \end{array}\] \[\begin{array}{rll} g:\omega^{3}\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m} & \rightarrow & \omega\\ (A,t,x,\vec{x},\vec{\alpha}) & \rightarrow & \left\{ \begin{array}{lll} 0 & & \text{si }x>t+1\\ A+f(t+1,\vec{x},\vec{\alpha}) & & \text{si }x\leq t+1 \end{array}\right. \end{array}\] tenemos que \(G=R(h,g)\). Es decir que solo nos falta probar que \(h\) y \(g\) son \(\Sigma\)-p.r.. Nótese que \[\begin{aligned} h & =C_{0}^{n+1,m}|_{D_{1}}\cup\lambda x\vec{x}\vec{\alpha}\left[f(0,\vec{x},\vec{\alpha})\right]|_{D_{2}}\\ g & =C_{0}^{n+3,m}|_{H_{1}}\cup\lambda Atx\vec{x}\vec{\alpha}\left[A+f(t+1,\vec{x},\vec{\alpha})\right])|_{H_{2}} \end{aligned}\] asique para ver que \(h\) y \(g\) son \(\Sigma\)-p.r. podemos aplicar el Lema 4.19 una ves que hayamos visto que las funciones \[\begin{aligned} & C_{0}^{n+1,m}|_{D_{1}}\text{ \ensuremath{} \ensuremath{} }\lambda x\vec{x}\vec{\alpha}\left[f(0,\vec{x},\vec{\alpha})\right]|_{D_{2}}\\ & C_{0}^{n+3,m}|_{H_{1}}\text{ \ensuremath{} \ensuremath{} }\lambda Atx\vec{x}\vec{\alpha}\left[A+f(t+1,\vec{x},\vec{\alpha})\right])|_{H_{2}} \end{aligned}\] son \(\Sigma\)-p.r.. Es claro que \(C_{0}^{n+1,m}\) y \(C_{0}^{n+3,m}\) son \(\Sigma\)-p.r.. También nótese que \[\begin{aligned} \lambda x\vec{x}\vec{\alpha}\left[f(0,\vec{x},\vec{\alpha})\right] & =f\circ\left[C_{0}^{n+1,m},p_{2}^{n+1,m},p_{3}^{n+1,m},...,p_{n+1+m}^{n+1,m}\right]\\ \lambda Atx\vec{x}\vec{\alpha}\left[A+f(t+1,\vec{x},\vec{\alpha})\right]) & =\lambda xy[x+y]\circ\left[p_{1}^{n+3,m},f\circ\left[Suc\circ p_{2}^{n+3,m},p_{4}^{n+3,m},...,p_{n+3+m}^{n+3,m}\right]\right] \end{aligned}\] lo cual, ya que \(f\) es \(\Sigma\)-p.r., nos dice que \(\lambda x\vec{x}\vec{\alpha}\left[f(0,\vec{x},\vec{\alpha})\right]\) y \(\lambda Atx\vec{x}\vec{\alpha}\left[A+f(t+1,\vec{x},\vec{\alpha})\right])\) son \(\Sigma\)-p.r.. O sea que el Lema 4.17 nos dice que solo nos resta probar que \[\begin{aligned} D_{1} & =\left\{ (x,\vec{x},\vec{\alpha})\in\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}:x>0\right\} \\ D_{2} & =\left\{ (x,\vec{x},\vec{\alpha})\in\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}:x=0\right\} \\ H_{1} & =\left\{ (z,t,x,\vec{x},\vec{\alpha})\in\omega^{3}\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}:x>t+1\right\} \\ H_{2} & =\left\{ (z,t,x,\vec{x},\vec{\alpha})\in\omega^{3}\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}:x\leq t+1\right\} . \end{aligned}\] son \(\Sigma\)-p.r.. Veamos por ejemplo que \(H_{1}\) lo es. Es decir debemos ver que \(\chi_{H_{1}}^{\omega^{3+n}\times\Sigma^{\ast m}}\) es \(\Sigma\)-p.r.. Ya que \(f\) es \(\Sigma\)-p.r. tenemos que \(D_{f}=\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\) es \(\Sigma\)-p.r., lo cual por el Lema 4.16 nos dice que los conjuntos \(S_{1},...,S_{n}\), \(L_{1},...,L_{m}\) son \(\Sigma\)-p.r.. Ya que \(\omega\) es \(\Sigma\)-p.r., el Lema 4.16 nos dice que \[R=\omega^{3}\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\] es \(\Sigma\)-p.r.. Nótese que \[\chi_{H_{1}}^{\omega^{3+n}\times\Sigma^{\ast m}}=(\chi_{R}^{\omega^{3+n}\times\Sigma^{\ast m}}\wedge\lambda ztx\vec{x}\vec{\alpha}\left[x>t+1\right])\] por lo cual \(\chi_{H_{1}}^{\omega^{3+n}\times\Sigma^{\ast m}}\) es \(\Sigma\)-p.r. ya que es la conjunción de dos predicados \(\Sigma\)-p.r. La prueba de que \(D_{1},D_{2}\text{ y }H_{2}\) son \(\Sigma\)-p.r. es similar.
(b) Se prueba en forma análoga a la prueba de (a).
Veamos un ejemplo de como se puede aplicar el lema anterior. Sea \(F=\lambda yx_{1}\left[\sum_{t=0}^{t=y}(x_{1})^{t}\right]\). Es claro que \(D_{F}=\omega^{2}\). Para ver que \(F\) es \(\Sigma\)-p.r. aplicaremos el lema anterior por lo cual es importante encontrar la \(f\) adecuada a la cual se le aplicara el lema. Tomemos \(f=\lambda tx_{1}[(x_{1})^{t}]\). Claramente \(f\) es \(\Sigma\)-p.r. por lo cual el lema anterior nos dice que \[G=\lambda xyx_{1}\left[\sum_{t=x}^{t=y}f(t,x_{1})\right]=\lambda xyx_{1}\left[\sum_{t=x}^{t=y}(x_{1})^{t}\right]\] es \(\Sigma\)-p.r.. Claramente \(G\) no es la función \(F\) pero es en algún sentido "mas amplia" que \(F\) ya que tiene una variable mas y se tiene que \(F(y,x_{1})=G(0,y,x_{1})\), para cada \(y,x_{1}\in\omega\). Es fácil ver que \[F=G\circ\left[C_{0}^{2,0},p_{1}^{2,0},p_{2}^{2,0}\right]\] por lo cual \(F\) es \(\Sigma\)-p.r..
Sea \(P:S\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\omega\) un predicado, con \(n,m\in\omega\). Supongamos además que \(S,S_{1},...,S_{n}\subseteq\omega\) y \(L_{1},...,L_{m}\subseteq\Sigma^{\ast}\) son no vacíos. Sea \(\bar{S}\subseteq S\). Entonces la expresión Booleana \[(\forall t\in\bar{S})_{t\leq x}\;P(t,\vec{x},\vec{\alpha})\] depende de las variables \(x,\vec{x},\vec{\alpha}\) y valdrá \(1\) en una \((1+n+m)\)-upla \((x,\vec{x},\vec{\alpha})\) cuando \(P(t,\vec{x},\vec{\alpha})\) sea igual a \(1\) para cada \(t\in\{u\in\bar{S}:u\leq x\}\); y \(0\) en caso contrario. Nótese que aquí es crucial que \(\bar{S}\subseteq S\) ya que si no sucediera esto no tendría sentido preguntarnos si \(P(t,\vec{x},\vec{\alpha})\) es \(1\) para cada \(t\in\{u\in\bar{S}:u\leq x\}\). Además también para que la expresión \((\forall t\in\bar{S})_{t\leq x}\;P(t,\vec{x},\vec{\alpha})\) este definida es preciso que \((\vec{x},\vec{\alpha})\in S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\). Sobre la variable \(x\) no hay ninguna restricción o sea que puede ser cualquier elemento de \(\omega\). Tenemos entonces que el dominio del predicado \[\lambda x\vec{x}\vec{\alpha}\left[(\forall t\in\bar{S})_{t\leq x}\;P(t,\vec{x},\vec{\alpha})\right]\] es \(\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\). En forma análoga se define la forma de interpretar la expresión Booleana \[(\exists t\in\bar{S})_{t\leq x}\;P(t,\vec{x},\vec{\alpha})\] Cabe destacar que \[\lambda x\vec{x}\vec{\alpha}\left[(\exists t\in\bar{S})_{t\leq x}\;P(t,\vec{x},\vec{\alpha})\right]=\lnot\lambda x\vec{x}\vec{\alpha}\left[(\forall t\in\bar{S})_{t\leq x}\;\lnot P(t,\vec{x},\vec{\alpha})\right]\] Analicemos un poco por separado el caso \(\bar{S}=\emptyset\). Nos queda la expresión \[(\forall t\in\emptyset)_{t\leq x}\;P(t,\vec{x},\vec{\alpha})\] la cual para que este definida requiere que \((x,\vec{x},\vec{\alpha})\) este en \(\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\) (ver (12) (d) de la notación lambda); y siempre es verdadera. O sea que \[\lambda x\vec{x}\vec{\alpha}\left[(\forall t\in\emptyset)_{t\leq x}\;P(t,\vec{x},\vec{\alpha})\right]=C_{1}^{1+n,m}|_{\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}}\] Análogamente \[\lambda x\vec{x}\vec{\alpha}\left[(\exists t\in\emptyset)_{t\leq x}\;P(t,\vec{x},\vec{\alpha})\right]=C_{0}^{1+n,m}|_{\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}}\] También podemos cuantificar sobre variable alfabética. Sea \(P:S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\times L\rightarrow\omega\) un predicado, con \(S_{1},...,S_{n}\subseteq\omega\) y \(L,L_{1},...,L_{m}\subseteq\Sigma^{\ast}\) no vacíos. Supongamos \(\bar{L}\subseteq L\). Entonces la expresión Booleana \[(\forall\alpha\in\bar{L})_{\left\vert \alpha\right\vert \leq x}\;P(\vec{x},\vec{\alpha},\alpha)\] depende de las variables \(x,\vec{x},\vec{\alpha}\) y esta definida cuando \((x,\vec{x},\vec{\alpha})\) pertenece a \(\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\). Dejamos al lector analizar cuando vale 1 el predicado \[\lambda x\vec{x}\vec{\alpha}\left[(\forall\alpha\in\bar{L})_{\left\vert \alpha\right\vert \leq x}\;P(\vec{x},\vec{\alpha},\alpha)\right]\] También dejamos al lector estudiar el comportamiento de la función \[\lambda x\vec{x}\vec{\alpha}\left[(\exists\alpha\in\bar{L})_{\left\vert \alpha\right\vert \leq x}P(\vec{x},\vec{\alpha},\alpha)\right]\] Cabe destacar que también \[\lambda x\vec{x}\vec{\alpha}\left[(\exists\alpha\in\bar{L})_{\left\vert \alpha\right\vert \leq x}P(\vec{x},\vec{\alpha},\alpha)\right]=\lnot\lambda x\vec{x}\vec{\alpha}\left[(\forall\alpha\in\bar{L})_{\left\vert \alpha\right\vert \leq x}\lnot P(\vec{x},\vec{\alpha},\alpha)\right]\] Dejamos al lector que analice el caso \(\bar{L}=\emptyset\) y también el caso \(n=m=0\) para ambos tipos de cuantificación (es decir cuando \(P:S\subseteq\omega\rightarrow\omega\) o \(P:L\subseteq\Sigma^{\ast}\rightarrow\omega\)).
4.22 (Lema de cuantificación acotada). Sea \(\Sigma\) un alfabeto finito.
adhocprefix(a)adhocsufix Sea \(P:S\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\omega\) un predicado \(\Sigma\)-p.r., con \(S,S_{1},...,S_{n}\subseteq\omega\) y \(L_{1},...,L_{m}\subseteq\Sigma^{\ast}\) no vacíos. Supongamos \(\bar{S}\subseteq S\) es \(\Sigma\)-p.r.. Entonces \(\lambda x\vec{x}\vec{\alpha}\left[(\forall t\in\bar{S})_{t\leq x}\;P(t,\vec{x},\vec{\alpha})\right]\) y \(\lambda x\vec{x}\vec{\alpha}\left[(\exists t\in\bar{S})_{t\leq x}\;P(t,\vec{x},\vec{\alpha})\right]\) son predicados \(\Sigma\)-p.r..
adhocprefix(b)adhocsufix Sea \(P:S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\times L\rightarrow\omega\) un predicado \(\Sigma\)-p.r., con \(S_{1},...,S_{n}\subseteq\omega\) y \(L,L_{1},...,L_{m}\subseteq\Sigma^{\ast}\) no vacíos. Supongamos \(\bar{L}\subseteq L\) es \(\Sigma\)-p.r.. Entonces \(\lambda x\vec{x}\vec{\alpha}\left[(\forall\alpha\in\bar{L})_{\left\vert \alpha\right\vert \leq x}\;P(\vec{x},\vec{\alpha},\alpha)\right]\) y \(\lambda x\vec{x}\vec{\alpha}\left[(\exists\alpha\in\bar{L})_{\left\vert \alpha\right\vert \leq x}\;P(\vec{x},\vec{\alpha},\alpha)\right]\) son predicados \(\Sigma\)-p.r..
Proof. (a) Sea \[\bar{P}=P|_{\bar{S}\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}}\cup C_{1}^{1+n,m}|_{(\omega-\bar{S})\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}}\] Nótese que \(\bar{P}\) tiene dominio \(\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\). Veamos que \(\bar{P}\) es \(\Sigma\)-p.r.. Ya que \(P\) es \(\Sigma\)-p.r. tenemos que \(D_{P}=S\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\) es \(\Sigma\)-p.r., lo cual por el Lema 4.16 nos dice que los conjuntos \(S_{1},...,S_{n}\), \(L_{1},...,L_{m}\) son \(\Sigma\)-p.r.. Si \(\bar{S}\neq\emptyset\), ya que es \(\Sigma\)-p.r. por hipótesis, el Lema 4.16 nos dice que \[\bar{S}\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\] es \(\Sigma\)-p.r.. Si \(\bar{S}=\emptyset\) entonces \[\bar{S}\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\] es también \(\Sigma\)-p.r. ya que es igual al conjunto vacío. O sea que el Lema 4.17 nos dice que \[P|_{\bar{S}\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}}\] es \(\Sigma\)-p.r.. En forma similar, ya que \(\omega-\bar{S}\) es \(\Sigma\)-p.r. (Lema 4.15), obtenemos que \[C_{1}^{1+n,m}|_{(\omega-\bar{S})\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}}\] es \(\Sigma\)-p.r.. Pero entonces el Lema 4.19 nos dice que \(\bar{P}\) es \(\Sigma\)-p.r.. El Lema 4.21 nos dice que \(\lambda xy\vec{x}\vec{\alpha}\left[\prod\limits_{t=x}^{t=y}\bar{P}(t,\vec{x},\vec{\alpha})\right]\) es \(\Sigma\)-p.r.. Ya que \[\begin{aligned} \lambda x\vec{x}\vec{\alpha}\left[(\forall t\in\bar{S})_{t\leq x}P(t,\vec{x},\vec{\alpha})\right] & =\lambda x\vec{x}\vec{\alpha}\left[\prod\limits_{t=0}^{t=x}\bar{P}(t,\vec{x},\vec{\alpha})\right]\\ & =\lambda xy\vec{x}\vec{\alpha}\left[\prod\limits_{t=x}^{t=y}\bar{P}(t,\vec{x},\vec{\alpha})\right]\circ\left[C_{0}^{1+n,m},p_{1}^{1+n,m},...,p_{1+n+m}^{1+n,m}\right] \end{aligned}\] tenemos que \(\lambda x\vec{x}\vec{\alpha}\left[(\forall t\in\bar{S})_{t\leq x}\;P(t,\vec{x},\vec{\alpha})\right]\) es \(\Sigma\)-p.r..
Ya que \[\lambda x\vec{x}\vec{\alpha}\left[(\exists t\in\bar{S})_{t\leq x}\;P(t,\vec{x},\vec{\alpha})\right]=\lnot\lambda x\vec{x}\vec{\alpha}\left[(\forall t\in\bar{S})_{t\leq x}\;\lnot P(t,\vec{x},\vec{\alpha})\right]\] tenemos que \(\lambda x\vec{x}\vec{\alpha}\left[(\exists t\in\bar{S})_{t\leq x}\;P(t,\vec{x},\vec{\alpha})\right]\) es \(\Sigma\)-p.r.
(b) Haremos solo el caso del cuantificador \(\forall\). Primero supongamos que \(\Sigma=\emptyset\). Ya que \(L,L_{1},...,L_{m}\) son no vacíos, deberá suceder que \(L=L_{1}=...=L_{m}=\{\varepsilon\}\). Ya que \(\bar{L}\subseteq L\), tenemos que \(\bar{L}=\emptyset\) o \(\bar{L}=\{\varepsilon\}\). Si \(\bar{L}=\emptyset\), entonces \[\begin{aligned} \lambda x\vec{x}\vec{\alpha}\left[(\forall\alpha\in\bar{L})_{\left\vert \alpha\right\vert \leq x}\;P(\vec{x},\vec{\alpha},\alpha)\right] & =\lambda x\vec{x}\vec{\alpha}\left[(\forall\alpha\in\emptyset)_{\left\vert \alpha\right\vert \leq x}\;P(\vec{x},\vec{\alpha},\alpha)\right]\\ & =C_{1}^{1+n,m}|_{\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}} \end{aligned}\] por lo cual es \(\Sigma\)-p.r. (por que?). Si \(\bar{L}=\{\varepsilon\}\), entonces \[\begin{aligned} \lambda x\vec{x}\vec{\alpha}\left[(\forall\alpha\in\bar{L})_{\left\vert \alpha\right\vert \leq x}\;P(\vec{x},\vec{\alpha},\alpha)\right] & =\lambda x\vec{x}\vec{\alpha}\left[(P(\vec{x},\vec{\alpha},\varepsilon)\right]\\ & =P\circ\left[p_{2}^{1+n,m},...,p_{1+n+m}^{1+n,m},C_{\varepsilon}^{1+n,m}\right] \end{aligned}\] por lo cual es \(\Sigma\)-p.r.
Ahora supongamos \(\Sigma\) es no vacío. Sea \(\leq\) un orden total sobre \(\Sigma.\) Sea \(k\) el cardinal de \(\Sigma\). Primero nótese que
adhocprefix(*)adhocsufix \(\left\vert \alpha\right\vert \leq x\) sii \(\#^{\leq}(\alpha)\leq\sum_{\iota=1}^{i=x}k^{i}\), cualesquiera sean \(x\in\omega\) y \(\alpha\in\Sigma^{\ast}\)
(queda como ejercicio probar (*). Sean \[\begin{aligned} \#^{\leq}(L) & =\{\#^{\leq}(\alpha):\alpha\in L\}\\ \#^{\leq}(\bar{L}) & =\{\#^{\leq}(\alpha):\alpha\in\bar{L}\} \end{aligned}\] Nótese que \[\begin{aligned} \chi_{\#^{\leq}(L)}^{\omega} & =\chi_{L}^{\Sigma^{\ast}}\circ\ast^{\leq}\\ \chi_{\#^{\leq}(\bar{L})}^{\omega} & =\chi_{\bar{L}}^{\Sigma^{\ast}}\circ\ast^{\leq} \end{aligned}\] por lo cual \(\#^{\leq}(L)\) y \(\#^{\leq}(\bar{L})\) son \(\Sigma\)-p.r.. Sea \(H=\lambda t\vec{x}\vec{\alpha}\left[P(\vec{x},\vec{\alpha},\ast^{\leq}(t))\right].\) Nótese que \[D_{H}=\#^{\leq}(L)\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\] y \(H\) es \(\Sigma\)-p.r.. O sea que por (a) tenemos que \[\lambda x\vec{x}\vec{\alpha}\left[(\forall t\in\#^{\leq}(\bar{L}))_{t\leq x}H(t,\vec{x},\vec{\alpha})\right]=\lambda x\vec{x}\vec{\alpha}\left[(\forall t\in\#^{\leq}(\bar{L}))_{t\leq x}P(\vec{x},\vec{\alpha},\ast^{\leq}(t))\right]\] es \(\Sigma\)-p.r.. Llamemos \(Q\) al predicado \(\lambda x\vec{x}\vec{\alpha}\left[(\forall t\in\#^{\leq}(\bar{L}))_{t\leq x}P(\vec{x},\vec{\alpha},\ast^{\leq}(t))\right]\). Tenemos que \[\begin{aligned} \lambda x\vec{x}\vec{\alpha}\left[(\forall\alpha\in\bar{L})_{\left\vert \alpha\right\vert \leq x}P(\vec{x},\vec{\alpha},\alpha)\right] & =\lambda x\vec{x}\vec{\alpha}\left[(\forall t\in\#^{\leq}(\bar{L}))_{t\leq\sum_{\iota=1}^{i=x}k^{i}}P(\vec{x},\vec{\alpha},\ast^{\leq}(t))\right]\text{ (por (*))}\\ & =Q\circ\left[\lambda x\vec{x}\vec{\alpha}\left[\sum\limits_{\iota=1}^{i=x}k^{i}\right],p_{1}^{1+n,m},...,p_{1+n+m}^{1+n,m}\right] \end{aligned}\] Pero \(\lambda x\vec{x}\vec{\alpha}\left[\sum\limits_{\iota=1}^{i=x}k^{i}\right]\) es \(\Sigma\)-p.r. (ejercicio), lo cual nos dice que \(\lambda x\vec{x}\vec{\alpha}\left[(\forall\alpha\in\bar{L})_{\left\vert \alpha\right\vert \leq x}\;P(\vec{x},\vec{\alpha},\alpha)\right]\) lo es
OBSERVACIÓN: La cuantificación no acotada no preserva la propiedad de ser \(\Sigma\)-p.r.. Como veremos mas adelante si elegimos bien al predicado \(\Sigma\)-p.r. \(P\), obtenemos que el predicado \(\lambda\vec{x}\vec{\alpha}\left[(\exists t\in\bar{S})\;P(t,\vec{x},\vec{\alpha})\right]\) no solo no es \(\Sigma\)-p.r. sino que tampoco es \(\Sigma\)-efectivamente computable (Teorema 4.15).
Algunos ejemplos en los cuales cuantificación acotada se aplica naturalmente son dados a continuación.
4.23. Sea \(\Sigma\) un alfabeto finito.
adhocprefix(a)adhocsufix El predicado \(\lambda xy\left[x\text{ divide }y\right]\) es \(\Sigma\)-p.r..
adhocprefix(b)adhocsufix El predicado \(\lambda x\left[x\text{ es primo}\right]\) es \(\Sigma\)-p.r..
adhocprefix(c)adhocsufix El predicado \(\lambda\alpha\beta\left[\alpha\text{\ }\mathrm{inicial}\ \beta\right]\) es \(\Sigma\)-p.r..
Proof. (a) Sea \(P=\lambda tx_{1}x_{2}\left[x_{2}=t.x_{1}\right]\). Es claro que \(P\) es \(\Sigma\)-p.r.. El lema anterior nos dice que \(\lambda xx_{1}x_{2}\left[(\exists t\in\omega)_{t\leq x}\;P(t,x_{1},x_{2})\right]\) es \(\Sigma\)-p.r.. Nótese que \(x_{1}\) divide \(x_{2}\) si y solo si hay un \(t\leq x_{2}\) tal que \(x_{2}=t.x_{1}\). Esto nos dice que \[\lambda x_{1}x_{2}\left[x_{1}\text{ divide }x_{2}\right]=\lambda x_{1}x_{2}\left[(\exists t\in\omega)_{t\leq x_{2}}\;P(t,x_{1},x_{2})\right]\] Pero \[\lambda x_{1}x_{2}\left[(\exists t\in\omega)_{t\leq x_{2}}\;P(t,x_{1},x_{2})\right]=\lambda xx_{1}x_{2}\left[(\exists t\in\omega)_{t\leq x}\;P(t,x_{1},x_{2})\right]\circ\left[p_{2}^{2,0},p_{1}^{2,0},p_{2}^{2,0}\right]\] por lo cual \(\lambda x_{1}x_{2}\left[x_{1}\text{ divide }x_{2}\right]\) es \(\Sigma\)-p.r.
(b) Ya que \[x\text{ es primo sii }x>1\wedge\left((\forall t\in\omega)_{t\leq x}\;t=1\vee t=x\vee\lnot(t\text{ divide }x)\right)\] podemos usar un argumento similar al de la prueba de (a).
(c) es dejado al lector.
La idea fundamental subyacente en las aplicaciones anteriores es que en muchos casos de predicados obtenidos por cuantificación a partir de otros predicados, la variable cuantificada tiene una cota natural en términos de las otras variables y entonces componiendo adecuadamente se lo puede presentar como un caso de cuantificación acotada
Tal como fue explicado anteriormente, para obtener la clase de las funciones \(\Sigma\)-recursivas debemos agregar un nuevo constructor a los ya definidos de composición y recursión primitiva, a saber el constructor de minimización. Tiene dos casos aunque solo usaremos el primero para la definición de función \(\Sigma\)-recursiva.
Sea \(\Sigma\) un alfabeto finito y sea \(P:D_{P}\subseteq\omega\times\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) un predicado. Dado \((\vec{x},\vec{\alpha})\in\omega^{n}\times\Sigma^{\ast m}\), cuando exista al menos un \(t\in\omega\) tal que \(P(t,\vec{x},\vec{\alpha})=1\), usaremos \(\min_{t}P(t,\vec{x},\vec{\alpha})\) para denotar al menor de tales \(t^{\prime}s\). Nótese que la expresión \(\min_{t}P(t,\vec{x},\vec{\alpha})\) esta definida solo para aquellas \((n+m)\)-uplas \((\vec{x},\vec{\alpha})\) para las cuales hay al menos un \(t\) tal que se da \(P(t,\vec{x},\vec{\alpha})=1\). Dicho de otra forma, la expresión \[\min_{t}P(t,\vec{x},\vec{\alpha})\] no estará definida en un \((\vec{x},\vec{\alpha})\in\omega^{n}\times\Sigma^{\ast m}\) cuando para cada \(t\in\omega\) se dé que \((t,\vec{x},\vec{\alpha})\) no pertenece a \(D_{P}\) o \(P(t,\vec{x},\vec{\alpha})=0\). Otro detalle importante a tener en cuenta es que la expresión \(\min_{t}P(t,\vec{x},\vec{\alpha})\) no depende de la variable \(t\). Por ejemplo, las expresiones \(\min_{t}P(t,\vec{x},\vec{\alpha})\) y \(\min_{i}P(i,\vec{x},\vec{\alpha})\) son equivalentes en el sentido que están definidas en las mismas \((n+m)\)-uplas y cuando están definidas asumen el mismo valor.
Definamos \[M(P)=\lambda\vec{x}\vec{\alpha}\left[\min\nolimits_{t}P(t,\vec{x},\vec{\alpha})\right]\] Nótese que \[\begin{aligned} D_{M(P)} & =\left\{ (\vec{x},\vec{\alpha})\in\omega^{n}\times\Sigma^{\ast m}:(\exists t\in\omega)\ P(t,\vec{x},\vec{\alpha})\right\} \\ M(P)(\vec{x},\vec{\alpha}) & =\min\nolimits_{t}P(t,\vec{x},\vec{\alpha})\text{, para cada }(\vec{x},\vec{\alpha})\in D_{M(P)} \end{aligned}\] Diremos que \(M(P)\) se obtiene por minimización de variable numérica a partir de \(P\). Nótese que \(M(P)\) esta definido sólo cuando \(P\) es un predicado cuyo dominio sea un conjunto \(\Sigma\)-mixto de tipo \((n,m)\), con \(n\in\mathbf{N}\).
Veamos algunos ejemplos:
adhocprefix(E1)adhocsufix Tomemos \(P=\lambda tx_{1}[t^{2}=x_{1}]\). Tenemos que: \[\begin{aligned} D_{M(P)} & =\left\{ x_{1}\in\omega:(\exists t\in\omega)\ P(t,x_{1})\right\} \\ & =\left\{ x_{1}\in\omega:(\exists t\in\omega)\ t^{2}=x_{1}\right\} \end{aligned}\] Es decir el dominio de \(M(P)\) es el conjunto de los cuadrados. Además para cada \(x_{1}\in D_{M(P)}\) tenemos que \[M(P)(x_{1})=\min\nolimits_{t}P(t,x_{1})=\min\nolimits_{t}(t^{2}=x_{1})\] por lo cual \(M(P)(x)=\sqrt{x}\), para cada \(x\in D_{M(P)}\).
adhocprefix(E2)adhocsufix Cuando \(n=m=0\), tenemos que \(P:D_{P}\subseteq\omega\rightarrow\omega\). O sea que \[M(P)=\lambda\left[\min\nolimits_{t}P(t)\right]\] Esto nos dice que \(D_{M(P)}\subseteq\{\lozenge\}\). Además \(D_{M(P)}=\{\lozenge\}\) si y solo si \(P(t)=1\), para algún \(t\in D_{P}\), y en tal caso \(M(P)(\lozenge)=\min\nolimits_{t}P(t)\).
adhocprefix(E3)adhocsufix Recordemos que dados \(x_{1},x_{2}\in\omega\), con \(x_{2}\) no nulo, el cociente de dividir \(x_{1}\) por \(x_{2}\) se define como el máximo elemento del conjunto \(\{t\in\omega:t.x_{2}\leq x_{1}\}\). Sea \[\begin{array}[t]{rll} Q:\omega\times\mathbf{N} & \rightarrow & \omega\\ (x_{1},x_{2}) & \rightarrow & \text{cociente de dividir }x_{1}\text{ por }x_{2} \end{array}\] Sea \(P=\lambda tx_{1}x_{2}\left[x_{1}<t.x_{2}\right]\). Notar que \[\begin{aligned} D_{M(P)} & =\{(x_{1},x_{2})\in\omega^{2}:(\exists t\in\omega)\;P(t,x_{1},x_{2})=1\}\\ & =\{(x_{1},x_{2}):(\exists t\in\omega)\;x_{1}<t.x_{2}\}\\ & =\omega\times\mathbf{N} \end{aligned}\] Además si \((x_{1},x_{2})\in\omega\times\mathbf{N}\), es fácil de probar que \[\min\nolimits_{t}\ x_{1}<t.x_{2}=Q(x_{1},x_{2})+1\] por lo que \(M(P)=Suc\circ Q\). Si quisiéramos encontrar un predicado \(P^{\prime}\) tal que \(M(P^{\prime})=Q\), entonces podemos tomar \(P^{\prime}=\lambda tx_{1}x_{2}\left[x_{1}<(t+1).x_{2}\right]\) y con un poco de concentración nos daremos cuenta que \(M(P^{\prime})=Q\). Por supuesto esto tiene una cuota de artificialidad ya que no es tan obvio que \[Q(x_{1},x_{2})=\mathrm{\ menor\ }t\in\omega\mathrm{\ tal\ que\ }x_{1}<(t+1).x_{2}\] Hay una forma mas intuitiva de hacerlo y es diseñando \(P^{\prime}\) con la consigna de que para cada \((x_{1},x_{2})\in D_{Q}\) se dé que \[Q(x_{1},x_{2})=\mathrm{\ unico\ }t\in\omega\mathrm{\ tal\ que\ }P^{\prime}(t,x_{1},x_{2})\] Es decir diseñamos \(P^{\prime}\) de manera que \[P^{\prime}(t,x_{1},x_{2})=1\text{ si y solo si }t=Q(x_{1},x_{2})\] Por ejemplo se puede tomar \(P^{\prime}=\lambda tx_{1}x_{2}\left[x_{1}\geq t.x_{2}\text{ y }x_{1}<(t+1).x_{2}\right]\) que dicho sea de paso es justo la definición de cociente dada en la escuela primaria. Dejamos al lector corroborar que \(M(P^{\prime})=Q\), para este último \(P^{\prime}\), pero nótese que lo único que queda por chequear es que \(M(P^{\prime})\text{ y }Q\) tienen el mismo dominio ya que las reglas de asignación obviamente producen lo mismo.
Tal como lo vimos recién muchas veces que queramos diseñar un predicado \(P\) tal que \(M(P)\) sea igual a una función dada \(f\), será mas fácil diseñar \(P\) de manera que cumpla \[f(\vec{x},\vec{\alpha})=\mathrm{\ unico\ }t\in\omega\mathrm{\ tal\ que\ }P(t,\vec{x},\vec{\alpha})\] cada vez que \((\vec{x},\vec{\alpha})\in D_{f}\). Es decir un predicado \(P\) que caracterice al valor que toma \(f\), es decir el cual cumpla \[P(t,\vec{x},\vec{\alpha})=1\text{ si y solo si }t=f(\vec{x},\vec{\alpha})\] Luego por supuesto deberemos prestar atención a que \(D_{M(P)}=D_{f}\), es decir deberemos también lograr que para cada \((\vec{x},\vec{\alpha})\in\omega^{n}\times\Sigma^{\ast m}\) se dé que \[(\vec{x},\vec{\alpha})\in D_{f}\text{ si y solo si }\exists t\in\omega\text{ }P(t,\vec{x},\vec{\alpha})\] Enunciamos esto en forma de regla.
adhocprefixREGLA U:adhocsufix Si tiene una función \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) y busca un predicado \(P\) tal que \(f=M(P)\), intente diseñar \(P\) de manera que para cada \((\vec{x},\vec{\alpha})\in D_{f}\) se dé que \[f(\vec{x},\vec{\alpha})=\mathrm{\ unico\ }t\in\omega\mathrm{\ tal\ que\ }P(t,\vec{x},\vec{\alpha})\] Luego chequee que además para cada \((\vec{x},\vec{\alpha})\in\omega^{n}\times\Sigma^{\ast m}\) se dé que \[(\vec{x},\vec{\alpha})\in D_{f}\text{ si y solo si }\exists t\in\omega\text{ }P(t,\vec{x},\vec{\alpha})\]
El siguiente lema nos muestra que en algunos casos el constructor de minimización preserva la computabilidad efectiva.
4.24. Si \(P:D_{P}\subseteq\omega\times\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) es un predicado \(\Sigma\)-efectivamente computable y \(D_{P}\) es \(\Sigma\)-efectivamente computable, entonces la función \(M(P)\) es \(\Sigma\)-efectivamente computable.
Proof. Sea \(\mathbb{P}_{P}\) un procedimiento efectivo que compute a \(P\) y sea \(\mathbb{P}_{D_{P}}\) un procedimiento efectivo que compute a \(\chi_{D_{P}}^{\omega\times\omega^{n}\times\Sigma^{\ast m}}\). Nótese que el siguiente procedimiento efectivo (con dato de entrada \((\vec{x},\vec{\alpha})\in\omega^{n}\times\Sigma^{\ast m}\)) computa la función \(M(P)\).
Etapa 1: Hacer \(T=0\) e ir a Etapa 2
Etapa 2: Correr \(\mathbb{P}_{D_{P}}\) con dato de entrada \((T,\vec{x},\vec{\alpha})\) y guardar la salida en \(A\). Ir a Etapa 3.
Etapa 3: Si \(A=1\) ir a Etapa 4, caso contrario ir a etapa 6.
Etapa 4: Correr \(\mathbb{P}_{P}\) con dato de entrada \((T,\vec{x},\vec{\alpha})\) y guardar la salida en \(B\). Ir a Etapa 5.
Etapa 5: Si \(B=1\), dar como salida \(T\) y terminar. Caso contrario ir a Etapa 6.
Etapa 6: Hacer \(T=T+1\) e ir a Etapa 2.
Como corolario obtenemos que la minimización de predicados \(\Sigma\)-totales preserva la computabilidad efectiva:
4.3. Si \(P:\omega\times\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) es un predicado \(\Sigma\)-efectivamente computable, entonces la función \(M(P)\) es \(\Sigma\)-efectivamente computable.
Lamentablemente si quitamos la hipótesis en el lema anterior de que \(D_{P}\) sea \(\Sigma\)-efectivamente computable, el lema resulta falso. Mas adelante en la Proposición 4.18 veremos un contraejemplo basado en la Tesis de Church (esta tesis dice básicamente que el modelo Godeliano de la computabilidad efectiva es correcto). Por el momento el lector puede ejercitar su comprensión del tema convenciéndose de que aun teniendo un procedimiento efectivo que compute a un predicado \(P:D_{P}\subseteq\omega\times\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\), no es claro como construir un procedimiento efectivo que compute a \(M(P)\).
Con este nuevo constructor de funciones estamos en condiciones de definir la clase de las funciones \(\Sigma\)-recursivas. Definamos los conjuntos \(\mathrm{R}_{0}^{\Sigma}\subseteq\mathrm{R}_{1}^{\Sigma}\subseteq\mathrm{R}_{2}^{\Sigma}\subseteq...\subseteq\mathrm{R}^{\Sigma}\) de la siguiente manera
\[\begin{array}{lll} \mathrm{R}_{0}^{\Sigma} & = & \mathrm{PR}_{0}^{\Sigma}\\ \mathrm{R}_{k+1}^{\Sigma} & = & \mathrm{R}_{k}^{\Sigma}\cup\left\{ f\circ[f_{1},...,f_{r}]:f,f_{1},...,f_{r}\in\mathrm{R}_{k}^{\Sigma}\text{, }r\geq1\right\} \cup\\ & & \;\;\;\;\;\;\;\;\left\{ R(f,\mathcal{G}):R(f,\mathcal{G})\text{ está definida y }\{f\}\cup\{\mathcal{G}_{a}:a\in\Sigma\}\subseteq\mathrm{R}_{k}^{\Sigma}\right\} \cup\\ & & \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\left\{ R(f,g):R(f,g)\text{ está definida y }f,g\in\mathrm{R}_{k}^{\Sigma}\right\} \cup\\ & & \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\left\{ M(P):M(P)\text{ está definida, }P\text{ es }\Sigma\text{-total y }P\in\mathrm{R}_{k}^{\Sigma}\right\} \\ \mathrm{R}^{\Sigma} & = & \bigcup_{k\geq0}\mathrm{R}_{k}^{\Sigma} \end{array}\] Una función \(f\) es llamada \(\Sigma\)-recursiva si pertenece a \(\mathrm{R}^{\Sigma}\). Cabe destacar que aunque \(M(P)\) fue definido para predicados no necesariamente \(\Sigma\)-totales, en la definición de los conjuntos \(\mathrm{R}_{k}^{\Sigma}\), nos restringimos al caso en que \(P\) es \(\Sigma\)-total. Obviamente esto lo hacemos ya que como se explico antes el constructor de minimización no siempre preserva la computabilidad efectiva.
Nótese que \(\mathrm{PR}_{k}^{\Sigma}\subseteq\mathrm{R}_{k}^{\Sigma}\), para cada \(k\in\omega\), por lo cual \(\mathrm{PR}^{\Sigma}\subseteq\mathrm{R}^{\Sigma}\). Por supuesto el modelo de Godel seria incorrecto si no fuera cierto el siguiente resultado.
4.5 (Leibniz vence a Godel). Si \(F\in\mathrm{R}^{\Sigma}\), entonces \(F\) es \(\Sigma\)-efectivamente computable.
Proof. Lo probaremos usando la Regla de Inducción desde 0. Para cada \(k\in\omega\) sea \(\mathrm{Enu}_{k}\) el siguiente enunciado:
adhocprefix\(\mathrm{Enu}_{k}\):adhocsufix Si \(F\in\mathrm{R}_{k}^{\Sigma}\), entonces \(F\) es \(\Sigma\)-efectivamente computable.
Hagamos entonces lo que nos encomienda la Regla de Inducción desde \(0\).
Prueba de que \(\mathrm{Enu}_{0}\) es verdadero. Fácil.
Prueba de que si \(\mathrm{Enu}_{k}\) es verdadero entonces \(\mathrm{Enu}_{k+1}\) lo es. Supongamos entonces que \(F\in\mathrm{R}_{k+1}^{\Sigma}\) y que vale \(\mathrm{Enu}_{k}\). Veamos que entonces \(F\) es \(\Sigma\)-efectivamente computable. Ya que vale \(\mathrm{Enu}_{k}\), podemos suponer que \(F\in\mathrm{R}_{k+1}^{\Sigma}-\mathrm{R}_{k}^{\Sigma}\). Hay varios casos:
Caso \(F=f\circ[f_{1},...,f_{r}]\text{, con }f,f_{1},...,f_{r}\in\mathrm{R}_{k}^{\Sigma}\text{, }r\geq1\). Ya que \(\mathrm{Enu}_{k}\) es verdadero, las funciones \(f,f_{1},...,f_{r}\) son \(\Sigma\)-efectivamente computables. Entonces por Lema 4.2 tenemos que \(F\) es \(\Sigma\)-efectivamente computable.
Caso \(F=M(P)\), con \(P:\omega\times\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) un predicado perteneciente a \(\mathrm{R}_{k}^{\Sigma}\). Ya que \(\mathrm{Enu}_{k}\) es verdadero, el predicado \(P\) es \(\Sigma\)-efectivamente computable. Ahora podemos aplicar el corolario anterior y concluir que \(F\) es \(\Sigma\)-efectivamente computable.
Los distintos casos en los que \(F\) se obtiene por recursión primitiva a partir de funciones de \(\mathrm{R}_{k}^{\Sigma}\) se siguen de \(\mathrm{Enu}_{k}\) y los respectivos Lemas 4.3, 4.4, 4.5 y 4.6.
Daremos sin prueba el siguiente conceptualmente importante resultado.
4.6. Sea \(\Sigma\) un alfabeto finito. Entonces no toda función \(\Sigma\)-recursiva es \(\Sigma\)-p.r.
Este resultado no es fácil de probar. Mas adelante (Proposición 4.15) veremos ejemplos naturales de funciones \(\Sigma\)-recursivas que no son \(\Sigma\)-p.r.. Otro ejemplo natural es la famosa función de Ackermann.
Aunque no siempre que \(P\in\mathrm{R}^{\Sigma}\), tendremos que \(M(P)\in\mathrm{R}^{\Sigma}\) (Proposición 4.18), el siguiente lema nos garantiza que este es el caso cuando \(P\in\mathrm{PR}^{\Sigma}\) y además da condiciones para que \(M(P)\) sea \(\Sigma\)-p.r..
4.25 (Lema de minimización acotada). Sean \(n,m\geq0\). Sea \(P:D_{P}\subseteq\omega\times\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) un predicado \(\Sigma\)-p.r.. Entonces
adhocprefix(a)adhocsufix \(M(P)\) es \(\Sigma\)-recursiva.
adhocprefix(b)adhocsufix Si hay una función \(\Sigma\)-p.r. \(f:\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) tal que \[M(P)(\vec{x},\vec{\alpha})=\min\nolimits_{t}P(t,\vec{x},\vec{\alpha})\leq f(\vec{x},\vec{\alpha})\text{, para cada }(\vec{x},\vec{\alpha})\in D_{M(P)}\text{,}\] entonces \(M(P)\) es \(\Sigma\)-p.r..
Proof. (a) Sea \(\bar{P}=P\cup C_{0}^{n+1,m}|_{(\omega^{n+1}\times\Sigma^{\ast m})-D_{P}}\). Note que \(\bar{P}\) es \(\Sigma\)-p.r. (por que?). Veremos a continuación que \(M(P)=M(\bar{P})\). Nótese que \[\{t\in\omega:P(t,\vec{x},\vec{\alpha})=1\}=\{t\in\omega:\bar{P}(t,\vec{x},\vec{\alpha})=1\}\] Esto claramente dice que \(D_{M(P)}=D_{M(\bar{P})}\) y que \(M(P)(\vec{x},\vec{\alpha})=M(\bar{P})(\vec{x},\vec{\alpha})\), para cada \((\vec{x},\vec{\alpha})\in D_{M(P)}\)., por lo cual \(M(P)=M(\bar{P})\).
Veremos entonces que \(M(\bar{P})\) es \(\Sigma\)-recursiva. Sea \(k\) tal que \(\bar{P}\in\mathrm{PR}_{k}^{\Sigma}\). Ya que \(\bar{P}\) es \(\Sigma\)-total y \(\bar{P}\in\mathrm{PR}_{k}^{\Sigma}\subseteq\mathrm{R}_{k}^{\Sigma}\), tenemos que \(M(\bar{P})\in\mathrm{R}_{k+1}^{\Sigma}\) y por lo tanto \(M(\bar{P})\in\mathrm{R}^{\Sigma}\).
(b) Ya que \(M(P)=M(\bar{P})\), basta con probar que \(M(\bar{P})\) es \(\Sigma\)-p.r. Primero veremos que \(D_{M(\bar{P})}\) es un conjunto \(\Sigma\)-p.r.. Nótese que \[\chi_{D_{M(\bar{P})}}^{\omega^{n}\times\Sigma^{\ast m}}=\lambda\vec{x}\vec{\alpha}\left[(\exists t\in\omega)_{t\leq f(\vec{x},\vec{\alpha})}\;\bar{P}(t,\vec{x},\vec{\alpha})\right]\] lo cual nos dice que \[\chi_{D_{M(\bar{P})}}^{\omega^{n}\times\Sigma^{\ast m}}=\lambda x\vec{x}\vec{\alpha}\left[(\exists t\in\omega)_{t\leq x}\;\bar{P}(t,\vec{x},\vec{\alpha})\right]\circ\left[f,p_{1}^{n,m},...,p_{n+m}^{n,m}\right]\] Pero el Lema 4.22 nos dice que \(\lambda x\vec{x}\vec{\alpha}\left[(\exists t\in\omega)_{t\leq x}\;\bar{P}(t,\vec{x},\vec{\alpha})\right]\) es \(\Sigma\)-p.r. por lo cual tenemos que \(\chi_{D_{M(\bar{P})}}^{\omega^{n}\times\Sigma^{\ast m}}\) lo es. Sea \[P_{1}=\lambda t\vec{x}\vec{\alpha}\left[\bar{P}(t,\vec{x},\vec{\alpha})\wedge(\forall j\in\omega)_{j\leq t}\;(j=t\vee\lnot\bar{P}(j,\vec{x},\vec{\alpha}))\right]\] Note que \(P_{1}\) es \(\Sigma\)-total. Dejamos al lector usando lemas anteriores probar que \(P_{1}\) es \(\Sigma\)-p.r. Además nótese que para \((\vec{x},\vec{\alpha})\in\omega^{n}\times\Sigma^{\ast m}\) se tiene que \[P_{1}(t,\vec{x},\vec{\alpha})=1\text{ si y solo si }(\vec{x},\vec{\alpha})\in D_{M(\bar{P})}\text{ y }t=M(\bar{P})(\vec{x},\vec{\alpha})\] Esto nos dice que \[M(\bar{P})=\left(\lambda\vec{x}\vec{\alpha}\left[\prod_{t=0}^{f(\vec{x},\vec{\alpha})}t^{P_{1}(t,\vec{x},\vec{\alpha})}\right]\right)|_{D_{M(\bar{P})}}\] por lo cual para probar que \(M(\bar{P})\) es \(\Sigma\)-p.r. solo nos resta probar que \[F=\lambda\vec{x}\vec{\alpha}\left[\prod_{t=0}^{f(\vec{x},\vec{\alpha})}t^{P_{1}(t,\vec{x},\vec{\alpha})}\right]\] lo es. Pero \[F=\lambda xy\vec{x}\vec{\alpha}\left[\prod_{t=x}^{y}t^{P_{1}(t,\vec{x},\vec{\alpha})}\right]\circ\left[C_{0}^{n,m},f,p_{1}^{n,m},...,p_{n+m}^{n,m}\right]\] y por lo tanto el Lema 4.21 nos dice que \(F\) es \(\Sigma\)-p.r..
OBSERVACIÓN: No siempre que \(P\) sea \(\Sigma\)-p.r. tendremos que \(M(P)\) lo será. Nótese que si \(M(P)\) fuera \(\Sigma\)-p.r., cada ves que \(P\) lo sea, entonces tendríamos que \(\mathrm{PR}^{\Sigma}=\mathrm{R}^{\Sigma}\) (justifique) lo cual contradiría la Proposición 4.6. Mas adelante (Corolario 4.5) veremos un ejemplo de un predicado \(P\) el cual es \(\Sigma\)-p.r. pero \(M(P)\) no es \(\Sigma\)-p.r.
El lema de minimización recién probado es muy útil como veremos en los siguientes dos lemas.
4.26. Sea \(\Sigma\) un alfabeto finito. Las siguientes funciones son \(\Sigma\)-p.r.:
adhocprefix(a)adhocsufix \(\begin{array}[t]{rll} Q:\omega\times\mathbf{N} & \rightarrow & \omega\\ (x,y) & \rightarrow & \text{cociente de la division de }x\text{ por }y \end{array}\)
adhocprefix(b)adhocsufix \(\begin{array}[t]{rll} R:\omega\times\mathbf{N} & \rightarrow & \omega\\ (x,y) & \rightarrow & \text{resto de la division de }x\text{ por }y \end{array}\)
adhocprefix(c)adhocsufix \(\begin{array}[t]{rll} pr:\mathbf{N} & \rightarrow & \omega\\ n & \rightarrow & n\text{-esimo número primo} \end{array}\)
Proof. (a) Ya vimos anteriormente que \(Q=M(P^{\prime})\), donde \[P^{\prime}=\lambda tx_{1}x_{2}\left[x_{1}\geq t.x_{2}\text{ y }x_{1}<(t+1).x_{2}\right]\] Ya que \(P^{\prime}\) es \(\Sigma\)-p.r. y \[Q(x_{1},x_{2})\leq p_{1}^{2,0}(x_{1},x_{2}),\text{ para cada }(x_{1},x_{2})\in\omega\times\mathbf{N}\] (b) del Lema 4.25 implica que \(Q\in\mathrm{PR}^{\Sigma}\).
(b) Nótese que \[R=\lambda xy\left[x\dot{-}Q(x,y).y\right]\] y por lo tanto \(R\in\mathrm{PR}^{\Sigma}\).
(c) Para ver que \(pr\) es \(\Sigma\)-p.r., veremos que la extensión \(h:\omega\rightarrow\omega\), dada por \(h(0)=0\) y \(h(n)=pr(n)\), \(n\geq1\), es \(\Sigma\)-p.r.. Luego \(pr=h|_{\mathbf{N}}\) resultara \(\Sigma\)-p.r. por ser la restricción de una función \(\Sigma\)-p.r. a un conjunto \(\Sigma\)-p.r.. Primero note que \[\begin{aligned} h(0) & =0\\ h(t+1) & =\min\nolimits_{i}\left(i\text{ es primo}\wedge i>h(t)\right) \end{aligned}\] O sea que \(h=R\left(C_{0}^{0,0},g\right)\), donde \[\begin{array}[t]{rll} g:\omega\times\omega & \rightarrow & \omega\\ (A,t) & \rightarrow & \min\nolimits_{i}\left(i\text{ es primo}\wedge i>A\right) \end{array}\] Es decir que solo nos resta ver que \(g\) es \(\Sigma\)-p.r.. Pero nótese que \(g=M(P)\), donde \(P=\lambda iAt\left[i\text{ es primo}\wedge i>A\right]\). Claramente \(P\) es \(\Sigma\)-p.r. por lo cual para poder aplicar (b) del lema anterior debemos encontrar una función \(f:\omega\times\omega\rightarrow\omega\) tal que \[M(P)(A,t)\leq f(A,t)\text{, para cada }(A,t)\in\omega^{2}\] Es decir \(f\) deberá cumplir \[\min\nolimits_{i}\left(i\text{ es primo}\wedge i>A\right)\leq f(A,t)\text{, para cada }(A,t)\in\omega^{2}\] Definamos \(f=\lambda At[A!+1]\). Debemos probar entonces que \[\min\nolimits_{i}\left(i\text{ es primo}\wedge i>A\right)\leq A!+1\text{, para cada }A\in\omega\] Sea \(p\) un primo tal que \(p\) divide a \(A!+1\). Es fácil ver que entonces \(p>A\) ya que de lo contrario \(p\) dividiría a \(A!\) lo cual nos diría que \(p\) divide a \(1=A!+1-A!\), lo cual es absurdo. Pero esto claramente nos dice que \[\min\nolimits_{i}\left(i\text{ es primo}\wedge i>A\right)\leq p\leq A!+1\] O sea que (b) del Lema 4.25 implica que \(g=M(P)\) es \(\Sigma\)-p.r.
4.27. Las funciones \(\lambda xi\left[(x)_{i}\right]\) y \(\lambda x\left[Lt(x)\right]\) son \(\Sigma\)-p.r.
Proof. Note que \(D_{\lambda xi\left[(x)_{i}\right]}=\mathbf{N}\times\mathbf{N}\). Sea \[P=\lambda txi\left[\lnot(pr(i)^{t+1}\ \text{divide }x)\right]\] Note que \(P\) es \(\Sigma\)-p.r. y que \(D_{P}=\omega\times\omega\times\mathbf{N}\). Dejamos al lector la prueba de que \(\lambda xi\left[(x)_{i}\right]=M(P)\). Ya que \((x)_{i}\leq x\), para todo \((x,i)\in\mathbf{N}\times\mathbf{N}\), (b) del Lema 4.25 implica que \(\lambda xi\left[(x)_{i}\right]\) es \(\Sigma\)-p.r..
Veamos que \(\lambda x\left[Lt(x)\right]\) es \(\Sigma\)-p.r.. Sea \[Q=\lambda tx\left[(\forall i\in\mathbf{N})_{i\leq x}\;(i\leq t\vee(x)_{i}=0)\right]\] Nótese que \(D_{Q}=\omega\times\mathbf{N}\) y que además por el Lema 4.22 tenemos que \(Q\) es \(\Sigma\)-p.r. (dejamos al lector explicar como se aplica tal lema en este caso). Además nótese que \(\lambda x\left[Lt(x)\right]=M(Q)\) y que \[Lt(x)\leq x,\text{para todo }x\in\mathbf{N}\] lo cual por (b) del Lema 4.25 nos dice que \(\lambda x\left[Lt(x)\right]\) es \(\Sigma\)-p.r..
Para \(x_{1},...,x_{n}\in\omega\), con \(n\geq1\), escribiremos \(\left\langle x_{1},...,x_{n}\right\rangle\) en lugar de \(\left\langle x_{1},...,x_{n},0,...\right\rangle\).
4.28. Sea \(n\geq1\). La función \(\lambda x_{1}...x_{n}\left[\left\langle x_{1},...,x_{n}\right\rangle \right]\) es \(\Sigma\)-p.r.
Proof. Sea \(f_{n}=\lambda x_{1}...x_{n}\left[\left\langle x_{1},...,x_{n}\right\rangle \right]\). Claramente \(f_{1}\) es \(\Sigma\)-p.r.. Además note que para cada \(n\geq1\), tenemos \[f_{n+1}=\lambda x_{1}...x_{n+1}\left[\left(f_{n}(x_{1},...,x_{n})pr(n+1)^{x_{n+1}}\right)\right]\text{.}\] O sea que podemos aplicar un argumento inductivo.
Supongamos que \(\Sigma\neq\emptyset\). Sea \(\leq\) un orden total sobre \(\Sigma\). Recordemos que \(\leq\) puede ser naturalmente extendido a un orden total sobre \(\Sigma^{\ast}\). Sea \(P:D_{P}\subseteq\omega^{n}\times\Sigma^{\ast m}\times\Sigma^{\ast}\rightarrow\omega\) un predicado. Cuando \((\vec{x},\vec{\alpha})\in\omega^{n}\times\Sigma^{\ast m}\) es tal que existe al menos un \(\alpha\in\Sigma^{\ast}\) tal que \(P(\vec{x},\vec{\alpha},\alpha)=1\), usaremos \(\min_{\alpha}^{\leq}P(\vec{x},\vec{\alpha},\alpha)\) para denotar al menor \(\alpha\in\Sigma^{\ast}\) tal que \(P(\vec{x},\vec{\alpha},\alpha)=1\). Nótese que la expresión \(\min_{\alpha}^{\leq}P(\vec{x},\vec{\alpha},\alpha)\) esta definida solo para aquellas \((n+m)\)-uplas \((\vec{x},\vec{\alpha})\) para las cuales hay al menos un \(\alpha\) tal que se da \(P(\vec{x},\vec{\alpha},\alpha)=1\). Dicho de otra forma, \(\min_{\alpha}^{\leq}P(\vec{x},\vec{\alpha},\alpha)\) no estará definida cuando para cada \(\alpha\in\Sigma^{\ast}\) se dé que \((\vec{x},\vec{\alpha},\alpha)\) no pertenece a \(D_{P}\) o \(P(\vec{x},\vec{\alpha},\alpha)=0\). Otro detalle importante a tener en cuenta es que la expresión \(\min_{\alpha}^{\leq}P(\vec{x},\vec{\alpha},\alpha)\) no depende de la variable \(\alpha\). Por ejemplo, las expresiones \(\min_{\alpha}^{\leq}P(\vec{x},\vec{\alpha},\alpha)\) y \(\min_{\beta}^{\leq}P(\vec{x},\vec{\alpha},\beta)\) son equivalentes en el sentido que están definidas en las mismas \((n+m)\)-uplas y cuando están definidas asumen el mismo valor.
Definamos \[\begin{array}{c} M^{\leq}(P)=\lambda\vec{x}\vec{\alpha}\left[\min_{\alpha}^{\leq}P(\vec{x},\vec{\alpha},\alpha)\right]\end{array}\] Nótese que \[\begin{aligned} D_{M^{\leq}(P)} & =\left\{ (\vec{x},\vec{\alpha})\in\omega^{n}\times\Sigma^{\ast m}:(\exists\alpha\in\Sigma^{\ast})\ P(\vec{x},\vec{\alpha},\alpha)\right\} \\ M^{\leq}(P)(\vec{x},\vec{\alpha}) & =\min\nolimits_{\alpha}^{\leq}P(\vec{x},\vec{\alpha},\alpha)\text{, para cada }(\vec{x},\vec{\alpha})\in D_{M^{\leq}(P)} \end{aligned}\] Diremos que \(M^{\leq}(P)\) es obtenida por minimización de variable alfabética a partir de \(P\).
Algunos ejemplos:
adhocprefix(E1)adhocsufix Sea \(\Sigma=\{@,a,b,c,d,e\}\) y sea \(\leq\) un orden total sobre \(\Sigma\). Sea \(Dir=\{\alpha_{1}\in\Sigma^{\ast}:\left\vert \alpha_{1}\right\vert _{@}=1\}\) y definamos \(U:Dir\rightarrow\Sigma^{\ast}\) de la siguiente manera \[U(\alpha_{1})=\text{unico }\alpha\text{ tal que }\alpha@\text{ es tramo inicial de }\alpha_{1}\] Sea \[P=\lambda\alpha_{1}\alpha[\alpha_{1}\in Dir\text{ y }\alpha@\text{ es tramo inicial de }\alpha_{1}]\] Tenemos que \[\begin{aligned} D_{M^{\leq}(P)} & =\left\{ \alpha_{1}\in\Sigma^{\ast}:(\exists\alpha\in\Sigma^{\ast})\ P(\alpha_{1},\alpha)\right\} \\ & =\left\{ \alpha_{1}\in\Sigma^{\ast}:\alpha_{1}\in Dir\text{ y }(\exists\alpha\in\Sigma^{\ast})\ \alpha@\text{ es tramo inicial de }\alpha_{1}\right\} \\ & =Dir \end{aligned}\] y además es claro que \(M^{\leq}(P)(\alpha_{1})=U(\alpha_{1})\), para cada \(\alpha_{1}\in Dir\), por lo cual \(M^{\leq}(P)=U\). Intente explicar por que se utilizaron los nombres \(Dir\) y \(U\).
adhocprefix(E2)adhocsufix Cuando \(n=m=0\), tenemos que \(P:D_{P}\subseteq\Sigma^{\ast}\rightarrow\omega\). O sea que \[M^{\leq}(P)=\lambda[\min\nolimits_{\alpha}^{\leq}P(\alpha)]\] Esto nos dice que \(D_{M^{\leq}(P)}\subseteq\{\lozenge\}\). Además \(D_{M^{\leq}(P)}=\{\lozenge\}\) si y solo si \(P(\alpha)=1\), para algún \(\alpha\in D_{P}\), y en tal caso \(M^{\leq}(P)(\lozenge)=\min\nolimits_{\alpha}^{\leq}P(\alpha)\).
Como puede notarse para el caso alfabético también tenemos:
adhocprefixREGLA U:adhocsufix Si tiene una función \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\Sigma^{\ast}\) y busca un predicado \(P\) tal que \(f=M^{\leq}(P)\), intente diseñar \(P\) de manera que para cada \((\vec{x},\vec{\alpha})\in D_{f}\) se dé que \[f(\vec{x},\vec{\alpha})=\mathrm{\ unico\ }\alpha\in\Sigma^{\ast}\mathrm{\ tal\ que\ }P(\vec{x},\vec{\alpha},\alpha)\] Luego chequee que además para cada \((\vec{x},\vec{\alpha})\in\omega^{n}\times\Sigma^{\ast m}\) se dé que \[(\vec{x},\vec{\alpha})\in D_{f}\text{ si y solo si }\exists\alpha\in\Sigma^{\ast}\text{ }P(\vec{x},\vec{\alpha},\alpha)\]
4.29 (Lema de minimización acotada de variable alfabética). Supongamos que \(\Sigma\neq\emptyset\). Sea \(\leq\) un orden total sobre \(\Sigma\), sean \(n,m\geq0\) y sea \(P:D_{P}\subseteq\omega^{n}\times\Sigma^{\ast m}\times\Sigma^{\ast}\rightarrow\omega\) un predicado \(\Sigma\)-p.r.. Entonces
adhocprefix(a)adhocsufix \(M^{\leq}(P)\) es \(\Sigma\)-recursiva.
adhocprefix(b)adhocsufix Si existe una función \(\Sigma\)-p.r. \(f:\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) tal que \[\left\vert M^{\leq}(P)(\vec{x},\vec{\alpha})\right\vert =\left\vert \min\nolimits_{\alpha}^{\leq}P(\vec{x},\vec{\alpha},\alpha)\right\vert \leq f(\vec{x},\vec{\alpha})\text{, para cada }(\vec{x},\vec{\alpha})\in D_{M^{\leq}(P)}\text{,}\] entonces \(M^{\leq}(P)\) es \(\Sigma\)-p.r..
Proof. Sea \(Q=P\circ\left[p_{2}^{1+n,m},...,p_{1+n+m}^{1+n,m},\ast^{\leq}\circ p_{1}^{1+n,m}\right]\). Note que \[M^{\leq}(P)=\ast^{\leq}\circ M(Q)\] lo cual por (a) del Lema 4.25 implica que \(M^{\leq}(P)\) es \(\Sigma\)-recursiva.
Sea \(k\) el cardinal de \(\Sigma\). Ya que \[\left\vert \ast^{\leq}(M(Q)(\vec{x},\vec{\alpha}))\right\vert =\left\vert M^{\leq}(P)(\vec{x},\vec{\alpha})\right\vert \leq f(\vec{x},\vec{\alpha})\text{,}\] para todo \((\vec{x},\vec{\alpha})\in D_{M^{\leq}(P)}=D_{M(Q)}\), tenemos que \[M(Q)(\vec{x},\vec{\alpha})\leq\sum_{\iota=1}^{i=f(\vec{x},\vec{\alpha})}k^{i}\text{, para cada }(\vec{x},\vec{\alpha})\in D_{M(Q)}\text{.}\] O sea que por (b) del Lema 4.25, \(M(Q)\) es \(\Sigma\)-p.r. y por lo tanto \(M^{\leq}(P)\) lo es.
En el ejemplo de recién vimos que \(U=M(P)\), con \(P=\lambda\alpha_{1}\alpha[\alpha@\) es tramo inicial de \(\alpha_{1}]\) por lo cual, dado que \(P\) es \(\Sigma\)-p.r. y ademas \[\left\vert U(\alpha_{1})\right\vert \leq\left\vert \alpha_{1}\right\vert \text{, para cada }\alpha_{1}\in Dir\] el lema anterior nos dice que \(U\) es \(\Sigma\)-p.r.
Ya que la noción de función \(\Sigma\)-recursiva es el modelo matemático Godeliano del concepto de función \(\Sigma\)-efectivamente computable, nos podríamos preguntar entonces cual es el modelo matemático Godeliano del concepto de conjunto \(\Sigma\)-efectivamente enumerable. Si prestamos atención a la definición de conjunto \(\Sigma\)-efectivamente enumerable, notaremos que depende de la existencia de ciertas funciones \(\Sigma\)-efectivamente computables por lo cual la siguiente definición cae de maduro:
Diremos que un conjunto \(S\subseteq\omega^{n}\times\Sigma^{\ast m}\) será llamado \(\Sigma\)-recursivamente enumerable cuando sea vacío o haya una función \(F:\omega\rightarrow\omega^{n}\times\Sigma^{\ast m}\) tal que \(I_{F}=S\) y \(F_{(i)}\) sea \(\Sigma\)-recursiva, para cada \(i\in\{1,...,n+m\}\).
Debería entonces quedar claro que si el concepto de función \(\Sigma\)-recursiva modeliza correctamente al concepto de función \(\Sigma\)-efectivamente computable, entonces el concepto de conjunto \(\Sigma\)-recursivamente enumerable recién definido modeliza correctamente al concepto de conjunto \(\Sigma\)-efectivamente enumerable. Sin embargo para probar algunos de los resultados básicos acerca de los conjuntos \(\Sigma\)-recursivamente enumerables, deberemos esperar a tener probada la equivalencia del paradigma Godeliano con el imperativo.
La versión Godeliana del concepto de conjunto \(\Sigma\)-efectivamente computable es fácil de dar: un conjunto \(S\subseteq\omega^{n}\times\Sigma^{\ast m}\) será llamado \(\Sigma\)-recursivo cuando la función \(\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}\) sea \(\Sigma\)-recursiva. Todo conjunto \(\Sigma\)-recursivo es \(\Sigma\)-recursivamente enumerable pero esto lo probaremos mas adelante junto con otros resultados básicos sobre conjuntos \(\Sigma\)-r.e., los cuales se prueban usando el paradigma imperativo. Mas adelante daremos un ejemplo natural de un conjunto que es \(\Sigma\)-r.e. pero el cual no es \(\Sigma\)-recursivo.
Muchos resultados ya probados para el caso primitivo recursivo pueden ser probados usando básicamente las mismas pruebas e ideas para el caso recursivo. Por ejemplo las pruebas de los siguientes cuatro lemas son idénticas a las del caso primitivo recursivo
4.30. Si \(P:S\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) y \(Q:S\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) son predicados \(\Sigma\)-r., entonces \((P\vee Q)\), \((P\wedge Q)\) y \(\lnot P\) lo son también.
4.31. Si \(S_{1},S_{2}\subseteq\omega^{n}\times\Sigma^{\ast m}\) son \(\Sigma\)-r., entonces \(S_{1}\cup S_{2}\), \(S_{1}\cap S_{2}\) y \(S_{1}-S_{2}\) lo son.
4.32. Supongamos \(S_{1},...,S_{n}\subseteq\omega\), \(L_{1},...,L_{m}\subseteq\Sigma^{\ast}\) son conjuntos no vacíos. Entonces \(S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\) es \(\Sigma\)-r. sii \(S_{1},...,S_{n},L_{1},...,L_{m}\) son \(\Sigma\)-r.
4.33. Si \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow O\) es \(\Sigma\)-r. y \(S\subseteq D_{f}\) es \(\Sigma\)-r., entonces \(f|_{S}\) es \(\Sigma\)-r
También se puede probar una versión del lema de división por casos para funciones \(\Sigma\)-recursivas con dominio \(\Sigma\)-recursivo, la cual generaliza el caso \(\Sigma\)-p.r.. La prueba es la misma que la del caso primitivo recursivo aunque al lema previo de existencia de extensiones lo probaremos en forma mas directa que para el caso primitivo recursivo. A saber:
4.34. Si \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow O\) es \(\Sigma\)-r. y \(D_{f}\) es \(\Sigma\)-r., entonces existe una función \(\Sigma\)-r. \(\bar{f}:\omega^{n}\times\Sigma^{\ast m}\rightarrow O\), tal que \(f=\bar{f}|_{D_{f}}\)
Proof. Si \(f=\emptyset\), es fácil de probar y dejado al lector. Supongamos entonces \(f\) es no vacía. Sin perdida de generalidad podemos suponer que \((0,...,0,\varepsilon,...,\varepsilon)\in D_{f}\). Sea \[\begin{array}[t]{rll} F:\omega^{n}\times\Sigma^{\ast m} & \rightarrow & \omega^{n}\times\Sigma^{\ast m}\\ (\vec{x},\vec{\alpha}) & \rightarrow & \left\{ \begin{array}{lll} (\vec{x},\vec{\alpha}) & & \text{si }(\vec{x},\vec{\alpha})\in D_{f}\\ (0,...,0,\varepsilon,...,\varepsilon) & & \text{caso contrario} \end{array}\right. \end{array}\] Ya que \[\begin{aligned} F_{(i)} & =\lambda\vec{x}\vec{\alpha}\left[x_{i}.\chi_{D_{f}}^{\omega^{n}\times\Sigma^{\ast m}}(\vec{x},\vec{\alpha})\right]\text{, para }i=1,...,n\\ F_{(i)} & =\lambda\vec{x}\vec{\alpha}\left[\alpha_{i}^{\chi_{D_{f}}^{\omega^{n}\times\Sigma^{\ast m}}(\vec{x},\vec{\alpha})}\right]\text{, para }i=n+1,...,n+m \end{aligned}\] tenemos que cada \(F_{(i)}\) es \(\Sigma\)-recursiva. Es claro que \(\bar{f}=f\circ F\) cumple que \(f=\bar{f}|_{D_{f}}\) por lo cual solo falta ver que \(\bar{f}\) es \(\Sigma\)-recursiva. Pero esto es obvio ya que \(F=\left[F_{(1)},...,F_{(n+m)}\right]\)
4.35. Supongamos \(f_{i}:D_{f_{i}}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow O\), \(i=1,...,k\), son funciones \(\Sigma\)-recursivas tales que cada \(D_{f_{i}}\) es \(\Sigma\)-recursivo y \(D_{f_{i}}\cap D_{f_{j}}=\emptyset\) para \(i\neq j\). Entonces la función \(f_{1}\cup...\cup f_{k}\) es \(\Sigma\)-recursiva.
Proof. Completamente análoga a la del caso primitivo recursivo.
4.36. Si \(S\) es \(\Sigma\)-recursivo, entonces \(S\) es \(\Sigma\)-r.e.
Proof. Supongamos \(\emptyset\neq S\subseteq\omega^{n}\times\Sigma^{\ast m}\). Sea \((z_{1},...,z_{n},\gamma_{1},...,\gamma_{m})\in S\) fijo. Sea \(\leq\) un orden total sobre \(\Sigma\). Sea \(G:\omega\rightarrow\omega^{n}\times\Sigma^{\ast m}\) dada por \[G(x)=\left((x+1)_{1},...,(x+1)_{n},\ast^{\leq}((x+1)_{n+1}),...,\ast^{\leq}((x+1)_{n+m})\right)\] Es claro que cada \(G_{(i)}\) es \(\Sigma\)-recursiva y que \(\mathrm{Im}G=\omega^{n}\times\Sigma^{\ast m}\).
Para \(i=1,...,n\), definamos \(F_{i}:\omega\rightarrow\omega\) de la siguiente manera \[F_{i}(x)=\left\{ \begin{array}{ccl} G_{(i)}(x) & & \text{si }G(x)\in S\\ z_{i} & & \text{caso contrario} \end{array}\right.\] Para \(i=n+1,...,n+m\), definamos \(F_{i}:\omega\rightarrow\Sigma^{\ast}\) de la siguiente manera \[F_{i}(x)=\left\{ \begin{array}{ccl} G_{(i)}(x) & & \text{si }G(x)\in S\\ \gamma_{i} & & \text{caso contrario} \end{array}\right.\] Usando que \(S\) es \(\Sigma\)-recursivo podemos aplicar el lema anterior y ver que cada \(F_{i}\) es \(\Sigma\)-recursiva. Sea \(F=[F_{1},...,F_{n+m}]\). Nótese que \(F_{(i)}=F_{i}\) para cada \(i=1,...,n+m\). Esto nos dice que \(S\) es \(\Sigma\)-r.e. ya que \(\mathrm{Im}F=S\).
Mas adelante (Lema 4.65) daremos un ejemplo natural de un conjunto que es \(\Sigma\)-r.e. pero el cual no es \(\Sigma\)-recursivo.
Debería quedar claro que si el modelo de Godel es correcto, entonces todos los resultados probados dentro del paradigma filosófico de Leibniz son ciertos una ves reenunciados de acuerdo al paradigma Godeliano. Tal como vimos arriba muchos de estos resultados se prueban en forma fácil en su versión recursiva. Sin embargo muchos otros requieren mas trabajo y es necesario utilizar algún paradigma mas constructivo (como el imperativo de Neumann o el de Turing) para poder probarlos en su versión recursiva. Por ejemplo consideremos el teorema siguiente dado en el contexto del paradigma filosófico de Leibniz:
4.1. Sea \(S\subseteq\omega^{n}\times\Sigma^{\ast m}\). Son equivalentes
adhocprefix(a)adhocsufix \(S\) es \(\Sigma\)-efectivamente computable
adhocprefix(b)adhocsufix \(S\) y \((\omega^{n}\times\Sigma^{\ast m})-S\) son \(\Sigma\)-efectivamente enumerable
Se tiene que la versión recursiva de (a)\(\Rightarrow\)(b) es probada sin problemas en el lema anterior pero para probar la versión recursiva de (b)\(\Rightarrow\)(a), nos será necesario utilizar el paradigma imperativo (Teorema 4.11). Lo mismo sucede con el lema de división por casos en su forma mas general (Lema 3.12) y con el teorema de caracterización de conjuntos \(\Sigma\)-efectivamente enumerables (Teorema 3.2), ambos cuando son enunciados en su versión recursiva no son fáciles de probar con las herramientas desarrolladas hasta ahora y nos será necesario usar el paradigma imperativo para representar a los objetos recursivos involucrados. Estas pruebas están en la Sección Resultados Básicos Presentados en Paradigma Recursivo donde se compilan todos los resultados básicos (expresados en paradigma recursivo) y se obtienen algunos resultados los cuales en esta instancia todavía no se pueden probar ya que para obtenerlos es necesario hacer uso de la formalización matemática de ambos paradigmas el funcional y el imperativo (por ejemplo la existencia de un conjunto que es \(\Sigma\)-r.e. pero el cual no es \(\Sigma\)-recursivo).
Dada una función \(h:\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\omega\), con \(S_{1},...,S_{n}\subseteq\omega\) y \(L_{1},...,L_{m}\subseteq\Sigma^{\ast}\), no vacíos, definamos \(h^{\downarrow}:\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\omega\) de la siguiente manera \[\begin{aligned} h^{\downarrow}(x,\vec{x},\vec{\alpha}) & =\left\langle h(0,\vec{x},\vec{\alpha}),h(1,\vec{x},\vec{\alpha}),...,h(x,\vec{x},\vec{\alpha})\right\rangle \\ & =\Pi_{i=0}^{x}pr(i+1)^{h(i,\vec{x},\vec{\alpha})} \end{aligned}\]
4.37. Supongamos \[\begin{aligned} f & :S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\omega\\ g & :\omega\times\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\omega\\ h & :\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\omega \end{aligned}\] son funciones tales que \[\begin{aligned} h(0,\vec{x},\vec{\alpha}) & =f(\vec{x},\vec{\alpha})\\ h(x+1,\vec{x},\vec{\alpha}) & =g(h^{\downarrow}(x,\vec{x},\vec{\alpha}),x,\vec{x},\vec{\alpha})\text{,} \end{aligned}\] para cada \(x\in\omega\) y \((\vec{x},\vec{\alpha})\in S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\). Entonces \(h\) es \(\Sigma\)-r. (resp. \(\Sigma\)-p.r.) si \(f\) y \(g\) lo son.
Proof. Supongamos \(f,g\) son \(\Sigma\)-p.r.. Primero veremos que \(h^{\downarrow}\) es \(\Sigma\)-r. (resp. \(\Sigma\)-p.r.). Nótese que para cada \((\vec{x},\vec{\alpha})\in S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\) tenemos que \[\begin{aligned} h^{\downarrow}(0,\vec{x},\vec{\alpha}) & =\left\langle h(0,\vec{x},\vec{\alpha})\right\rangle \\ & =\left\langle f(\vec{x},\vec{\alpha})\right\rangle \\ & =2^{f(\vec{x},\vec{\alpha})}\\ h^{\downarrow}(x+1,\vec{x},\vec{\alpha}) & =h^{\downarrow}(x,\vec{x},\vec{\alpha})pr(x+2)^{h(x+1,\vec{x},\vec{\alpha})}\\ & =h^{\downarrow}(x,\vec{x},\vec{\alpha})pr(x+2)^{g(h^{\downarrow}(x,\vec{x},\vec{\alpha}),x,\vec{x},\vec{\alpha})} \end{aligned}\] lo cual nos dice que \(h^{\downarrow}=R(f_{1},g_{1})\) donde \[\begin{aligned} f_{1} & =\lambda\vec{x}\vec{\alpha}\left[2^{f(\vec{x},\vec{\alpha})}\right]\\ g_{1} & =\lambda Ax\vec{x}\vec{\alpha}\left[Apr(x+2)^{g(A,x,\vec{x},\vec{\alpha})}\right] \end{aligned}\] O sea que \(h^{\downarrow}\) es \(\Sigma\)-r. (resp. \(\Sigma\)-p.r.) ya que \(f_{1}\) y \(g_{1}\) lo son. Finalmente nótese que \[h=\lambda ix[(x)_{i}]\circ\left[Suc\circ p_{1}^{1+n,m},h^{\downarrow}\right]\] lo cual nos dice que \(h\) es \(\Sigma\)-r. (resp. \(\Sigma\)-p.r.).
Probaremos que los conceptos de \(\Sigma\)-recursividad y \(\Sigma\)-recursividad primitiva son en realidad independientes del alfabeto \(\Sigma\), es decir que si \(f\) es una función la cual es \(\Sigma\)-mixta y \(\Gamma\)-mixta, entonces \(f\) es \(\Sigma\)-recursiva (resp. \(\Sigma\)-p.r.) sii \(f\) es \(\Gamma\)-recursiva (resp. \(\Gamma\)-p.r.).
Ya definimos para el caso de un alfabeto \(\Sigma\neq\emptyset\) y \(\leq\) un orden total sobre \(\Sigma\), las funciones \(\#^{\leq}\) y \(\ast^{\leq}\). Sea \(\Sigma=\emptyset\). Nótese que el conjunto \(\emptyset\) es un orden total sobre \(\Sigma\) (de hecho es el único orden total sobre \(\Sigma\)). Definamos \[\begin{array}{rll} \ast^{\emptyset}:\{0\} & \rightarrow & \{\varepsilon\}\\ 0 & \rightarrow & \varepsilon \end{array}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \begin{array}{rll} \#^{\emptyset}:\{\varepsilon\} & \rightarrow & \{0\}\\ \varepsilon & \rightarrow & 0 \end{array}\] Ya que \(\Sigma^{\ast}=\{\varepsilon\}\), las funciones \(\#^{\emptyset}\) y \(\ast^{\emptyset}\) son biyecciones mutuamente inversas entre \(\{0\}\) y \(\Sigma^{\ast}\). Además nótese que estas funciones son \(\Sigma\)-p.r..
4.38. Supongamos \(\Sigma\subseteq\Gamma\).
adhocprefix(a)adhocsufix Si \(\leq\) es un orden total sobre \(\Sigma\), entonces las funciones \(\Sigma\)-mixtas \(\ast^{\leq}\) y \(\#^{\leq}\) son \(\Gamma\)-p.r..
adhocprefix(b)adhocsufix Si \(\leq^{\prime}\) es un orden total sobre \(\Gamma\), entonces las funciones \(\Sigma\)-mixtas \(\#^{\leq^{\prime}}|_{\Sigma^{\ast}}\) y \(\ast^{\leq^{\prime}}|_{\#^{\leq^{\prime}}(\Sigma^{\ast})}\) son \(\Sigma\)-p.r..
Proof. (a) Si \(\Sigma=\emptyset\), entonces es fácil ver que \(\ast^{\leq}\) y \(\#^{\leq}\) son \(\Gamma\)-p.r., y es dejado como ejercicio. Supongamos \(\Sigma=\{a_{1},...,a_{k}\}\) con \(k\geq1\) y \(\leq\) es dado por \(a_{1}<...<a_{k}\). Sea \(s_{e}^{\leq}:\Gamma^{\ast}\rightarrow\Gamma^{\ast}\) dada por \[\begin{aligned} s_{e}^{\leq}(\varepsilon) & =a_{1}\\ s_{e}^{\leq}(\alpha a_{i}) & =\alpha a_{i+1}\text{, si }i<k\\ s_{e}^{\leq}(\alpha a_{k}) & =s_{e}^{\leq}(\alpha)a_{1}\\ s_{e}^{\leq}(\alpha a) & =\varepsilon\text{, si }a\in\Gamma-\Sigma. \end{aligned}\] Note que \(s_{e}^{\leq}\) es \(\Gamma\)-p.r. y que \(s_{e}^{\leq}|_{\Sigma^{\ast}}=s^{\leq}\). Ya que \[\begin{aligned} \ast^{\leq}(0) & =\varepsilon\\ \ast^{\leq}(x+1) & =s^{\leq}(\ast^{\leq}(x)) \end{aligned}\] para cada \(x\in\omega\), tenemos que \[\begin{aligned} \ast^{\leq}(0) & =\varepsilon\\ \ast^{\leq}(x+1) & =s_{e}^{\leq}(\ast^{\leq}(x)) \end{aligned}\] Pero esto nos dice que \(\ast^{\leq}=R(C_{\varepsilon}^{0,0},g)\) donde \[\begin{array}{lll} g:\omega\times\Gamma^{\ast} & \rightarrow & \Gamma^{\ast}\\ \;\;\;\;\;(x,\alpha) & \rightarrow & s_{e}^{\leq}(\alpha) \end{array}\] Pero es claro que \(g\) es \(\Gamma\)-p.r. por lo cual \(\ast^{\leq}\) es \(\Gamma\)-p.r..
Para ver que \(\#^{\leq}:\Sigma^{\ast}\rightarrow\omega\) es \(\Gamma\)-p.r., sea \(\#_{e}^{\leq}:\Gamma^{\ast}\rightarrow\omega\) dada por \[\begin{aligned} \#_{e}^{\leq}(\varepsilon) & =0\\ \#_{e}^{\leq}(\alpha a_{i}) & =\#_{e}^{\leq}(\alpha).k+i\\ \#_{e}^{\leq}(\alpha a) & =0\text{, si }a\in\Gamma-\Sigma. \end{aligned}\] Ya que \(\#_{e}^{\leq}\) es \(\Gamma\)-p.r., eso es \(\#^{\leq}=\#_{e}^{\leq}|_{\Sigma^{\ast}}\).
(b) El caso \(\Sigma=\emptyset\) es fácil y queda como ejercicio. Supongamos entonces \(\Sigma\) es no vacío. Sea \(n\) el cardinal de \(\Gamma.\) Ya que \[\begin{aligned} \#^{\leq^{\prime}}|_{\Sigma^{\ast}}(\varepsilon) & =0\\ \#^{\leq^{\prime}}|_{\Sigma^{\ast}}(\alpha a) & =\#^{\leq^{\prime}}|_{\Sigma^{\ast}}(\alpha).n+\#^{\leq^{\prime}}(a)\text{, para cada }a\in\Sigma \end{aligned}\] la función \(\#^{\leq^{\prime}}|_{\Sigma^{\ast}}\) es \(\Sigma\)-p.r.. O sea que el predicado \(P=\lambda x\alpha\left[\#^{\leq^{\prime}}|_{\Sigma^{\ast}}(\alpha)=x\right]\) es \(\Sigma\)-p.r.. Sea \(\leq\) un orden total sobre \(\Sigma\). Note que \(\ast^{\leq^{\prime}}|_{\#^{\leq^{\prime}}(\Sigma^{\ast})}=M^{\leq}(P)\), lo cual ya que \[\left\vert \ast^{\leq^{\prime}}|_{\#^{\leq^{\prime}}(\Sigma^{\ast})}(x)\right\vert \leq x\] nos dice que \(\ast^{\leq^{\prime}}|_{\#^{\leq^{\prime}}(\Sigma^{\ast})}\) es \(\Sigma\)-p.r. (Lema 4.29).
4.39. \(\mathrm{PR}^{\emptyset}\subseteq\mathrm{PR}^{\Sigma}\) y \(\mathrm{R}^{\emptyset}\subseteq\mathrm{R}^{\Sigma}\).
Proof. Veamos que \(\mathrm{R}^{\emptyset}\subseteq\mathrm{R}^{\Sigma}\). Lo probaremos usando la Regla de Inducción desde 0. Para cada \(k\in\omega\) sea \(\mathrm{Enu}_{k}\) el siguiente enunciado:
adhocprefix\(\mathrm{Enu}_{k}\):adhocsufix \(\mathrm{R}_{k}^{\emptyset}\subseteq\mathrm{R}^{\Sigma}\)
Hagamos entonces lo que nos encomienda la Regla de Inducción desde \(0\).
Prueba de que \(\mathrm{Enu}_{0}\) es verdadero. Fácil.
Prueba de que si \(\mathrm{Enu}_{k}\) es verdadero entonces \(\mathrm{Enu}_{k+1}\) lo es. Supongamos entonces que \(F\in\mathrm{R}_{k+1}^{\emptyset}\) y que vale \(\mathrm{Enu}_{k}\). Probaremos que \(F\in\mathrm{R}^{\Sigma}\). Hay varios casos:
Caso \(F\in\mathrm{R}_{k}^{\emptyset}\). Sigue directamente de \(\mathrm{Enu}_{k}\) que \(F\in\mathrm{R}^{\Sigma}\).
Caso \(F=R(f,\mathcal{G})\), con \[\begin{aligned} f & :S_{1}\times...\times S_{n}\times\emptyset^{\ast m}\rightarrow\emptyset^{\ast}\\ \mathcal{G}_{a} & :S_{1}\times...\times S_{n}\times\emptyset^{\ast m}\times\emptyset^{\ast}\times\emptyset^{\ast}\rightarrow\emptyset^{\ast}\text{, para cada }a\in\emptyset \end{aligned}\] funciones en \(\mathrm{R}_{k}^{\emptyset}\) y cada \(S_{i}\) no vacío. Ya que vale \(\mathrm{Enu}_{k}\) tenemos que \(f\in\mathrm{R}^{\Sigma}\). Nótese que \(\mathcal{G}=\emptyset\), lo cual nos dice que por definición \[\begin{array}{rll} R(f,\mathcal{G}):S_{1}\times...\times S_{n}\times\emptyset^{\ast m}\times\emptyset^{\ast} & \rightarrow & \emptyset^{\ast}\\ (\vec{x},\varepsilon,...,\varepsilon,\varepsilon) & \rightarrow & f(\vec{x},\varepsilon,...,\varepsilon) \end{array}\] Es claro que \(\omega^{n}\times\Sigma^{\ast m}\times\emptyset^{\ast}\) es un conjunto \(\Sigma\)-p.r. por lo cual las funciones \(p_{i}^{n,m+1}|_{\omega^{n}\times\Sigma^{\ast m}\times\emptyset^{\ast}}\) son \(\Sigma\)-p.r. (aquí las \(p_{i}^{n,m+1}\) son respecto de \(\Sigma\)). Ya que \[R(f,\mathcal{G})=f\circ\left[p_{1}^{n,m+1}|_{\omega^{n}\times\Sigma^{\ast m}\times\emptyset^{\ast}},...,p_{n+m}^{n,m+1}|_{\omega^{n}\times\Sigma^{\ast m}\times\emptyset^{\ast}}\right]\] tenemos que \(F\in\mathrm{R}^{\Sigma}\).
Caso \(F=R(f,g)\), con \[\begin{aligned} f & :S_{1}\times...\times S_{n}\times\emptyset^{\ast m}\rightarrow\emptyset^{\ast}\\ g & :\omega\times S_{1}\times...\times S_{n}\times\emptyset^{\ast m}\times\emptyset^{\ast}\rightarrow\emptyset^{\ast} \end{aligned}\] funciones en \(\mathrm{R}_{k}^{\emptyset}\) y cada \(S_{i}\) no vacío. Ya que vale \(\mathrm{Enu}_{k}\) tenemos que \(f,g\in\mathrm{R}^{\Sigma}\). Nótese que respecto de \(\Sigma\), la función \(R(f,g)\) no esta definida ya que por la forma de \(f\), el dominio de \(g\) debería ser \(\omega\times S_{1}\times...\times S_{n}\times\emptyset^{\ast m}\times\Sigma^{\ast}\). Sea \[\tilde{g}=g\circ\left[p_{1}^{1+n,m+1},...,p_{1+n+m}^{1+n,m+1},C_{\varepsilon}^{1+n,m+1}\right]\] (aquí las \(p_{i}^{1+n,m+1}\) y \(C_{\varepsilon}^{1+n,m+1}\) son respecto de \(\Sigma\)). Nótese que \(D_{\tilde{g}}=\omega\times S_{1}\times...\times S_{n}\times\emptyset^{\ast m}\times\Sigma^{\ast}\) y \(\tilde{g}\) es \(\Sigma\)-recursiva. Además es fácil ver que \(F=Rf,\tilde{g})\) (respecto del alfabeto \(\Sigma\)) por lo cual \(F\) es \(\Sigma\)-recursiva.
Caso \(F=M(P)\), con \(P:\omega\times\omega^{n}\times\emptyset^{\ast m}\rightarrow\omega\), un predicado en \(\mathrm{R}_{k}^{\emptyset}\). Ya que vale \(\mathrm{Enu}_{k}\) tenemos que \(P\in\mathrm{R}^{\Sigma}\). Sea \[\bar{P}=P\circ\left[p_{1}^{1+n,m},...,p_{1+n}^{1+n,m},C_{\varepsilon}^{1+n,m},...,C_{\varepsilon}^{1+n,m}\right]\] Nótese que \(\bar{P}\) es \(\Sigma\)-total y \(\Sigma\)-recursivo y además extiende a \(P\). Sea \[\tilde{P}=\lambda xy[x.y]\circ\left[\bar{P},\chi_{\omega\times\omega^{n}\times\emptyset^{\ast m}}^{\omega\times\omega^{n}\times\Sigma^{\ast m}}\right]\] También \(\tilde{P}\) es \(\Sigma\)-total y \(\Sigma\)-recursivo y extiende a \(P\) pero además fuera del dominio de \(P\) vale \(0\). Esto nos dice que \(M(\tilde{P})=M(P)\) por lo cual \(F\) es \(\Sigma\)-recursiva ya que \(M(\tilde{P})\) lo es.
Los otros casos de recursión primitiva son parecidos a los hechos y el caso de la composición es trivial.
La prueba de que \(\mathrm{PR}^{\emptyset}\subseteq\mathrm{PR}^{\Sigma}\) es muy similar. Se dejan los detalles como ejercicio para el lector
Sea \(\Sigma\) un alfabeto finito (puede ser vacío) y sea \(\leq\) un orden total sobre \(\Sigma\). Para \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\), definamos \[f^{\#^{\leq}}=f\circ\left[p_{1}^{n+m,0},...,p_{n}^{n+m,0},\ast^{\leq}\circ p_{n+1}^{n+m,0},...,\ast^{\leq}\circ p_{n+m}^{n+m,0}\right]\] Similarmente, para \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\Sigma^{\ast}\), definamos \[f^{\#^{\leq}}=\#^{\leq}\circ f\circ\left[p_{1}^{n+m,0},...,p_{n}^{n+m,0},\ast^{\leq}\circ p_{n+1}^{n+m,0},...,\ast^{\leq}\circ p_{n+m}^{n+m,0}\right]\]
4.40. Sea \(\Gamma\) un alfabeto finito y sea \(\leq\) un orden total sobre \(\Gamma\). Dada \(h\) una función \(\Gamma\)-mixta, son equivalentes
adhocprefix(1)adhocsufix \(h\) es \(\Gamma\)-recursiva (resp. \(\Gamma\)-p.r.)
adhocprefix(2)adhocsufix \(h^{\#^{\leq}}\) es \(\emptyset\)-recursiva (resp. \(\emptyset\)-p.r.)
Proof. (2)\(\Rightarrow\)(1). Supongamos \(h:D_{h}\subseteq\omega^{n}\times\Gamma^{\ast m}\rightarrow\Gamma^{\ast}\) es tal que \(h^{\#^{\leq}}\) es \(\emptyset\)-recursiva (resp. \(\emptyset\)-p.r.). Dejamos al lector chequear que \[h=\ast^{\leq}\circ h^{\#^{\leq}}\circ\left[p_{1}^{n,m},...,p_{n}^{n,m},\#^{\leq}\circ p_{n+1}^{n,m},...,\#^{\leq}\circ p_{n+m}^{n,m}\right]\] (aquí las \(p_{i}^{n,m}\) son respecto de \(\Gamma\)). Por el lema anterior tenemos que \(h^{\#^{\leq}}\) es \(\Gamma\)-recursiva (resp. \(\Gamma\)-p.r.). Ya que (aun cuando \(\Gamma=\emptyset\)) tenemos que las funciones \(\ast^{\leq}\) y \(\#^{\leq}\) son \(\Gamma\)-p.r., tenemos que \(h\) es \(\Gamma\)-recursiva (resp. \(\Gamma\)-p.r.) ya que es composición de funciones \(\Gamma\)-recursivas (resp. \(\Gamma\)-p.r.).
(1)\(\Rightarrow\)(2). El caso \(\Gamma=\emptyset\) es trivial ya que \(h^{\#^{\leq}}\) se define como composición de funciones \(\emptyset\)-recursivas (resp. \(\emptyset\)-p.r.). Supongamos entonces que \(\Gamma=\{a_{1},...,a_{r}\}\), con \(a_{1}<a_{2}<...<a_{r}\) y \(r>0\). Lo probaremos usando la Regla de Inducción desde 0. Para cada \(k\in\omega\) sea \(\mathrm{Enu}_{k}\) el siguiente enunciado:
adhocprefix\(\mathrm{Enu}_{k}\):adhocsufix Si \(h\in\mathrm{R}_{k}^{\Gamma}\) (resp. \(h\in\mathrm{PR}_{k}^{\Gamma}\)), entonces \(h^{\#^{\leq}}\) es \(\emptyset\)-recursiva (resp. \(\emptyset\)-p.r.).
Hagamos entonces lo que nos encomienda la Regla de Inducción desde \(0\).
Prueba de que \(\mathrm{Enu}_{0}\) es verdadero. Facil.
Prueba de que si \(\mathrm{Enu}_{k}\) es verdadero entonces \(\mathrm{Enu}_{k+1}\) lo es. Supongamos entonces que vale \(\mathrm{Enu}_{k}\) y sea \(h\in\mathrm{R}_{k+1}^{\Gamma}\) (resp. \(h\in\mathrm{PR}_{k+1}^{\Gamma}\)). Hay varios casos
Caso 1. Supongamos \(h=f\circ[f_{1},...,f_{n}]\), con \(f,f_{1},...,f_{n}\in\mathrm{R}_{k}^{\Gamma}\) (resp. \(f,f_{1},...,f_{n}\in\mathrm{PR}_{k}^{\Gamma}\)). Ya que vale \(\mathrm{Enu}_{k}\) tenemos que \(f^{\#^{\leq}},f_{1}^{\#^{\leq}},...,f_{n}^{\#^{\leq}}\) son \(\emptyset\)-recursivas (resp. \(\emptyset\)-p.r.). Ya que \(h^{\#^{\leq}}=f^{\#^{\leq}}\circ\left[f_{1}^{\#^{\leq}},...,f_{n}^{\#^{\leq}}\right]\), tenemos que \(h^{\#^{\leq}}\) es \(\emptyset\)-recursiva (resp. \(\emptyset\)-p.r.).
Caso 2. Supongamos \(h=M(P)\), con \(P:\omega\times\omega^{n}\times\Gamma^{\ast m}\rightarrow\omega\), un predicado en \(\mathrm{R}_{k}^{\Gamma}\). Ya que vale \(\mathrm{Enu}_{k}\) tenemos que \(P^{\#^{\leq}}\) es \(\emptyset\)-recursiva. Ya que \(h^{\#^{\leq}}=M(P^{\#^{\leq}})\) y \(D_{P^{\#^{\leq}}}=\omega^{1+n+m}\), tenemos que \(h^{\#^{\leq}}\) es \(\emptyset\)-recursiva.
Caso 3. Supongamos \(h=R(f,\mathcal{G})\), con \[\begin{aligned} f & :S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\Gamma^{\ast}\\ \mathcal{G}_{a} & :S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\times\Gamma^{\ast}\times\Gamma^{\ast}\rightarrow\Gamma^{\ast}\text{, }a\in\Gamma \end{aligned}\] funciones en \(\mathrm{R}_{k}^{\Gamma}\) (resp. \(\mathrm{PR}_{k}^{\Gamma}\)) y \(S_{1},...,S_{n}\subseteq\omega\) y \(L_{1},...,L_{m}\subseteq\Sigma^{\ast}\), no vacíos. Nótese que \[\begin{aligned} f^{\#^{\leq}} & :S_{1}\times...\times S_{n}\times\#^{\leq}(L_{1})\times...\times\#^{\leq}(L_{m})\rightarrow\omega\\ \mathcal{G}_{a}^{\#^{\leq}} & :S_{1}\times...\times S_{n}\times\#^{\leq}(L_{1})\times...\times\#^{\leq}(L_{m})\times\omega\times\omega\rightarrow\omega\text{, }a\in\Gamma\\ h^{\#^{\leq}} & :S_{1}\times...\times S_{n}\times\#^{\leq}(L_{1})\times...\times\#^{\leq}(L_{m})\times\omega\rightarrow\omega \end{aligned}\] Ya que vale \(\mathrm{Enu}_{k}\) tenemos que \(f^{\#^{\leq}}\) y cada \(\mathcal{G}_{a}^{\#^{\leq}}\) son \(\emptyset\)-recursivas (resp. \(\emptyset\)-p.r.). Sea \[\begin{array}{rll} i_{0}:\omega & \rightarrow & \omega\\ x & \rightarrow & \left\{ \begin{array}{lll} r & & \text{si }r\text{ divide }x\\ R(x,r) & & \text{caso contrario} \end{array}\right. \end{array}\] y sea \[B=\lambda x\left[Q(x\dot{-}i_{0}(x),r)\right]\] (\(R\) y \(Q\) son definidas en el Lema 4.26). Note que \(i_{0}\) y \(B\) son \(\emptyset\)-p.r. y que \[\ast^{\leq}(x)=\ast^{\leq}(B(x))a_{i_{0}(x)}\text{, para }x\geq1\] (ejercicio). También tenemos para cada \((\vec{x},\vec{y},t)\in S_{1}\times...\times S_{n}\times\#^{\leq}(L_{1})\times...\times\#^{\leq}(L_{m})\times\omega\) se da \[\begin{aligned} h^{\#^{\leq}}(\vec{x},\vec{y},t+1) & =\#^{\leq}(h(\vec{x},\ast^{\leq}(\vec{y}),\ast^{\leq}(t+1)))\\ & =\#^{\leq}(h(\vec{x},\ast^{\leq}(\vec{y}),\ast^{\leq}(B(t+1))a_{i_{0}(t+1)}))\\ & =\#^{\leq}\left(\mathcal{G}_{a_{i_{0}(t+1)}}(\vec{x},\ast^{\leq}(\vec{y}),\ast^{\leq}(B(t+1)),h(\vec{x},\ast^{\leq}(\vec{y}),\ast^{\leq}(B(t+1)))\right)\\ & =\#^{\leq}\left(\mathcal{G}_{a_{i_{0}(t+1)}}(\vec{x},\ast^{\leq}(\vec{y}),\ast^{\leq}(B(t+1)),\ast^{\leq}(h^{\#^{\leq}}(\vec{x},\vec{y},B(t+1))))\right)\\ & =\mathcal{G}_{a_{i_{0}(t+1)}}^{\#^{\leq}}(\vec{x},\vec{y},B(t+1),h^{\#^{\leq}}(\vec{x},\vec{y},B(t+1))) \end{aligned}\] y ya que \(B(t+1)<t+1\), tenemos que
adhocprefix(**)adhocsufix \(h^{\#^{\leq}}(\vec{x},\vec{y},t+1)=\mathcal{G}_{a_{i_{0}(t+1)}}^{\#^{\leq}}(\vec{x},\vec{y},B(t+1),\left(\left\langle h^{\#^{\leq}}(\vec{x},\vec{y},0),...,h^{\#^{\leq}}(\vec{x},\vec{y},t)\right\rangle \right)_{B(t+1)+1})\), para cada \((\vec{x},\vec{y},t)\in S_{1}\times...\times S_{n}\times\#^{\leq}(L_{1})\times...\times\#^{\leq}(L_{m})\times\omega\)
A continuación aplicaremos la idea del Lema 4.37. Será mas claro así ya que para aplicarlo directamente deberíamos cambiar el orden de los parámetros de las funciones \(h^{\#^{\leq}}\), \(\mathcal{G}_{a_{i}}^{\#^{\leq}}\) componiéndolas adecuadamente y sería muy engorroso notacionalmente.
Definamos \[H=\lambda t\vec{x}\vec{y}\left[\left\langle h^{\#^{\leq}}(\vec{x},\vec{y},0),...,h^{\#^{\leq}}(\vec{x},\vec{y},t)\right\rangle \right]\] Notar que \[D_{H}=\omega\times S_{1}\times...\times S_{n}\times\#^{\leq}(L_{1})\times...\times\#^{\leq}(L_{m})\] Tenemos que \[\begin{aligned} H(0,\vec{x},\vec{y}) & =\left\langle h^{\#^{\leq}}(\vec{x},\vec{y},0)\right\rangle =\left\langle f^{\#^{\leq}}(\vec{x},\vec{y})\right\rangle =2^{f^{\#^{\leq}}(\vec{x},\vec{y})}\\ H(t+1,\vec{x},\vec{y}) & =\left(H(t,\vec{x},\vec{y}).pr(t+2)^{h^{\#^{\leq}}(\vec{x},\vec{y},t+1)}\right)\\ & =\left(H(t,\vec{x},\vec{y}).pr(t+2)^{\mathcal{G}_{a_{i_{0}(t+1)}}^{\#^{\leq}}(\vec{x},\vec{y},B(t+1),(H(t,\vec{x},\vec{y}))_{B(t+1)+1})}\right)\text{ (por (**))} \end{aligned}\] para cada \((t,\vec{x},\vec{y})\in\omega\times S_{1}\times...\times S_{n}\times\#^{\leq}(L_{1})\times...\times\#^{\leq}(L_{m})\). O sea que si definimos \[g:\omega\times\omega\times S_{1}\times...\times S_{n}\times\#^{\leq}(L_{1})\times...\times\#^{\leq}(L_{m})\rightarrow\omega\] por \[g(A,t,\vec{x},\vec{y})=\left\{ \begin{array}{clc} \left(A.pr(t+2)^{\mathcal{G}_{a_{1}}^{\#^{\leq}}(\vec{x},\vec{y},B(t+1),(A)_{B(t+1)+1})}\right) & \text{si} & i_{0}(t+1)=1\\ \vdots & & \vdots\\ \left(A.pr(t+2)^{\mathcal{G}_{a_{r}}^{\#^{\leq}}(\vec{x},\vec{y},B(t+1),(A)_{B(t+1)+1})}\right) & \text{si} & i_{0}(t+1)=r \end{array}\right.\] tenemos que \(H=R(\lambda x\left[2^{x}\right]\circ f^{\#^{\leq}},g)\). Note que \(g\) es \(\emptyset\)-recursiva (resp. \(\emptyset\)-p.r.), ya que \[g=\lambda At\vec{x}\vec{y}\left[f_{1}(A,t,\vec{x},\vec{y})P_{1}(A,t,\vec{x},\vec{y})+...+f_{r}(A,t,\vec{x},\vec{y})P_{r}(A,t,\vec{x},\vec{y})\right]\text{,}\] con \[\begin{aligned} f_{i} & =\lambda At\vec{x}\vec{y}\left[\left(A.pr(t+2)^{\mathcal{G}_{a_{i}}^{\#^{\leq}}(\vec{x},\vec{y},B(t+1),(A)_{B(t+1)})}\right)\right]\\ P_{i} & =\lambda At\vec{x}\vec{y}\left[i_{0}(t+1)=i\right] \end{aligned}\] O sea que \(H\) es \(\emptyset\)-recursiva (resp. \(\emptyset\)-p.r.) y por lo tanto lo es \[h^{\#^{\leq}}=\lambda\vec{x}\vec{y}t\left[(H(t,\vec{x},\vec{y}))_{t+1}\right]\] Los otros casos en los cuales \(h\) es obtenida por recursión primitiva son similares.
Ahora podemos probar el anunciado resultado de independencia.
4.2 (Independencia del Alfabeto). Sean \(\Sigma\) y \(\Gamma\) alfabetos cualesquiera.
adhocprefix(a)adhocsufix Supongamos una función \(f\) es \(\Sigma\)-mixta y \(\Gamma\)-mixta, entonces \(f\) es \(\Sigma\)-recursiva (resp. \(\Sigma\)-p.r.) sii \(f\) es \(\Gamma\)-recursiva (resp. \(\Gamma\)-p.r.).
adhocprefix(b)adhocsufix Supongamos un conjunto \(S\) es \(\Sigma\)-mixto y \(\Gamma\)-mixto, entonces \(S\) es \(\Sigma\)-recursivo (resp. \(\Sigma\)-r.e., \(\Sigma\)-p.r.) sii \(S\) es \(\Gamma\)-recursivo (resp. \(\Gamma\)-r.e., \(\Gamma\)-p.r.).
Proof. (a) Ya que \(f\) es \((\Sigma\cap\Gamma)\)-mixta, podemos suponer sin perdida de generalidad que \(\Sigma\subseteq\Gamma\) (por que?). Sea \(\leq\) un orden total sobre \(\Sigma\) y sea \(\leq^{\prime}\) un orden total sobre \(\Gamma\). Primero supongamos que \(f\) es \(\Sigma\)-recursiva (resp. \(\Sigma\)-p.r.). Probaremos que \(f\) es \(\Gamma\)-recursiva (resp. \(\Gamma\)-p.r.). Ya que \(f\) es \(\Sigma\) mixta, tenemos que \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow O\), con \(O\in\{\omega,\Sigma^{\ast}\}\). Haremos el caso \(O=\Sigma^{\ast}\). Ya que las funciones \(\#^{\leq^{\prime}}|_{\Sigma^{\ast}}\) y \(\ast^{\leq^{\prime}}|_{\#^{\leq^{\prime}}(\Sigma^{\ast})}\) son \(\Sigma\)-p.r. (Lema 4.38) y ademas \[\begin{aligned} f^{\#^{\leq^{\prime}}} & =\#^{\leq^{\prime}}\circ f\circ\left[p_{1}^{n+m,0},...,p_{n}^{n+m,0},\ast^{\leq^{\prime}}\circ p_{n+1}^{n+m,0},...,\ast^{\leq^{\prime}}\circ p_{n+m}^{n+m,0}\right]\\ & =\#^{\leq^{\prime}}|_{\Sigma^{\ast}}\circ f\circ\left[p_{1}^{n+m,0},...,p_{n}^{n+m,0},\ast^{\leq^{\prime}}|_{\#^{\leq^{\prime}}(\Sigma^{\ast})}\circ p_{n+1}^{n+m,0},...,\ast^{\leq^{\prime}}|_{\#^{\leq^{\prime}}(\Sigma^{\ast})}\circ p_{n+m}^{n+m,0}\right] \end{aligned}\] (justifique) tenemos que \(f^{\#^{\leq^{\prime}}}\) es \(\Sigma\)-recursiva (resp. \(\Sigma\)-p.r.). Por el lema anterior tenemos que \(\left(f^{\#^{\leq^{\prime}}}\right)^{\#^{\leq}}\) es \(\emptyset\)-recursiva (resp. \(\emptyset\)-p.r.), pero nótese que \(\left(f^{\#^{\leq^{\prime}}}\right)^{\#^{\leq}}=f^{\#^{\leq^{\prime}}}\) ya que \(f^{\#^{\leq^{\prime}}}\) es de tipo \((n+m,0,\#)\), por lo cual tenemos que \(f^{\#^{\leq^{\prime}}}\) es \(\emptyset\)-recursiva (resp. \(\emptyset\)-p.r.). Pero esto por el lema anterior nos dice que \(f\) es \(\Gamma\)-recursiva (resp. \(\Gamma\)-p.r.).
Supongamos ahora que \(f\) es \(\Gamma\)-recursiva (resp. \(\Gamma\)-p.r.). Probaremos que \(f\) es \(\Sigma\)-recursiva (resp. \(\Sigma\)-p.r.). Ya que \(\#^{\leq}\) y \(\ast^{\leq}\) son \(\Gamma\)-p.r. (Lema 4.38), la función \[f^{\#^{\leq}}=\#^{\leq}\circ f\circ\left[p_{1}^{n+m,0},...,p_{n}^{n+m,0},\ast^{\leq}\circ p_{n+1}^{n+m,0},...,\ast^{\leq}\circ p_{n+m}^{n+m,0}\right]\] es \(\Gamma\)-recursiva (resp. \(\Gamma\)-p.r.). Por el lema anterior \(\left(f^{\#^{\leq}}\right)^{\#^{\leq^{\prime}}}\) es \(\emptyset\)-recursiva (resp. \(\emptyset\)-p.r.). Pero nótese que \(\left(f^{\#^{\leq}}\right)^{\#^{\leq^{\prime}}}=f^{\#^{\leq}}\) ya que \(f^{\#^{\leq}}\) es de tipo \((n+m,0,\#)\), por lo cual \(f^{\#^{\leq}}\) es \(\emptyset\)-recursiva (resp. \(\emptyset\)-p.r.). Esto por el lema anterior nos dice que \(f\) es \(\Sigma\)-recursiva (resp. \(\Sigma\)-p.r.).
(b) Supongamos \(S\) es \(\Sigma\)-mixto y \(\Gamma\)-mixto. Ya que \(S\) es \((\Sigma\cap\Gamma)\)-mixto, podemos suponer sin perdida de generalidad que \(\Sigma\subseteq\Gamma\). Que \[S\text{ es }\Sigma\text{-r.e. sii }S\text{ es }\Gamma\text{-r.e.}\] sigue directo de (a). Supongamos ahora que \(S\) es \(\Sigma\)-recursivo. Veremos que \(S\) es \(\Gamma\)-recursivo. Supongamos \(S\) es de tipo \((n,m)\) es decir \(S\subseteq\omega^{n}\times\Sigma^{\ast m}\). Por definición tenemos que \(\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}\) es \(\Sigma\)-recursiva. Pero \(\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}\) es también \(\Gamma\)-mixta, por lo cual (a) nos dice que \(\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}\) es \(\Gamma\)-recursiva. Además es claro que el conjunto \((\omega^{n}\times\Gamma^{\ast m})-(\omega^{n}\times\Sigma^{\ast m})\) es \(\Gamma\)-recursivo. Ya que \[\chi_{S}^{\omega^{n}\times\Gamma^{\ast m}}=\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}\cup C_{0}^{n,m}|_{(\omega^{n}\times\Gamma^{\ast m})-(\omega^{n}\times\Sigma^{\ast m})}\] los Lemas 4.33 y 4.35 nos dicen que \(\chi_{S}^{\omega^{n}\times\Gamma^{\ast m}}\) es \(\Gamma\)-recursiva (aquí \(C_{0}^{n,m}\) es respecto del alfabeto \(\Gamma\)).
Supongamos ahora que \(S\) es \(\Gamma\)-recursivo. Veremos que \(S\) es \(\Sigma\)-recursivo. Por definición tenemos que \(\chi_{S}^{\omega^{n}\times\Gamma^{\ast m}}\) es \(\Gamma\)-recursiva. Ya que \(\omega^{n}\times\Sigma^{\ast m}\) es \(\Gamma\)-recursivo, tenemos que \(\chi_{S}^{\omega^{n}\times\Gamma^{\ast m}}|_{\omega^{n}\times\Sigma^{\ast m}}\) es \(\Gamma\)-recursiva. Por (a) tenemos que \(\chi_{S}^{\omega^{n}\times\Gamma^{\ast m}}|_{\omega^{n}\times\Sigma^{\ast m}}\) es \(\Sigma\)-recursiva. Pero \(\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}=\chi_{S}^{\omega^{n}\times\Gamma^{\ast m}}|_{\omega^{n}\times\Sigma^{\ast m}}\) por lo cual \(\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}\) es \(\Sigma\)-recursiva, obteniendo que \(S\) es \(\Sigma\)-recursivo.
El caso primitivo recursivo es análogo y dejado al lector.
Aquí desarrollaremos el concepto clásico numérico de función recursiva y lo relacionaremos con el nuestro de función \(\Sigma\)-recursiva. Esto nos será útil para la prueba del Teorema de Incompletitud.
Una función \(f\) es llamada numérica si hay un \(n\in\omega\) tal que \(f:D_{f}\subseteq\omega^{n}\rightarrow\omega\). Nótese que cuando \(f\) es no vacía, \(n\) esta determinado por \(f\). Una función numérica \(f\) sera llamada total cuando \(D_{f}=\omega^{n}\), para algún \(n\in\omega\). Sea \(C_{0}^{0}:\{\lozenge\}\rightarrow\omega\) dada por \(C_{0}^{0}(\lozenge)=0\). Para \(1\leq j\leq n\) sea \(p_{j}^{n}:\omega^{n}\rightarrow\omega\) dada por \(p_{j}^{n}(x_{1},...,x_{n})=x_{j}\). Nótese que cuando tenemos un alfabeto fijado, \(C_{0}^{0}=C_{0}^{0,0}\) y \(p_{j}^{n}=p_{j}^{n,0}\).
Definamos los conjuntos \(\mathrm{R}_{0}^{\#}\subseteq\mathrm{R}_{1}^{\#}\subseteq\mathrm{R}_{2}^{\#}\subseteq...\subseteq\mathrm{R}^{\#}\) de la siguiente manera \[\begin{array}{lll} \mathrm{R}_{0}^{\#} & = & \left\{ Suc,Pred,C_{0}^{0}\right\} \cup\left\{ p_{j}^{n}:1\leq j\leq n\right\} \\ \mathrm{R}_{k+1}^{\#} & = & \mathrm{R}_{k}^{\#}\cup\left\{ f\circ[f_{1},...,f_{r}]:f,f_{1},...,f_{r}\in\mathrm{R}_{k}^{\#}\text{, }r\geq1\right\} \cup\\ & & \;\;\;\;\;\;\;\;\left\{ R(f,g):R(f,g)\text{ está definida y }f,g\in\mathrm{R}_{k}^{\#}\right\} \cup\\ & & \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\left\{ M(P):M(P)\text{ está definida, }P\text{ es un predicado total y }P\in\mathrm{R}_{k}^{\#}\right\} \\ & & \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\\ \mathrm{R}^{\#} & = & \bigcup_{k\geq0}\mathrm{R}_{k}^{\#} \end{array}\] Una función será llamada recursiva clásica si y solo si pertenece a \(\mathrm{R}^{\#}\).
4.41. Las siguientes funciones pertenecen a \(\mathrm{R}^{\#}\):
adhocprefix(1)adhocsufix \(C_{0}^{1}:\omega\rightarrow\omega\) dada por \(C_{0}^{1}(x)=0\), para cada \(x\in\omega\)
adhocprefix(2)adhocsufix \(\lambda x[1\dot{-}x]\)
adhocprefix(3)adhocsufix \(\lambda x_{1}...x_{n}[x_{1}+...+x_{n}]\), para cada \(n\in\mathbf{N}\)
(Notacion lambda respecto de cualquier alfabeto)
Proof. (1) Notar que \(C_{0}^{1}=R(C_{0}^{0},p_{1}^{2})\in\mathrm{R}_{1}^{\#}\).
(2) Notar que \(\lambda x[1\dot{-}x]=R(Suc\circ C_{0}^{0},C_{0}^{1}\circ p_{1}^{2})\in\mathrm{R}_{3}^{\#}\).
(3) Usaremos la Regla de Inducción desde 1. Para cada \(n\in\mathbf{N}\) sea \(\mathrm{Enu}_{n}\) el siguiente enunciado:
adhocprefix\(\mathrm{Enu}_{n}\):adhocsufix \(\lambda x_{1}...x_{n}[x_{1}+...+x_{n}]\in\mathrm{R}^{\#}\).
Hagamos entonces lo que nos encomienda la Regla de Inducción desde \(1\).
Prueba de que \(\mathrm{Enu}_{1}\) es verdadero. Notar que para \(n=1\) la función \(\lambda x_{1}...x_{n}[x_{1}+...+x_{n}]\) es igual a \(\lambda x_{1}[x_{1}]\) que es justamente la función \(p_{1}^{1}\) la cual claramente está en \(\mathrm{R}^{\#}\).
Prueba de que si \(\mathrm{Enu}_{n}\) es verdadero entonces \(\mathrm{Enu}_{n+1}\) lo es. Supongamos entonces que vale \(\mathrm{Enu}_{n}\), es decir \(\lambda x_{1}...x_{n}[x_{1}+...+x_{n}]\in\mathrm{R}^{\#}\). O sea que \(\lambda x_{1}...x_{n}[x_{1}+...+x_{n}]\in\mathrm{R}_{K}^{\#}\), para algún \(K\). Notar que \[\lambda x_{1}...x_{n+1}[x_{1}+...+x_{n+1}]=\lambda x_{1}x_{2}\left[x_{1}+x_{2}\right]\circ[F,p_{n+1}^{n+1}]\] donde \[F=\lambda x_{1}...x_{n}[x_{1}+...+x_{n}]\circ[p_{1}^{n+1},...,p_{n}^{n+1}]\] Notar que \(F\in\mathrm{R}_{K+1}^{\#}\). Pero \(\lambda x_{1}x_{2}\left[x_{1}+x_{2}\right]=R\left(p_{1}^{1},Suc\circ p_{1}^{3}\right)\in\mathrm{R}_{2}^{\#}\). O sea que entonces \(\lambda x_{1}...x_{n+1}[x_{1}+...+x_{n+1}]\in\mathrm{R}_{max\{K+1,2\}+1}^{\#}\), lo cual nos dice que vale \(\mathrm{Enu}_{n+1}\).
4.42. Dado un alfabeto finito \(\Sigma\), son equivalentes:
adhocprefix(1)adhocsufix \(h\) es recursiva clásica
adhocprefix(2)adhocsufix \(h\) es \(\Sigma\)-recursiva y numérica
Proof. (1)\(\Rightarrow\)(2) Rutina.
(2)\(\Rightarrow\)(1) Primero usaremos la Regla de Inducción desde 0 para probar que
adhocprefix(a)adhocsufix Si \(h\) es \(\emptyset\)-recursiva, entonces \(h^{\#^{\emptyset}}\in\mathrm{R}^{\#}\).
Para cada \(k\in\omega\) sea \(\mathrm{Enu}_{k}\) el siguiente enunciado:
adhocprefix\(\mathrm{Enu}_{k}\):adhocsufix Si \(h\in\mathrm{R}_{k}^{\emptyset}\), entonces \(h^{\#^{\emptyset}}\in\mathrm{R}^{\#}\).
Hagamos entonces lo que nos encomienda la Regla de Inducción desde \(0\).
Prueba de que \(\mathrm{Enu}_{0}\) es verdadero. Recordemos que \[\mathrm{R}_{0}^{\emptyset}=\left\{ Suc,Pred,C_{0}^{0,0},C_{\varepsilon}^{0,0}\right\} \cup\left\{ p_{j}^{n,m}:1\leq j\leq n+m\right\}\] Note que \(Suc^{\#^{\emptyset}}=Suc\), \(Pred^{\#^{\emptyset}}=Pred\), \((C_{\varepsilon}^{0,0})^{\#^{\emptyset}}=C_{0}^{0}\) y \((C_{0}^{0,0})^{\#^{\emptyset}}=C_{0}^{0}\) por lo cual pertenecen a \(\mathrm{R}^{\#}\). Sean \(n,m,j\in\omega\) tales que \(1\leq j\leq n+m\). Sea \(F=Pred\circ\lambda x[1\dot{-}x]\). Por el lema anterior tenemos que \(F\in\mathrm{R}^{\#}\). Pero note que \[(p_{j}^{n,m})^{\#^{\emptyset}}=p_{j}^{n+m}\circ\left[p_{1}^{n+m},...,p_{n}^{n+m},F\circ p_{n+1}^{n+m},...,F\circ p_{n+m}^{n+m}\right]\] lo que nos dice que \((p_{j}^{n,m})^{\#^{\emptyset}}\in\mathrm{R}^{\#}\).
Prueba de que si \(\mathrm{Enu}_{k}\) es verdadero entonces \(\mathrm{Enu}_{k+1}\) lo es. Supongamos entonces que vale \(\mathrm{Enu}_{k}\). Sea \(h\in\mathrm{R}_{k+1}^{\#}\). Por la definición de \(\mathrm{R}_{k+1}^{\#}\) hay varios casos.
Caso \(h\in\mathrm{R}_{k}^{\#}\). Trivial ya que vale \(\mathrm{Enu}_{k}\).
Caso \(h=R(f,\mathcal{G})\), con \[\begin{aligned} f & :S_{1}\times...\times S_{n}\times\emptyset^{\ast m}\rightarrow\emptyset^{\ast}\\ \mathcal{G}_{a} & :S_{1}\times...\times S_{n}\times\emptyset^{\ast m}\times\emptyset^{\ast}\times\emptyset^{\ast}\rightarrow\emptyset^{\ast}\text{, para cada }a\in\emptyset \end{aligned}\] funciones en \(\mathrm{R}_{k}^{\emptyset}\) y cada \(S_{i}\) no vacío. Ya que vale \(\mathrm{Enu}_{k}\) tenemos que \(f^{\#^{\emptyset}}\in\mathrm{R}^{\#}\). Note que \[\begin{array}{rll} f^{\#^{\emptyset}}:S_{1}\times...\times S_{n}\times\{0\}^{m} & \rightarrow & \{0\}\\ (\vec{x},0,...,0) & \rightarrow & \#^{\emptyset}(f(\vec{x},\varepsilon,...,\varepsilon)) \end{array}\] Nótese que \(\mathcal{G}=\emptyset\), lo cual nos dice que, por definición de \(R(f,\mathcal{G})\): \[\begin{array}{rll} R(f,\mathcal{G}):S_{1}\times...\times S_{n}\times\emptyset^{\ast m}\times\emptyset^{\ast} & \rightarrow & \emptyset^{\ast}\\ (\vec{x},\varepsilon,...,\varepsilon,\varepsilon) & \rightarrow & f(\vec{x},\varepsilon,...,\varepsilon) \end{array}\] O sea que \[\begin{array}{rll} R(f,\mathcal{G})^{\#^{\emptyset}}:S_{1}\times...\times S_{n}\times\{0\}^{m+1} & \rightarrow & \{0\}\\ (\vec{x},0,...,0) & \rightarrow & \#^{\emptyset}(f(\vec{x},\varepsilon,...,\varepsilon)) \end{array}\] Es decir que \[R(f,\mathcal{G})^{\#^{\emptyset}}=\lambda xy[x+y]\circ[G,F\circ p_{n+m+1}^{n+m+1}]\] donde \(F=Pred\circ\lambda x[1\dot{-}x]\) y \[G=f^{\#^{\emptyset}}\circ\left[p_{1}^{n+m+1},...,p_{n}^{n+m+1},p_{n+1}^{n+m+1},...,p_{n+m}^{n+m+1}\right]\] Pero el lema anterior nos dice que \(F,\lambda xy\left[x+y\right]\in\mathrm{R}^{\#}\), lo cual nos dice que \(R(f,\mathcal{G})^{\#^{\emptyset}}\in\mathrm{R}^{\#}\).
Caso \(h=R(f,\mathcal{G})\), con \[\begin{aligned} f & :S_{1}\times...\times S_{n}\times\emptyset^{\ast m}\rightarrow\omega\\ \mathcal{G}_{a} & :\omega\times S_{1}\times...\times S_{n}\times\emptyset^{\ast m}\times\emptyset^{\ast}\rightarrow\omega\text{, para cada }a\in\emptyset \end{aligned}\] funciones en \(\mathrm{R}_{k}^{\emptyset}\) y cada \(S_{i}\) no vacío. Ya que vale \(\mathrm{Enu}_{k}\) tenemos que \(f^{\#^{\emptyset}}\in\mathrm{R}^{\#}\). Note que \[\begin{array}{rll} f^{\#^{\emptyset}}:S_{1}\times...\times S_{n}\times\{0\}^{m} & \rightarrow & \omega\\ (\vec{x},0,...,0) & \rightarrow & f(\vec{x},\varepsilon,...,\varepsilon) \end{array}\] Nótese que \(\mathcal{G}=\emptyset\), lo cual nos dice que, por definición de \(R(f,\mathcal{G})\): \[\begin{array}{rll} R(f,\mathcal{G}):S_{1}\times...\times S_{n}\times\emptyset^{\ast m}\times\emptyset^{\ast} & \rightarrow & \omega\\ (\vec{x},\varepsilon,...,\varepsilon,\varepsilon) & \rightarrow & f(\vec{x},\varepsilon,...,\varepsilon) \end{array}\] O sea que \[\begin{array}{rll} R(f,\mathcal{G})^{\#^{\emptyset}}:S_{1}\times...\times S_{n}\times\{0\}^{m+1} & \rightarrow & \omega\\ (\vec{x},0,...,0) & \rightarrow & f(\vec{x},\varepsilon,...,\varepsilon) \end{array}\] Es decir que \[R(f,\mathcal{G})^{\#^{\emptyset}}=\lambda xy[x+y]\circ[G,F\circ p_{n+m+1}^{n+m+1}]\] donde \(F=Pred\circ\lambda x[1\dot{-}x]\) y \[G=f^{\#^{\emptyset}}\circ\left[p_{1}^{n+m+1},...,p_{n}^{n+m+1},p_{n+1}^{n+m+1},...,p_{n+m}^{n+m+1}\right]\] lo cual nos dice que \(R(f,\mathcal{G})^{\#^{\emptyset}}\in\mathrm{R}^{\#}\).
Caso \(h=R(f,g)\), con \[\begin{aligned} f & :S_{1}\times...\times S_{n}\times\emptyset^{\ast m}\rightarrow\omega\\ g & :\omega\times\omega\times S_{1}\times...\times S_{n}\times\emptyset^{\ast m}\rightarrow\omega \end{aligned}\] funciones en \(\mathrm{R}_{k}^{\emptyset}\) y cada \(S_{i}\) no vacío. Ya que vale \(\mathrm{Enu}_{k}\) tenemos que \(f^{\#^{\emptyset}},g^{\#^{\emptyset}}\in\mathrm{R}^{\#}\). Note que \[R(f,g)^{\#^{\emptyset}}=R(f^{\#^{\emptyset}},g^{\#^{\emptyset}})\] lo cual nos dice que \(R(f,g)^{\#^{\emptyset}}\in\mathrm{R}^{\#}\).
Caso \(h=R(f,g)\), con \[\begin{aligned} f & :S_{1}\times...\times S_{n}\times\emptyset^{\ast m}\rightarrow\emptyset^{\ast}\\ g & :\omega\times S_{1}\times...\times S_{n}\times\emptyset^{\ast m}\times\emptyset^{\ast}\rightarrow\emptyset^{\ast} \end{aligned}\] funciones en \(\mathrm{R}_{k}^{\emptyset}\) y cada \(S_{i}\) no vacío. Ya que vale \(\mathrm{Enu}_{k}\) tenemos que \(f^{\#^{\emptyset}},g^{\#^{\emptyset}}\in\mathrm{R}^{\#}\). Note que \[R(f,g)^{\#^{\emptyset}}=R(f^{\#^{\emptyset}},g^{\#^{\emptyset}})\] lo cual nos dice que \(R(f,g)^{\#^{\emptyset}}\in\mathrm{R}^{\#}\).
Caso \(h=M(P)\), con \(P:\omega\times\omega^{n}\times\emptyset^{\ast m}\rightarrow\omega\), un predicado en \(\mathrm{R}_{k}^{\emptyset}\). Ya que vale \(\mathrm{Enu}_{k}\) tenemos que \(P^{\#^{\emptyset}}\in\mathrm{R}^{\#}\). Sea \[Q=P^{\#^{\emptyset}}\circ\left[p_{1}^{1+n},...,p_{n}^{1+n},C_{0}^{1}\circ p_{1}^{1+n},...,C_{0}^{1}\circ p_{1}^{1+n}\right]\] Note que \(Q\in\mathrm{R}^{\#}\) y \(Q\) es total. Esto nos dice que \(M(Q)\in\mathrm{R}^{\#}\). Pero \[M(P)^{\#^{\emptyset}}=S\circ[M(Q)\circ[p_{1}^{n+m},...,p_{n}^{n+m}],F\circ p_{n+1}^{n+m},...,F\circ p_{n+m}^{n+m}]\] donde \(S=\lambda x_{1}...x_{m+1}[x_{1}+...+x_{m+1}]\) y \(F=Pred\circ\lambda x[1\dot{-}x]\). El lema anterior nos garantiza que \(S,F\in\mathrm{R}^{\#}\), por lo que \(M(P)^{\#^{\emptyset}}\in\mathrm{R}^{\#}\).
Caso \(h=f\circ[f_{1},...,f_{r}]\text{, con }f,f_{1},...,f_{r}\in\mathrm{R}_{k}^{\emptyset}\text{, }r\geq1\). Es facil probar que \[h^{\#^{\emptyset}}=f^{\#^{\emptyset}}\circ[f_{1}^{\#^{\emptyset}},...,f_{r}^{\#^{\emptyset}}]\] por lo cual podemos aplicar \(\mathrm{Enu}_{k}\).
O sea que hemos probado (a). Asumamos ahora que \(h\) es una función \(\Sigma\)-recursiva y numérica. Veremos que entonces \(h\in\mathrm{R}^{\#}\). Ya que \(h\) es numérica tenemos que es \(\emptyset\)-mixta. O sea que por Independencia del Alfabeto tenemos que \(h\) es \(\emptyset\)-recursiva. Pero entonces (a) nos dice que \(h^{\#}\in\mathrm{R}^{\#}\) lo cual nos dice que \(h\in\mathrm{R}^{\#}\) ya que \(h^{\#}=h\).
En esta sección daremos una modelización matemática del concepto de función \(\Sigma\)-efectivamente computable utilizando un lenguaje de programación teórico el cual depende del alfabeto \(\Sigma\). Lo llamaremos \(\mathcal{S}^{\Sigma}\) a dicho lenguaje. Dado que fue el matemático Von Neumann quien contribuyo al desarrollo de la primera computadora de propósito general (es decir a la cual se le pueden hacer correr programas tal como a las computadoras actuales), nos referiremos a este paradigma de computabilidad efectiva como el paradigma de Von Neumann. También lo llamaremos algunas veces el paradigma imperativo.
Recordemos que llamamos numerales a los siguientes símbolos \[0\ 1\ 2\ 3\ 4\ 5\ 6\ 7\ 8\ 9\] Usaremos \(Num\) para denotar el conjunto de numerales. Nótese que \(Num\cap\omega=\emptyset\). Sea \(Sig:Num^{\ast}\rightarrow Num^{\ast}\) definida de la siguiente manera \[\begin{aligned} Sig(\varepsilon) & =1\\ Sig(\alpha0) & =\alpha1\\ Sig(\alpha1) & =\alpha2\\ Sig(\alpha2) & =\alpha3\\ Sig(\alpha3) & =\alpha4\\ Sig(\alpha4) & =\alpha5\\ Sig(\alpha5) & =\alpha6\\ Sig(\alpha6) & =\alpha7\\ Sig(\alpha7) & =\alpha8\\ Sig(\alpha8) & =\alpha9\\ Sig(\alpha9) & =Sig(\alpha)0 \end{aligned}\] Definamos \(Dec:\omega\rightarrow Num^{\ast}\) de la siguiente manera \[\begin{aligned} Dec(0) & =\varepsilon\\ Dec(n+1) & =Sig(Dec(n)) \end{aligned}\] Nótese que para \(n\in\mathbf{N}\), la palabra \(Dec(n)\) es la notación usual decimal de \(n\). Para hacer mas ágil la notación escribiremos \(\bar{n}\) en lugar de \(Dec(n)\). Nótese que, en virtud de esta convención notacional se tiene que \(Dec=\lambda n[\bar{n}]\). La sintaxis de \(\mathcal{S}^{\Sigma}\) será dada utilizando solo símbolos del alfabeto \(\Sigma\cup\Sigma_{p}\), donde \[\Sigma_{p}=Num\cup\left\{ \leftarrow,+,\dot{-},.,\neq,^{\curvearrowright},\varepsilon,\mathrm{N},\mathrm{K},\mathrm{P},\mathrm{L},\mathrm{I},\mathrm{F},\mathrm{G},\mathrm{O},\mathrm{T},\mathrm{B},\mathrm{E},\mathrm{S}\right\} .\] Cabe aclarar que la palabra de longitud \(0\) no es un elemento de \(\Sigma_{p}\) sino que la letra griega \(\varepsilon\) que usualmente denota esta palabra, lo es. También nótese que en \(\Sigma_{p}\) hay símbolos que a veces representan operaciones como por ejemplo \(+\) , \(^{\curvearrowright}\) y \(\dot{-}\), pero debería quedar claro que en \(\Sigma_{p}\) están los símbolos \(+\), \(^{\curvearrowright}\) y \(\dot{-}\) y no las operaciones que ellos usualmente denotan.
Las palabras de la forma \(\mathrm{N}\bar{k}\) con \(k\in\mathbf{N}\), son llamadas variables numéricas de \(\mathcal{S}^{\Sigma}\). Las palabras de la forma \(\mathrm{P}\bar{k}\) con \(k\in\mathbf{N}\), son llamadas variables alfabéticas de \(\mathcal{S}^{\Sigma}\). Las palabras de la forma \(\mathrm{L}\bar{k}\) con \(k\in\mathbf{N}\), son llamadas labels de \(\mathcal{S}^{\Sigma}\).
Una instrucción básica de \(\mathcal{S}^{\Sigma}\) es una palabra de \((\Sigma\cup\Sigma_{p})^{\ast}\) la cual es de alguna de las siguientes formas
adhocprefix adhocsufix \(\mathrm{N}\bar{k}\leftarrow\mathrm{N}\bar{k}+1\)
adhocprefix adhocsufix \(\mathrm{N}\bar{k}\leftarrow\mathrm{N}\bar{k}\dot{-}1\)
adhocprefix adhocsufix \(\mathrm{N}\bar{k}\leftarrow\mathrm{N}\bar{n}\)
adhocprefix adhocsufix \(\mathrm{N}\bar{k}\leftarrow0\)
adhocprefix adhocsufix \(\mathrm{P}\bar{k}\leftarrow\mathrm{P}\bar{k}.a\)
adhocprefix adhocsufix \(\mathrm{P}\bar{k}\leftarrow\) \(^{\curvearrowright}\mathrm{P}\bar{k}\)
adhocprefix adhocsufix \(\mathrm{P}\bar{k}\leftarrow\mathrm{P}\bar{n}\)
adhocprefix adhocsufix \(\mathrm{P}\bar{k}\leftarrow\varepsilon\)
adhocprefix adhocsufix \(\mathrm{IF}\;\mathrm{N}\bar{k}\neq0\;\mathrm{GOTO}\;\mathrm{L}\bar{n}\)
adhocprefix adhocsufix \(\mathrm{IF}\;\mathrm{P}\bar{k}\;\mathrm{BEGINS}\;a\;\mathrm{GOTO}\;\mathrm{L}\bar{n}\)
adhocprefix adhocsufix \(\mathrm{GOTO}\;\mathrm{L}\bar{n}\)
adhocprefix adhocsufix \(\mathrm{SKIP}\)
donde \(a\in\Sigma\) y \(k,n\in\mathbf{N}\). Como puede observarse para que las instrucciones básicas sean mas legibles usamos espacios entre ciertos símbolos. Por ejemplo, hemos escrito \(\mathrm{N}\bar{k}\leftarrow\mathrm{N}\bar{k}+1\) pero en realidad nos referimos a la palabra \[\mathrm{N}\bar{k}\mathrm{\leftarrow}\text{N}\bar{k}\mathrm{+1}\] cuya longitud es \(2\left\vert \bar{k}\right\vert +5\). Otro ejemplo, hemos escrito \(\mathrm{IF}\;\mathrm{P}\bar{k}\;\mathrm{BEGINS}\;a\;\mathrm{GOTO}\;\mathrm{L}\bar{n}\) pero en realidad nos referíamos a la palabra \(\mathrm{IFP}\bar{k}\mathrm{BEGINS}a\mathrm{GOTOL}\bar{n}\) cuya longitud es \(\left\vert \bar{k}\right\vert +\left\vert \bar{n}\right\vert +15\).
Una instrucción de \(\mathcal{S}^{\Sigma}\) es ya sea una instrucción básica de \(\mathcal{S}^{\Sigma}\) o una palabra de la forma \(\alpha I\), donde \(\alpha\in\{\mathrm{L}\bar{n}:n\in\mathbf{N}\}\) y \(I\) es una instrucción básica de \(\mathcal{S}^{\Sigma}\). Usaremos \(\mathrm{Ins}^{\Sigma}\) para denotar el conjunto de todas las instrucciones de \(\mathcal{S}^{\Sigma}\). Cuando la instrucción \(I\) es de la forma \(\mathrm{L}\bar{n}J\) con \(J\) una instrucción básica, diremos que \(\mathrm{L}\bar{n}\) es el label de \(I\). Damos a continuación, a modo de ejemplo, la interpretación intuitiva asociada a ciertas instrucciones básicas de \(\mathcal{S}^{\Sigma}\): \[\begin{aligned} \text{INSTRUCCION} & :\mathrm{N}\bar{k}\leftarrow\mathrm{N}\bar{k}\dot{-}1\\ \text{INTERPRETACION} & :\begin{array}[t]{c} \text{Si el contenido de }\mathrm{N}\bar{k}\text{ es }0\text{ dejarlo sin modificar; en}\\ \text{caso contrario disminuya en 1 el contenido de }\mathrm{N}\bar{k}\; \end{array}\\ \text{INSTRUCCION} & :\mathrm{N}\bar{k}\leftarrow\mathrm{N}\bar{n}\\ \text{INTERPRETACION} & :\begin{array}[t]{l} \text{Copiar en }\mathrm{N}\bar{k}\text{ el contenido de }\mathrm{N}\bar{n}\text{ (sin modificar el}\\ \text{contenido de }\mathrm{N}\bar{n}\text{)} \end{array}\\ \text{INSTRUCCION} & :\mathrm{P}\bar{k}\leftarrow^{\curvearrowright}\mathrm{P}\bar{k}\\ \text{INTERPRETACION} & :\begin{array}[t]{l} \text{Si el contenido de }\mathrm{P}\bar{k}\text{ es }\varepsilon\text{ dejarlo sin modificar;}\\ \text{en caso contrario remueva el 1er simbolo del}\\ \text{contenido de }\mathrm{P}\bar{k} \end{array} \end{aligned}\] \[\begin{aligned} \text{INSTRUCCION} & :\mathrm{P}\bar{k}\leftarrow\mathrm{P}\bar{k}.a\\ \text{INTERPRETACION} & :\begin{array}[t]{l} \text{Modificar el contenido de }\mathrm{P}\bar{k}\text{ agregandole}\\ \text{el simbolo }a\text{ a la derecha} \end{array}\\ \text{INSTRUCCION} & :\mathrm{IF}\;\mathrm{P}\bar{k}\;\mathrm{BEGINS}\;a\;\mathrm{GOTO}\;\mathrm{L}\bar{m}\\ \text{INTERPRETACION} & :\begin{array}[t]{l} \text{Si el contenido de }\mathrm{P}\bar{k}\text{ comiensa con }a,\text{ejecute}\\ \text{la primer instruccion con label }\mathrm{L}\bar{m}\text{; en caso}\\ \text{contrario ejecute la siguiente instruccion} \end{array} \end{aligned}\]
Un programa de \(\mathcal{S}^{\Sigma}\) es una palabra de la forma \[I_{1}I_{2}...I_{n}\] donde \(n\geq1\), \(I_{1},...,I_{n}\in\mathrm{Ins}^{\Sigma}\) y además se cumple la siguiente propiedad, llamada la ley de los GOTO,
adhocprefix(G)adhocsufix Para cada \(i\in\{1,...,n\}\), si \(\mathrm{GOTOL}\bar{m}\) es un tramo final de \(I_{i}\), entonces existe \(j\in\{1,...,n\}\) tal que \(I_{j}\) tiene label \(\mathrm{L}\bar{m}\)
Usaremos \(\mathrm{Pro}^{\Sigma}\) para denotar el conjunto de todos los programas de \(\mathcal{S}^{\Sigma}\). Como es usual cuando escribamos un programa lo haremos linea por linea, con la finalidad de que sea mas legible. Por ejemplo, escribiremos \[\begin{array}{ll} \mathrm{L}2 & \mathrm{N}12\leftarrow\mathrm{N}12\dot{-}1\\ & \mathrm{P}1\leftarrow\text{ }^{\curvearrowright}\mathrm{P}1\\ & \mathrm{IF\;N}12\neq0\;\mathrm{GOTO}\;\mathrm{L}2 \end{array}\] en lugar de \[\mathrm{L}2\mathrm{N}12\mathrm{\leftarrow}\text{N}12\mathrm{\dot{-}}1\mathrm{P}1\mathrm{\leftarrow}^{\curvearrowright}\mathrm{P}1\mathrm{IFN}12\mathrm{\neq}0\mathrm{GOTOL}2\] Un importante resultado es el siguiente lema que garantiza que los programas pueden ser parseados en forma única como concatenación de instrucciones.
4.43. Se tiene que:
adhocprefix(a)adhocsufix Si \(I_{1}...I_{n}=J_{1}...J_{m}\), con \(I_{1},...,I_{n},J_{1},...,J_{m}\in\mathrm{Ins}^{\Sigma}\), entonces \(n=m\) y \(I_{j}=J_{j}\) para cada \(j\geq1\).
adhocprefix(b)adhocsufix Si \(\mathcal{P}\in\mathrm{Pro}^{\Sigma}\), entonces existe una única sucesión de instrucciones \(I_{1},...,I_{n}\) tal que \(\mathcal{P}=I_{1}...I_{n}\)
Proof. (a) Supongamos \(I_{n}\neq J_{m}\). Ya que \(I_{1}...I_{n}=J_{1}...J_{m}\) tenemos que \(I_{n}\) es un tramo final propio de \(J_{m}\) o \(J_{m}\) es un tramo final propio de \(I_{n}.\) Supongamos \(I_{n}\) es un tramo final propio de \(J_{m}.\) Notar que entonces \(n>1\). Es fácil ver que entonces ya sea \(J_{m}=\mathrm{L}\bar{u}I_{n}\) para algún \(u\in\mathbf{N}\), o \(I_{n}\) es de la forma \(\mathrm{GOTO}\;\mathrm{L}\bar{n}\) y \(J_{m}\) es de la forma \(\alpha\mathrm{IF}\;\mathrm{P}\bar{k}\;\mathrm{BEGINS}\;a\;\mathrm{GOTO}\;\mathrm{L}\bar{n}\) con \(\alpha\in\{\mathrm{L}\bar{n}:n\in\mathbf{N}\}\cup\{\varepsilon\}\). El segundo caso no puede darse porque entonces el anteúltimo símbolo de \(I_{n-1}\) debería ser \(\mathrm{S}\) lo cual no sucede para ninguna instrucción. O sea que \(J_{m}=\mathrm{L}\bar{u}I_{n}\) para algún \(u\in\mathbf{N}\), por lo cual tenemos que \[I_{1}...I_{n}=J_{1}...J_{m-1}\mathrm{L}\bar{u}I_{n}\] Pero esto nos dice que
adhocprefix(*)adhocsufix \(I_{1}...I_{n-1}=J_{1}...J_{m-1}\mathrm{L}\bar{u}.\)
Es fácil deducir entonces que \(\mathrm{L}\bar{u}\) es tramo final de \(I_{n-1}\) y por lo tanto \(\mathrm{GOTO}\;\mathrm{L}\bar{u}\) es tramo final de \(I_{n-1}\). Pero entonces por (*), tenemos que \(\mathrm{GOTO}\) es tramo final de \(J_{1}...J_{m-1}\), lo cual es imposible. Hemos llegado a una contradicción lo cual nos dice que \(I_{n}\) no es un tramo final propio de \(J_{m}.\) Por simetría tenemos también que \(J_{m}\) no es un tramo final propio de \(I_{n}\), arribando a un absurdo. O sea que \(I_{n}=J_{m}\). Usando un razonamiento inductivo obtenemos que \(n=m\) y \(I_{j}=J_{j}\) para cada \(j\geq1\).
(b) Es consecuencia directa de (a).
(b) del lema anterior nos dice que dado un programa \(\mathcal{P}\), tenemos unívocamente determinados \(n(\mathcal{P})\in\mathbf{N}\) y \(I_{1}^{\mathcal{P}},...,I_{n(\mathcal{P})}^{\mathcal{P}}\in\mathrm{Ins}^{\Sigma}\) tales que \(\mathcal{P}=I_{1}^{\mathcal{P}}...I_{n(\mathcal{P})}^{\mathcal{P}}\). Definamos también \[I_{i}^{\mathcal{P}}=\varepsilon\] cuando \(i=0\) o \(i>n(\mathcal{P})\). Nótese que las expresiones \(n(\alpha)\) y \(I_{i}^{\alpha}\) están definidas solo cuando \(\alpha\) es un programa (y \(i\) es un elemento de \(\omega\)), es decir, cierta palabra del alfabeto \(\Sigma\cup\Sigma_{p}\). O sea que cuando usemos notación lambda que involucre dichas expresiones, el alfabeto respecto del cual usaremos dicha notación será \(\Sigma\cup\Sigma_{p}\). Esto nos dice entonces que \(\lambda\alpha[n(\alpha)]\) tiene dominio igual a \(\mathrm{Pro}^{\Sigma}\subseteq(\Sigma\cup\Sigma_{p})^{\ast}\) y \(\lambda i\alpha[I_{i}^{\alpha}]\) tiene dominio igual a \(\omega\times\mathrm{Pro}^{\Sigma}\). Para hacer mas sugestiva la notación a veces escribiremos \(\lambda\mathcal{P}[n(\mathcal{P})]\) y \(\lambda i\mathcal{P}[I_{i}^{\mathcal{P}}]\) en lugar de \(\lambda\alpha[n(\alpha)]\) y \(\lambda i\alpha[I_{i}^{\alpha}]\).
Será necesaria la función \(Bas:\mathrm{Ins}^{\Sigma}\rightarrow(\Sigma\cup\Sigma_{p})^{\ast}\), dada por \[Bas(I)=\left\{ \begin{array}{ccl} J & & \text{si }I\text{ es de la forma }\mathrm{L}\bar{k}J\text{, con }k\in\mathbf{N}\text{ y }J\in\mathrm{Ins}^{\Sigma}\\ I & & \text{caso contrario} \end{array}\right.\]
Definamos \[\begin{aligned} \omega^{\left[\mathbf{N}\right]} & =\left\{ (s_{1},s_{2},...)\in\omega^{\mathbf{N}}:\text{ hay }n\in\mathbf{N}\text{ tal que }s_{i}=0,\text{para }i\geq n\right\} \\ \Sigma^{\ast\left[\mathbf{N}\right]} & =\left\{ (\sigma_{1},\sigma_{2},...)\in\Sigma^{\ast\mathbf{N}}:\text{ hay }n\in\mathbf{N}\text{ tal que }\sigma_{i}=\varepsilon,\text{para }i\geq n\right\} . \end{aligned}\] Asumiremos siempre que en una computación vía un programa de \(\mathcal{S}^{\Sigma}\), todas excepto una cantidad finita de las variables numéricas tienen el valor \(0\) y todas excepto una cantidad finita de las variables alfabéticas tienen el valor \(\varepsilon\). Esto no quita generalidad a nuestra modelización del funcionamiento de los programas ya que todo programa envuelve una cantidad finita de variables.
Un estado es un par \[(\vec{s},\vec{\sigma})=((s_{1},s_{2},...),(\sigma_{1},\sigma_{2},...))\in\omega^{\left[\mathbf{N}\right]}\times\Sigma^{\ast\left[\mathbf{N}\right]}.\] Si \(i\geq1\), entonces diremos que \(s_{i}\) es el contenido o valor de la variable \(\mathrm{N}\bar{\imath}\) en el estado \((\vec{s},\vec{\sigma})\) y \(\sigma_{i}\) es el contenido o valor de la variable \(\mathrm{P}\bar{\imath}\) en el estado \((\vec{s},\vec{\sigma})\). Intuitivamente hablando, un estado es un par de infinituplas que contiene la información de que valores tienen alojados las distintas variables.
Imaginemos que corremos un programa \(\mathcal{P}\) partiendo de un estado inicial \((\vec{s},\vec{\sigma})\). Por supuesto la primera instrucción a realizar será \(I_{1}^{\mathcal{P}}\) pero, dado que \(I_{1}^{\mathcal{P}}\) puede ser de tipo GOTO, la segunda instrucción que realizaremos puede no ser \(I_{2}^{\mathcal{P}}\). Es decir en cada paso iremos decidiendo en función de la instrucción ejecutada cual es la siguiente instrucción a realizar. O sea que mientras corremos \(\mathcal{P}\), en cada paso la información importante a tener en cuenta es, por una parte, cuales son los valores que tienen cada una de las variables y, por otra parte, cual es la instrucción que nos tocara realizar a continuación. Esto da lugar al concepto de descripción instantánea, a saber, un objeto matemático que describe en un instante dado de la computación cuales son los valores de las variables y cual es la instrucción que se debe realizar en el instante siguiente. Mas formalmente una descripción instantánea es una terna \((i,\vec{s},\vec{\sigma})\) tal que \((\vec{s},\vec{\sigma})\) es un estado e \(i\in\omega\). Es decir que \(\omega\times\omega^{\left[\mathbf{N}\right]}\times\Sigma^{\ast\left[\mathbf{N}\right]}\) es el conjunto formado por todas las descripciones instantáneas. Intuitivamente hablando, cuando \(i\in\{1,...,n(\mathcal{P})\}\), la descripción instantánea \((i,\vec{s},\vec{\sigma})\) nos dice que las variables están en el estado \((\vec{s},\vec{\sigma})\) y que la instrucción que debemos realizar es \(I_{i}^{\mathcal{P}}\). Dado que será conveniente para simplificar el tratamiento formal, nos abstraeremos un poco y cuando \(i=0\) o \(i>n(\mathcal{P})\) pensaremos también que la descripción instantánea \((i,\vec{s},\vec{\sigma})\) nos dice que las variables están en el estado \((\vec{s},\vec{\sigma})\) y que debemos realizar \(I_{i}^{\mathcal{P}}=\varepsilon\) (aunque por supuesto no podremos realizarla ya que no es una instrucción).
Dado un programa \(\mathcal{P}\) definiremos a continuación una función \[S_{\mathcal{P}}:\omega\times\omega^{\left[\mathbf{N}\right]}\times\Sigma^{\ast\left[\mathbf{N}\right]}\rightarrow\omega\times\omega^{\left[\mathbf{N}\right]}\times\Sigma^{\ast\left[\mathbf{N}\right]}\] la cual le asignara a una descripción instantánea \((i,\vec{s},\vec{\sigma})\) la descripción instantánea sucesora de \((i,\vec{s},\vec{\sigma})\) con respecto a \(\mathcal{P}\). Cuando \(i\in\{1,...,n(\mathcal{P})\}\), intuitivamente hablando, \(S_{\mathcal{P}}(i,\vec{s},\vec{\sigma})\) será la descripción instantánea que resulta luego de realizar \(I_{i}^{\mathcal{P}}\) estando en el estado \((\vec{s},\vec{\sigma})\). Cuando \(i=0\) o \(i>n(\mathcal{P})\) definiremos \(S_{\mathcal{P}}(i,\vec{s},\vec{\sigma})=(i,\vec{s},\vec{\sigma})\), lo cual es bastante intuitivo ya que si estamos en estado \((\vec{s},\vec{\sigma})\) y debemos realizar \(I_{i}^{\mathcal{P}}=\varepsilon\), dado que \(\varepsilon\) no es una instrucción y por lo tanto no la podremos realizar, seguiremos en el mismo estado y teniendo que realizar \(I_{i}^{\mathcal{P}}\).
Para darle una semántica mas unificada al concepto de descripción instantánea sucesora debemos crear un nuevo verbo. El verbo "realizarp". Dada una actividad A, diremos que un individuo P realizap la actividad A, si P realiza A, en caso de que pueda hacerlo. O sea realizarp una actividad es realizarla si se puede.
Para dar otro ejemplo de este tipo de verbos, consideremos el verbo "comprarp", es decir "comprar si se puede". Un hijo le pide a su padre que le compre un determinado juguete y el padre le dice "si, hijo mio, te lo voy a comprarp". Luego el padre es despedido de su empleo y su situación económica hace que no le sea posible comprar dicho juguete. Sin embargo el padre no mintió ya que si bien no compro dicho juguete, él si lo comprop.
Con este verbo podemos describir intuitivamente \(S_{\mathcal{P}}(i,\vec{s},\vec{\sigma})\): \[\begin{aligned} S_{\mathcal{P}}(i,\vec{s},\vec{\sigma}) & =\mathrm{desc\ inst\ que\ resulta\ luego\ de}\\ & \mathrm{rea}\text{l}\mathrm{izarp\ }I_{i}^{\mathcal{P}}\text{, estando en estado }(\vec{s},\vec{\sigma}) \end{aligned}\] Ahora sí, daremos la definición matemática de \(S_{\mathcal{P}}(i,\vec{s},\vec{\sigma})\), según se den distintos casos posibles.
Caso \(i\notin\{1,...,n(\mathcal{P})\}\). Entonces \(S_{\mathcal{P}}(i,\vec{s},\vec{\sigma})=(i,\vec{s},\vec{\sigma})\)
Caso \(Bas(I_{i}^{\mathcal{P}})=\mathrm{N}\bar{k}\leftarrow\mathrm{N}\bar{k}\dot{-}1.\) Entonces \[S_{\mathcal{P}}(i,\vec{s},\vec{\sigma})=(i+1,(s_{1},...,s_{k-1},s_{k}\dot{-}1,s_{k+1},...),\vec{\sigma})\]
Caso \(Bas(I_{i}^{\mathcal{P}})=\mathrm{N}\bar{k}\leftarrow\mathrm{N}\bar{k}+1.\) Entonces \[S_{\mathcal{P}}(i,\vec{s},\vec{\sigma})=(i+1,(s_{1},...,s_{k-1},s_{k}+1,s_{k+1},...),\vec{\sigma})\]
Caso \(Bas(I_{i}^{\mathcal{P}})=\mathrm{N}\bar{k}\leftarrow\mathrm{N}\bar{n}\). Entonces \[S_{\mathcal{P}}(i,\vec{s},\vec{\sigma})=(i+1,(s_{1},...,s_{k-1},s_{n},s_{k+1},...),\vec{\sigma})\]
Caso \(Bas(I_{i}^{\mathcal{P}})=\mathrm{N}\bar{k}\leftarrow0.\) Entonces \[S_{\mathcal{P}}(i,\vec{s},\vec{\sigma})=(i+1,(s_{1},...,s_{k-1},0,s_{k+1},...),\vec{\sigma})\]
Caso \(Bas(I_{i}^{\mathcal{P}})=\mathrm{IF}\) \(\mathrm{N}\bar{k}\) \(\neq0\) \(\mathrm{GOTO}\) \(\mathrm{L}\bar{m}.\) Entonces tenemos dos subcasos.
Subcaso a. El valor de \(\mathrm{N}\bar{k}\) en \((\vec{s},\vec{\sigma})\) es 0. Entonces \[S_{\mathcal{P}}(i,\vec{s},\vec{\sigma})=(i+1,\vec{s},\vec{\sigma})\]
Subcaso b. El valor de \(\mathrm{N}\bar{k}\) en \((\vec{s},\vec{\sigma})\) es no nulo. Entonces \[S_{\mathcal{P}}(i,\vec{s},\vec{\sigma})=(\min\{l:I_{l}^{\mathcal{P}}\ \mathrm{tiene\ label\ L}\bar{m}\},\vec{s},\vec{\sigma})\]
Caso \(Bas(I_{i}^{\mathcal{P}})=\mathrm{P}\bar{k}\leftarrow\) \(^{\curvearrowright}\mathrm{P}\bar{k}.\) Entonces \[S_{\mathcal{P}}(i,\vec{s},\vec{\sigma})=(i+1,\vec{s},(\sigma_{1},...,\sigma_{k-1},^{\curvearrowright}\sigma_{k},\sigma_{k+1},...))\]
Caso \(Bas(I_{i}^{\mathcal{P}})=\mathrm{P}\bar{k}\leftarrow\mathrm{P}\bar{k}.a\). Entonces \[S_{\mathcal{P}}(i,\vec{s},\vec{\sigma})=(i+1,\vec{s},(\sigma_{1},...,\sigma_{k-1},\sigma_{k}a,\sigma_{k+1},...))\]
Caso \(Bas(I_{i}^{\mathcal{P}})=\mathrm{P}\bar{k}\leftarrow\mathrm{P}\bar{n}\). Entonces \[S_{\mathcal{P}}(i,\vec{s},\vec{\sigma})=(i+1,\vec{s},(\sigma_{1},...,\sigma_{k-1},\sigma_{n},\sigma_{k+1},...))\]
Caso \(Bas(I_{i}^{\mathcal{P}})=\mathrm{P}\bar{k}\leftarrow\varepsilon.\) Entonces \[S_{\mathcal{P}}(i,\vec{s},\vec{\sigma})=(i+1,\vec{s},(\sigma_{1},...,\sigma_{k-1},\varepsilon,\sigma_{k+1},...))\]
Caso \(Bas(I_{i}^{\mathcal{P}})=\mathrm{IF}\;\mathrm{P}\bar{k}\;\mathrm{BEGINS}\;a\;\mathrm{GOTO}\;\mathrm{L}\bar{m}.\) Entonces tenemos dos subcasos.
Subcaso a. El valor de \(\mathrm{P}\bar{k}\) en \((\vec{s},\vec{\sigma})\) comienza con \(a\). Entonces \[S_{\mathcal{P}}(i,\vec{s},\vec{\sigma})=(\min\{l:I_{l}^{\mathcal{P}}\ \mathrm{tiene\ label\ L}\bar{m}\},\vec{s},\vec{\sigma})\]
Subcaso b. El valor de \(\mathrm{P}\bar{k}\) en \((\vec{s},\vec{\sigma})\) no comienza con \(a\). Entonces \[S_{\mathcal{P}}(i,\vec{s},\vec{\sigma})=(i+1,\vec{s},\vec{\sigma})\]
Caso \(Bas(I_{i}^{\mathcal{P}})=\mathrm{GOTO}\;\mathrm{L}\bar{m}\). Entonces \[S_{\mathcal{P}}(i,\vec{s},\vec{\sigma})=(\min\{l:I_{l}^{\mathcal{P}}\ \mathrm{tiene\ label\ L}\bar{m}\},\vec{s},\vec{\sigma})\]
Caso \(Bas(I_{i}^{\mathcal{P}})=\mathrm{SKIP}\). Entonces \[S_{\mathcal{P}}(i,\vec{s},\vec{\sigma})=(i+1,\vec{s},\vec{\sigma})\]
Dado un programa \(\mathcal{P}\) y un estado \((\vec{s},\vec{\sigma})\) a la infinitupla \[((1,\vec{s},\vec{\sigma}),S_{\mathcal{P}}(1,\vec{s},\vec{\sigma}),S_{\mathcal{P}}(S_{\mathcal{P}}(1,\vec{s},\vec{\sigma})),S_{\mathcal{P}}(S_{\mathcal{P}}(S_{\mathcal{P}}(1,\vec{s},\vec{\sigma}))),...)\] la llamaremos la computación de \(\mathcal{P}\) partiendo del estado \((\vec{s},\vec{\sigma})\). Diremos que \[\overset{t\text{ veces}}{\overbrace{S_{\mathcal{P}}(...S_{\mathcal{P}}(S_{\mathcal{P}}(}}1,\vec{s},\vec{\sigma}))...)\] es la descripción instantánea obtenida luego de \(t\) pasos, partiendo del estado \((\vec{s},\vec{\sigma})\). Si \[\overset{t\text{ veces}}{\overbrace{S_{\mathcal{P}}(...S_{\mathcal{P}}(S_{\mathcal{P}}(}}1,\vec{s},\vec{\sigma}))...)=(j,\vec{u},\vec{\eta})\] diremos que \((\vec{u},\vec{\eta})\) es el estado obtenido luego de \(t\) pasos, partiendo del estado \((\vec{s},\vec{\sigma})\).
Es claro que en la infinitupla de mas arriba esta toda la información de la "corrida" del programa \(\mathcal{P}\) cuando partimos del estado \((\vec{s},\vec{\sigma})\). Veamos un ejemplo. Sea \(\Sigma=\{\blacktriangle,\#\}\) y sea \(\mathcal{P}\) el siguiente programa \[\begin{array}{ll} \mathrm{L}3 & \mathrm{N}4\leftarrow\mathrm{N}4+1\\ & \mathrm{P}1\leftarrow\ ^{\curvearrowright}\mathrm{P}1\\ & \mathrm{IF\ P}1\ \mathrm{BEGINS\ }\blacktriangle\ \mathrm{GOTO}\;\mathrm{L}3\\ & \mathrm{P}3\leftarrow\mathrm{P}3.\# \end{array}\] Supongamos que tomamos \((\vec{s},\vec{\sigma})\) igual al estado \[\left((2,1,0,5,3,0,0,0,...),(\#\blacktriangle\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#,\varepsilon,\varepsilon,\varepsilon,...)\right)\] Tendremos entonces que la computación de \(\mathcal{P}\) partiendo del estado \((\vec{s},\vec{\sigma})\) es la infinitupla formada por la siguiente sucesión (de arriba hacia abajo) de descripciones instantáneas: \[\begin{gathered} (1,(2,1,0,5,3,0,0,0,...),(\#\blacktriangle\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#,\varepsilon,\varepsilon,\varepsilon,...))\\ \text{realizando }I_{1}^{\mathcal{P}}=\mathrm{N}4\leftarrow\mathrm{N}4+1\text{ obtenemos}\\ (2,(2,1,0,6,3,0,0,0,...),(\#\blacktriangle\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#,\varepsilon,\varepsilon,\varepsilon,...))\\ \text{realizando }I_{2}^{\mathcal{P}}=\mathrm{P}1\leftarrow\ ^{\curvearrowright}\mathrm{P}1\text{ obtenemos}\\ (3,(2,1,0,6,3,0,0,0,...),(\blacktriangle\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#,\varepsilon,\varepsilon,\varepsilon,...))\\ \text{realizando }I_{3}^{\mathcal{P}}=\mathrm{IF\ P}1\ \mathrm{BEGINS\ }\blacktriangle\ \mathrm{GOTO}\;\mathrm{L}3\text{ obtenemos}\\ (1,(2,1,0,6,3,0,0,0,...),(\blacktriangle\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#,\varepsilon,\varepsilon,\varepsilon,...))\\ \text{realizando }I_{1}^{\mathcal{P}}=\mathrm{N}4\leftarrow\mathrm{N}4+1\text{ obtenemos}\\ (2,(2,1,0,7,3,0,0,0,...),(\blacktriangle\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#,\varepsilon,\varepsilon,\varepsilon,...))\\ \text{realizando }I_{2}^{\mathcal{P}}=\mathrm{P}1\leftarrow\ ^{\curvearrowright}\mathrm{P}1\text{ obtenemos}\\ (3,(2,1,0,7,3,0,0,0,...),(\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#,\varepsilon,\varepsilon,\varepsilon,...))\\ \text{realizando }I_{3}^{\mathcal{P}}=\mathrm{IF\ P}1\ \mathrm{BEGINS\ }\blacktriangle\ \mathrm{GOTO}\;\mathrm{L}3\text{ obtenemos}\\ (4,(2,1,0,7,3,0,0,0,...),(\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#,\varepsilon,\varepsilon,\varepsilon,...))\\ \text{realizando }I_{4}^{\mathcal{P}}=\mathrm{P}3\leftarrow\mathrm{P}3.\#\text{ obtenemos}\\ (5,(2,1,0,7,3,0,0,0,...),(\#\#,\varepsilon,\blacktriangle\blacktriangle\#,\#\blacktriangle,\#,\varepsilon,\varepsilon,\varepsilon,...))\\ \text{intentando realizar }I_{5}^{\mathcal{P}}=\varepsilon\text{ obtenemos}\\ (5,(2,1,0,7,3,0,0,0,...),(\#\#,\varepsilon,\blacktriangle\blacktriangle\#,\#\blacktriangle,\#,\varepsilon,\varepsilon,\varepsilon,...))\\ \text{intentando realizar }I_{5}^{\mathcal{P}}=\varepsilon\text{ obtenemos}\\ (5,(2,1,0,7,3,0,0,0,...),(\#\#,\varepsilon,\blacktriangle\blacktriangle\#,\#\blacktriangle,\#,\varepsilon,\varepsilon,\varepsilon,...))\\ \text{intentando realizar }I_{5}^{\mathcal{P}}=\varepsilon\text{ obtenemos}\\ (5,(2,1,0,7,3,0,0,0,...),(\#\#,\varepsilon,\blacktriangle\blacktriangle\#,\#\blacktriangle,\#,\varepsilon,\varepsilon,\varepsilon,...))\\ \vdots \end{gathered}\] Nótese que en este caso es natural decir que el programa \(\mathcal{P}\) se detiene, partiendo del estado inicial dado ya que llega a un punto en el que queda intentando realizar \(I_{n(\mathcal{P})+1}^{\mathcal{P}}\) lo cual no es una instrucción. Veamos un ejemplo de no detención. Sea \(\mathcal{Q}\) el siguiente programa \[\begin{array}{ll} \mathrm{L}3 & \mathrm{N}4\leftarrow\mathrm{N}4+1\\ & \mathrm{IF\ P}1\ \mathrm{BEGINS\ }\blacktriangle\ \mathrm{GOTO}\;\mathrm{L}3 \end{array}\] Supongamos que tomamos \((\vec{s},\vec{\sigma})\) igual al estado \[\left((2,1,0,5,3,0,0,0,...),(\blacktriangle\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#,\varepsilon,\varepsilon,\varepsilon,...)\right)\] Tendremos entonces que la computación de \(\mathcal{Q}\) partiendo del estado \((\vec{s},\vec{\sigma})\) es la siguiente sucesión (de arriba hacia abajo) de descripciones instantáneas: \[\begin{gathered} (1,(2,1,0,5,3,0,0,0,...),(\blacktriangle\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#,\varepsilon,\varepsilon,\varepsilon,...))\\ \text{realizando }I_{1}^{\mathcal{P}}=\mathrm{N}4\leftarrow\mathrm{N}4+1\text{ obtenemos}\\ (2,(2,1,0,6,3,0,0,0,...),(\blacktriangle\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#,\varepsilon,\varepsilon,\varepsilon,...))\\ \text{realizando }I_{2}^{\mathcal{P}}=\mathrm{IF\ P}1\ \mathrm{BEGINS\ }\blacktriangle\ \mathrm{GOTO}\;\mathrm{L}3\text{ obtenemos}\\ (1,(2,1,0,6,3,0,0,0,...),(\blacktriangle\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#,\varepsilon,\varepsilon,\varepsilon,...))\\ \text{realizando }I_{1}^{\mathcal{P}}=\mathrm{N}4\leftarrow\mathrm{N}4+1\text{ obtenemos}\\ (2,(2,1,0,7,3,0,0,0,...),(\blacktriangle\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#,\varepsilon,\varepsilon,\varepsilon,...))\\ \text{realizando }I_{2}^{\mathcal{P}}=\mathrm{IF\ P}1\ \mathrm{BEGINS\ }\blacktriangle\ \mathrm{GOTO}\;\mathrm{L}3\text{ obtenemos}\\ (1,(2,1,0,7,3,0,0,0,...),(\blacktriangle\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#,\varepsilon,\varepsilon,\varepsilon,...))\\ \text{realizando }I_{1}^{\mathcal{P}}=\mathrm{N}4\leftarrow\mathrm{N}4+1\text{ obtenemos}\\ (2,(2,1,0,8,3,0,0,0,...),(\blacktriangle\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#,\varepsilon,\varepsilon,\varepsilon,...))\\ \text{realizando }I_{2}^{\mathcal{P}}=\mathrm{IF\ P}1\ \mathrm{BEGINS\ }\blacktriangle\ \mathrm{GOTO}\;\mathrm{L}3\text{ obtenemos}\\ (1,(2,1,0,8,3,0,0,0,...),(\blacktriangle\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#,\varepsilon,\varepsilon,\varepsilon,...))\\ \text{realizando }I_{1}^{\mathcal{P}}=\mathrm{N}4\leftarrow\mathrm{N}4+1\text{ obtenemos}\\ (2,(2,1,0,9,3,0,0,0,...),(\blacktriangle\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#,\varepsilon,\varepsilon,\varepsilon,...))\\ \text{realizando }I_{2}^{\mathcal{P}}=\mathrm{IF\ P}1\ \mathrm{BEGINS\ }\blacktriangle\ \mathrm{GOTO}\;\mathrm{L}3\text{ obtenemos}\\ (1,(2,1,0,9,3,0,0,0,...),(\blacktriangle\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#,\varepsilon,\varepsilon,\varepsilon,...))\\ \vdots \end{gathered}\] Nótese que en este caso, es claro que el programa \(\mathcal{Q}\) no se detiene partiendo del estado inicial dado ya que sigue indefinidamente realizando instrucciones.
Ahora definiremos matemáticamente el concepto de detención. Cuando la primer coordenada de \[\overset{t\text{ veces}}{\overbrace{S_{\mathcal{P}}(...S_{\mathcal{P}}(S_{\mathcal{P}}(}}1,\vec{s},\vec{\sigma}))...)\] sea igual a \(n(\mathcal{P})+1\), diremos que \(\mathcal{P}\) se detiene (luego de \(t\) pasos), partiendo desde el estado \((\vec{s},\vec{\sigma})\). Si ninguna de las primeras coordenadas en la computación \[((1,\vec{s},\vec{\sigma}),S_{\mathcal{P}}(1,\vec{s},\vec{\sigma}),S_{\mathcal{P}}(S_{\mathcal{P}}(1,\vec{s},\vec{\sigma})),S_{\mathcal{P}}(S_{\mathcal{P}}(S_{\mathcal{P}}(1,\vec{s},\vec{\sigma}))),...)\] es igual a \(n(\mathcal{P})+1\), diremos que \(\mathcal{P}\) no se detiene partiendo del estado \((\vec{s},\vec{\sigma})\). Como puede observarse los programas de \(\mathcal{S}^{\Sigma}\) tienen una sola manera de detenerse, i.e. siempre que se detienen lo hacen habiendo realizado la última de sus instrucciones e intentando realizar la instrucción siguiente a su última instrucción.
Nótese que en los conceptos antes definidos por "1 paso" entendemos “aplicar una ves la función \(S_{\mathcal{P}}\)” y esto no siempre involucra “realizar una instrucción” ya que podría pasar que aplicáramos \(S_{\mathcal{P}}\) a una descripción instantánea cuya primer coordenada es \(n(\mathcal{P})+1\). Podemos redondear esta idea diciendo que “1 paso” equivale a "realizarp una instrucción", donde tal como se lo explico antes "realizarp" significa "realizar si se puede".
Ahora que hemos definido matemáticamente la semántica de \(\mathcal{S}^{\Sigma}\) estamos en condiciones de definir el concepto de función \(\Sigma\)-computable, el cual será una modelización matemática del concepto de función \(\Sigma\)-efectivamente computable. Intuitivamente hablando una función será \(\Sigma\)-computable cuando haya un programa que la compute. Para precisar este concepto nos será útil la siguiente notación. Dados \(x_{1},...,x_{n}\in\omega\) y \(\alpha_{1},...,\alpha_{m}\in\Sigma^{\ast}\), con \(n,m\in\omega\), usaremos \[\left\Vert x_{1},...,x_{n},\alpha_{1},...,\alpha_{m}\right\Vert\] para denotar el estado \[\left((x_{1},...,x_{n},0,...),(\alpha_{1},...,\alpha_{m},\varepsilon,...)\right)\] Esta notación requiere aclarar un poco como debe interpretarse en los casos limite, es decir cuando alguno de los números \(n,m\) es igual a \(0\). Nótese que por ejemplo \[\left\Vert x\right\Vert =\left((x,0,...),(\varepsilon,...)\right)\] (es el caso \(n=1\) y \(m=0\)). También \[\left\Vert \alpha\right\Vert =\left((0,...),(\alpha,\varepsilon,...)\right)\] (es el caso \(n=0\) y \(m=1\)). En el caso \(n=m=0\) pensaremos que \(x_{1},...,x_{n},\alpha_{1},...,\alpha_{m}\) se transforma en \(\lozenge\) por lo que se obtiene \[\left\Vert \lozenge\right\Vert =\left((0,...),(\varepsilon,...)\right)\] Además es claro que \[\left\Vert x_{1},...,x_{n},\alpha_{1},...,\alpha_{m}\right\Vert =\left\Vert x_{1},...,x_{n},\overset{i}{\overbrace{0,...,0}},\alpha_{1},...,\alpha_{m},\overset{j}{\overbrace{\varepsilon,...,\varepsilon}}\right\Vert\] cualesquiera sean \(i,j\in\omega\).
Dado \(\mathcal{P}\in\mathrm{Pro}^{\Sigma}\), definamos para cada par \(n,m\geq0\), la función \(\Psi_{\mathcal{P}}^{n,m,\#}\) de la siguiente manera: \[\begin{array}{l} D_{\Psi_{\mathcal{P}}^{n,m,\#}}=\{(\vec{x},\vec{\alpha})\in\omega^{n}\times\Sigma^{\ast m}:\mathcal{P}\text{ termina, partiendo del}\\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\text{estado }\left\Vert x_{1},...,x_{n},\alpha_{1},...,\alpha_{m}\right\Vert \} \end{array}\] \[\begin{array}{l} \Psi_{\mathcal{P}}^{n,m,\#}(\vec{x},\vec{\alpha})=\text{valor de }\mathrm{N}1\text{ en el estado obtenido cuando }\mathcal{P}\text{ termina,}\\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\text{partiendo de }\left\Vert x_{1},...,x_{n},\alpha_{1},...,\alpha_{m}\right\Vert \end{array}\] Análogamente definamos la función \(\Psi_{\mathcal{P}}^{n,m,\ast}\) de la siguiente manera: \[\begin{array}{l} D_{\Psi_{\mathcal{P}}^{n,m,\ast}}=\{(\vec{x},\vec{\alpha})\in\omega^{n}\times\Sigma^{\ast m}:\mathcal{P}\text{ termina, partiendo del}\\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\text{estado }\left\Vert x_{1},...,x_{n},\alpha_{1},...,\alpha_{m}\right\Vert \} \end{array}\] \[\begin{array}{l} \Psi_{\mathcal{P}}^{n,m,\ast}(\vec{x},\vec{\alpha})=\text{valor de }\mathrm{P}1\text{ en el estado obtenido cuando }\mathcal{P}\text{ termina,}\\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\text{partiendo de }\left\Vert x_{1},...,x_{n},\alpha_{1},...,\alpha_{m}\right\Vert \end{array}\] Ahora sí daremos la definición precisa de función \(\Sigma\)-computable. Una función \(\Sigma\)-mixta \(f:S\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) será llamada \(\Sigma\)-computable si hay un programa \(\mathcal{P}\) tal que \(f=\Psi_{\mathcal{P}}^{n,m,\#}\). En tal caso diremos que la función \(f\) es computada por \(\mathcal{P}\) o que \(\mathcal{P}\) computa a \(f\). Análogamente una función \(\Sigma\)-mixta \(f:S\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\Sigma^{\ast}\) será llamada \(\Sigma\)-computable si hay un programa \(\mathcal{P}\) tal que \(f=\Psi_{\mathcal{P}}^{n,m,\ast}\). En tal caso diremos que la función \(f\) es computada por \(\mathcal{P}\) o que \(\mathcal{P}\) computa a \(f\).
Algunos ejemplos:
adhocprefix(E1)adhocsufix El programa \[\begin{array}{ll} \mathrm{L}2 & \mathrm{IF}\;\mathrm{N}1\neq0\;\mathrm{GOTO}\;\mathrm{L}1\\ & \mathrm{GOTO}\;\mathrm{L}2\\ \mathrm{L}1 & \mathrm{N}1\leftarrow\mathrm{N}1\dot{-}1 \end{array}\] computa la función \(Pred\). Note que este programa también computa las funciones \(Pred\circ p_{1}^{n,m}\), para \(n\geq1\) y \(m\geq0\).
adhocprefix(E2)adhocsufix Sea \(\Sigma=\{\clubsuit,\triangle\}.\) El programa \[\begin{array}{ll} \mathrm{L}3 & \mathrm{IF}\;\mathrm{P}2\;\mathrm{BEGINS}\;\clubsuit\;\mathrm{GOTO}\;\mathrm{L}1\\ & \mathrm{IF}\;\mathrm{P}2\;\mathrm{BEGINS}\;\triangle\;\mathrm{GOTO}\;\mathrm{L}2\\ & \mathrm{GOTO}\;\mathrm{L}4\\ \mathrm{L}1 & \mathrm{P}2\leftarrow\text{ }^{\curvearrowright}\mathrm{P}2\\ & \mathrm{P}1\leftarrow\mathrm{P}1.\clubsuit\\ & \mathrm{GOTO}\;\mathrm{L}3\\ \mathrm{L}2 & \mathrm{P}2\leftarrow\text{ }^{\curvearrowright}\mathrm{P}2\\ & \mathrm{P}1\leftarrow\mathrm{P}1.\triangle\\ & \mathrm{GOTO}\;\mathrm{L}3\\ \mathrm{L}4 & \mathrm{SKIP} \end{array}\] computa la función \(\lambda\alpha\beta\left[\alpha\beta\right].\)
adhocprefix(E3)adhocsufix Nótese que \(D_{\Psi_{\mathcal{P}}^{0,0,\#}}=\{\lozenge\}\) en caso que \(\mathcal{P}\) termina partiendo del estado \(((0,0,...),(\varepsilon,\varepsilon,...))\) y en tal caso \[\begin{array}{l} \Psi_{\mathcal{P}}^{0,0,\#}(\lozenge)=\text{valor de }\mathrm{N}1\text{ en el estado obtenido cuando }\mathcal{P}\text{ termina,}\\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\text{partiendo de }((0,0,...),(\varepsilon,\varepsilon,...)) \end{array}\] En caso de que \(\mathcal{P}\) no termina partiendo del estado \(((0,0,...),(\varepsilon,\varepsilon,...))\) tenemos que \(D_{\Psi_{\mathcal{P}}^{0,0,\#}}=\emptyset\).
Por supuesto para que el concepto de función \(\Sigma\)-computable tenga chance de ser una modelización adecuada del concepto de función \(\Sigma\)-efectivamente computable, tiene que ser cierto el siguiente resultado.
4.7 (Leibniz vence a Neumann). Si \(f\) es \(\Sigma\)-computable, entonces \(f\) es \(\Sigma\)-efectivamente computable.
Proof. Supongamos por ejemplo que \(f:S\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) es computada por \(\mathcal{P}\in\mathrm{Pro}^{\Sigma}\). Un procedimiento efectivo que compute a \(f\) puede consistir de realizar las sucesivas instrucciones de \(\mathcal{P}\) (partiendo de \(\left\Vert x_{1},...,x_{n},\alpha_{1},...,\alpha_{m}\right\Vert\)) y eventualmente terminar en caso de que nos toque realizar la instrucción \(n(\mathcal{P})+1\), y dar como salida el contenido de la variable \(\mathrm{N}1\). Daremos a continuación una descripción mas detallada de dicho procedimiento.
Fijemos primero un número natural \(k\) que sea mayor que \(\max\{n,m\}\) y tal que toda variable que ocurre en \(\mathcal{P}\) este en la lista \(\mathrm{N}1,...,\mathrm{N}\bar{k},\mathrm{P}1,...,\mathrm{P}\bar{k}\). Sea \(\mathbb{P}\) el siguiente procedimiento efectivo:
- Conjunto de datos de entrada de \(\mathbb{P}\) igual a \(\omega^{n}\times\Sigma^{\ast}{}^{m}\)
- Conjunto de datos de salida de \(\mathbb{P}\) contenido en \(\omega\)
- Funcionamiento:
Etapa 1
Asignar los siguientes valores a las variables \(I,X_{1},...,X_{k},A_{1},...,A_{k}\): \[\begin{array}{ccc} & I\leftarrow1\\ X_{1}\leftarrow x_{1} & & A_{1}\leftarrow\alpha_{1}\\ \vdots & & \vdots\\ X_{n}\leftarrow x_{n} & & A_{m}\leftarrow\alpha_{m}\\ X_{n+1}\leftarrow0 & & A_{m+1}\leftarrow\varepsilon\\ \vdots & & \vdots\\ X_{k}\leftarrow0 & & A_{k}\leftarrow\varepsilon \end{array}\]
Etapa 2
Asignar:
\(I\leftarrow\) 1er coordenada de \(S_{\mathcal{P}}(I,(X_{1},...,X_{k},0,...),(A_{1},...,A_{k},\varepsilon,...))\)
Para \(i=1,...,k\):
\(X_{i}\leftarrow\) \(i\)-ésima coordenada de la segunda coordenada de \(S_{\mathcal{P}}(I,(X_{1},...,X_{k},0,...),(A_{1},...,A_{k},\varepsilon,...))\)
\(A_{i}\leftarrow\) \(i\)-ésima coordenada de la tercer coordenada de \(S_{\mathcal{P}}(I,(X_{1},...,X_{k},0,...),(A_{1},...,A_{k},\varepsilon,...))\)
Etapa 3
Si \(I=n(\mathcal{P})+1\), entonces dar \(X_{1}\) como salida y detenerse. En caso contrario ir a Etapa 2.
Se deja al lector corroborar que \(\mathbb{P}\) es efectivo.
Sin embargo nuestro modelo imperativo de función \(\Sigma\)-efectivamente computable todavía podría no ser correcto ya que podría pasar que haya una función \(\Sigma\)-mixta que sea computada por un procedimiento efectivo pero que no exista un programa de \(\mathcal{S}^{\Sigma}\) que la compute. En otras palabras el modelo imperativo o Neumanniano podría ser incompleto. Por supuesto este no es el caso y los desarrollos que veremos mas adelante nos convencerán de que el paradigma imperativo es completo, es decir Neumann también vence a Leibniz.
Supongamos que estamos escribiendo un programa \(\mathcal{P}\) de \(\mathcal{S}^{\Sigma}\) con el objeto de que realice cierta tarea. Supongamos además que nos vendría muy bien para nuestros propósitos poder usar una instrucción \[\mathrm{N}5\leftarrow\mathrm{N}16+\mathrm{N}3\] la cual por supuesto al correr el programa, debería producir el efecto de dejar en la variable \(\mathrm{N}5\) la suma de los contenidos de las variables \(\mathrm{N}16\) y \(\mathrm{N}3\), sin modificar el contenido de las variables distintas a \(\mathrm{N}5\). Lamentablemente no tenemos en \(\mathcal{S}^{\Sigma}\) este tipo de instrucción pero podríamos reemplazarla por el siguiente programa \[\begin{array}{ll} & \mathrm{N}1111\leftarrow\mathrm{N}16\\ & \mathrm{N}2222\leftarrow\mathrm{N}3\\ & \mathrm{N}5\leftarrow\mathrm{N}1111\\ \mathrm{L}1000 & \mathrm{IF}\;\mathrm{N}2222\neq0\;\mathrm{GOTO}\;\mathrm{L}2000\\ & \mathrm{GOTO}\;\mathrm{L}3000\\ \mathrm{L}2000 & \mathrm{N}2222\leftarrow\mathrm{N}2222\dot{-}1\\ & \mathrm{N}5\leftarrow\mathrm{N}5+1\\ & \mathrm{GOTO}\;\mathrm{L}1000\\ \mathrm{L}3000 & \mathrm{SKIP} \end{array}\] donde las variables \(\mathrm{N}1111\), \(\mathrm{N}2222\) y los labels \(\mathrm{L}1000\), \(\mathrm{L}2000\), \(\mathrm{L}3000\) solo serán usados aquí, es decir no aparecerán en el resto de nuestro programa \(\mathcal{P}\). Nótese que este programa cuando es corrido termina dejando en la variable \(\mathrm{N}5\) la suma de los contenidos de las variables \(\mathrm{N}16\) y \(\mathrm{N}3\) y modifica el contenido de las variables \(\mathrm{N}1111\) y \(\mathrm{N}2222\), lo cual no traerá problemas ya que \(\mathrm{N}1111\) y \(\mathrm{N}2222\) no se usan en el resto de \(\mathcal{P}\). La variables \(\mathrm{N}1111\) y \(\mathrm{N}2222\) son auxiliares y se usan justamente para preservar el valor de las variables \(\mathrm{N}16\) y \(\mathrm{N}3\) ya que ellas son variables protagonistas de nuestro programa \(\mathcal{P}\) y en esta instancia no queremos alterar su contenido sino solo realizar la asignación \(\mathrm{N}5\leftarrow\mathrm{N}16+\mathrm{N}3\). Dejamos al lector explicar por que es necesario para que la simulación sea correcta que los labels \(\mathrm{L}1000\), \(\mathrm{L}2000\) y \(\mathrm{L}3000\) no sean usados en el resto de \(\mathcal{P}\).
Es decir el programa anterior simula la instrucción \(\mathrm{N}5\leftarrow\mathrm{N}16+\mathrm{N}3\) que no podíamos usar por no ser una instrucción de \(\mathcal{S}^{\Sigma}\), con un costo bastante bajo, es decir el costo de convenir en no usar en el resto de \(\mathcal{P}\) las variables \(\mathrm{N}1111\) y \(\mathrm{N}2222\) ni los labels \(\mathrm{L}1000\), \(\mathrm{L}2000\) y \(\mathrm{L}3000\).
Ahora supongamos que seguimos escribiendo el programa \(\mathcal{P}\) y nos hace falta simular la instrucción \(\mathrm{N}20\leftarrow\mathrm{N}1+\mathrm{N}14\). Entonces es claro que podríamos modificar el programa que simulaba \(\mathrm{N}5\leftarrow\mathrm{N}16+\mathrm{N}3\) haciéndole reemplazos adecuados a sus variables y labels. Por ejemplo podríamos escribir \[\begin{array}{ll} & \mathrm{N}9999\leftarrow\mathrm{N}1\\ & \mathrm{N}8888\leftarrow\mathrm{N}14\\ & \mathrm{N}20\leftarrow\mathrm{N}9999\\ \mathrm{L}1001 & \mathrm{IF}\;\mathrm{N}8888\neq0\;\mathrm{GOTO}\;\mathrm{L}2002\\ & \mathrm{GOTO}\;\mathrm{L}3003\\ \mathrm{L}2002 & \mathrm{N}8888\leftarrow\mathrm{N}8888\dot{-}1\\ & \mathrm{N}20\leftarrow\mathrm{N}20+1\\ & \mathrm{GOTO}\;\mathrm{L}1001\\ \mathrm{L}3003 & \mathrm{SKIP} \end{array}\] donde \(\mathrm{N}9999\), \(\mathrm{N}8888\), \(\mathrm{L}1001\), \(\mathrm{L}2002\) y \(\mathrm{L}3003\) solo serán usados aquí, es decir no aparecerán en el resto de nuestro programa \(\mathcal{P}\).
Consideremos el siguiente "molde" que llamaremos \(M\) \[\begin{array}{ll} & \mathrm{V}4\leftarrow\mathrm{V}2\\ & \mathrm{V}5\leftarrow\mathrm{V}3\\ & \mathrm{V}1\leftarrow\mathrm{V}4\\ \mathrm{A}1 & \mathrm{IF}\;\mathrm{V}5\neq0\;\mathrm{GOTO}\;\mathrm{A}2\\ & \mathrm{GOTO}\;\mathrm{A}3\\ \mathrm{A}2 & \mathrm{V}5\leftarrow\mathrm{V}5\dot{-}1\\ & \mathrm{V}1\leftarrow\mathrm{V}1+1\\ & \mathrm{GOTO}\;\mathrm{A}1\\ \mathrm{A}3 & \mathrm{SKIP} \end{array}\] Como puede notarse, cuando reemplazamos en \(M\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{V}1\) por \(\mathrm{N}5\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{V}2\) por \(\mathrm{N}16\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{V}3\) por \(\mathrm{N}3\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{V}4\) por \(\mathrm{N}1111\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{V}5\) por \(\mathrm{N}2222\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{A}1\) por \(\mathrm{L}1000\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{A}2\) por \(\mathrm{L}2000\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{A}3\) por \(\mathrm{L}3000\)
obtenemos el programa que simulaba la instrucción \(\mathrm{N}5\leftarrow\mathrm{N}16+\mathrm{N}3\) dentro de \(\mathcal{P}\). Similarmente, cuando reemplazamos en \(M\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{V}1\) por \(\mathrm{N}20\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{V}2\) por \(\mathrm{N}1\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{V}3\) por \(\mathrm{N}14\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{V}4\) por \(\mathrm{N}9999\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{V}5\) por \(\mathrm{N}8888\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{A}1\) por \(\mathrm{L}1001\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{A}2\) por \(\mathrm{L}2002\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{A}3\) por \(\mathrm{L}3003\)
obtenemos el programa que simulaba la instrucción \(\mathrm{N}20\leftarrow\mathrm{N}1+\mathrm{N}14\) dentro de \(\mathcal{P}\). La practicidad de tener el molde \(M\) cae de maduro. Ahora en caso de necesitar una instrucción del tipo \(\mathrm{N}\bar{k}\leftarrow\mathrm{N}\bar{n}+\mathrm{N}\bar{m}\) solo tenemos que reemplazar en \(M\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{V}1\) por \(\mathrm{N}\bar{k}\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{V}2\) por \(\mathrm{N}\bar{n}\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{V}3\) por \(\mathrm{N}\bar{m}\)
y reemplazar las "variables" \(\mathrm{V}4\) y \(\mathrm{V}5\) y los "labels" \(\mathrm{A}1\), \(\mathrm{A}2\) y \(\mathrm{A}3\), por dos variables concretas y tres labels concretos que no se usen en el programa que estamos realizando. El programa así obtenido simulara a la instrucción \(\mathrm{N}\bar{k}\leftarrow\mathrm{N}\bar{n}+\mathrm{N}\bar{m}\).
En la jerga computacional el molde \(M\) suele llamarse macro y los programas obtenidos luego de realizar los reemplazos son llamados expansiones de \(M\). Nótese que \(Ti(M)=\mathrm{PALABRA}\) ya que, como en el caso de los programas, escribimos a \(M\) linea por linea para facilitar su manejo pero en realidad es una sola palabra, a saber: \[\mathrm{V}1\mathrm{\leftarrow}\text{V}2\mathrm{V}4\mathrm{\leftarrow}\text{V}3\mathrm{A}1\mathrm{IFV}4\mathrm{\neq}0\mathrm{GOTOA}2\mathrm{GOTOA}3\mathrm{A}2\mathrm{V}4\mathrm{\leftarrow}\text{V}4\mathrm{\dot{-}}1\mathrm{V}1\mathrm{\leftarrow}\text{V}1\mathrm{+}1\mathrm{GOTOA}1\mathrm{A}3\mathrm{SKIP}\] Es decir, como objeto matemático, \(M\) es simplemente una palabra. A las palabras de la forma \(\mathrm{V}\bar{n}\), con \(n\in\mathbf{N}\), las llamaremos variables numéricas de macro. A las palabras de la forma \(\mathrm{W}\bar{n}\), con \(n\in\mathbf{N}\), las llamaremos variables alfabéticas de macro y a las palabras de la forma \(\mathrm{A}\bar{n}\), con \(n\in\mathbf{N}\), las llamaremos labels de macro. Nuestro macro \(M\) no tiene variables alfabéticas de macro pero otros macros por supuesto pueden tener este tipo de variables.
Las variables \(\mathrm{V}1\), \(\mathrm{V}2\) y \(\mathrm{V}3\) son llamadas variables oficiales de \(M\) ya que son las variables que serán reemplazadas por variables que son protagonistas dentro del programa \(\mathcal{P}\) que usara la expansión de \(M\). Las palabras \(\mathrm{V}4\) y \(\mathrm{V}5\) son llamadas variables auxiliares de \(M\) ya que serán reemplazadas por variables que se usaran solo dentro de la expansión y no intervienen en la "trama" del programa \(\mathcal{P}\). También \(\mathrm{A}1\), \(\mathrm{A}2\) y \(\mathrm{A}3\) son llamados labels auxiliares de \(M\) ya que son usados solo para su funcionamiento interno y no tienen vinculación con los labels del programa \(\mathcal{P}\).
En el siguiente ejemplo veremos un macro que tiene un label que no es auxiliar sino oficial. Supongamos que estamos escribiendo un programa \(\mathcal{P}^{\prime}\) y nos hace falta simular instrucciones de la forma \[\mathrm{IF}\;\left\vert \mathrm{P}\bar{n}\right\vert \leq\mathrm{N}\bar{m}\ \mathrm{GOTO}\;\mathrm{L}\bar{k}\] (por supuesto estas instrucciones no pertenecen al lenguaje \(\mathcal{S}^{\Sigma}\) pero debería quedar claro como funcionan). Construiremos un macro que nos permita simular dicho tipo de instrucciones. Aquí la construcción del macro dependerá de quien es \(\Sigma\), es decir el macro nos servirá para simular instrucciones de \(\mathcal{S}^{\Sigma}\) haciendo programas de \(\mathcal{S}^{\Sigma}\) y si lo usamos haciendo un programa de \(\mathcal{S}^{\Gamma}\), donde \(\Gamma\) es otro alfabeto que contenga a \(\Sigma\), el macro no funcionara bien. Haremos entonces el macro para el caso de \(\Sigma=\{@,!\}\). Sea \(M^{\prime}\) el siguiente macro: \[\begin{array}{ll} & \mathrm{W}2\leftarrow\mathrm{W}1\\ & \mathrm{V}2\leftarrow\mathrm{V}1\\ \mathrm{A}4 & \mathrm{IF}\;\mathrm{W}2\;\mathrm{BEGINS}\;@\;\mathrm{GOTO}\;\mathrm{A}2\\ & \mathrm{IF}\;\mathrm{W}2\;\mathrm{BEGINS}\;!\;\mathrm{GOTO}\;\mathrm{A}2\\ & \mathrm{GOTO}\;\mathrm{A}1\\ \mathrm{A}2 & \mathrm{IF}\;\mathrm{V}2\neq0\;\mathrm{GOTO}\;\mathrm{A}3\\ & \mathrm{GOTO}\;\mathrm{A}5\\ \mathrm{A}3 & \mathrm{W}2\leftarrow^{\curvearrowright}\mathrm{W}2\\ & \mathrm{V}2\leftarrow\mathrm{V}2\dot{-}1\\ & \mathrm{GOTO}\;\mathrm{A}4\\ \mathrm{A}5 & \mathrm{SKIP} \end{array}\] el cual tiene
adhocprefix-adhocsufix variables oficiales \(\mathrm{W}1\) y \(\mathrm{V}1\) (correspondientes a \(\mathrm{P}\bar{n}\) y \(\mathrm{N}\bar{m}\))
adhocprefix-adhocsufix variables auxiliares \(\mathrm{W}2\) y \(\mathrm{V}2\)
adhocprefix-adhocsufix labels auxiliares \(\mathrm{A}2\), \(\mathrm{A}3\), \(\mathrm{A}4\) y \(\mathrm{A}5\)
adhocprefix-adhocsufix un label oficial \(\mathrm{A}1\) (correspondiente a \(\mathrm{L}\bar{k}\))
Una descripción intuitiva del macro \(M^{\prime}\) seria \[\mathrm{IF}\;\left\vert \mathrm{W}1\right\vert \leq\mathrm{V}1\ \mathrm{GOTO}\;\mathrm{A}1\] Nótese que en las primeras dos lineas el macro \(M^{\prime}\) guarda los valores de las variables oficiales \(\mathrm{W}1\) y \(\mathrm{V}1\) en las variables auxiliares \(\mathrm{W}2\) y \(\mathrm{V}2\), y sigue trabajando con las auxiliares. Esto es para preservar el valor de las variables oficiales. Dado que \(\Sigma=\{@,!\}\), las dos siguientes lineas sirven para decidir si el contenido de \(\mathrm{W}2\) es \(\varepsilon\) o no ya que si una palabra de \(\Sigma^{*}\) no comienza con \(@\) ni con \(!,\)deberá ser \(\varepsilon\) (aquí es donde notamos que nuestro macro \(M^{\prime}\) funcionara bien solo para hacer programas de \(\mathcal{S}^{\{@,!\}}\)). Dejamos al lector entender el resto del funcionamiento de \(M^{\prime}\).
Para dar un ejemplo de como usaríamos a \(M^{\prime}\), supongamos que para seguir escribiendo nuestro programa \(\mathcal{P}^{\prime}\) nos hace falta simular la instrucción \[\mathrm{IF}\;\left\vert \mathrm{P}5\right\vert \leq\mathrm{N}14\ \mathrm{GOTO}\;\mathrm{L}1\] y supongamos que las variables \(\mathrm{P}1000\) y \(\mathrm{N}1000\) y los labels \(\mathrm{L}6666\), \(\mathrm{L}7777\), \(\mathrm{L}8888\) y \(\mathrm{L}9999\) no se usaron hasta el momento en \(\mathcal{P}^{\prime}\). Entonces podemos reemplazar en \(M^{\prime}\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{W}1\) por \(\mathrm{P}5\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{V}1\) por \(\mathrm{N}14\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{W}2\) por \(\mathrm{P}1000\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{V}2\) por \(\mathrm{N}1000\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{A}1\) por \(\mathrm{L}1\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{A}2\) por \(\mathrm{L}6666\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{A}3\) por \(\mathrm{L}7777\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{A}4\) por \(\mathrm{L}8888\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{A}5\) por \(\mathrm{L}9999\)
y la expansión de \(M^{\prime}\) así obtenida simulara la instrucción \(\mathrm{IF}\;\left\vert \mathrm{P}5\right\vert \leq\mathrm{N}14\ \mathrm{GOTO}\;\mathrm{L}1\). Cabe destacar que para asegurarnos que la simulación funcione, también deberemos no usar en el resto de \(\mathcal{P}^{\prime}\) las variables \(\mathrm{P}1000\) y \(\mathrm{N}1000\) y los labels \(\mathrm{L}6666\), \(\mathrm{L}7777\), \(\mathrm{L}8888\) y \(\mathrm{L}9999\).
Es decir \(M^{\prime}\) funciona como un molde con el cual haciendo reemplazos adecuados podemos simular en \(\mathcal{S}^{\Sigma}\) cualquier instrucción del tipo \(\mathrm{IF}\;\left\vert \mathrm{P}\bar{n}\right\vert \leq\mathrm{N}\bar{m}\ \mathrm{GOTO}\;\mathrm{L}\bar{k}\), con \(n,m,k\in\mathbf{N}\).
Debería quedar claro el carácter oficial del label \(\mathrm{A}1\) en \(M^{\prime}\) ya que el label por el que se lo reemplaza para hacer la expansión es uno de los labels protagonistas del programa que se esta escribiendo.
Cabe destacar que las expansiones de \(M^{\prime}\) no son programas ya que si bien son concatenaciones de instrucciones, no cumplen la ley de los GOTO (llamada (G) en la definición de programa) respecto del label que reemplazo a \(\mathrm{A}1\).
Como se vio en este último ejemplo es importante tener en cuenta que cuando construimos un macro lo hacemos relativo a un alfabeto \(\Sigma\) previamente fijado, es decir estamos pensando que dicho macro será usado para hacer programas de \(\mathcal{S}^{\Sigma}\) y podría pasar que si lo usáramos para hacer un programa de \(\mathcal{S}^{\Gamma}\), donde \(\Gamma\) es otro alfabeto, el macro no cumpla las propiedades esperadas. Para visualizar esto mejor, nótese que la palabra \[\begin{array}{ll} & \mathrm{IF}\;\mathrm{W}1\;\mathrm{BEGINS}\;@\;\mathrm{GOTO}\;\mathrm{A}2\\ & \mathrm{IF}\;\mathrm{W}1\;\mathrm{BEGINS}\;\%\;\mathrm{GOTO}\;\mathrm{A}2\\ & \mathrm{IF}\;\mathrm{W}1\;\mathrm{BEGINS}\;!\;\mathrm{GOTO}\;\mathrm{A}2\\ & \mathrm{IF}\;\mathrm{W}1\;\mathrm{BEGINS}\;\uparrow\;\mathrm{GOTO}\;\mathrm{A}2\\ & \mathrm{GOTO}\;\mathrm{A}1\\ \mathrm{A}2 & \mathrm{SKIP} \end{array}\] es un macro de \(\mathcal{S}^{\{@,\%,!,\uparrow\}}\) que simula instrucciones de la forma \[\mathrm{IF}\;\mathrm{P}\bar{n}=\varepsilon\;\mathrm{GOTO}\;\mathrm{L}\bar{m}\] (el cual obviamente podríamos denotar con \(\mathrm{IF}\;\mathrm{W}1=\varepsilon\;\mathrm{GOTO}\;\mathrm{A}1\)), pero es claro que esta palabra no nos servirá para simular este tipo de instrucciones en el lenguaje \(\mathcal{S}^{\{@,\%,!,\uparrow,\vartriangle\}}\).
Nota: Siempre supondremos que la primera instrucción de los macros no es labelada. Esto es porque muchas veces cuando expandamos un macro nos interesara labelar la primera instrucción de dicha expansión. Por supuesto, esto es fácil de conseguir ya que si \(M\) es un macro, entonces \(\mathrm{SKIP}M\) es también un macro que posee las mismas propiedades.
Como hemos visto recién hay dos tipos de macros:
adhocprefix-adhocsufix los de asignación que cuando son expandidos nos dan un programa que simula la asignación a una variable dada del resultado de aplicar una función a los contenidos de ciertas otras variables; y
adhocprefix-adhocsufix los de tipo IF que cuando son expandidos nos dan un programa salvo por la ley (G), el cual direcciona al label que fue a reemplazar a \(\mathrm{A}1\) cuando se cumple cierta propiedad (predicado) relativa a los contenidos de las variables que fueron a reemplazar a las variables oficiales.
Ya vimos recién que la palabra \[\begin{array}{ll} & \mathrm{V}4\leftarrow\mathrm{V}2\\ & \mathrm{V}5\leftarrow\mathrm{V}3\\ & \mathrm{V}1\leftarrow\mathrm{V}4\\ \mathrm{A}1 & \mathrm{IF}\;\mathrm{V}5\neq0\;\mathrm{GOTO}\;\mathrm{A}2\\ & \mathrm{GOTO}\;\mathrm{A}3\\ \mathrm{A}2 & \mathrm{V}5\leftarrow\mathrm{V}5\dot{-}1\\ & \mathrm{V}1\leftarrow\mathrm{V}1+1\\ & \mathrm{GOTO}\;\mathrm{A}1\\ \mathrm{A}3 & \mathrm{SKIP} \end{array}\] es un macro que sirve para simular instrucciones de la forma \(\mathrm{N}\bar{k}\leftarrow\mathrm{N}\bar{n}+\mathrm{N}\bar{m}\) en \(\mathcal{S}^{\Sigma}\) (este macro sirve cualquiera sea \(\Sigma\)). Notemos que este macro es de asignación ya que cuando es expandido nos da un programa que simula la asignación a una variable dada del resultado de aplicar una función a los contenidos de ciertas otras variables. En este caso la función es \(SUMA=\lambda xy[x+y]\) por lo cual usaremos \(\left[\mathrm{V}1\leftarrow SUMA(\mathrm{V}2,\mathrm{V}3)\right]\) para denotar a dicho macro. Usaremos este macro para dar un programa \(\mathcal{P}\) que compute a la función \(\lambda xy[x.y]\). Nótese que podemos tomar \(\mathcal{P}\) igual al siguiente programa \[\begin{array}{ll} \mathrm{L}1 & \mathrm{IF}\;\mathrm{N}2\neq0\;\mathrm{GOTO}\;\mathrm{L}2\\ & \mathrm{GOTO}\;\mathrm{L}3\\ \mathrm{L}2 & \left[\mathrm{N}3\leftarrow SUMA(\mathrm{N}3,\mathrm{N}1)\right]\\ & \mathrm{N}2\leftarrow\mathrm{N}2\dot{-}1\\ & \mathrm{GOTO}\;\mathrm{L}1\\ \mathrm{L}3 & \mathrm{N}1\leftarrow\mathrm{N}3 \end{array}\] donde \(\left[\mathrm{N}3\leftarrow SUMA(\mathrm{N}3,\mathrm{N}1)\right]\) es una expansión del macro \(\left[\mathrm{V}1\leftarrow SUMA(\mathrm{V}2,\mathrm{V}3)\right]\) hecha haciendo el reemplazo de las variables oficiales \(\mathrm{V}1,\mathrm{V}2\) y \(\mathrm{V}3\) por \(\mathrm{N}3,\mathrm{N}3\) y \(\mathrm{N}1\), respectivamente, y haciendo reemplazos adecuados de sus variables y labels auxiliares. Hay muchas formas de hacer los reemplazos de variables y labels auxiliares pero en general no lo especificaremos explícitamente cuando expandamos un macro ya que es fácil imaginar como hacerlo en función del programa que estemos realizando. Por ejemplo en el caso de \(\mathcal{P}\) podríamos hacer los siguientes reemplazos:
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{V}4\) por \(\mathrm{N}1111\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{V}5\) por \(\mathrm{N}2222\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{A}1\) por \(\mathrm{L}1000\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{A}2\) por \(\mathrm{L}2000\)
adhocprefix-adhocsufix cada ocurrencia de \(\mathrm{A}3\) por \(\mathrm{L}3000\)
y claramente esto no afectara la "lógica" o "idea" de nuestro programa \(\mathcal{P}\). De esta forma la expansión \(\left[\mathrm{N}3\leftarrow SUMA(\mathrm{N}3,\mathrm{N}1)\right]\) es el siguiente programa: \[\begin{array}{ll} & \mathrm{N}1111\leftarrow\mathrm{N}3\\ & \mathrm{N}2222\leftarrow\mathrm{N}1\\ & \mathrm{N}3\leftarrow\mathrm{N}1111\\ \mathrm{L}1000 & \mathrm{IF}\;\mathrm{N}2222\neq0\;\mathrm{GOTO}\;\mathrm{L}2000\\ & \mathrm{GOTO}\;\mathrm{L}3000\\ \mathrm{L}2000 & \mathrm{N}2222\leftarrow\mathrm{N}2222\dot{-}1\\ & \mathrm{N}3\leftarrow\mathrm{N}3+1\\ & \mathrm{GOTO}\;\mathrm{L}1000\\ \mathrm{L}3000 & \mathrm{SKIP} \end{array}\] el cual por supuesto esta escrito con espacios y en forma vertical pero es una mera palabra. Tenemos entonces que \(\mathcal{P}\) es el programa: \[\begin{array}{ll} \mathrm{L}1 & \mathrm{IF}\;\mathrm{N}2\neq0\;\mathrm{GOTO}\;\mathrm{L}2\\ & \mathrm{GOTO}\;\mathrm{L}3\\ \mathrm{L}2 & \mathrm{N}1111\leftarrow\mathrm{N}1\\ & \mathrm{N}2222\leftarrow\mathrm{N}3\\ & \mathrm{N}3\leftarrow\mathrm{N}1111\\ \mathrm{L}1000 & \mathrm{IF}\;\mathrm{N}2222\neq0\;\mathrm{GOTO}\;\mathrm{L}2000\\ & \mathrm{GOTO}\;\mathrm{L}3000\\ \mathrm{L}2000 & \mathrm{N}2222\leftarrow\mathrm{N}2222\dot{-}1\\ & \mathrm{N}3\leftarrow\mathrm{N}3+1\\ & \mathrm{GOTO}\;\mathrm{L}1000\\ \mathrm{L}3000 & \mathrm{SKIP}\\ & \mathrm{N}2\leftarrow\mathrm{N}2\dot{-}1\\ & \mathrm{GOTO}\;\mathrm{L}1\\ \mathrm{L}3 & \mathrm{N}1\leftarrow\mathrm{N}3 \end{array}\] el cual por supuesto esta escrito con espacios y en forma vertical pero es una mera palabra.
Dada una función \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\), usaremos \[\left[\mathrm{V}\overline{n+1}\leftarrow f(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\right]\] para denotar un macro de \(\mathcal{S}^{\Sigma}\) \(M\) el cual cumpla las siguientes propiedades (no siempre existirá dicho macro, es decir solo para ciertas funciones \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) habrá un tal macro).
adhocprefix(1)adhocsufix Las variables oficiales de \(M\) son \(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{V}\overline{n+1},\mathrm{W}1,...,\mathrm{W}\bar{m}\)
adhocprefix(2)adhocsufix \(M\) no tiene labels oficiales
adhocprefix(3)adhocsufix Si reemplazamos:
adhocprefix-adhocsufix Las variables oficiales de \(M\) (i.e. \(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{V}\overline{n+1},\mathrm{W}1,...,\mathrm{W}\bar{m}\)) por variables concretas \[\mathrm{N}\overline{k_{1}},...,\mathrm{N}\overline{k_{n}},\mathrm{N}\overline{k_{n+1}},\mathrm{P}\overline{j_{1}},...,\mathrm{P}\overline{j_{m}}\] (elegidas libremente, es decir los números \(k_{1},...,k_{n+1},j_{1},...,j_{m}\) son cualesquiera)
adhocprefix-adhocsufix Las variables auxiliares de \(M\) por variables concretas (distintas de a dos) y NO pertenecientes a la lista \(\mathrm{N}\overline{k_{1}},...,\mathrm{N}\overline{k_{n}},\mathrm{N}\overline{k_{n+1}},\mathrm{P}\overline{j_{1}},...,\mathrm{P}\overline{j_{m}}\)
adhocprefix-adhocsufix Los labels auxiliares de \(M\) por labels concretos (distintos de a dos)
Entonces la palabra así obtenida es un programa \(\mathcal{E}\) de \(\mathcal{S}^{\Sigma}\) que denotaremos en general con \[\left[\mathrm{N}\overline{k_{n+1}}\leftarrow f(\mathrm{N}\overline{k_{1}},...,\mathrm{N}\overline{k_{n}},\mathrm{P}\overline{j_{1}},...,\mathrm{P}\overline{j_{m}})\right]\] el cual debe tener la siguiente propiedad:
adhocprefix(E)adhocsufix Si hacemos correr \(\mathcal{E}\) partiendo de un estado \(e\) que le asigne a las variables \(\mathrm{N}\overline{k_{1}},...,\mathrm{N}\overline{k_{n}},\mathrm{P}\overline{j_{1}},...,\mathrm{P}\overline{j_{m}}\) valores \(x_{1},...,x_{n},\alpha_{1},...,\alpha_{m}\), entonces independientemente de los valores que les asigne \(e\) al resto de las variables (incluidas las que fueron a reemplazar a las variables auxiliares de \(M\)) se dará que
adhocprefix(i)adhocsufix Si \((x_{1},...,x_{n},\alpha_{1},...,\alpha_{m})\in D_{f}\), entonces \(\mathcal{E}\) se detiene (i.e. intenta realizar la siguiente a su última instrucción) y llega a un estado \(e^{\prime}\) el cual cumple:
adhocprefix-adhocsufix \(e^{\prime}\) le asigna a \(\mathrm{N}\overline{k_{n+1}}\) el valor \(f(x_{1},...,x_{n},\alpha_{1},...,\alpha_{m})\)
adhocprefix-adhocsufix \(e^{\prime}\) solo puede diferir de \(e\) en los valores que le asigna a \(\mathrm{N}\overline{k_{n+1}}\) o a las variables que fueron a reemplazar a las variables auxiliares de \(M\). Nótese que esto nos dice que los valores de las variables \(\mathrm{N}\overline{k_{1}},...,\mathrm{N}\overline{k_{n}},\mathrm{P}\overline{j_{1}},...,\mathrm{P}\overline{j_{m}}\) al correr \(\mathcal{E}\) desde el estado \(e\) no se modificaran, salvo cuando \(k_{i}\) es igual a \(k_{n+1}\), situación en la cual el valor final de \(\mathrm{N}\overline{k_{i}}\) será \(f(x_{1},...,x_{n},\alpha_{1},...,\alpha_{m})\)
adhocprefix(ii)adhocsufix Si \((x_{1},...,x_{n},\alpha_{1},...,\alpha_{m})\notin D_{f}\), entonces \(\mathcal{E}\) no se detiene
El programa \(\mathcal{E}=\left[\mathrm{N}\overline{k_{n+1}}\leftarrow f(\mathrm{N}\overline{k_{1}},...,\mathrm{N}\overline{k_{n}},\mathrm{P}\overline{j_{1}},...,\mathrm{P}\overline{j_{m}})\right]\) es comúnmente llamado la expansión del macro \(M=\left[\mathrm{V}\overline{n+1}\leftarrow f(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\right]\) con respecto a la elección de variables y labels realizada.
También, dada una función \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\Sigma^{\ast}\), con \[\left[\mathrm{W}\overline{m+1}\leftarrow f(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\right]\] denotaremos un macro de \(\mathcal{S}^{\Sigma}\) el cual cumpla condiciones análogas a las descriptas recién. Dejamos al lector escribirlas en detalle para este caso.
Es importante notar que nuestra notación \[\left[\mathrm{V}\overline{n+1}\leftarrow f(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\right]\] tiene cierta ambigüedad ya que no hace mención al alfabeto \(\Sigma\) el cual esta previamente fijado. Podría pasar que la función \(f\) sea \(\Gamma\)-mixta para otro alfabeto \(\Gamma\) y que el macro \[\left[\mathrm{V}\overline{n+1}\leftarrow f(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\right]\] sea distinto según lo consideremos para \(\mathcal{S}^{\Sigma}\) o para \(\mathcal{S}^{\Gamma}\). Es decir, como ya lo remarcamos anteriormente, cuando hablamos de la existencia de un macro, es siempre relativo a un \(\mathcal{S}^{\Sigma}\). Lo mismo pasa con la notación \[\left[\mathrm{W}\overline{m+1}\leftarrow f(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\right]\] Dejamos al lector que piense este fenómeno para el caso de la función \(f:\{@,\%\}^{*}\times\{@,\%\}^{*}\rightarrow\{@,\%\}^{*}\), dada por \(f(\alpha,\beta)=\alpha\beta\). Si tomamos \(\Sigma=\{@,\%\}\) y \(\Gamma=\{@,\%,!\}\), entonces \(f\) resulta una función \(\Sigma\)-mixta y también \(\Gamma\)-mixta y debería quedar claro que no es lo mismo hacer el macro \[\left[\mathrm{W}3\leftarrow f(\mathrm{W}1,\mathrm{W}2)\right]\] para \(\mathcal{S}^{\Sigma}\) que hacerlo para \(\mathcal{S}^{\Gamma}\).
Otra ambigüedad de esta notación de macros de asignación es que en el nombre de los macros \[\left[\mathrm{V}\overline{n+1}\leftarrow f(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\right]\] \[\left[\mathrm{W}\overline{m+1}\leftarrow f(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\right]\] no se especifica quienes son las variables y labels auxiliares de tipo macro. Ambas ambigüedades no nos traerán problemas si manejamos las cosas con cierta madurez.
4.8.
adhocprefix(a)adhocsufix Sea \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) una función \(\Sigma\)-computable. Entonces en \(\mathcal{S}^{\Sigma}\) hay un macro \[\left[\mathrm{V}\overline{n+1}\leftarrow f(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\right]\]
adhocprefix(b)adhocsufix Sea \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\Sigma^{\ast}\) una función \(\Sigma\)-computable. Entonces en \(\mathcal{S}^{\Sigma}\) hay un macro \[\left[\mathrm{W}\overline{m+1}\leftarrow f(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\right]\]
Proof. Probaremos (b) La prueba de (a) es similar. Sea \(\mathcal{P}\) un programa que compute a \(f\). Tomemos un \(k\) tal que \(k\geq n,m\) y tal que todas las variables y labels de \(\mathcal{P}\) están en el conjunto \[\{\mathrm{N}1,...,\mathrm{N}\bar{k},\mathrm{P}1,...,\mathrm{P}\bar{k},\mathrm{L}1,...,\mathrm{L}\bar{k}\}\text{.}\] Sea \(\mathcal{P}^{\prime}\) la palabra que resulta de reemplazar en \(\mathcal{P}\):
adhocprefix-adhocsufix la variable \(\mathrm{N}\overline{j}\) por \(\mathrm{V}\overline{n+j}\), para cada \(j=1,...,k\)
adhocprefix-adhocsufix la variable \(\mathrm{P}\overline{j}\) por \(\mathrm{W}\overline{m+j}\), para cada \(j=1,...,k\)
adhocprefix-adhocsufix el label \(\mathrm{L}\overline{j}\) por \(\mathrm{A}\overline{j}\), para cada \(j=1,...,k\)
Nótese que \[\begin{array}{l} \mathrm{V}\overline{n+1}\leftarrow\mathrm{V}1\\ \ \ \ \ \ \ \ \ \ \vdots\\ \mathrm{V}\overline{n+n}\leftarrow\mathrm{V}\overline{n}\\ \mathrm{V}\overline{n+n+1}\leftarrow0\\ \ \ \ \ \ \ \ \ \ \vdots\\ \mathrm{V}\overline{n+k}\leftarrow0\\ \mathrm{W}\overline{m+1}\leftarrow\mathrm{W}1\\ \ \ \ \ \ \ \ \ \ \vdots\\ \mathrm{W}\overline{m+m}\leftarrow\mathrm{W}\overline{m}\\ \mathrm{W}\overline{m+m+1}\leftarrow\varepsilon\\ \ \ \ \ \ \ \ \ \ \vdots\\ \mathrm{W}\overline{m+k}\leftarrow\varepsilon\\ \mathcal{P}^{\prime} \end{array}\] es el macro buscado, el cual tendrá sus variables auxiliares y labels en la lista \[\mathrm{V}\overline{n+1},...,\mathrm{V}\overline{n+k},\mathrm{W}\overline{m+2},...,\mathrm{W}\overline{m+k},\mathrm{A}1,...,\mathrm{A}\overline{k}.\]
Dejamos al lector probar la reciproca de la proposición anterior, es decir que si \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) es tal que en \(\mathcal{S}^{\Sigma}\) hay un macro \[\left[\mathrm{V}\overline{n+1}\leftarrow f(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\right]\] entonces \(f\) es \(\Sigma\)-computable
Dado un predicado \(P:D_{P}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\), usaremos \[\left[\mathrm{IF}\;P(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\;\mathrm{GOTO}\;\mathrm{A}1\right]\] para denotar un macro \(M\) de \(\mathcal{S}^{\Sigma}\) el cual cumpla las siguientes propiedades (no siempre existirá dicho macro, es decir solo para ciertos predicados \(P:D_{P}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) habrá un tal macro).
adhocprefix(1)adhocsufix Las variables oficiales de \(M\) son \(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m}\)
adhocprefix(2)adhocsufix \(\mathrm{A}1\) es el único label oficial de \(M\)
adhocprefix(3)adhocsufix Si reemplazamos:
adhocprefix-adhocsufix Las variables oficiales de \(M\) (i.e. \(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m}\)) por variables concretas \[\mathrm{N}\overline{k_{1}},...,\mathrm{N}\overline{k_{n}},\mathrm{P}\overline{j_{1}},...,\mathrm{P}\overline{j_{m}}\] (elegidas libremente, es decir los números \(k_{1},...,k_{n},j_{1},...,j_{m}\) son cualesquiera)
adhocprefix-adhocsufix El label oficial \(\mathrm{A}1\) por un label concreto \(\mathrm{L}\bar{k}\) (elegido libremente, es decir \(k\) es cualquier elemento de \(\mathbf{N}\))
adhocprefix-adhocsufix Las variables auxiliares de \(M\) por variables concretas (distintas de a dos) y NO pertenecientes a la lista \(\mathrm{N}\overline{k_{1}},...,\mathrm{N}\overline{k_{n}},\mathrm{P}\overline{j_{1}},...,\mathrm{P}\overline{j_{m}}\)
adhocprefix-adhocsufix Los labels auxiliares de \(M\) por labels concretos (distintos de a dos) y ninguno igual a \(\mathrm{L}\bar{k}\)
Entonces la palabra así obtenida es un programa \(\mathcal{E}\) de \(\mathcal{S}^{\Sigma}\) (salvo por la ley de los GOTO respecto de \(\mathrm{L}\bar{k}\)) que denotaremos en general con \[\left[\mathrm{IF\ }P(\mathrm{N}\overline{k_{1}},...,\mathrm{N}\overline{k_{n}},\mathrm{P}\overline{j_{1}},...,\mathrm{P}\overline{j_{m}})\ \mathrm{GOTO\ L}\bar{k}\right]\] el cual debe tener la siguiente propiedad:
adhocprefix(E)adhocsufix Si hacemos correr \(\mathcal{E}\) partiendo de un estado \(e\) que le asigne a las variables \(\mathrm{N}\overline{k_{1}},...,\mathrm{N}\overline{k_{n}},\mathrm{P}\overline{j_{1}},...\), \(\mathrm{P}\overline{j_{m}}\) valores \(x_{1},...,x_{n},\alpha_{1},...,\alpha_{m}\), entonces independientemente de los valores que les asigne \(e\) al resto de las variables (incluidas las que fueron a reemplazar a las variables auxiliares de \(M\)) se dará que
adhocprefix(i)adhocsufix Si \((\vec{x},\vec{\alpha})\notin D_{P}\), entonces \(\mathcal{E}\) no se detiene
adhocprefix(ii)adhocsufix Si \((\vec{x},\vec{\alpha})\in D_{P}\) y \(P(\vec{x},\vec{\alpha})=1\), entonces luego de una cantidad finita de pasos, \(\mathcal{E}\) direcciona al label \(\mathrm{L}\bar{k}\) quedando en un estado \(e^{\prime}\) el cual solo puede diferir de \(e\) en los valores que le asigna a las variables que fueron a reemplazar a las variables auxiliares de \(M\). Al resto de las variables, incluidas \(\mathrm{N}\overline{k_{1}},...,\mathrm{N}\overline{k_{n}},\mathrm{P}\overline{j_{1}},...,\mathrm{P}\overline{j_{m}}\) no las modifica
adhocprefix(iii)adhocsufix Si \((\vec{x},\vec{\alpha})\in D_{P}\) y \(P(\vec{x},\vec{\alpha})=0\), entonces luego de una cantidad finita de pasos, \(\mathcal{E}\) se detiene (i.e. intenta realizar la siguiente a su última instrucción) quedando en un estado \(e^{\prime}\) el cual solo puede diferir de \(e\) en los valores que le asigna a las variables que fueron a reemplazar a las variables auxiliares de \(M\). Al resto de las variables, incluidas \(\mathrm{N}\overline{k_{1}},...,\mathrm{N}\overline{k_{n}},\mathrm{P}\overline{j_{1}},...,\mathrm{P}\overline{j_{m}}\) no las modifica
La palabra \(\mathcal{E}=\left[\mathrm{IF\ }P(\mathrm{N}\overline{k_{1}},...,\mathrm{N}\overline{k_{n}},\mathrm{P}\overline{j_{1}},...,\mathrm{P}\overline{j_{m}})\ \mathrm{GOTO\ L}\bar{k}\right]\) es llamada la expansión del macro con respecto a la elección de variables y labels realizada. Al igual que en el caso de los macros de asignación, la notación \[\left[\mathrm{IF}\;P(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\;\mathrm{GOTO}\;\mathrm{A}1\right]\] tiene cierta ambigüedad ya que no explicita el alfabeto ni los labels y variables auxiliares de tipo macro.
4.9. Sea \(P:D_{P}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) un predicado \(\Sigma\)-computable. Entonces en \(\mathcal{S}^{\Sigma}\) hay un macro \[\left[\mathrm{IF}\;P(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\;\mathrm{GOTO}\;\mathrm{A}1\right]\]
Proof. Por (a) de la proposición anterior tenemos en \(\mathcal{S}^{\Sigma}\) un macro \[\left[\mathrm{V}\overline{n+1}\leftarrow P(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\right]\] Nótese que la palabra \[\left[\mathrm{V}\overline{n+1}\leftarrow P(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\right]\mathrm{IFV}\overline{n+1}\mathrm{\neq}0\mathrm{GOTOA}1\] es el macro buscado.
Dejamos al lector probar la reciproca de la proposición anterior, es decir si \(P:D_{P}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) es tal que en \(\mathcal{S}^{\Sigma}\) hay un macro \[\left[\mathrm{IF}\;P(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\;\mathrm{GOTO}\;\mathrm{A}1\right]\] entonces \(P\) es \(\Sigma\)-computable.
Dejamos en forma de una sola proposición los tres casos recién vistos de existencia de macros.
4.10 (Primer Manantial de Macros). Sea \(\Sigma\) un alfabeto finito.
adhocprefix(a)adhocsufix Si \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) es \(\Sigma\)-computable, entonces en \(\mathcal{S}^{\Sigma}\) hay un macro \[\left[\mathrm{V}\overline{n+1}\leftarrow f(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\right]\]
adhocprefix(b)adhocsufix Si \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\Sigma^{\ast}\) es \(\Sigma\)-computable, entonces en \(\mathcal{S}^{\Sigma}\) hay un macro \[\left[\mathrm{W}\overline{m+1}\leftarrow f(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\right]\]
adhocprefix(c)adhocsufix Si \(P:D_{P}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) es un predicado \(\Sigma\)-computable, entonces en \(\mathcal{S}^{\Sigma}\) hay un macro \[\left[\mathrm{IF}\;P(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\;\mathrm{GOTO}\;\mathrm{A}1\right]\]
Básicamente habrá dos manantiales de macros de donde obtendremos todos los macros que potenciarán nuestro lenguaje \(\mathcal{S}^{\Sigma}\). El Segundo Manantial de Macros es consecuencia del primero y de la batalla Neumann vence a Godel.
Ya que la noción de función \(\Sigma\)-computable es el modelo matemático Neumanniano o imperativo del concepto de función \(\Sigma\)-efectivamente computable, nos podríamos preguntar entonces cual es el modelo matemático Neumanniano del concepto de conjunto \(\Sigma\)-efectivamente enumerable. Si prestamos atención a la definición de este concepto, notaremos que depende de la existencia de ciertas funciones \(\Sigma\)-efectivamente computables por lo cual la siguiente definición cae de maduro:
Un conjunto \(S\subseteq\omega^{n}\times\Sigma^{\ast m}\) será llamado \(\Sigma\)-enumerable cuando sea vacío o haya una función \(F:\omega\rightarrow\omega^{n}\times\Sigma^{\ast m}\) tal que \(I_{F}=S\) y \(F_{(i)}\) sea \(\Sigma\)-computable, para cada \(i\in\{1,...,n+m\}\).
Debería entonces quedar claro que si el concepto de función \(\Sigma\)-computable modeliza correctamente al concepto de función \(\Sigma\)-efectivamente computable, entonces el concepto de conjunto \(\Sigma\)-enumerable recién definido modeliza correctamente al concepto de conjunto \(\Sigma\)-efectivamente enumerable. Nótese que según la definición que acabamos de escribir, un conjunto no vacío \(S\subseteq\omega^{n}\times\Sigma^{\ast m}\) es \(\Sigma\)-enumerable si y solo si hay programas \(\mathcal{P}_{1},...,\mathcal{P}_{n+m}\) tales que
adhocprefix-adhocsufix \(\mathrm{Dom}(\Psi_{\mathcal{P}_{1}}^{1,0,\#})=...=\mathrm{Dom}(\Psi_{\mathcal{P}_{n}}^{1,0,\#})=\omega\)
adhocprefix-adhocsufix \(\mathrm{Dom}(\Psi_{\mathcal{P}_{n+1}}^{1,0,\ast})=...=\mathrm{Dom}(\Psi_{\mathcal{P}_{n}+m}^{1,0,\ast})=\omega\)
adhocprefix-adhocsufix \(S=\mathrm{Im}[\Psi_{\mathcal{P}_{1}}^{1,0,\#},...,\Psi_{\mathcal{P}_{n}}^{1,0,\#},\Psi_{\mathcal{P}_{n+1}}^{1,0,\ast},...,\Psi_{\mathcal{P}_{n+m}}^{1,0,\ast}]\)
Como puede notarse los programas \(\mathcal{P}_{1},...,\mathcal{P}_{n+m}\) puestos secuencialmente a funcionar desde el estado \(\left\Vert x\right\Vert\) producen en forma natural un procedimiento efectivo (con dato de entrada \(x\in\omega\)) que enumera a \(S\). Por supuesto podemos decir que en tal caso los programas \(\mathcal{P}_{1},...,\mathcal{P}_{n+m}\) enumeran a \(S\). La siguiente proposición muestra que también las cosas se pueden hacer con un solo programa
4.11 (Caracterización de \(\Sigma\)-enumerabilidad). Sea \(S\subseteq\omega^{n}\times\Sigma^{\ast m}\) un conjunto no vacío. Entonces son equivalentes:
adhocprefix(1)adhocsufix \(S\) es \(\Sigma\)-enumerable
adhocprefix(2)adhocsufix Hay un programa \(\mathcal{P}\in\mathrm{Pro}^{\Sigma}\) tal que:
adhocprefix(a)adhocsufix Para cada \(x\in\omega\), tenemos que \(\mathcal{P}\) se detiene partiendo desde el estado \(\left\Vert x\right\Vert\) y llega a un estado \(\left\Vert x_{1},...x_{n},\alpha_{1},...,\alpha_{m}\right\Vert\), donde \((\vec{x},\vec{\alpha})\in S\).
adhocprefix(b)adhocsufix Para cada \((\vec{x},\vec{\alpha})\in S\) hay un \(x\in\omega\) tal que \(\mathcal{P}\) se detiene partiendo desde el estado \(\left\Vert x\right\Vert\) y llega al estado \(\left\Vert x_{1},...x_{n},\alpha_{1},...,\alpha_{m}\right\Vert\)
adhocprefix(3)adhocsufix Hay un programa \(\mathcal{P}\in\mathrm{Pro}^{\Sigma}\) tal que:
adhocprefix(a)adhocsufix Para cada \(x\in\omega\), tenemos que \(\mathcal{P}\) se detiene partiendo desde el estado \(\left\Vert x\right\Vert\) y llega a un estado de la forma \(((x_{1},...,x_{n},y_{1},...),(\alpha_{1},...,\alpha_{m},\beta_{1},...))\), donde \((x_{1},...,x_{n},\alpha_{1},...,\alpha_{m})\in S\).
adhocprefix(b)adhocsufix Para cada \((x_{1},...x_{n},\alpha_{1},...,\alpha_{m})\in S\) hay un \(x\in\omega\) tal que \(\mathcal{P}\) se detiene partiendo desde el estado \(\left\Vert x\right\Vert\) y llega a un estado de la forma \(((x_{1},...,x_{n},y_{1},...),(\alpha_{1},...,\alpha_{m},\beta_{1},...))\)
Proof. (1)\(\Rightarrow\)(2). Ya que \(S\) es no vacío, por definición tenemos que hay una \(F:\omega\rightarrow\omega^{n}\times\Sigma^{\ast m}\) tal que \(I_{F}=S\) y \(F_{(i)}\) es \(\Sigma\)-computable, para cada \(i\in\{1,...,n+m\}\). Por el Primer Manantial de Macros tenemos que existen macros: \[\begin{aligned} & \left[\mathrm{V}2\leftarrow F_{(1)}(\mathrm{V}1)\right]\\ & \ \ \ \ \ \ \ \ \ \ \ \ \vdots\\ & \left[\mathrm{V}2\leftarrow F_{(n)}(\mathrm{V}1)\right]\\ & \left[\mathrm{W}1\leftarrow F_{(n+1)}(\mathrm{V}1)\right]\\ & \ \ \ \ \ \ \ \ \ \ \ \ \vdots\\ & \left[\mathrm{W}1\leftarrow F_{(n+m)}(\mathrm{V}1)\right] \end{aligned}\] Sea \(\mathcal{Q}\) el siguiente programa: \[\begin{aligned} & \left[\mathrm{P}\overline{m}\leftarrow F_{(n+m)}(\mathrm{N}1)\right]\\ & \ \ \ \ \ \ \ \ \ \ \ \ \vdots\\ & \left[\mathrm{P}1\leftarrow F_{(n+1)}(\mathrm{N}1)\right]\\ & \left[\mathrm{N}\overline{n}\leftarrow F_{(n)}(\mathrm{N}1)\right]\\ & \ \ \ \ \ \ \ \ \ \ \ \ \vdots\\ & \left[\mathrm{N}1\leftarrow F_{(1)}(\mathrm{N}1)\right] \end{aligned}\] donde se supone que las expansiones de los macros usados son hechas usando variables auxiliares no pertenecientes a la lista \(\mathrm{N}1,...,\mathrm{N}\overline{n},\mathrm{P}1,...,\mathrm{P}\overline{m}\) (por supuesto, dada la fortaleza de nuestros macros se puede usar una misma variable auxiliar para dos distintas expansiones), y también se supone que los labels auxiliares usados en dichas expansiones son todos distintos, es decir no usamos el mismo label auxiliar en dos expansiones distintas (por que?).
Sea \(k\) tal que las variables de \(\mathcal{Q}\) están todas en la lista \(\mathrm{N}1,...,\mathrm{N}\bar{k},\mathrm{P}1,...,\mathrm{P}\bar{k}\). Sea \(\mathcal{P}\) el siguiente programa: \[\mathcal{Q}\mathrm{N}\overline{n+1}\leftarrow0\mathrm{N}\overline{n+2}\leftarrow0...\mathrm{N}\overline{k}\leftarrow0\mathrm{P}\overline{m+1}\leftarrow\varepsilon\mathrm{P}\overline{m+2}\leftarrow\varepsilon...\mathrm{P}\overline{k}\leftarrow\varepsilon\] Dejamos al lector corroborar que el programa \(\mathcal{P}\) cumple las propiedades a y b
(2)\(\Rightarrow\)(3). Directo.
(3)\(\Rightarrow\)(1). Supongamos \(\mathcal{P}\in\mathrm{Pro}^{\Sigma}\) cumple (a) y (b) de (3). Sean \[\begin{aligned} \mathcal{P}_{1} & =\mathcal{P}\mathrm{N}1\leftarrow\mathrm{N}1\\ \mathcal{P}_{2} & =\mathcal{P}\mathrm{N}1\leftarrow\mathrm{N}2\\ & \vdots\\ \mathcal{P}_{n} & =\mathcal{P}\mathrm{N}1\leftarrow\mathrm{N}\overline{n}\\ \mathcal{P}_{n+1} & =\mathcal{P}\mathrm{P}1\leftarrow\mathrm{P}1\\ \mathcal{P}_{n+2} & =\mathcal{P}\mathrm{P}1\leftarrow\mathrm{P}2\\ & \vdots\\ \mathcal{P}_{n+m} & =\mathcal{P}\mathrm{P}1\leftarrow\mathrm{P}\overline{m} \end{aligned}\] Definamos \[\begin{aligned} F_{1} & =\Psi_{\mathcal{P}_{1}}^{1,0,\#}\\ F_{2} & =\Psi_{\mathcal{P}_{2}}^{1,0,\#}\\ & \vdots\\ F_{n} & =\Psi_{\mathcal{P}_{n}}^{1,0,\#}\\ F_{n+1} & =\Psi_{\mathcal{P}_{n+1}}^{1,0,\ast}\\ F_{n+2} & =\Psi_{\mathcal{P}_{n+2}}^{1,0,\ast}\\ & \vdots\\ F_{n+m} & =\Psi_{\mathcal{P}_{n+m}}^{1,0,\ast} \end{aligned}\] Nótese que cada \(F_{i}\) es \(\Sigma\)-computable y tiene dominio igual a \(\omega\). Sea \(F=[F_{1},...,F_{n+m}]\). Tenemos por definición que \(D_{F}=\omega\) y ya que \(F_{(i)}=F_{i}\), para cada \(i=1,...,n+m\) tenemos que cada \(F_{(i)}\) es \(\Sigma\)-computable. Dejamos al lector verificar que \(I_{F}=S\)
Cuando un programa \(\mathcal{P}\) cumpla las propiedades dadas en (3) de la proposición anterior respecto de un conjunto \(S\), diremos que \(\mathcal{P}\) enumera a \(S\). Nótese que:
adhocprefix-adhocsufix Si \(S\subseteq\omega\) es no vacío, entonces \(\mathcal{P}\) enumera a \(S\) sii \(\mathrm{Dom}(\Psi_{\mathcal{P}}^{1,0,\#})=\omega\) y \(\mathrm{Im}(\Psi_{\mathcal{P}}^{1,0,\#})=S\)
adhocprefix-adhocsufix Si \(S\subseteq\Sigma^{*}\) es no vacío, entonces \(\mathcal{P}\) enumera a \(S\) sii \(\mathrm{Dom}(\Psi_{\mathcal{P}}^{1,0,*})=\omega\) y \(\mathrm{Im}(\Psi_{\mathcal{P}}^{1,0,*})=S\)
Cabe destacar que (3)\(\Rightarrow\)(1) de la proposición anterior es muy útil a la hora de probar que un conjunto dado es \(\Sigma\)-enumerable ya que nos permite trabajar dentro de un solo programa.
La versión imperativa del concepto de conjunto \(\Sigma\)-efectivamente computable es fácil de dar: un conjunto \(S\subseteq\omega^{n}\times\Sigma^{\ast m}\) será llamado \(\Sigma\)-computable cuando la función \(\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}\) sea \(\Sigma\)-computable. O sea que \(S\subseteq\omega^{n}\times\Sigma^{\ast m}\) es \(\Sigma\)-computable sii hay un programa \(\mathcal{P}\in\mathrm{Pro}^{\Sigma}\) el cual computa a \(\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}\), es decir:
adhocprefix-adhocsufix Si \((\vec{x},\vec{\alpha})\in S\), entonces \(\mathcal{P}\) se detiene partiendo desde \(\left\Vert x_{1},...x_{n},\alpha_{1},...,\alpha_{m}\right\Vert\) y la variable \(\mathrm{N}1\) queda con contenido igual a \(1\)
adhocprefix-adhocsufix Si \((\vec{x},\vec{\alpha})\in(\omega^{n}\times\Sigma^{\ast m})-S\), entonces \(\mathcal{P}\) se detiene partiendo desde \(\left\Vert x_{1},...x_{n},\alpha_{1},...,\alpha_{m}\right\Vert\) y la variable \(\mathrm{N}1\) queda con contenido igual a \(0\)
Si \(\mathcal{P}\) es un programa el cual computa a \(\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}\), diremos que \(\mathcal{P}\) decide la pertenencia a \(S\), con respecto al conjunto \(\omega^{n}\times\Sigma^{\ast m}\).
El Primer Manantial de Macros nos dice que si \(S\subseteq\omega^{n}\times\Sigma^{\ast m}\) es un conjunto \(\Sigma\)-computable, entonces, ya que \(\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}\) es \(\Sigma\)-computable, hay en \(\mathcal{S}^{\Sigma}\) un macro \[\left[\mathrm{IF}\;\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\;\mathrm{GOTO}\;\mathrm{A}1\right]\] Escribiremos el nombre de este macro de la siguiente manera mas intuitiva: \[\left[\mathrm{IF}\;(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\in S\;\mathrm{GOTO}\;\mathrm{A}1\right]\] Nótese que las expansiones de este macro, dado que \(\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}\) es \(\Sigma\)-total, ya sea terminan por la última instrucción de la expansión o direccionan a la primera instrucción que tenga label igual al label que reemplazo a \(\mathrm{A}1\) en la expansión. Es importante notar que para asegurar la existencia de este macro utilizamos que \(S\) es \(\Sigma\)-computable lo cual no siempre sucederá para un conjunto \(S\). Por ejemplo, puede pasar que \(S\) sea el dominio de una función \(\Sigma\)-computable pero que \(S\) no sea \(\Sigma\)-computable (esto se vera mas adelante) y en tal caso no existirá en \(\mathcal{S}^{\Sigma}\) un macro \[\left[\mathrm{IF}\;(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\in S\;\mathrm{GOTO}\;\mathrm{A}1\right]\] ya que si tal macro existiera seria fácil hacer un programa que compute a \(\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}\) y \(S\) seria \(\Sigma\)-computable. Es muy común el error de suponer que existe en \(\mathcal{S}^{\Sigma}\) un macro \(\left[\mathrm{IF}\;(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\in S\;\mathrm{GOTO}\;\mathrm{A}1\right]\) cuando \(S\) es el dominio de una función \(\Sigma\)-computable.
En esta sección compararemos los tres paradigmas de computabilidad efectiva que hemos desarrollado anteriormente. Para esto probaremos que cada uno de dichos paradigmas "vence" al otro en el sentido que incluye por lo menos todas las funciones que incluye el otro en su modelización del concepto de función \(\Sigma\)-efectivamente computable.
Usando macros podemos ahora probar que el paradigma imperativo de Neumann es por lo menos tan abarcativo como el funcional de Godel. Mas concretamente:
4.3 (Neumann vence a Godel). Si \(h\) es \(\Sigma\)-recursiva, entonces \(h\) es \(\Sigma\)-computable.
Proof. Lo probaremos usando la Regla de Inducción desde 0. Para cada \(k\in\omega\) sea \(\mathrm{Enu}_{k}\) el siguiente enunciado:
adhocprefix\(\mathrm{Enu}_{k}\):adhocsufix Si \(h\in\mathrm{R}_{k}^{\Sigma}\), entonces \(h\) es \(\Sigma\)-computable.
Hagamos entonces lo que nos encomienda la Regla de Inducción desde \(0\).
Prueba de que \(\mathrm{Enu}_{0}\) es verdadero. Fácil.
Prueba de que si \(\mathrm{Enu}_{k}\) es verdadero entonces \(\mathrm{Enu}_{k+1}\) lo es. Supongamos entonces que \(h\in\mathrm{R}_{k+1}^{\Sigma}\) y que vale \(\mathrm{Enu}_{k}\). Probaremos que \(h\) es \(\Sigma\)-computable. Hay varios casos:
Caso \(h\in\mathrm{R}_{k}^{\Sigma}\). Sigue directamente de \(\mathrm{Enu}_{k}\) que \(h\) es \(\Sigma\)-computable.
Caso \(h=M(P)\), con \(P:\omega\times\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\), un predicado perteneciente a \(\mathrm{R}_{k}^{\Sigma}\). Ya que vale \(\mathrm{Enu}_{k}\), \(P\) es \(\Sigma\)-computable y por lo tanto tenemos un macro \[\left[\mathrm{IF}\;P(\mathrm{V}1,...,\mathrm{V}\overline{n+1},\mathrm{W}1,...,\mathrm{W}\bar{m})\;\mathrm{GOTO}\;\mathrm{A}1\right]\] lo cual nos permite realizar el siguiente programa \[\begin{array}{ll} \mathrm{L}2 & \left[\mathrm{IF}\;P(\mathrm{N}\overline{n+1},\mathrm{N}1,...,\mathrm{N}\bar{n},\mathrm{P}1,...,\mathrm{P}\bar{m})\;\mathrm{GOTO}\;\mathrm{L}1\right]\\ & \mathrm{N}\overline{n+1}\leftarrow\mathrm{N}\overline{n+1}+1\\ & \mathrm{GOTO}\;\mathrm{L}2\\ \mathrm{L}1 & \mathrm{N}1\leftarrow\mathrm{N}\overline{n+1} \end{array}\] Es fácil chequear que este programa computa \(h.\)
Caso \(h=R(f,\mathcal{G})\), con \[\begin{aligned} f & :S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\Sigma^{\ast}\\ \mathcal{G}_{a} & :S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\times\Sigma^{\ast}\times\Sigma^{\ast}\rightarrow\Sigma^{\ast}\text{, }a\in\Sigma \end{aligned}\] elementos de \(\mathrm{R}_{k}^{\Sigma}\). Sea \(\Sigma=\{a_{1},...,a_{r}\}.\) Ya que vale \(\mathrm{Enu}_{k}\), las funciones \(f\), \(\mathcal{G}_{a}\), \(a\in\Sigma\), son \(\Sigma\)-computables y por lo tanto tenemos macros \[\left[\mathrm{W}\overline{m+1}\leftarrow f(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\right]\] \[\left[\mathrm{W}\overline{m+3}\leftarrow\mathcal{G}_{a_{i}}(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m},\mathrm{W}\overline{m+1},\mathrm{W}\overline{m+2})\right]\text{, }i=1,...,r\] Podemos entonces hacer el siguiente programa: \[\begin{array}{rl} & \left[\mathrm{P}\overline{m+3}\leftarrow f(\mathrm{N}1,...,\mathrm{N}\bar{n},\mathrm{P}1,...,\mathrm{P}\bar{m})\right]\\ \mathrm{L}\overline{r+1} & \mathrm{IF}\;\mathrm{P}\overline{m+1}\ \mathrm{BEGINS\ }a_{1}\text{ }\mathrm{GOTO}\;\mathrm{L}1\\ & \ \ \ \ \ \ \ \ \ \ \ \ \vdots\\ & \mathrm{IF}\;\mathrm{P}\overline{m+1}\ \mathrm{BEGINS\ }a_{r}\text{ }\mathrm{GOTO}\;\mathrm{L}\bar{r}\\ & \mathrm{GOTO}\;\mathrm{L}\overline{r+2}\\ \mathrm{L}1 & \mathrm{P}\overline{m+1}\leftarrow\text{ }^{\curvearrowright}\mathrm{P}\overline{m+1}\\ & \left[\mathrm{P}\overline{m+3}\leftarrow\mathcal{G}_{a_{1}}(\mathrm{N}1,...,\mathrm{N}\bar{n},\mathrm{P}1,...,\mathrm{P}\bar{m},\mathrm{P}\overline{m+2},\mathrm{P}\overline{m+3})\right]\\ & \mathrm{P}\overline{m+2}\leftarrow\mathrm{P}\overline{m+2}.a_{1}\\ & \mathrm{GOTO}\;\mathrm{L}\overline{r+1}\\ & \ \ \ \ \ \ \ \ \ \ \ \ \vdots\\ \mathrm{L}\bar{r} & \mathrm{P}\overline{m+1}\leftarrow\text{ }^{\curvearrowright}\mathrm{P}\overline{m+1}\\ & \left[\mathrm{P}\overline{m+3}\leftarrow\mathcal{G}_{a_{r}}(\mathrm{N}1,...,\mathrm{N}\bar{n},\mathrm{P}1,...,\mathrm{P}\bar{m},\mathrm{P}\overline{m+2},\mathrm{P}\overline{m+3})\right]\\ & \mathrm{P}\overline{m+2}\leftarrow\mathrm{P}\overline{m+2}.a_{r}\\ & \mathrm{GOTO}\;\mathrm{L}\overline{r+1}\\ \mathrm{L}\overline{r+2} & \mathrm{P}1\leftarrow\mathrm{P}\overline{m+3} \end{array}\] Es fácil chequear que este programa computa \(h.\)
El resto de los casos son dejados al lector.
Un corolario importante de esta batalla es el:
4.12 (Segundo Manantial de Macros). Sea \(\Sigma\) un alfabeto finito.
adhocprefix(a)adhocsufix Si \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) es \(\Sigma\)-recursiva, entonces en \(\mathcal{S}^{\Sigma}\) hay un macro \[\left[\mathrm{V}\overline{n+1}\leftarrow f(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\right]\]
adhocprefix(b)adhocsufix Si \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\Sigma^{\ast}\) es \(\Sigma\)-recursiva, entonces en \(\mathcal{S}^{\Sigma}\) hay un macro \[\left[\mathrm{W}\overline{m+1}\leftarrow f(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\right]\]
adhocprefix(c)adhocsufix Si \(P:D_{P}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) es un predicado \(\Sigma\)-recursivo, entonces en \(\mathcal{S}^{\Sigma}\) hay un macro \[\left[\mathrm{IF}\;P(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\;\mathrm{GOTO}\;\mathrm{A}1\right]\]
Cabe destacar que el Segundo Manantial de Macros nos dice que en \(\mathcal{S}^{\Sigma}\) hay macros \[\begin{aligned} & \left[\mathrm{V}\overline{n+1}\leftarrow f(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\right]\\ & \left[\mathrm{W}\overline{m+1}\leftarrow g(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\right]\\ & \left[\mathrm{IF}\;P(\mathrm{V}1,...,\mathrm{V}\bar{n},\mathrm{W}1,...,\mathrm{W}\bar{m})\;\mathrm{GOTO}\;\mathrm{A}1\right] \end{aligned}\] para todas las funciones \(\Sigma\)-mixtas y predicados \(\Sigma\)-mixtos que hemos trabajado hasta el momento en la materia ya que todas eran \(\Sigma\)-p.r.. Esto fortalece mucho al lenguaje \(\mathcal{S}^{\Sigma}\) ya que ahora tenemos macros para todas las funciones y predicados cotidianos en la matemática, además de tener macros para todas las funciones y predicados \(\Sigma\)-computables, debido al Primer Manantial de Macros. Veamos un ejemplo:
4.44. Supongamos \(S_{1},S_{2}\subseteq\omega^{n}\times\Sigma^{\ast m}\) son conjuntos \(\Sigma\)-enumerables. Entonces \(S_{1}\cup S_{2}\) es \(\Sigma\)-enumerable.
Proof. Podemos suponer que ni \(S_{1}\) ni \(S_{2}\) son vacíos ya que de lo contrario el resultado es trivial. Además supondremos que \(n=2\) y \(m=1\).
La idea de la prueba es la misma que la que usamos para probar que la unión de conjuntos \(\Sigma\)-efectivamente enumerables es \(\Sigma\)-efectivamente enumerable. Daremos usando macros un programa que enumera a \(S_{1}\cup S_{2}\) y luego aplicaremos la Caracterización de \(\Sigma\)-enumerabilidad. Por hipótesis hay funciones \(F:\omega\rightarrow\omega\times\omega\times\Sigma^{\ast}\) y \(G:\omega\rightarrow\omega\times\omega\times\Sigma^{\ast}\) tales que \(F_{(1)}\), \(F_{(2)}\), \(F_{(3)}\), \(G_{(1)}\), \(G_{(2)}\) y \(G_{(3)}\) son \(\Sigma\)-computables, \(\mathrm{Im}(F)=S_{1}\) y \(\mathrm{Im}(G)=S_{2}\). O sea que nuestro Primer Manantial de Macros nos dice que en \(\mathcal{S}^{\Sigma}\) hay macros \[\begin{aligned} & \left[\mathrm{V}2\leftarrow F_{(1)}(\mathrm{V}1)\right]\\ & \left[\mathrm{V}2\leftarrow F_{(2)}(\mathrm{V}1)\right]\\ & \left[\mathrm{W}1\leftarrow F_{(3)}(\mathrm{V}1)\right]\\ & \left[\mathrm{V}2\leftarrow G_{(1)}(\mathrm{V}1)\right]\\ & \left[\mathrm{V}2\leftarrow G_{(2)}(\mathrm{V}1)\right]\\ & \left[\mathrm{W}1\leftarrow G_{(3)}(\mathrm{V}1)\right] \end{aligned}\] Ya que el predicado \(Par=\lambda x[x\) es par\(]\) es \(\Sigma\)-p.r., el Segundo Manantial de Macros nos dice que en \(\mathcal{S}^{\Sigma}\) hay un macro: \[[\mathrm{IF\ }Par(\mathrm{V}1)\ \mathrm{GOTO\ A}1]\] el cual escribiremos de la siguiente manera mas intuitiva \[[\mathrm{IF\ V}1\text{ es par }\mathrm{GOTO\ A}1]\] Ya que la función \(D=\lambda x[\lfloor x/2\rfloor]\) es \(\Sigma\)-p.r., el Segundo Manantial de Macros nos dice que hay un macro: \[[\mathrm{V}2\leftarrow D(\mathrm{V}1)]\] el cual escribiremos de la siguiente manera mas intuitiva \[[\mathrm{V}2\leftarrow\lfloor\mathrm{V}1/2\rfloor]\] Sea \(\mathcal{P}\) el siguiente programa: \[\begin{array}{ll} & [\mathrm{IF\ N}1\text{ es par }\mathrm{GOTO\ L}1\\ & \mathrm{N}1\leftarrow\mathrm{N}1\dot{-}1\\ & [\mathrm{N}1111\leftarrow\lfloor\mathrm{N}1/2\rfloor]\\ & \left[\mathrm{N}1\leftarrow G_{(1)}(\mathrm{N}1111)\right]\\ & \left[\mathrm{N}2\leftarrow G_{(2)}(\mathrm{N}1111)\right]\\ & \left[\mathrm{P}1\leftarrow G_{(3)}(\mathrm{N}1111)\right]\\ & \mathrm{GOTO\ L}2\\ \mathrm{L}1 & [\mathrm{N}1111\leftarrow\lfloor\mathrm{N}1/2\rfloor]\\ & \left[\mathrm{N}1\leftarrow F_{(1)}(\mathrm{N}1111)\right]\\ & \left[\mathrm{N}2\leftarrow F_{(2)}(\mathrm{N}1111)\right]\\ & \left[\mathrm{P}1\leftarrow F_{(3)}(\mathrm{N}1111)\right]\\ \mathrm{L}2 & \mathrm{SKIP} \end{array}\] Es fácil ver que \(\mathcal{P}\) cumple (a) y (b) de (3) de la Caracterización de \(\Sigma\)-enumerabilidad por lo cual \(S_{1}\cup S_{2}\) es \(\Sigma\)-enumerable.
En forma análoga a lo hecho recién, se pueden probar, copiando la respectiva idea en el paradigma de la computabilidad efectiva, los siguientes resultados:
adhocprefix-adhocsufix Supongamos \(S_{1},S_{2}\subseteq\omega^{n}\times\Sigma^{\ast m}\) son conjuntos \(\Sigma\)-enumerables. Entonces \(S_{1}\cap S_{2}\) es \(\Sigma\)-enumerable.
adhocprefix-adhocsufix Sea \(S\subseteq\omega^{n}\times\Sigma^{\ast m}\). Si \(S\) es \(\Sigma\)-computable, entonces \(S\) es \(\Sigma\)-enumerable
O sea que con el uso de nuestros poderosos macros asociados a funciones y predicados \(\Sigma\)-p.r. (gracias al Segundo Manantial) mas los que provee el Primer Manantial podemos simular los procedimientos efectivos realizados dentro del paradigma filosófico con programas concretos del lenguaje \(\mathcal{S}^{\Sigma}\). Pero esto no es del todo así, ya que los ejemplos vistos recién no hacen uso del concepto de “ejecución de una cantidad de pasos”, idea que en muchos diseños de nuestros procedimientos efectivos es usada. Por ejemplo si queremos “copiar” dentro del paradigma imperativo la prueba del resultado
adhocprefix-adhocsufix Si \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) es una función \(\Sigma\)-efectivamente computable, entonces \(D_{f}\) es \(\Sigma\)-efectivamente enumerable
notaremos la dificultad de aun no poder hablar de cantidad de pasos en la ejecución del programa que compute a \(f\). O sea nuestro Primer Manantial nos da un macro de asignación para \(f\) pero no es claro de como correr una expansión de dicho macro una cierta cantidad de veces. Esto lo lograremos usando macros asociados a las funciones \(Halt^{n,m}\), \(E_{\#}^{n,m}\) y \(E_{\ast}^{n,m}\) las cuales se usan en la batalla Godel vence a Neumann que viene a continuación. Estas funciones serán clave a la hora de simular con programas a procedimientos efectivos que en su funcionamiento involucran el funcionamiento de otros procedimientos efectivos.
O sea que luego de ambas batallas entre Godel y Neumann, el paradigma imperativo se vera fortalecido sustancialmente. También mas adelante en la Sección Resultados Básicos Presentados en Paradigma Recursivo veremos como los desarrollos hechos en ambas batallas entre Godel y Neumann fortalecen al paradigma funcional. Otro ejemplo de esto último es la Forma Normal de Kleene donde se prueba que toda función \(\Sigma\)-recursiva es expresarle en la forma \(g\circ M(P)\) donde \(g\) es una función \(\Sigma\)-p.r. y \(P\) es un predicado \(\Sigma\)-p.r..
Para probar que toda función \(\Sigma\)-computable es \(\Sigma\)-recursiva debemos hacer un profundo estudio de la recursividad del lenguaje \(\mathcal{S}^{\Sigma}\). Primero analizaremos la recursividad de la sintaxis de \(\mathcal{S}^{\Sigma}\).
Primero probaremos dos lemas que muestran que la sintaxis de \(\mathcal{S}^{\Sigma}\) es \((\Sigma\cup\Sigma_{p})\)-recursiva primitiva. Recordemos que \(Sig:Num^{\ast}\rightarrow Num^{\ast}\) fue definida de la siguiente manera \[\begin{aligned} Sig(\varepsilon) & =1\\ Sig(\alpha0) & =\alpha1\\ Sig(\alpha1) & =\alpha2\\ Sig(\alpha2) & =\alpha3\\ Sig(\alpha3) & =\alpha4\\ Sig(\alpha4) & =\alpha5\\ Sig(\alpha5) & =\alpha6\\ Sig(\alpha6) & =\alpha7\\ Sig(\alpha7) & =\alpha8\\ Sig(\alpha8) & =\alpha9\\ Sig(\alpha9) & =Sig(\alpha)0 \end{aligned}\] Y también definimos \(Dec:\omega\rightarrow Num^{\ast}\) de la siguiente manera \[\begin{aligned} Dec(0) & =\varepsilon\\ Dec(n+1) & =Sig(Dec(n)) \end{aligned}\] Recordemos también que para hacer mas ágil la notación escribimos \(\bar{n}\) en lugar de \(Dec(n)\).
4.45. Sea \(\Sigma\) un alfabeto cualquiera. La función \(Dec\) es \((\Sigma\cup\Sigma_{p})\)-p.r..
Proof. Es fácil ver que \(Dec\) es \(Num\)-p.r.. Ya que también es \((\Sigma\cup\Sigma_{p})\)-mixta, el Teorema 4.2 nos dice que es \((\Sigma\cup\Sigma_{p})\)-p.r.. En el Lema 4.12 se da una prueba fácil de este hecho, sin recurrir al citado teorema.
4.46. Para cada \(n,x\in\omega\), tenemos que \(\left\vert \bar{n}\right\vert \leq x\) si y solo si \(n\leq10^{x}-1\)
4.47. \(\mathrm{Ins}^{\Sigma}\) es un conjunto \((\Sigma\cup\Sigma_{p})\)-p.r..
Proof. Para simplificar la prueba asumiremos que \(\Sigma=\{@,\blacktriangle\}\). Ya que \(\mathrm{Ins}^{\Sigma}\) es unión de los siguientes conjuntos \[\begin{aligned} L_{1} & =\left\{ \mathrm{N}\bar{k}\leftarrow\mathrm{N}\bar{k}+1:k\in\mathbf{N}\right\} \\ L_{2} & =\left\{ \mathrm{N}\bar{k}\leftarrow\mathrm{N}\bar{k}\dot{-}1:k\in\mathbf{N}\right\} \\ L_{3} & =\left\{ \mathrm{N}\bar{k}\leftarrow\mathrm{N}\bar{n}:k,n\in\mathbf{N}\right\} \\ L_{4} & =\left\{ \mathrm{N}\bar{k}\leftarrow0:k\in\mathbf{N}\right\} \\ L_{5} & =\left\{ \mathrm{IF}\;\mathrm{N}\bar{k}\neq0\;\mathrm{GOTO}\;\mathrm{L}\bar{m}:k,m\in\mathbf{N}\right\} \\ L_{6} & =\left\{ \mathrm{P}\bar{k}\leftarrow\mathrm{P}\bar{k}.@:k\in\mathbf{N}\right\} \\ L_{7} & =\left\{ \mathrm{P}\bar{k}\leftarrow\mathrm{P}\bar{k}.\blacktriangle:k\in\mathbf{N}\right\} \\ L_{8} & =\left\{ \mathrm{P}\bar{k}\leftarrow\text{ }^{\curvearrowright}\mathrm{P}\bar{k}:k\in\mathbf{N}\right\} \\ L_{9} & =\left\{ \mathrm{P}\bar{k}\leftarrow\mathrm{P}\bar{n}:k,n\in\mathbf{N}\right\} \\ L_{10} & =\left\{ \mathrm{P}\bar{k}\leftarrow\varepsilon:k\in\mathbf{N}\right\} \\ L_{11} & =\left\{ \mathrm{IF}\;\mathrm{P}\bar{k}\;\mathrm{BEGINS}\;@\;\mathrm{GOTO}\;\mathrm{L}\bar{m}:k,m\in\mathbf{N}\right\} \\ L_{12} & =\left\{ \mathrm{IF}\;\mathrm{P}\bar{k}\;\mathrm{BEGINS}\;\blacktriangle\;\mathrm{GOTO}\;\mathrm{L}\bar{m}:k,m\in\mathbf{N}\right\} \\ L_{13} & =\left\{ \mathrm{GOTO}\;\mathrm{L}\bar{m}:m\in\mathbf{N}\right\} \\ L_{14} & =\left\{ \mathrm{SKIP}\right\} \\ L_{15} & =\left\{ \mathrm{L}\bar{k}\alpha:k\in\mathbf{N\;}\text{y }\alpha\in L_{1}\cup...\cup L_{14}\right\} \end{aligned}\] solo debemos probar que \(L_{1},...,L_{15}\) son \((\Sigma\cup\Sigma_{p})\)-p.r.. Veremos primero por ejemplo que \[L_{11}=\left\{ \mathrm{IFP}\bar{k}\mathrm{BEGINS}@\mathrm{GOTOL}\bar{m}:k,m\in\mathbf{N}\right\}\] es \((\Sigma\cup\Sigma_{p})\)-p.r.. Primero nótese que \(\alpha\in L_{11}\) si y solo si existen \(k,m\in\mathbf{N}\) tales que \[\alpha=\mathrm{IFP}\bar{k}\mathrm{BEGINS}@\mathrm{GOTOL}\bar{m}\] Mas formalmente tenemos que \(\alpha\in L_{11}\) si y solo si \[(\exists k\in\mathbf{N})(\exists m\in\mathbf{N})\;\alpha=\mathrm{IFP}\bar{k}\mathrm{BEGINS}@\mathrm{GOTOL}\bar{m}\] Ya que cuando existen tales \(k,m\) tenemos que \(\bar{k}\) y \(\bar{m}\) son subpalabras de \(\alpha\), el lema anterior nos dice que \(\alpha\in L_{11}\) si y solo si \[(\exists k\in\mathbf{N})_{k\leq10^{\left\vert \alpha\right\vert }}(\exists m\in\mathbf{N})_{m\leq10^{\left\vert \alpha\right\vert }}\;\alpha=\mathrm{IFP}\bar{k}\mathrm{BEGINS}@\mathrm{GOTOL}\bar{m}\] Sea \[P=\lambda mk\alpha\left[\alpha=\mathrm{IFP}\bar{k}\mathrm{BEGINS}@\mathrm{GOTOL}\bar{m}\right]\] Ya que \(D_{\lambda k\left[\bar{k}\right]}=\omega\), tenemos que \(D_{P}=\omega^{2}\times(\Sigma\cup\Sigma_{p})^{\ast}\). Nótese que \[P=\lambda\alpha\beta\left[\alpha=\beta\right]\circ\left[p_{3}^{2,1},f\right]\] donde \[f=\lambda\alpha_{1}\alpha_{2}\alpha_{3}\alpha_{4}\left[\alpha_{1}\alpha_{2}\alpha_{3}\alpha_{4}\right]\circ\left[C_{\mathrm{IFP}}^{2,1},\lambda k\left[\bar{k}\right]\circ p_{2}^{2,1},C_{\mathrm{BEGINS}@\mathrm{GOTOL}}^{2,1},\lambda k\left[\bar{k}\right]\circ p_{1}^{2,1}\right]\] lo cual nos dice que \(P\) es \((\Sigma\cup\Sigma_{p})\)-p.r..
Nótese que \[\chi_{L_{11}}^{(\Sigma\cup\Sigma_{p})^{\ast}}=\lambda\alpha\left[(\exists k\in\mathbf{N})_{k\leq10^{\left\vert \alpha\right\vert }}(\exists m\in\mathbf{N})_{m\leq10^{\left\vert \alpha\right\vert }}\;P(m,k,\alpha)\right]\] Esto nos dice que podemos usar dos veces el Lema 4.22 para ver que \(\chi_{L_{11}}^{(\Sigma\cup\Sigma_{p})^{\ast}}\) es \((\Sigma\cup\Sigma_{p})\)-p.r.. Veamos como. Sea \[Q=\lambda k\alpha\left[(\exists m\in\mathbf{N})_{m\leq10^{\left\vert \alpha\right\vert }}\;P(m,k,\alpha)\right]\] Por el Lema 4.22 tenemos que \[\lambda xk\alpha\left[(\exists m\in\mathbf{N})_{m\leq x}\;P(m,k,\alpha)\right]\] es \((\Sigma\cup\Sigma_{p})\)-p.r. lo cual nos dice que \[Q=\lambda xk\alpha\left[(\exists m\in\mathbf{N})_{m\leq x}\;P(m,k,\alpha)\right]\circ\left[\lambda\alpha\left[10^{\left\vert \alpha\right\vert }\right]\circ p_{2}^{1,1},p_{1}^{1,1},p_{2}^{1,1}\right]\] lo es. Ya que \[\chi_{L_{11}}^{(\Sigma\cup\Sigma_{p})^{\ast}}=\lambda\alpha\left[(\exists k\in\mathbf{N})_{k\leq10^{\left\vert \alpha\right\vert }}\;Q(k,\alpha)\right]\] podemos en forma similar aplicar el Lema 4.22 y obtener finalmente que \(\chi_{L_{11}}^{(\Sigma\cup\Sigma_{p})^{\ast}}\) es \((\Sigma\cup\Sigma_{p})\)-p.r..
En forma similar podemos probar que \(L_{1},...,L_{14}\) son \((\Sigma\cup\Sigma_{p})\)-p.r.. Esto nos dice que \(L_{1}\cup...\cup L_{14}\) es \((\Sigma\cup\Sigma_{p})\)-p.r.. Nótese que \(L_{1}\cup...\cup L_{14}\) es el conjunto de las instrucciones básicas de \(\mathcal{S}^{\Sigma}\). Llamemos \(\mathrm{InsBas}^{\Sigma}\) a dicho conjunto. Para ver que \(L_{15}\) es \((\Sigma\cup\Sigma_{p})\)-p.r. notemos que \[\chi_{L_{15}}^{(\Sigma\cup\Sigma_{p})^{\ast}}=\lambda\alpha\left[(\exists k\in\mathbf{N})_{k\leq10^{\left\vert \alpha\right\vert }}(\exists\beta\in\mathrm{InsBas}^{\Sigma})_{\left\vert \beta\right\vert \leq\left\vert \alpha\right\vert }\;\alpha=\mathrm{L}\bar{k}\beta\right]\] lo cual nos dice que aplicando dos veces el Lema 4.22 obtenemos que \(\chi_{L_{15}}^{(\Sigma\cup\Sigma_{p})^{\ast}}\) es \((\Sigma\cup\Sigma_{p})\)-p.r.. Ya que \(\mathrm{Ins}^{\Sigma}=\mathrm{InsBas}^{\Sigma}\cup L_{15}\) tenemos que \(\mathrm{Ins}^{\Sigma}\) es \((\Sigma\cup\Sigma_{p})\)-p.r..
Recordemos que \(Bas:\mathrm{Ins}^{\Sigma}\rightarrow(\Sigma\cup\Sigma_{p})^{\ast}\), fue definida por \[Bas(I)=\left\{ \begin{array}{ccl} J & & \text{si }I\text{ es de la forma }\mathrm{L}\bar{k}J\text{, con }k\in\mathbf{N}\text{ y }J\in\mathrm{Ins}^{\Sigma}\\ I & & \text{caso contrario} \end{array}\right.\] Definamos \(Lab:\mathrm{Ins}^{\Sigma}\rightarrow(\Sigma\cup\Sigma_{p})^{\ast}\) de la siguiente manera \[Lab(I)=\left\{ \begin{array}{lll} \mathrm{L}\bar{k} & & \text{si }I\text{ es de la forma }\mathrm{L}\bar{k}J\text{, con }k\in\mathbf{N}\text{ y }J\in\mathrm{Ins}^{\Sigma}\\ \varepsilon & & \text{caso contrario} \end{array}\right.\]
4.48. \(Bas\) y \(Lab\) son funciones \((\Sigma\cup\Sigma_{p})\)-p.r.
Proof. Sea \(\leq\) un orden total sobre \(\Sigma\cup\Sigma_{p}\). Sea \(L=\{\mathrm{L}\bar{k}:k\in\mathbf{N}\}\cup\{\varepsilon\}\). Dejamos al lector probar que \(L\) es un conjunto \((\Sigma\cup\Sigma_{p})\)-p.r.. Sea \[P=\lambda I\alpha\left[\alpha\in\mathrm{Ins}^{\Sigma}\wedge I\in\mathrm{Ins}^{\Sigma}\wedge[\alpha]_{1}\neq\mathrm{L}\wedge(\exists\beta\in L)\ I=\beta\alpha\right]\] Note que \(D_{P}=(\Sigma\cup\Sigma_{p})^{\ast2}\). Dejamos al lector probar que \(P\) es \((\Sigma\cup\Sigma_{p})\)-p.r.. Nótese además que cuando \(I\in\mathrm{Ins}^{\Sigma}\) tenemos que \(P(I,\alpha)=1\) sii \(\alpha=Bas(I)\). Dejamos al lector probar que \(Bas=M^{\leq}\left(P\right)\) por lo que para ver que \(Bas\) es \((\Sigma\cup\Sigma_{p})\)-p.r., solo nos falta ver que la función \(Bas\) es acotada por alguna función \((\Sigma\cup\Sigma_{p})\)-p.r. y \((\Sigma\cup\Sigma_{p})\)-total. Pero esto es trivial ya que \(\left\vert Bas(I)\right\vert \leq\left\vert I\right\vert =\lambda\alpha[\left\vert \alpha\right\vert ](I)\), para cada \(I\in\mathrm{Ins}^{\Sigma}\).
Finalmente note que \[Lab=M^{\leq}\left(\lambda I\alpha\left[\alpha Bas(I)=I\right]\right)\] lo cual nos dice que \(Lab\) es \((\Sigma\cup\Sigma_{p})\)-p.r..
Recordemos que dado un programa \(\mathcal{P}\) habíamos definido \(I_{i}^{\mathcal{P}}=\varepsilon\), para \(i=0\) o \(i>n(\mathcal{P}).\) O sea que la función \((\Sigma\cup\Sigma_{p})\)-mixta \(\lambda i\mathcal{P}\left[I_{i}^{\mathcal{P}}\right]\) tiene dominio igual a \(\omega\times\mathrm{Pro}^{\Sigma}\). Nótese que usamos notación lambda respecto del alfabeto \(\Sigma\cup\Sigma_{p}\). Además nótese que usamos la variable \(\mathcal{P}\) en la notación lambda por un tema de comodidad psicológica dado que la expresión \(I_{i}^{\alpha}\) esta definida solo cuando \(\alpha\) es un programa pero podríamos haber escrito \(\lambda i\alpha\left[I_{i}^{\alpha}\right]\) y sigue siendo la misma función.
4.49.
adhocprefix(a)adhocsufix \(\mathrm{Pro}^{\Sigma}\) es un conjunto \((\Sigma\cup\Sigma_{p})\)-p.r.
adhocprefix(b)adhocsufix \(\lambda\mathcal{P}\left[n(\mathcal{P})\right]\) y \(\lambda i\mathcal{P}\left[I_{i}^{\mathcal{P}}\right]\) son funciones \((\Sigma\cup\Sigma_{p})\)-p.r..
Proof. Ya que \(\mathrm{Pro}^{\Sigma}=D_{\lambda\mathcal{P}\left[n(\mathcal{P})\right]}\) tenemos que (b) implica (a). Para probar (b) Sea \(\leq\) un orden total sobre \(\Sigma\cup\Sigma_{p}\). Sea \(P\) el siguiente predicado
\(\lambda x\left[Lt(x)>0\wedge(\forall t\in\mathbf{N})_{t\leq Lt(x)}\;\ast^{\leq}((x)_{t})\in\mathrm{Ins}^{\Sigma}\wedge\right.\)
\(\ \ \ \ \ \ \ \ \ \ \ \ (\forall t\in\mathbf{N})_{t\leq Lt(x)}(\forall m\in\mathbf{N})\;\lnot(\mathrm{L}\bar{m}\ \)t-final \(\ast^{\leq}((x)_{t}))\vee\)
\(\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \left.(\exists j\in\mathbf{N})_{j\leq Lt(x)}(\exists\alpha\in(\Sigma\cup\Sigma_{p})-Num)\;\mathrm{L}\bar{m}\alpha\ \text{t-inicial}\ast^{\leq}((x)_{j})\right]\)
Nótese que \(D_{P}=\mathbf{N}\) y que \(P(x)=1\) sii \(Lt(x)>0\), \(\ast^{\leq}((x)_{t})\in\mathrm{Ins}^{\Sigma}\), para cada \(t=1,...,Lt(x)\) y además \(\subset_{t=1}^{t=Lt(x)}\ast^{\leq}((x)_{t})\in\mathrm{Pro}^{\Sigma}\). Para ver que \(P\) es \((\Sigma\cup\Sigma_{p})\)-p.r. solo nos falta acotar el cuantificador \((\forall m\in\mathbf{N})\) de la expresión lambda que define a \(P\). Ya que nos interesan los valores de \(m\) para los cuales \(\bar{m}\) es posiblemente una subpalabra de alguna de las palabras \(\ast^{\leq}((x)_{j})\), el Lema 4.46 nos dice que una cota posible es \(10^{\max\{\left\vert \ast^{\leq}((x)_{j})\right\vert :1\leq j\leq Lt(x)\}}-1\). Dejamos al lector los detalles de la prueba de que \(P\) es \((\Sigma\cup\Sigma_{p})\)-p.r.. Sea \[Q=\lambda x\alpha\left[P(x)\wedge\alpha=\subset_{t=1}^{t=Lt(x)}\ast^{\leq}((x)_{t})\right]\text{.}\] Note que \(D_{Q}=\mathbf{N}\times(\Sigma\cup\Sigma_{p})^{\ast}\). Claramente \(Q\) es \((\Sigma\cup\Sigma_{p})\)-p.r.. Además note que \(D_{M(Q)}=\mathrm{Pro}^{\Sigma}\). Nótese que para \(\mathcal{P}\in\mathrm{Pro}^{\Sigma}\), tenemos que \(M(Q)(\mathcal{P})\) es aquel número tal que pensado como infinitupla (vía mirar su secuencia de exponentes) codifica la secuencia de instrucciones que forman a \(\mathcal{P}\). Es decir \[M(Q)(\mathcal{P})=\left\langle \#^{\leq}(I_{1}^{\mathcal{P}}),\#^{\leq}(I_{2}^{\mathcal{P}}),...,\#^{\leq}(I_{n(\mathcal{P})}^{\mathcal{P}}),0,0,...\right\rangle\] Por (b) del Lema 4.25, \(M(Q)\) es \((\Sigma\cup\Sigma_{p})\)-p.r. ya que para cada \(\mathcal{P}\in\mathrm{Pro}^{\Sigma}\) tenemos que \[\begin{aligned} M(Q)(\mathcal{P}) & =\left\langle \#^{\leq}(I_{1}^{\mathcal{P}}),\#^{\leq}(I_{2}^{\mathcal{P}}),...,\#^{\leq}(I_{n(\mathcal{P})}^{\mathcal{P}}),0,0,...\right\rangle \\ & =\underset{i=1}{\overset{n(\mathcal{P})}{\Pi}}pr(i)^{\#^{\leq}(I_{1}^{\mathcal{P}})}\\ & \leq\underset{i=1}{\overset{\left\vert \mathcal{P}\right\vert }{\Pi}}pr(i)^{\#^{\leq}(\mathcal{P})} \end{aligned}\] Además tenemos que \[\begin{aligned} \lambda\mathcal{P}\left[n(\mathcal{P})\right] & =\lambda x\left[Lt(x)\right]\circ M(Q)\\ \lambda i\mathcal{P}\left[I_{i}^{\mathcal{P}}\right] & =\ast^{\leq}\circ g\circ\left[p_{1}^{1,1},M(Q)\circ p_{2}^{1,1}\right] \end{aligned}\] donde \(g=C_{0}^{1,1}|_{\{0\}\times\omega}\cup\lambda ix\left[(x)_{i}\right]\), lo cual dice que \(\lambda\mathcal{P}\left[n(\mathcal{P})\right]\) y \(\lambda i\mathcal{P}\left[I_{i}^{\mathcal{P}}\right]\) son funciones \((\Sigma\cup\Sigma_{p})\)-p.r..
Para estudiar la recursividad de la semántica de \(\mathcal{S}^{\Sigma}\) deberemos definir varias funciones que tienen que ver con el funcionamiento de un programa y estudiar su recursividad.
Sean \(n,m\geq0\) fijos. Definamos entonces las funciones \[\begin{aligned} i^{n,m} & :\omega\times\omega^{n}\times\Sigma^{\ast m}\times\mathrm{Pro}^{\Sigma}\rightarrow\omega\\ E_{\#}^{n,m} & :\omega\times\omega^{n}\times\Sigma^{\ast m}\times\mathrm{Pro}^{\Sigma}\rightarrow\omega^{[\mathbf{N}]}\\ E_{\ast}^{n,m} & :\omega\times\omega^{n}\times\Sigma^{\ast m}\times\mathrm{Pro}^{\Sigma}\rightarrow\Sigma^{\ast[\mathbf{N}]} \end{aligned}\] de la siguiente manera \[\begin{aligned} (i^{n,m}(0,\vec{x},\vec{\alpha},\mathcal{P}),E_{\#}^{n,m}(0,\vec{x},\vec{\alpha},\mathcal{P}),E_{\ast}^{n,m}(0,\vec{x},\vec{\alpha},\mathcal{P})) & =(1,(x_{1},...,x_{n},0,...),(\alpha_{1},...,\alpha_{m},\varepsilon,...))\\ (i^{n,m}(t+1,\vec{x},\vec{\alpha},\mathcal{P}),E_{\#}^{n,m}(t+1,\vec{x},\vec{\alpha},\mathcal{P}),E_{\ast}^{n,m}(t+1,\vec{x},\vec{\alpha},\mathcal{P})) & =S_{\mathcal{P}}(i^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}),E_{\#}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}),E_{\ast}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P})) \end{aligned}\] Nótese que \[(i^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}),E_{\#}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}),E_{\ast}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}))\] es la descripción instantánea que se obtiene luego de correr \(\mathcal{P}\) una cantidad \(t\) de pasos partiendo del estado \[((x_{1},...,x_{n},0,...),(\alpha_{1},...,\alpha_{m},\varepsilon,...))\] Es importante notar que si bien \(i^{n,m}\) es una función \((\Sigma\cup\Sigma_{p})\)-mixta, ni \(E_{\#}^{n,m}\) ni \(E_{\ast}^{n,m}\) lo son.
Definamos para cada \(j\in\mathbf{N}\), funciones \((\Sigma\cup\Sigma_{p})\)-mixtas \[\begin{aligned} E_{\#j}^{n,m} & :\omega\times\omega^{n}\times\Sigma^{\ast m}\times\mathrm{Pro}^{\Sigma}\rightarrow\omega\\ E_{\ast j}^{n,m} & :\omega\times\omega^{n}\times\Sigma^{\ast m}\times\mathrm{Pro}^{\Sigma}\rightarrow\Sigma^{\ast} \end{aligned}\] de la siguiente manera \[\begin{aligned} E_{\#j}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}) & =j\text{-esima coordenada de }E_{\#}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P})\\ E_{\ast j}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}) & =j\text{-esima coordenada de }E_{\ast}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}) \end{aligned}\] Nótese que \[\begin{aligned} E_{\#}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}) & =(E_{\#1}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}),E_{\#2}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}),...)\\ E_{\ast}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}) & =(E_{\ast1}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}),E_{\ast2}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}),...) \end{aligned}\] Nuestro próximo objetivo es mostrar que las funciones \(i^{n,m}\), \(E_{\#j}^{n,m}\), \(E_{\ast j}^{n,m}\) son \((\Sigma\cup\Sigma_{p})\)-p.r..
Para esto primero debemos probar un lema el cual muestre que una ves codificadas las descripciones instantáneas en forma numérica, las funciones que dan la descripción instantánea sucesora son \((\Sigma\cup\Sigma_{p})\)-p.r.. Dado un orden total \(\leq\) sobre \(\Sigma\cup\Sigma_{p}\), codificaremos las descripciones instantáneas haciendo uso de las biyecciones \[\begin{array}{rcl} \omega^{\left[\mathbf{N}\right]} & \rightarrow & \mathbf{N}\\ (s_{1},s_{2},...) & \rightarrow & \left\langle s_{1},s_{2},...\right\rangle \end{array}\;\;\;\;\;\;\;\;\;\;\;\;\begin{array}{rcl} \Sigma^{\ast\left[\mathbf{N}\right]} & \rightarrow & \mathbf{N}\\ (\sigma_{1},\sigma_{2},...) & \rightarrow & \left\langle \#^{\leq}(\sigma_{1}),\#^{\leq}(\sigma_{2}),...\right\rangle \end{array}\] Es decir que a la descripción instantánea \[(i,(s_{1},s_{2},...),(\sigma_{1},\sigma_{2},...))\] la codificaremos con la terna \[(i,\left\langle s_{1},s_{2},...\right\rangle ,\left\langle \#^{\leq}(\sigma_{1}),\#^{\leq}(\sigma_{2}),...\right\rangle )\in\omega\times\mathbf{N}\times\mathbf{N}\] Es decir que una terna \((i,x,y)\in\omega\times\mathbf{N}\times\mathbf{N}\) codificara a la descripción instantánea \[(i,((x)_{1},(x)_{2},...),(\ast^{\leq}((y)_{1}),\ast^{\leq}((y)_{2}),...))\] Definamos \[\begin{aligned} s & :\omega\times\mathbf{N}\times\mathbf{N}\times\mathrm{Pro}^{\Sigma}\rightarrow\omega\\ S_{\#} & :\omega\times\mathbf{N}\times\mathbf{N}\times\mathrm{Pro}^{\Sigma}\rightarrow\omega\\ S_{\ast} & :\omega\times\mathbf{N}\times\mathbf{N}\times\mathrm{Pro}^{\Sigma}\rightarrow\omega \end{aligned}\] de la siguiente manera \[\begin{array}[t]{ll} s(i,x,y,\mathcal{P})= & \text{primera coordenada de la codificacion de la descripcion instantanea}\\ & \text{sucesora de }(i,((x)_{1},(x)_{2},...),(\ast^{\leq}((y)_{1}),\ast^{\leq}((y)_{2}),...))\text{ en }\mathcal{P} \end{array}\] \[\begin{array}[t]{ll} S_{\#}(i,x,y,\mathcal{P})= & \text{segunda coordenada de la codificacion de la descripcion instantanea}\\ & \text{sucesora de }(i,((x)_{1},(x)_{2},...),(\ast^{\leq}((y)_{1}),\ast^{\leq}((y)_{2}),...))\text{ en }\mathcal{P} \end{array}\] \[\begin{array}[t]{ll} S_{\ast}(i,x,y,\mathcal{P})= & \text{tercera coordenada de la codificacion de la descripcion instantanea}\\ & \text{sucesora de }(i,((x)_{1},(x)_{2},...),(\ast^{\leq}((y)_{1}),\ast^{\leq}((y)_{2}),...))\text{ en }\mathcal{P} \end{array}\] Nótese que la definición de estas funciones depende del orden total \(\leq\) sobre \(\Sigma\cup\Sigma_{p}\).
4.50. Dado un orden total \(\leq\) sobre \(\Sigma\cup\Sigma_{p}\), las funciones \(s\), \(S_{\#}\) y \(S_{\ast}\) son \((\Sigma\cup\Sigma_{p})\)-p.r..
Proof. Necesitaremos algunas funciones \((\Sigma\cup\Sigma_{p})\)-p.r.. Dada una instrucción \(I\) en la cual al menos ocurre una variable, usaremos \(\#Var1(I)\) para denotar el número de la primer variable que ocurre en \(I\). Por ejemplo \[\#Var1\left(\mathrm{L}\bar{n}\;\mathrm{IF\;N}\bar{k}\neq0\;\mathrm{GOTO\;L}\bar{m}\right)=k\] Nótese que \(\lambda I[\#Var1(I)]\) tiene dominio igual a \(\mathrm{Ins}^{\Sigma}-L\), donde \(L\) es la unión de los siguientes conjuntos \[\begin{gathered} \{\mathrm{GOTO\ L}\bar{m}:m\in\mathbf{N\}\cup}\{\mathrm{L}\bar{k}\ \mathrm{GOTO\ L}\bar{m}:k,m\in\mathbf{N\}}\\ \left\{ \mathrm{SKIP}\right\} \mathbf{\cup}\{\mathrm{L}\bar{k}\ \mathrm{SKIP}:k\in\mathbf{N\}} \end{gathered}\] Dada una instrucción \(I\) en la cual ocurren dos variables, usaremos \(\#Var2(I)\) para denotar el número de la segunda variable que ocurre en \(I\). Por ejemplo \[\#Var2\left(\mathrm{N}\bar{k}\leftarrow\mathrm{N}\bar{m}\right)=m\] Nótese que el dominio de \(\lambda I[\#Var2(I)]\) es igual a la unión de los siguientes conjuntos \[\begin{aligned} \{\mathrm{N}\bar{k} & \leftarrow\mathrm{N}\bar{m}:k,m\in\mathbf{N\}\cup}\{\mathrm{L}\bar{j}\ \mathrm{N}\bar{k}\leftarrow\mathrm{N}\bar{m}:j,k,m\in\mathbf{N\}}\\ \{\mathrm{P}\bar{k} & \leftarrow\mathrm{P}\bar{m}:k,m\in\mathbf{N\}\cup}\{\mathrm{L}\bar{j}\ \mathrm{P}\bar{k}\leftarrow\mathrm{P}\bar{m}:j,k,m\in\mathbf{N\}} \end{aligned}\] Además nótese que para una instrucción \(I\) tenemos que \[\begin{aligned} \#Var1(I) & =\min_{k}(\mathrm{N}\bar{k}\mathrm{\leftarrow}\text{ }\mathrm{ocu}\text{ }I\vee\mathrm{N}\bar{k}\mathrm{\neq}\text{ }\mathrm{ocu}\text{ }I\vee\mathrm{P}\bar{k}\mathrm{\leftarrow}\text{ }\mathrm{ocu}\text{ }I\vee\mathrm{P}\bar{k}\mathrm{B}\;\mathrm{ocu}\text{ }I)\\ \#Var2(I) & =\min_{k}(\mathrm{N}\bar{k}\ \text{t-final }I\vee\mathrm{N}\bar{k}\mathrm{+}\text{ }\mathrm{ocu}\text{ }I\vee\mathrm{N}\bar{k}\mathrm{\dot{-}}\text{ }\mathrm{ocu}\text{ }I\vee\mathrm{P}\bar{k}\ \text{t-final }I\vee\mathrm{P}\bar{k}.\text{ }\mathrm{ocu}\text{ }I) \end{aligned}\] Esto nos dice que si llamamos \(P\) al predicado \[\lambda k\alpha\left[\alpha\in\mathrm{Ins}^{\Sigma}\wedge(\mathrm{N}\bar{k}\mathrm{\leftarrow}\text{ }\mathrm{ocu}\text{ }\alpha\vee\mathrm{N}\bar{k}\mathrm{\neq}\text{ }\mathrm{ocu}\text{ }\alpha\vee\mathrm{P}\bar{k}\mathrm{\leftarrow}\text{ }\mathrm{ocu}\text{ }\alpha\vee\mathrm{P}\bar{k}\mathrm{B}\;\mathrm{ocu}\text{ }\alpha)\right]\] entonces \(\lambda I[\#Var1(I)]=M(P)\) por lo cual \(\lambda I[\#Var1(I)]\) es \((\Sigma\cup\Sigma_{p})\)-p.r. Similarmente se puede ver que \(\lambda I[\#Var2(I)]\) es \((\Sigma\cup\Sigma_{p})\)-p.r.. Sea \[\begin{array}{rll} F_{\dot{-}}:\mathbf{N}\times\mathbf{N} & \rightarrow & \omega\\ (x,j) & \rightarrow & \left\langle (x)_{1},....,(x)_{j-1},(x)_{j}\dot{-}1,(x)_{j+1},...\right\rangle \end{array}\] Ya que \[F_{\dot{-}}(x,j)=\left\{ \begin{array}{lll} Q(x,pr(j)) & & \text{si }pr(j)\text{ divide }x\\ x & & \text{caso contrario} \end{array}\right.\] tenemos que \(F_{\dot{-}}\) es \((\Sigma\cup\Sigma_{p})\)-p.r.. Sea \[\begin{array}{rll} F_{+}:\mathbf{N}\times\mathbf{N} & \rightarrow & \omega\\ (x,j) & \rightarrow & \left\langle (x)_{1},....,(x)_{j-1},(x)_{j}+1,(x)_{j+1},...\right\rangle \end{array}\] Ya que \(F_{+}(x,j)=x.pr(j)\) tenemos que \(F_{+}\) es \((\Sigma\cup\Sigma_{p})\)-p.r.. Sea \[\begin{array}{rll} F_{\leftarrow}:\mathbf{N}\times\mathbf{N}\times\mathbf{N} & \rightarrow & \omega\\ (x,j,k) & \rightarrow & \left\langle (x)_{1},....,(x)_{j-1},(x)_{k},(x)_{j+1},...\right\rangle \end{array}\] Ya que \(F_{\leftarrow}(x,j,k)=Q(x,pr(j)^{(x)_{j}}).pr(j)^{(x)_{k}}\) tenemos que \(F_{\leftarrow}\) es \((\Sigma\cup\Sigma_{p})\)-p.r.. Sea \[\begin{array}{rll} F_{0}:\mathbf{N}\times\mathbf{N} & \rightarrow & \omega\\ (x,j) & \rightarrow & \left\langle (x)_{1},....,(x)_{j-1},0,(x)_{j+1},...\right\rangle \end{array}\] Es fácil ver que \(F_{0}\) es \((\Sigma\cup\Sigma_{p})\)-p.r.. Para cada \(a\in\Sigma\), sea \[\begin{array}{rll} F_{a}:\mathbf{N}\times\mathbf{N} & \rightarrow & \omega\\ (x,j) & \rightarrow & \left\langle (x)_{1},....,(x)_{j-1},\#^{\leq}(\ast^{\leq}((x)_{j})a),(x)_{j+1},...\right\rangle \end{array}\] Es fácil ver que \(F_{a}\) es \((\Sigma\cup\Sigma_{p})\)-p.r.. En forma similar puede ser probado que \[\begin{array}{rll} F_{\curvearrowright}:\mathbf{N}\times\mathbf{N} & \rightarrow & \omega\\ (x,j) & \rightarrow & \left\langle (x)_{1},....,(x)_{j-1},\#^{\leq}(^{\curvearrowright}(\ast^{\leq}((x)_{j}))),(x)_{j+1},...\right\rangle \end{array}\] es \((\Sigma\cup\Sigma_{p})\)-p.r.
Dado \((i,x,y,\mathcal{P})\in\omega\times\mathbf{N}\times\mathbf{N}\times\mathrm{Pro}^{\Sigma}\), tenemos varios casos en los cuales los valores \(s(i,x,y,\mathcal{P}),S_{\#}(i,x,y,\mathcal{P})\) y \(S_{\ast}(i,x,y,\mathcal{P})\) pueden ser obtenidos usando las funciones antes definidas:
adhocprefix(1)adhocsufix CASO \(i=0\vee i>n(\mathcal{P})\). Entonces \[\begin{aligned} s(i,x,y,\mathcal{P}) & =i\\ S_{\#}(i,x,y,\mathcal{P}) & =x\\ S_{\ast}(i,x,y,\mathcal{P}) & =y \end{aligned}\]
adhocprefix(2)adhocsufix CASO \((\exists j\in\omega)\;Bas(I_{i}^{\mathcal{P}})=\mathrm{N}\bar{j}\leftarrow\mathrm{N}\bar{j}+1\). Entonces \[\begin{aligned} s(i,x,y,\mathcal{P}) & =i+1\\ S_{\#}(i,x,y,\mathcal{P}) & =F_{+}(x,\#Var1(I_{i}^{\mathcal{P}}))\\ S_{\ast}(i,x,y,\mathcal{P}) & =y \end{aligned}\]
adhocprefix(3)adhocsufix CASO \((\exists j\in\omega)\;Bas(I_{i}^{\mathcal{P}})=\mathrm{N}\bar{j}\leftarrow\mathrm{N}\bar{j}\dot{-}1\). Entonces \[\begin{aligned} s(i,x,y,\mathcal{P}) & =i+1\\ S_{\#}(i,x,y,\mathcal{P}) & =F_{\dot{-}}(x,\#Var1(I_{i}^{\mathcal{P}}))\\ S_{\ast}(i,x,y,\mathcal{P}) & =y \end{aligned}\]
adhocprefix(4)adhocsufix CASO \((\exists j,k\in\omega)\;Bas(I_{i}^{\mathcal{P}})=\mathrm{N}\bar{j}\leftarrow\mathrm{N}\bar{k}\). Entonces \[\begin{aligned} s(i,x,y,\mathcal{P}) & =i+1\\ S_{\#}(i,x,y,\mathcal{P}) & =F_{\leftarrow}(x,\#Var1(I_{i}^{\mathcal{P}}),\#Var2(I_{i}^{\mathcal{P}}))\\ S_{\ast}(i,x,y,\mathcal{P}) & =y \end{aligned}\]
adhocprefix(5)adhocsufix CASO \((\exists j,k\in\omega)\;Bas(I_{i}^{\mathcal{P}})=\mathrm{N}\bar{j}\leftarrow0\). Entonces \[\begin{aligned} s(i,x,y,\mathcal{P}) & =i+1\\ S_{\#}(i,x,y,\mathcal{P}) & =F_{0}(x,\#Var1(I_{i}^{\mathcal{P}}))\\ S_{\ast}(i,x,y,\mathcal{P}) & =y \end{aligned}\]
adhocprefix(6)adhocsufix CASO \((\exists j,m\in\omega)\;\left(Bas(I_{i}^{\mathcal{P}})=\mathrm{IF}\;\mathrm{N}\bar{j}\neq0\;\mathrm{GOTO}\;\mathrm{L}\bar{m}\wedge(x)_{j}=0\right)\). Entonces \[\begin{aligned} s(i,x,y,\mathcal{P}) & =i+1\\ S_{\#}(i,x,y,\mathcal{P}) & =x\\ S_{\ast}(i,x,y,\mathcal{P}) & =y \end{aligned}\]
adhocprefix(7)adhocsufix CASO \((\exists j,m\in\omega)\;\left(Bas(I_{i}^{\mathcal{P}})=\mathrm{IF}\;\mathrm{N}\bar{j}\neq0\;\mathrm{GOTO}\;\mathrm{L}\bar{m}\wedge(x)_{j}\neq0\right)\). Entonces \[\begin{aligned} s(i,x,y,\mathcal{P}) & =\min_{l}\left(Lab(I_{l}^{\mathcal{P}})\neq\varepsilon\wedge Lab(I_{l}^{\mathcal{P}})\text{ }\mathrm{t}\text{\textrm{-final} }I_{i}^{\mathcal{P}}\right)\\ S_{\#}(i,x,y,\mathcal{P}) & =x\\ S_{\ast}(i,x,y,\mathcal{P}) & =y \end{aligned}\]
adhocprefix(8)adhocsufix CASO \((\exists j\in\omega)\;Bas(I_{i}^{\mathcal{P}})=\mathrm{P}\bar{j}\leftarrow\mathrm{P}\bar{j}.a\). Entonces \[\begin{aligned} s(i,x,y,\mathcal{P}) & =i+1\\ S_{\#}(i,x,y,\mathcal{P}) & =x\\ S_{\ast}(i,x,y,\mathcal{P}) & =F_{a}(y,\#Var1(I_{i}^{\mathcal{P}})) \end{aligned}\]
adhocprefix(9)adhocsufix CASO \((\exists j\in\omega)\;Bas(I_{i}^{\mathcal{P}})=\mathrm{P}\bar{j}\leftarrow\) \(^{\curvearrowright}\mathrm{P}\bar{j}\). Entonces \[\begin{aligned} s(i,x,y,\mathcal{P}) & =i+1\\ S_{\#}(i,x,y,\mathcal{P}) & =x\\ S_{\ast}(i,x,y,\mathcal{P}) & =F_{\curvearrowright}(y,\#Var1(I_{i}^{\mathcal{P}})) \end{aligned}\]
adhocprefix(10)adhocsufix CASO \((\exists j,k\in\omega)\;Bas(I_{i}^{\mathcal{P}})=\mathrm{P}\bar{j}\leftarrow\mathrm{P}\bar{k}\). Entonces \[\begin{aligned} s(i,x,y,\mathcal{P}) & =i+1\\ S_{\#}(i,x,y,\mathcal{P}) & =x\\ S_{\ast}(i,x,y,\mathcal{P}) & =F_{\leftarrow}(y,\#Var1(I_{i}^{\mathcal{P}}),\#Var2(I_{i}^{\mathcal{P}})) \end{aligned}\]
adhocprefix(11)adhocsufix CASO \((\exists j\in\omega)\;Bas(I_{i}^{\mathcal{P}})=\mathrm{P}\bar{j}\leftarrow\varepsilon\). Entonces \[\begin{aligned} s(i,x,y,\mathcal{P}) & =i+1\\ S_{\#}(i,x,y,\mathcal{P}) & =x\\ S_{\ast}(i,x,y,\mathcal{P}) & =F_{0}(y,\#Var1(I_{i}^{\mathcal{P}})) \end{aligned}\]
adhocprefix(12)adhocsufix CASO \((\exists j,m\in\omega)(\exists a\in\Sigma)\;\left(Bas(I_{i}^{\mathcal{P}})=\mathrm{IF}\;\mathrm{P}\bar{j}\;\mathrm{BEGINS}\;a\;\mathrm{GOTO}\;\mathrm{L}\bar{m}\wedge[\ast^{\leq}((y)_{j})]_{1}\neq a\right)\). Entonces \[\begin{aligned} s(i,x,y,\mathcal{P}) & =i+1\\ S_{\#}(i,x,y,\mathcal{P}) & =x\\ S_{\ast}(i,x,y,\mathcal{P}) & =y \end{aligned}\]
adhocprefix(13)adhocsufix CASO \((\exists j,m\in\omega)(\exists a\in\Sigma)\;\left(Bas(I_{i}^{\mathcal{P}})=\mathrm{IF\;P}\bar{j}\;\mathrm{BEGINS\;}a\;\mathrm{GOTO\;L}\bar{m}\wedge[\ast^{\leq}((y)_{j})]_{1}=a\right)\). Entonces \[\begin{aligned} s(i,x,y,\mathcal{P}) & =\min_{l}\left(Lab(I_{l}^{\mathcal{P}})\neq\varepsilon\wedge Lab(I_{l}^{\mathcal{P}})\text{ }\mathrm{t}\text{\textrm{-final} }I_{i}^{\mathcal{P}}\right)\\ S_{\#}(i,x,y,\mathcal{P}) & =x\\ S_{\ast}(i,x,y,\mathcal{P}) & =y \end{aligned}\]
adhocprefix(14)adhocsufix CASO \((\exists j\in\omega)\;Bas(I_{i}^{\mathcal{P}})=\mathrm{GOTO}\) \(\mathrm{L}\bar{j}\). Entonces \[\begin{aligned} s(i,x,y,\mathcal{P}) & =\min_{l}\left(Lab(I_{l}^{\mathcal{P}})\neq\varepsilon\wedge Lab(I_{l}^{\mathcal{P}})\text{ }\mathrm{t}\text{\textrm{-final} }I_{i}^{\mathcal{P}}\right)\\ S_{\#}(i,x,y,\mathcal{P}) & =x\\ S_{\ast}(i,x,y,\mathcal{P}) & =y \end{aligned}\]
adhocprefix(15)adhocsufix CASO \(Bas(I_{i}^{\mathcal{P}})=\mathrm{SKIP}\). Entonces \[\begin{aligned} s(i,x,y,\mathcal{P}) & =i+1\\ S_{\#}(i,x,y,\mathcal{P}) & =x\\ S_{\ast}(i,x,y,\mathcal{P}) & =y \end{aligned}\]
O sea que los casos anteriores nos permiten definir conjuntos \(S_{1},...,S_{15}\), los cuales son disjuntos de a pares y cuya unión da el conjunto \(\omega\times\mathbf{N}\times\mathbf{N}\times\mathrm{Pro}^{\Sigma}\), de manera que cada una de las funciones \(s,S_{\#}\) y \(S_{\ast}\) pueden escribirse como unión disjunta de funciones \((\Sigma\cup\Sigma_{p})\)-p.r. restringidas respectivamente a los conjuntos \(S_{1},...,S_{15}\). Ya que los conjuntos \(S_{1},...,S_{15}\) son \((\Sigma\cup\Sigma_{p})\)-p.r. el Lema 4.19 nos dice que \(s,S_{\#}\) y \(S_{\ast}\) lo son.
Aparte del lema anterior, para probar que las funciones \(i^{n,m}\), \(E_{\#j}^{n,m}\) y \(E_{\ast j}^{n,m}\) son \((\Sigma\cup\Sigma_{p})\)-p.r., nos será necesario el siguiente resultado. Recordemos que para \(x_{1},...,x_{n}\in\omega\), usábamos \(\left\langle x_{1},...,x_{n}\right\rangle\) para denotar \(\left\langle x_{1},...,x_{n},0,...\right\rangle\). Además recordemos que en el Lema 4.28 probamos que para cada \(n\geq1\), la función \(\lambda x_{1}...x_{n}\left[\left\langle x_{1},...,x_{n}\right\rangle \right]\) es \(\emptyset\)-p.r.
4.51. Sean \[\begin{aligned} f_{i} & :S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\omega\\ g_{i} & :\omega^{k}\times\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\omega\\ F_{i} & :\omega\times S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\rightarrow\omega \end{aligned}\] con \(i=1,...,k\), funciones \(\Sigma\)-mixtas. Supongamos que \[\begin{aligned} F_{i}(0,\vec{x},\vec{\alpha}) & =f_{i}(0,\vec{x},\vec{\alpha})\\ F_{i}(t+1,\vec{x},\vec{\alpha}) & =g_{i}(F_{1}(t,\vec{x},\vec{\alpha}),...,F_{k}(t,\vec{x},\vec{\alpha}),t,\vec{x},\vec{\alpha}) \end{aligned}\] para cada \(i=1,...,k\), \(t\in\omega\) y \((\vec{x},\vec{\alpha})\in S_{1}\times...\times S_{n}\times L_{1}\times...\times L_{m}\). Entonces si las funciones \(f_{1},...,f_{k},g_{1},...,g_{k}\) son \(\Sigma\)-p.r., las funciones \(F_{1},...,F_{k}\) lo son.
Proof. Para mayor claridad haremos el caso \(k=2\). Sea \[F=\lambda t\vec{x}\vec{\alpha}\left[\left\langle F_{1}(t,\vec{x},\vec{\alpha}),F_{2}(t,\vec{x},\vec{\alpha})\right\rangle \right]\] Es claro que si \(F\) es \(\Sigma\)-p.r., entonces lo es cada \(F_{i}\). Nótese que \[\begin{aligned} F(0,\vec{x},\vec{\alpha}) & =\left\langle f_{1}(\vec{x},\vec{\alpha}),f_{2}(\vec{x},\vec{\alpha})\right\rangle \\ F(t+1,\vec{x},\vec{\alpha}) & =\left\langle g_{1}((F(t,\vec{x},\vec{\alpha}))_{1},(F(t,\vec{x},\vec{\alpha}))_{2},t,\vec{x},\vec{\alpha}),g_{2}((F(t,\vec{x},\vec{\alpha}))_{1},(F(t,\vec{x},\vec{\alpha}))_{2},t,\vec{x},\vec{\alpha})\right\rangle \end{aligned}\] lo cual nos dice que \(F=R(f,g)\) donde \[\begin{aligned} f & =\lambda\vec{x}\vec{\alpha}\left[\left\langle f_{1}(\vec{x},\vec{\alpha}),f_{2}(\vec{x},\vec{\alpha})\right\rangle \right]\\ g & =\lambda At\vec{x}\vec{\alpha}\left[\left\langle g_{1}((A)_{1},(A)_{2},t,\vec{x},\vec{\alpha}),g_{2}((A)_{1},(A)_{2},t,\vec{x},\vec{\alpha})\right\rangle \right] \end{aligned}\]
Ahora usando los dos lemas anteriores podemos probar el siguiente importante resultado.
4.13. Sean \(n,m\geq0\). Las funciones \(i^{n,m}\), \(E_{\#j}^{n,m}\), \(E_{\ast j}^{n,m}\), \(j=1,2,...\), son \((\Sigma\cup\Sigma_{p})\)-p.r.
Proof. Sea \(\leq\) un orden total sobre \(\Sigma\cup\Sigma_{p}\) y sean \(s\), \(S_{\#}\) y \(S_{\ast}\) las funciones definidas previamente al Lema 4.50. Definamos \[\begin{aligned} K_{\#}^{n,m} & =\lambda t\vec{x}\vec{\alpha}\mathcal{P}\left[\left\langle E_{\#1}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}),E_{\#2}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}),...\right\rangle \right]\\ K_{\ast}^{n,m} & =\lambda t\vec{x}\vec{\alpha}\mathcal{P}\left[\left\langle \#^{\leq}(E_{\ast1}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P})),\#^{\leq}(E_{\ast2}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P})),...\right\rangle \right] \end{aligned}\] Nótese que \[\begin{aligned} i^{n,m}(0,\vec{x},\vec{\alpha},\mathcal{P}) & =1\\ K_{\#}^{n,m}(0,\vec{x},\vec{\alpha},\mathcal{P}) & =\left\langle x_{1},...,x_{n}\right\rangle \\ K_{\ast}^{n,m}(0,\vec{x},\vec{\alpha},\mathcal{P}) & =\left\langle \#^{\leq}(\alpha_{1}),...,\#^{\leq}(\alpha_{m})\right\rangle \\ i^{n,m}(t+1,\vec{x},\vec{\alpha},\mathcal{P}) & =s(i^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}),K_{\#}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}),K_{\ast}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}))\\ K_{\#}^{n,m}(t+1,\vec{x},\vec{\alpha},\mathcal{P}) & =S_{\#}(i^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}),K_{\#}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}),K_{\ast}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}))\\ K_{\ast}^{n,m}(t+1,\vec{x},\vec{\alpha},\mathcal{P}) & =S_{\ast}(i^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}),K_{\#}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}),K_{\ast}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P})) \end{aligned}\] Por el Lema 4.51 tenemos que \(i^{n,m}\), \(K_{\#}^{n,m}\) y \(K_{\ast}^{n,m}\) son \((\Sigma\cup\Sigma_{p})\)-p.r.. Además nótese que \[\begin{aligned} E_{\#j}^{n,m} & =\lambda t\vec{x}\vec{\alpha}\mathcal{P}\left[(K_{\#}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}))_{j}\right]\\ E_{\ast j}^{n,m} & =\lambda t\vec{x}\vec{\alpha}\mathcal{P}\left[\ast^{\leq}((K_{\ast}^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}))_{j})\right] \end{aligned}\] por lo cual las funciones \(E_{\#j}^{n,m}\), \(E_{\ast j}^{n,m}\), \(j=1,2,...\), son \((\Sigma\cup\Sigma_{p})\)-p.r.
Dados \(n,m\in\omega\), definamos: \[Halt^{n,m}=\lambda t\vec{x}\vec{\alpha}\mathcal{P}\left[i^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P})=n(\mathcal{P})+1\right]\] Nótese que \(D_{Halt^{n,m}}=\omega\times\omega^{n}\times\Sigma^{\ast m}\times\mathrm{Pro}^{\Sigma}\) (ojo que aquí la notación lambda es respecto del alfabeto \(\Sigma\cup\Sigma_{p}\)). Además nótese que usamos la variable \(\mathcal{P}\) en la notación lambda por un tema de comodidad psicológica dado que \(i^{n,m}\) esta definida solo cuando la última coordenada es un programa pero podríamos haber escrito \(\lambda t\vec{x}\vec{\alpha}\alpha\left[i^{n,m}(t,\vec{x},\vec{\alpha},\alpha)=n(\alpha)+1\right]\) y sigue siendo la misma función.
Cabe destacar que \(Halt^{n,m}\) tiene una descripción muy intuitiva, ya que dado \((t,\vec{x},\vec{\alpha},\mathcal{P})\in\omega\times\omega^{n}\times\Sigma^{\ast m}\times\mathrm{Pro}^{\Sigma}\), tenemos que \(Halt^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P})=1\) si y solo si el programa \(\mathcal{P}\) se detiene luego de \(t\) pasos partiendo desde el estado \(\left\Vert x_{1},...,x_{n},\alpha_{1},...,\alpha_{m}\right\Vert\). En particular \(Halt^{0,0}\) tiene dominio igual a \(\omega\times\mathrm{Pro}^{\Sigma}\) y tenemos que \(Halt^{0,0}(t,\mathcal{P})=1\) si y solo si el programa \(\mathcal{P}\) se detiene luego de \(t\) pasos partiendo desde el estado \(\left\Vert \lozenge\right\Vert\).
4.52. \(Halt^{n,m}\) es \((\Sigma\cup\Sigma_{p})\)-p.r.
Proof. Notar que \(Halt^{n,m}=\lambda xy[x=y]\circ\left[i^{n,m},\lambda\mathcal{P}[n(\mathcal{P})+1]\circ p_{1+n+m+1}^{1+n,m+1}\right]\).
Ahora definamos \(T^{n,m}=M(Halt^{n,m})\). Nótese que \[D_{T^{n,m}}=\{(\vec{x},\vec{\alpha},\mathcal{P})\in\omega^{n}\times\Sigma^{\ast m}\times\mathrm{Pro}^{\Sigma}:\mathcal{P}\text{ se detiene partiendo de }\left\Vert x_{1},...,x_{n},\alpha_{1},...,\alpha_{m}\right\Vert \}\] y para \((\vec{x},\vec{\alpha},\mathcal{P})\in D_{T^{n,m}}\) tenemos que \(T^{n,m}(\vec{x},\vec{\alpha},\mathcal{P})=\) cantidad de pasos necesarios para que \(\mathcal{P}\) se detenga partiendo de \(\left\Vert x_{1},...,x_{n},\alpha_{1},...,\alpha_{m}\right\Vert\). En algún sentido, la función \(T^{n,m}\) mide el “tiempo” que tarda en detenerse \(\mathcal{P}\) desde \(\left\Vert x_{1},...,x_{n},\alpha_{1},...,\alpha_{m}\right\Vert\) y de ahí su nombre. Nótese que para el caso \(n=m=0\) tenemos que \[D_{T^{0,0}}=\{\mathcal{P}\in\mathrm{Pro}^{\Sigma}:\mathcal{P}\text{ se detiene partiendo de }\left\Vert \lozenge\right\Vert \}\] y para \(\mathcal{P}\in D_{T^{0,0}}\) tenemos que \(T^{0,0}(\mathcal{P})=\) cantidad de pasos necesarios para que \(\mathcal{P}\) se detenga partiendo de \(\left\Vert \lozenge\right\Vert\).
4.14. \(T^{n,m}\) es \((\Sigma\cup\Sigma_{p})\)-recursiva
Proof. Es directo del Lema 4.25 ya que \(Halt^{n,m}\) es \((\Sigma\cup\Sigma_{p})\)-p.r.
Para \(n,m\in\omega\) definamos la función \(\Phi_{\#}^{n,m}\) de la siguiente manera: \[\begin{aligned} D_{\Phi_{\#}^{n,m}} & =\left\{ (\vec{x},\vec{\alpha},\mathcal{P})\in\omega^{n}\times\Sigma^{\ast m}\times\mathrm{Pro}^{\Sigma}:(\vec{x},\vec{\alpha})\in D_{\Psi_{\mathcal{P}}^{n,m,\#}}\right\} \\ \Phi_{\#}^{n,m}(\vec{x},\vec{\alpha},\mathcal{P}) & =\Psi_{\mathcal{P}}^{n,m,\#}(\vec{x},\vec{\alpha})\text{, para cada }(\vec{x},\vec{\alpha},\mathcal{P})\in D_{\Phi_{\#}^{n,m}} \end{aligned}\] Nótese que \[D_{\Phi_{\#}^{n,m}}=\{(\vec{x},\vec{\alpha},\mathcal{P}):\mathcal{P}\text{ se detiene partiendo de }\left\Vert x_{1},...,x_{n},\alpha_{1},...,\alpha_{m}\right\Vert \}\] y para cada \((\vec{x},\vec{\alpha},\mathcal{P})\in D_{\Phi_{\#}^{n,m}}\), se tiene que \(\Phi_{\#}^{n,m}(\vec{x},\vec{\alpha},\mathcal{P})=\) valor que queda en la variable \(\mathrm{N}1\) cuando \(\mathcal{P}\) se detiene partiendo de \(\left\Vert x_{1},...,x_{n},\alpha_{1},...,\alpha_{m}\right\Vert\).
Similarmente, definamos la función \(\Phi_{\ast}^{n,m}\) de la siguiente manera: \[\begin{aligned} D_{\Phi_{\ast}^{n,m}} & =\left\{ (\vec{x},\vec{\alpha},\mathcal{P})\in\omega^{n}\times\Sigma^{\ast m}\times\mathrm{Pro}^{\Sigma}:(\vec{x},\vec{\alpha})\in D_{\Psi_{\mathcal{P}}^{n,m,\ast}}\right\} \\ \Phi_{\ast}^{n,m}(\vec{x},\vec{\alpha},\mathcal{P}) & =\Psi_{\mathcal{P}}^{n,m,\ast}(\vec{x},\vec{\alpha})\text{, para cada }(\vec{x},\vec{\alpha},\mathcal{P})\in D_{\Phi_{\ast}^{n,m}} \end{aligned}\] Nótese que \[\begin{aligned} \Phi_{\#}^{n,m} & =\lambda\vec{x}\vec{\alpha}\mathcal{P}\left[\Psi_{\mathcal{P}}^{n,m,\#}(\vec{x},\vec{\alpha})\right]\\ \Phi_{\ast}^{n,m} & =\lambda\vec{x}\vec{\alpha}\mathcal{P}\left[\Psi_{\mathcal{P}}^{n,m,\ast}(\vec{x},\vec{\alpha})\right] \end{aligned}\]
4.4. Las funciones \(\Phi_{\#}^{n,m}\) y \(\Phi_{\ast}^{n,m}\) son \((\Sigma\cup\Sigma_{p})\)-recursivas.
Proof. Veremos que \(\Phi_{\#}^{n,m}\) es \((\Sigma\cup\Sigma_{p})\)-recursiva. Notar que \(D_{T^{n,m}}=D_{\Phi_{\#}^{n,m}}\). Nótese que para \((\vec{x},\vec{\alpha},\mathcal{P})\in D_{T^{n,m}}=D_{\Phi_{\#}^{n,m}}\) tenemos que \[\Phi_{\#}^{n,m}(\vec{x},\vec{\alpha},\mathcal{P})=E_{\#1}^{n,m}\left(T^{n,m}(\vec{x},\vec{\alpha},\mathcal{P}),\vec{x},\vec{\alpha},\mathcal{P}\right)\] lo cual con un poco mas de trabajo nos permite probar que \[\Phi_{\#}^{n,m}=E_{\#1}^{n,m}\circ\left[T^{n,m},p_{1}^{n,m+1},...,p_{n+m+1}^{n,m+1}\right]\] Ya que la función \(E_{\#1}^{n,m}\) es \((\Sigma\cup\Sigma_{p})\)-p.r. y \(T^{n,m}\) es \((\Sigma\cup\Sigma_{p})\)-r., tenemos que \(\Phi_{\#}^{n,m}\) es \((\Sigma\cup\Sigma_{p})\)-r.
Ahora nos será fácil probar que el paradigma de Godel es por lo menos tan abarcativo como el imperativo de Von Neumann. Mas concretamente:
4.5 (Godel vence a Neumann). Si \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow O\) es \(\Sigma\)-computable, entonces \(f\) es \(\Sigma\)-recursiva.
Proof. Haremos el caso \(O=\Sigma^{\ast}\). Sea \(\mathcal{P}_{0}\) un programa que compute a \(f\). Primero veremos que \(f\) es \((\Sigma\cup\Sigma_{p})\)-recursiva. Note que \[f=\Phi_{\ast}^{n,m}\circ\left[p_{1}^{n,m},...,p_{n+m}^{n,m},C_{\mathcal{P}_{0}}^{n,m}\right]\] donde cabe destacar que \(p_{1}^{n,m},...,p_{n+m}^{n,m}\) son las proyecciones respecto del alfabeto \(\Sigma\cup\Sigma_{p}\), es decir que tienen dominio \(\omega^{n}\times(\Sigma\cup\Sigma_{p})^{\ast m}\). Ya que \(\Phi_{\ast}^{n,m}\) es \((\Sigma\cup\Sigma_{p})\)-recursiva tenemos que \(f\) lo es. O sea que el Teorema 4.2 nos dice que \(f\) es \(\Sigma\)-recursiva.
Un corolario interesante que se puede obtener del teorema anterior es que toda función \(\Sigma\)-recursiva puede obtenerse combinando las reglas básicas en una forma muy particular.
4.4 (Forma Normal de Kleene). Si \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow O\) es \(\Sigma\)-recursiva, entonces existe un predicado \(\Sigma\)-p.r. \(P:\mathbf{N}\times\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) y una función \(\Sigma\)-p.r. \(g:\mathbf{N}\rightarrow O\) tales que \(f=g\circ M(P).\)
Proof. Supongamos que \(O=\Sigma^{\ast}\). Sea \(\mathcal{P}_{0}\) un programa el cual compute a \(f\). Sea \(\leq\) un orden total sobre \(\Sigma\). Note que podemos tomar \[\begin{aligned} P & =\lambda t\vec{x}\vec{\alpha}[Halt^{n,m}\left((t)_{1},\vec{x},\vec{\alpha},\mathcal{P}_{0}\right)\wedge(t)_{2}=\#^{\leq}(E_{\ast1}^{n,m}((t)_{1},\vec{x},\vec{\alpha},\mathcal{P}_{0}))]\\ g & =\lambda t\left[\ast^{\leq}((t)_{2})\right] \end{aligned}\] (Justifique por que \(P\) es \(\Sigma\)-p.r..)
A continuación veremos ejemplos naturales de funciones \((\Sigma\cup\Sigma_{p})\)-recursivas que no son \((\Sigma\cup\Sigma_{p})\)-recursivas primitivas. Cabe destacar que la prueba se basa en la Proposición 4.6 (enunciada sin demostración) la cual nos dice que cualquiera sea el alfabeto finito \(\Sigma\), siempre hay una función que es \(\Sigma\)-recursiva y no es \(\Sigma\)-recursiva primitiva.
4.15. Cualesquiera sean \(n,m\in\omega\), se tiene que las funciones \(T^{n,m}\), \(\Phi_{\#}^{n,m}\) y \(\Phi_{\ast}^{n,m}\) no son \((\Sigma\cup\Sigma_{p})\)-p.r.
Proof. Fijemos \(n,m\in\omega\). Probaremos que \(\Phi_{\#}^{n,m}\) es \((\Sigma\cup\Sigma_{p})\)-p.r. sii \(\Phi_{\#}^{0,0}\) es \((\Sigma\cup\Sigma_{p})\)-p.r.. Sean \(f_{1},f_{2}:\omega^{n}\times\Sigma^{\ast m}\rightarrow(\Sigma\cup\Sigma_{p})^{\ast}\) dadas por \[\begin{aligned} f_{1}(\vec{x},\vec{\alpha}) & =(\mathrm{N}1\leftarrow\mathrm{N}1+1)^{x_{1}}...(\mathrm{N}\bar{n}\leftarrow\mathrm{N}\bar{n}+1)^{x_{n}}\\ f_{2}(\vec{x},\vec{\alpha}) & =\left(\subset_{i=1}^{i=\left\vert \alpha_{1}\right\vert }\mathrm{P}1\leftarrow\mathrm{P}1.[\alpha_{1}]_{i}\right)...\left(\subset_{i=1}^{i=\left\vert \alpha_{m}\right\vert }\mathrm{P}\bar{m}\leftarrow\mathrm{P}\bar{m}.[\alpha_{m}]_{i}\right) \end{aligned}\] Nótese que cuando \(n=0\) tenemos que \(f_{1}=C_{\varepsilon}^{0,m}\) y cuando \(m=0\) tenemos que \(f_{2}=C_{\varepsilon}^{n,0}.\) Sea \(f:\omega^{n}\times\Sigma^{\ast m}\times\mathrm{Pro}^{\Sigma}\rightarrow(\Sigma\cup\Sigma_{p})^{\ast}\) dada por \[f(\vec{x},\vec{\alpha},\mathcal{P})=f_{1}(\vec{x},\vec{\alpha})f_{2}(\vec{x},\vec{\alpha})\mathcal{P}\] Es fácil ver que \(f\) es \((\Sigma\cup\Sigma_{p})\)-p.r.. Nótese que \(\Phi_{\#}^{n,m}=\Phi_{\#}^{0,0}\circ f\). Además nótese que \[\Phi_{\#}^{0,0}=\Phi_{\#}^{n,m}\circ\left[C_{0}^{0,1},...,C_{0}^{0,1},C_{\varepsilon}^{0,1},...,C_{\varepsilon}^{0,1},p_{1}^{0,1}\right]\] Ya que \(f\) y las funciones \(C_{0}^{0,1},C_{\varepsilon}^{0,1},p_{1}^{0,1}\) son \((\Sigma\cup\Sigma_{p})\)-p.r., tenemos que \(\Phi_{\#}^{n,m}\) es \((\Sigma\cup\Sigma_{p})\)-p.r. sii \(\Phi_{\#}^{0,0}\) lo es.
Supongamos ahora que para algunos \(k,l\in\omega\) se tiene que \(\Phi_{\#}^{k,l}\) es \((\Sigma\cup\Sigma_{p})\)-p.r.. Llegaremos a un absurdo. Por lo antes probado tenemos que \(\Phi_{\#}^{n,m}\) es \((\Sigma\cup\Sigma_{p})\)-p.r., cualesquiera sean \(n,m\in\omega\). Nótese que de la prueba del teorema anterior sigue que toda función \(\Sigma\)-computable con imagen contenida en \(\omega\) es de la forma \(\Phi_{\#}^{n,m}\circ\left[p_{1}^{n,m},...,p_{n+m}^{n,m},C_{\mathcal{P}_{0}}^{n,m}\right]\), para algunos \(n,m\in\omega\) y \(\mathcal{P}_{0}\in\mathrm{Pro}^{\Sigma}\). Pero entonces toda función \(\Sigma\)-computable con imagen contenida en \(\omega\) es \((\Sigma\cup\Sigma_{p})\)-p.r., lo cual por la batalla Neumann vence a Godel nos dice que toda función \(\Sigma\)-recursiva con imagen contenida en \(\omega\) es \((\Sigma\cup\Sigma_{p})\)-p.r.. Por el Teorema de Independencia del Alfabeto tenemos que toda función \(\Sigma\)-recursiva con imagen contenida en \(\omega\) es \(\Sigma)\)-p.r., lo cual contradice la Proposición 4.6.
Ahora supongamos que hay \(n,m\in\omega\) tales que \(T^{n,m}\) es \((\Sigma\cup\Sigma_{p})\)-p.r.. Llegaremos a un absurdo. Como ya vimos en la prueba de un teorema reciente, se tiene que \[\Phi_{\#}^{n,m}=E_{\#1}^{n,m}\circ\left[T^{n,m},p_{1}^{n,m+1},...,p_{n+m+1}^{n,m+1}\right]\] Pero entonces ya que \(E_{\#1}^{n,m}\) es \((\Sigma\cup\Sigma_{p})\)-p.r., tenemos que \(\Phi_{\#}^{n,m}\) es \((\Sigma\cup\Sigma_{p})\)-p.r., lo cual como ya vimos recién no es cierto. El absurdo nos dice que \(T^{n,m}\) no es \((\Sigma\cup\Sigma_{p})\)-p.r..
4.5. En general la minimización de un predicado \(\Sigma\)-p.r. no necesariamente es \(\Sigma\)-p.r.
Proof. Si consideramos el alfabeto \((\Sigma\cup\Sigma_{p})\) tenemos que \(T^{n,m}=M(Halt^{n,m})\) y \(T^{n,m}\) no es \((\Sigma\cup\Sigma_{p})\)-p.r.
Aquí veremos, con ejemplos, como ciertos macros nos permitirán dentro de un programa hablar acerca del funcionamiento de otro programa. En este sentido los desarrollos de las dos batallas entre Neumann y Godel nos permiten fortalecer notablemente al paradigma imperativo en su rol modelizador (o simulador) de los procedimientos efectivos. Esto es importante ya que el paradigma mas cómodo, amplio e intuitivo es sin duda el filosófico de Leibniz.
Veamos el primer ejemplo. Probaremos que:
adhocprefix-adhocsufix Si \(f:D_{f}\subseteq\omega\rightarrow\omega\) es \(\Sigma\)-computable, \(0\in D_{f}\) y \(f(0)=2\), entonces \[S=\{x\in D_{f}:f(x)\neq0\}\] es \(\Sigma\)-enumerable.
Nótese que \(0\in S\) por lo cual \(S\) es no vacío asique en virtud de la Caracterización de \(\Sigma\)-enumerabilidad deberemos encontrar un programa \(\mathcal{P}\in\mathrm{Pro}^{\Sigma}\) que enumere a \(S\), es decir tal que \(\mathrm{Dom}\Psi_{\mathcal{P}}^{1,0,\#}=\omega\) y \(\mathrm{Im}\Psi_{\mathcal{P}}^{1,0,\#}=S\). Dicho en palabras, el programa \(\mathcal{P}\) deberá cumplir:
adhocprefix-adhocsufix Siempre que lo corramos desde un estado de la forma \(\left\Vert x\right\Vert\), con \(x\in\omega\), debe detenerse y el contenido de la variable \(\mathrm{N}1\) bajo detención deberá ser un elemento de \(S\)
adhocprefix-adhocsufix Para cada \(s\in S\) deberá haber un \(x\in\omega\) tal que \(s\) es el valor de la variable \(\mathrm{N}1\) bajo detención cuando corremos \(\mathcal{P}\) desde \(\left\Vert x\right\Vert\)
Sea \(\mathcal{P}_{0}\in\mathrm{Pro}^{\Sigma}\) un programa que compute a \(f\). Usaremos \(\mathcal{P}_{0}\) para diseñar \(\mathcal{P}\). A continuación daremos una descripción intuitiva del funcionamiento de \(\mathcal{P}\) (pseudocodigo) para luego escribirlo correctamente usando macros. El programa \(\mathcal{P}\) comenzara del estado \(\left\Vert x\right\Vert\) y hará las siguientes tareas
adhocprefixadhocsufix Etapa 1: si \(x=0\) ir a Etapa 6, en caso contrario ir a Etapa 2.
adhocprefix adhocsufix Etapa 2: calcular \((x)_{1}\) y \((x)_{2}\) e ir a Etapa 3.
adhocprefix adhocsufix Etapa 3: si \(\mathcal{P}_{0}\) termina desde \(\left\Vert (x)_{1}\right\Vert\) en \((x)_{2}\) pasos ir a Etapa 4, en caso contrario ir a Etapa 6
adhocprefix adhocsufix Etapa 4: si el valor que queda en \(\mathrm{N}1\) luego de correr \(\mathcal{P}_{0}\) una cantidad \((x)_{2}\) de pasos, partiendo de \(\left\Vert (x)_{1}\right\Vert\), es distinto de 0, entonces ir a Etapa 5. En caso contrario ir a Etapa 6.
adhocprefix adhocsufix Etapa 5: asignar a \(\mathrm{N}1\) el valor \((x)_{1}\) y terminar
adhocprefix adhocsufix Etapa 6: asignar a \(\mathrm{N}1\) el valor \(0\) y terminar
Nótese que la descripción anterior no es ni mas ni menos que un procedimiento efectivo (efectivisable) que enumera a \(S\), y nuestra misión es simularlo dentro del lenguaje \(\mathcal{S}^{\Sigma}\). Para esto usaremos varios macros. Ya que la función \(f=\lambda x[(x)_{1}]\) es \(\Sigma\)-p.r., el Segundo Manantial de Macros nos dice que hay un macro: \[[\mathrm{V}2\leftarrow f(\mathrm{V}1)]\] el cual escribiremos de la siguiente manera mas intuitiva: \[[\mathrm{V}2\leftarrow(\mathrm{V}1)_{1}]\] Similarmente hay un macro: \[[\mathrm{V}2\leftarrow(\mathrm{V}1)_{2}]\] También, ya que el predicado \(P=\lambda x[x=0]\) es \(\Sigma\)-recursivo, hay un macro: \[\left[\mathrm{IF}\;P(\mathrm{V}1)\;\mathrm{GOTO}\;\mathrm{A}1\right]\] el cual escribiremos de la siguiente manera: \[\left[\mathrm{IF}\;\mathrm{V}1=0\;\mathrm{GOTO}\;\mathrm{A}1\right]\] Definamos \[H=\lambda tx\left[Halt^{1,0}(t,x,\mathcal{P}_{0})\right]\] Notar que \(D_{H}=\omega^{2}\) y que \(H\) es \(\Sigma\)-mixta. Además sabemos que la función \(Halt^{1,0}\) es \((\Sigma\cup\Sigma_{p})\)-p.r. por lo cual resulta fácilmente que \(H\) es \((\Sigma\cup\Sigma_{p})\)-p.r.. Por Independencia del Alfabeto tenemos que \(H\) es \(\Sigma\)-p.r.. O sea que el Segundo Manantial nos dice que hay un macro de \(\mathcal{S}^{\Sigma}\): \[\left[\mathrm{IF}\;H(\mathrm{V}1,\mathrm{V}2)\;\mathrm{GOTO}\;\mathrm{A}1\right]\] Para hacer mas intuitivo el uso de este macro lo escribiremos de la siguiente manera \[\left[\mathrm{IF}\;Halt^{1,0}(\mathrm{V}1,\mathrm{V}2,\mathcal{P}_{0})\;\mathrm{GOTO}\;\mathrm{A}1\right]\] Sea \[g=\lambda tx\left[E_{\#1}^{1,0}(t,x,\mathcal{P}_{0})\right]\] Ya que \(g\) es \(\Sigma\)-recursiva (por que?), hay un macro: \[\left[\mathrm{V}3\leftarrow g(\mathrm{V}1,\mathrm{V}2)\right]\] Para hacer mas intuitivo el uso de este macro lo escribiremos de la siguiente manera \[\left[\mathrm{V}3\leftarrow E_{\#1}^{1,0}(\mathrm{V}1,\mathrm{V}2,\mathcal{P}_{0})\right]\] Ahora sí podemos dar nuestro programa \(\mathcal{P}\) que enumera a \(S\): \[\begin{array}{ll} & \mathrm{IF}\;\mathrm{N}1\neq0\;\mathrm{GOTO}\;\mathrm{L}1\\ & \mathrm{GOTO}\;\mathrm{L}2\\ \mathrm{L}1 & [\mathrm{N}3\leftarrow(\mathrm{N}1)_{1}]\\ & [\mathrm{N}4\leftarrow(\mathrm{N}1)_{2}]\\ & \left[\mathrm{IF}\;Halt^{1,0}(\mathrm{N}4,\mathrm{N}3,\mathcal{P}_{0})\;\mathrm{GOTO}\;\mathrm{L}3\right]\\ & \mathrm{GOTO}\;\mathrm{L}2\\ \mathrm{L}3 & \left[\mathrm{N}5\leftarrow E_{\#1}^{1,0}(\mathrm{N}4,\mathrm{N}3,\mathcal{P}_{0})\right]\\ & [\mathrm{IF}\;\mathrm{N}5=0\;\mathrm{GOTO}\;\mathrm{L}2]\\ & \mathrm{N}1\leftarrow\mathrm{N}3\\ & \mathrm{GOTO}\;\mathrm{L}4\\ \mathrm{L}2 & \mathrm{N}1\leftarrow0\\ \mathrm{L}4 & \mathrm{SKIP} \end{array}\]
Ya que los programas de \(\mathcal{S}^{\Sigma}\) son palabras del alfabeto \(\Sigma\cup\Sigma_{p}\), nos podemos preguntar cuando un conjunto \(L\) de programas es \((\Sigma\cup\Sigma_{p})\)-enumerable. Daremos un ejemplo. Sea \(\Sigma=\{@,!\}\) y sea \[L=\{\mathcal{P}\in\mathrm{Pro}^{\Sigma}:\Psi_{\mathcal{P}}^{1,0,\#}(10)=10\}\] Veremos que \(L\) es \((\Sigma\cup\Sigma_{p})\)-enumerable, dando un programa \(\mathcal{Q}\in\mathrm{Pro}^{\Sigma\cup\Sigma_{p}}\) que enumere a \(L\), es decir tal que Dom\((\Psi_{\mathcal{Q}}^{1,0,\ast})=\omega\) y \(\mathrm{Im}(\Psi_{\mathcal{Q}}^{1,0,\ast})=L\). Cabe destacar que aquí hay en juego dos versiones de nuestro lenguaje imperativo, es decir enumeraremos un conjunto de programas de \(\mathcal{S}^{\Sigma}\) usando un programa de \(\mathcal{S}^{\Sigma\cup\Sigma_{p}}\). Sea \(\leq\) un orden total sobre el conjunto \(\Sigma\cup\Sigma_{p}\).
A continuación daremos una descripción intuitiva del funcionamiento de \(\mathcal{Q}\) (pseudocodigo) para luego escribirlo correctamente usando macros. Nótese que \(\mathrm{SKIP}\in L\). El programa \(\mathcal{Q}\) comenzara del estado \(\left\Vert x\right\Vert\) y hará las siguientes tareas
adhocprefix adhocsufix Etapa 1: si \(x=0\) ir a Etapa 6, en caso contrario ir a Etapa 2.
adhocprefix adhocsufix Etapa 2: calcular \((x)_{1}\), \((x)_{2}\) y \(\ast^{\leq}((x)_{1})\) e ir a Etapa 3.
adhocprefix adhocsufix Etapa 3: si \(\ast^{\leq}((x)_{1})\in\mathrm{Pro}^{\Sigma}\) y termina partiendo desde \(\left\Vert 10\right\Vert\) en \((x)_{2}\) pasos ir a Etapa 4, en caso contrario ir a Etapa 6
adhocprefix adhocsufix Etapa 4: si el valor que queda en \(\mathrm{N}1\) luego de correr \(\ast^{\leq}((x)_{1})\) una cantidad \((x)_{2}\) de pasos, partiendo de \(\left\Vert 10\right\Vert\) es igual a 10, entonces ir a Etapa 5. En caso contrario ir a Etapa 6.
adhocprefix adhocsufix Etapa 5: asignar a \(\mathrm{P}1\) la palabra \(\ast^{\leq}((x)_{1})\) y terminar
adhocprefix adhocsufix Etapa 6: asignar a \(\mathrm{P}1\) la palabra \(\mathrm{SKIP}\) y terminar
Nótese que la descripción anterior no es ni mas ni menos que un procedimiento efectivo que enumera a \(L\), y nuestra misión es simularlo dentro del lenguaje \(\mathcal{S}^{\Sigma\cup\Sigma_{p}}\). Para esto usaremos varios macros. Es importante notar que los macros que usaremos corresponden al lenguaje \(\mathcal{S}^{\Sigma\cup\Sigma_{p}}\) ya que los usaremos en \(\mathcal{Q}\) el cual será un programa de \(\mathcal{S}^{\Sigma\cup\Sigma_{p}}\).
Ya que las funciones \(\lambda x[(x)_{1}]\) y \(\lambda x[(x)_{2}]\) son \((\Sigma\cup\Sigma_{p})\)-recursivas el Segundo Manantial nos dice que hay macros en \(\mathcal{S}^{\Sigma\cup\Sigma_{p}}\) asociados a estas funciones los cuales escribiremos de la siguiente manera mas intuitiva: \[\begin{aligned} \\{} [\mathrm{V}2 & \leftarrow(\mathrm{V}1)_{2}] \end{aligned}\] Ya que el predicado \(P=\lambda x[x=10]\) es \((\Sigma\cup\Sigma_{p})\)-recursivo tenemos en \(\mathcal{S}^{\Sigma\cup\Sigma_{p}}\) su macro asociado el cual escribiremos de la siguiente manera: \[\left[\mathrm{IF}\;\mathrm{V}1=10\;\mathrm{GOTO}\;\mathrm{A}1\right]\] Por un lema anterior sabemos que \(\mathrm{Pro}^{\Sigma}\) es un conjunto \((\Sigma\cup\Sigma_{p})\)-p.r., por lo cual \(\chi_{\mathrm{Pro}^{\Sigma}}^{(\Sigma\cup\Sigma_{p})^{\ast}}\) es \((\Sigma\cup\Sigma_{p})\)-p.r., y por lo tanto hay un macro \[\left[\mathrm{IF}\;\chi_{\mathrm{Pro}^{\Sigma}}^{(\Sigma\cup\Sigma_{p})^{\ast}}(\mathrm{W}1)\;\mathrm{GOTO}\;\mathrm{A}1\right]\] el cual escribiremos de la siguiente manera \[\left[\mathrm{IF}\;\mathrm{W}1\in\mathrm{Pro}^{\Sigma}\;\mathrm{GOTO}\;\mathrm{A}1\right]\] Ya que el predicado \(Halt^{1,0}\) es \((\Sigma\cup\Sigma_{p})\)-recursivo tenemos un macro asociado a el, el cual escribiremos de la siguiente forma \[\left[\mathrm{IF}\;Halt^{1,0}(\mathrm{V}1,\mathrm{V}2,\mathrm{W}1)\;\mathrm{GOTO}\;\mathrm{A}1\right]\] Ya que \(E_{\#1}^{1,0}\) es \((\Sigma\cup\Sigma_{p})\)-recursivo tenemos un macro asociado a ella, el cual escribiremos de la siguiente forma \[\left[\mathrm{V}3\leftarrow E_{\#1}^{1,0}(\mathrm{V}1,\mathrm{V}2,\mathrm{W}1)\right]\] También usaremos macros \[\begin{gathered} \\ \left[\mathrm{W}1\leftarrow\mathrm{SKIP}\right] \end{gathered}\] (dejamos al lector hacerlos a mano o también se puede justificar su existencia vía el Segundo Manantial aplicado a las funciones \(C_{10}^{0,0}\) y \(C_{\mathrm{SKIP}}^{0,0}\)).
Ahora sí podemos hacer el programa \(\mathcal{Q}\) de \(\mathcal{S}^{\Sigma\cup\Sigma_{p}}\) que enumera a \(L\): \[\begin{array}{ll} & \mathrm{IF}\;\mathrm{N}1\neq0\;\mathrm{GOTO}\;\mathrm{L}1\\ & \mathrm{GOTO}\;\mathrm{L}2\\ \mathrm{L}1 & [\mathrm{N}2\leftarrow(\mathrm{N}1)_{1}]\\ & [\mathrm{N}3\leftarrow(\mathrm{N}1)_{2}]\\ & [\mathrm{P}1\leftarrow\ast^{\leq}(\mathrm{N}2)]\\ & \left[\mathrm{IF}\;\mathrm{P}1\in\mathrm{Pro}^{\Sigma}\;\mathrm{GOTO}\;\mathrm{L}3\right]\\ & \mathrm{GOTO}\;\mathrm{L}2\\ \mathrm{L}3 & [\mathrm{N}4\leftarrow10]\\ & \left[\mathrm{IF}\;Halt^{1,0}(\mathrm{N}3,\mathrm{N}4,\mathrm{P}1)\;\mathrm{GOTO}\;\mathrm{L}4\right]\\ & \mathrm{GOTO}\;\mathrm{L}2\\ \mathrm{L}4 & \left[\mathrm{N}5\leftarrow E_{\#1}^{1,0}(\mathrm{N}3,\mathrm{N}4,\mathrm{P}1)\right]\\ & [\mathrm{IF}\;\mathrm{N}5=10\;\mathrm{GOTO}\;\mathrm{L}5]\\ \mathrm{L}2 & \left[\mathrm{P}1\leftarrow\mathrm{SKIP}\right]\\ \mathrm{L}5 & \mathrm{SKIP} \end{array}\]
Cuando \(\Sigma\supseteq\Sigma_{p}\) podemos correr un programa \(\mathcal{P}\in\mathrm{Pro}^{\Sigma}\) partiendo de un estado que asigne a sus variables alfabéticas programas (ya que los programas son meras palabras de \(\Sigma^{\ast}\)). En particular podríamos correr un programa \(\mathcal{P}\) desde el estado \(\left\Vert \mathcal{P}\right\Vert\). Llamaremos \(A\) al conjunto formado por aquellos programas \(\mathcal{P}\) tales que \(\mathcal{P}\) se detiene partiendo del estado \(\left\Vert \mathcal{P}\right\Vert\). Es decir \[A=\{\mathcal{P}\in\mathrm{Pro}^{\Sigma}:\exists t\in\omega\text{ tal que }Halt^{0,1}(t,\mathcal{P},\mathcal{P})=1\}\] Por ejemplo \(\mathrm{SKIP}\in A\). Dicho rápida y sugestivamente \(A\) es el conjunto formado por aquellos programas que se detienen partiendo de si mismos. Dejamos al lector hacer un programa que enumere a \(A\). Como veremos mas adelante este conjunto, si bien es \(\Sigma\)-enumerable, no es \(\Sigma\)-computable.
Ahora consideremos el conjunto \[L=\{\mathcal{P}\in\mathrm{Pro}^{\Sigma}:\Psi_{\mathcal{P}}^{0,0,*}(\lozenge)=\mathcal{P}\}\] En palabras, un programa \(\mathcal{P}\in\mathrm{Pro}^{\Sigma}\) estará en \(L\) si y solo si \(\mathcal{P}\) termina desde \(((0,0,...),(\varepsilon,\varepsilon,...))\) dejando en \(\mathrm{P}1\) la palabra \(\mathcal{P}\). En algún sentido los elementos de \(L\) son programas que se autopropagandean ya que “de la nada ellos terminan dándose a si mismos como salida”. Dejamos al lector la tarea de reflexionar hasta entender que resulta difícil encontrar “a mano” un elemento de \(L\). En algún sentido, para lograr hacer un programa que este en \(L\) debemos ir escribiendo instrucciones que a su ves vayan garantizando que ellas mismas vayan quedando en el contenido de la variable \(\mathrm{P}1\). Sin embargo el Teorema de la Recursión (de Kleene) nos garantiza que \(L\) es no vacío! Dejamos al lector la tarea de hacer un programa que enumere a \(L\) (obviamente utilizando un elemento fijo de \(L\)).
Consideremos ahora el conjunto \[S=\{(\mathcal{P}_{1},\mathcal{P}_{2})\in\mathrm{Pro}^{\Sigma}\times\mathrm{Pro}^{\Sigma}:\Psi_{\mathcal{P}_{1}}^{0,0,\ast}(\lozenge)=\mathcal{P}_{1}\mathcal{P}_{2}=\Psi_{\mathcal{P}_{2}}^{0,0,\ast}(\lozenge)\}\] Note que nuevamente es difícil imaginar como uno programaría un par de programas \(\mathcal{P}_{1}\text{ y }\mathcal{P}_{2}\) de manera que \((\mathcal{P}_{1},\mathcal{P}_{2})\) este en \(S\). El Teorema de la Recursión Doble (de Smullyan) nos garantiza que \(S\) es no vacío! Dejamos al lector la tarea de hacer un programa que enumere a \(L\) (obviamente utilizando un elemento fijo de \(S\)).
Para probar que toda función \(\Sigma\)-Turing computable es \(\Sigma\)-recursiva debemos estudiar la recursividad del funcionamiento de las máquinas de Turing. Asumiremos la Asumsion Inocua, i.e. supondremos siempre que el conjunto de estados de una máquina de Turing \(M=\left(Q,\Sigma,\Gamma,\delta,q_{0},B,F\right)\) es un alfabeto disjunto con \(\Gamma\).
Primero probaremos algunos lemas básicos.
4.53. Sea \(M=\left(Q,\Sigma,\Gamma,\delta,q_{0},B,F\right)\) una máquina de Turing. Entonces
adhocprefix(1)adhocsufix \(Des\) es un conjunto \((\Gamma\cup Q)\)-p.r.
adhocprefix(2)adhocsufix \(St:Des\rightarrow Q\) es una función \((\Gamma\cup Q)\)-p.r.
Nótese que la función \(\delta\) de una máquina de Turing \(M=\left(Q,\Sigma,\Gamma,\delta,q_{0},B,F\right)\) no es \((\Gamma\cup Q)\)-mixta. Sin embargo los siguientes predicados \((\Gamma\cup Q)\)-mixtos contienen toda la información de \(\delta\): \[\begin{array}{rcl} P_{L}:Q\times\Gamma\times Q\times\Gamma & \rightarrow & \omega\\ (p,\sigma,q,\gamma) & \rightarrow & \left\{ \begin{array}{ccl} 1 & & \text{si }\delta(q,\gamma)=(p,\sigma,L)\\ 0 & & \text{caso contrario} \end{array}\right. \end{array}\] \[\begin{array}{rcl} P_{L}:Q\times\Gamma\times Q\times\Gamma & \rightarrow & \omega\\ (p,\sigma,q,\gamma) & \rightarrow & \left\{ \begin{array}{ccl} 1 & & \text{si }(p,\sigma,L)\in\delta(q,\gamma)\\ 0 & & \text{caso contrario} \end{array}\right. \end{array}\] \[\begin{array}{rcl} P_{R}:Q\times\Gamma\times Q\times\Gamma & \rightarrow & \omega\\ (p,\sigma,q,\gamma) & \rightarrow & \left\{ \begin{array}{ccl} 1 & & \text{si }\delta(q,\gamma)=(p,\sigma,R)\\ 0 & & \text{caso contrario} \end{array}\right. \end{array}\] \[\begin{array}{rcl} P_{K}:Q\times\Gamma\times Q\times\Gamma & \rightarrow & \omega\\ (p,\sigma,q,\gamma) & \rightarrow & \left\{ \begin{array}{ccl} 1 & & \text{si }\delta(q,\gamma)=(p,\sigma,K)\\ 0 & & \text{caso contrario} \end{array}\right. \end{array}\]
4.54. Sea \(M=\left(Q,\Sigma,\Gamma,\delta,q_{0},B,F\right)\) una máquina de Turing. Entonces los predicados \(P_{L},P_{R}\) y \(P_{K}\) son \((\Gamma\cup Q)\)-p.r.
Proof. Ya que los tres predicados tienen dominio finito, el Corolario 4.2 nos dice que son \((\Gamma\cup Q)\)-p.r.
Recordemos que dado \(\alpha\in(Q\cup\Gamma)^{\ast}\), definimos \(\left\lfloor \alpha\right\rfloor\) de la siguiente manera \[\begin{aligned} \left\lfloor \varepsilon\right\rfloor & =\varepsilon\\ \left\lfloor \alpha\sigma\right\rfloor & =\alpha\sigma\text{, si }\sigma\neq B\\ \left\lfloor \alpha B\right\rfloor & =\left\lfloor \alpha\right\rfloor \end{aligned}\] Es decir \(\left\lfloor \alpha\right\rfloor\) es el resultado de remover de \(\alpha\) el tramo final mas grande de la forma \(B^{n}\).
También dada cualquier palabra \(\alpha\) definimos \[\begin{aligned} ^{\curvearrowright}\alpha & =\left\{ \begin{array}{lll} \left[\alpha\right]_{2}...\left[\alpha\right]_{\left\vert \alpha\right\vert } & \text{si} & \left\vert \alpha\right\vert \geq2\\ \varepsilon & \text{si} & \left\vert \alpha\right\vert \leq1 \end{array}\right.\\ \alpha^{\curvearrowleft} & =\left\{ \begin{array}{lll} \left[\alpha\right]_{1}...\left[\alpha\right]_{\left\vert \alpha\right\vert -1} & \text{si} & \left\vert \alpha\right\vert \geq2\\ \varepsilon & \text{si} & \left\vert \alpha\right\vert \leq1 \end{array}\right. \end{aligned}\]
4.55. Las funciones \(\lambda\alpha[\left\lfloor \alpha\right\rfloor ]\), \(\lambda\alpha[^{\curvearrowright}\alpha]\) y \(\lambda\alpha[\alpha^{\curvearrowleft}]\) son \((\Gamma\cup Q)\)-p.r.. (Notar que la notación \(\lambda\) aquí es respecto del alfabeto \(\Gamma\cup Q\) por lo cual las tres funciones tienen dominio igual a \((\Gamma\cup Q)^{\ast}\).)
Nótese que dada una máquina de Turing \(M\), la expresión \(d\underset{M}{\vdash}d^{\prime}\) fue definida solo en el caso en que \(d\) y \(d^{\prime}\) son descripciones instantáneas. Es decir que el predicado \(\lambda dd^{\prime}\left[d\vdash d^{\prime}\right]\) tiene dominio igual a \(Des\times Des\).
4.56. El predicado \(\lambda dd^{\prime}\left[d\underset{M}{\vdash}d^{\prime}\right]\) es \((\Gamma\cup Q)\)-p.r..
Proof. Sea \(\tilde{P}_{L}:Des\times Des\times\Gamma\times\Gamma^{\ast}\times\Gamma^{\ast}\times Q\times Q\rightarrow\omega\) definido por \(\tilde{P}_{L}(d,d^{\prime},\sigma,\alpha,\beta,p,q)=1\) sii \[d=\alpha p\beta\wedge(q,\sigma,L)=\delta\left(p,\left[\beta B\right]_{1}\right)\wedge\alpha\neq\varepsilon\wedge d^{\prime}=\left\lfloor \alpha^{\curvearrowleft}q\left[\alpha\right]_{\left\vert \alpha\right\vert }\sigma^{\curvearrowright}\beta\right\rfloor\] Sea \(\tilde{P}_{R}:Des\times Des\times\Gamma\times\Gamma^{\ast}\times\Gamma^{\ast}\times Q\times Q\rightarrow\omega\) definido por \(\tilde{P}_{R}(d,d^{\prime},\sigma,\alpha,\beta,p,q)=1\) sii \[d=\alpha p\beta\wedge(q,\sigma,R)=\delta\left(p,\left[\beta B\right]_{1}\right)\wedge d^{\prime}=\alpha\sigma q^{\curvearrowright}\beta\] Sea \(\tilde{P}_{K}:Des\times Des\times\Gamma\times\Gamma^{\ast}\times\Gamma^{\ast}\times Q\times Q\rightarrow\omega\) definido por \(\tilde{P}_{K}(d,d^{\prime},\sigma,\alpha,\beta,p,q)=1\) sii \[d=\alpha p\beta\wedge(q,\sigma,K)=\delta\left(p,\left[\beta B\right]_{1}\right)\wedge d^{\prime}=\left\lfloor \alpha q\sigma^{\curvearrowright}\beta\right\rfloor\] Se deja al lector la verificación de que estos predicados son \((\Gamma\cup Q)\)-p.r.. Nótese que \(\lambda dd^{\prime}\left[d\underset{M}{\vdash}d^{\prime}\right]\) es igual al predicado \[\lambda dd^{\prime}\left[(\exists\sigma\in\Gamma)(\exists\alpha,\beta\in\Gamma^{\ast})(\exists p,q\in Q)(\tilde{P}_{R}\vee\tilde{P}_{L}\vee\tilde{P}_{K})(d,d^{\prime},\sigma,\alpha,\beta,p,q)\right]\] lo cual por el Lema 4.22 nos dice que \(\lambda dd^{\prime}\left[d\underset{M}{\vdash}d^{\prime}\right]\) es \((\Gamma\cup Q)\)-p.r.
4.16. \(\lambda ndd^{\prime}\left[d\underset{M}{\overset{n}{\vdash}}d^{\prime}\right]\) es \((\Gamma\cup Q)\)-p.r..
Proof. Sea \(Q=\lambda dd^{\prime}\left[d\underset{M}{\vdash}d^{\prime}\right]\cup C_{0}^{0,2}|_{(\Gamma\cup Q)^{\ast2}-Des^{2}}\) es decir \(Q\) es el resultado de extender con el valor \(0\) al predicado \(\lambda dd^{\prime}\left[d\underset{M}{\vdash}d^{\prime}\right]\) de manera que este definido en todo \((\Gamma\cup Q)^{\ast2}\). Sea \(\leq\) un orden total sobre \(\Gamma\cup Q\) y sea \(Q_{1}:\mathbf{N}\times Des\times Des\rightarrow\omega\) definido por \(Q_{1}(x,d,d^{\prime})=1\) sii
\(\left((\forall i\in\mathbf{N})_{i\leq Lt(x)}\ast^{\leq}((x)_{i})\in Des\right)\wedge\ast^{\leq}((x)_{1})=d\wedge\)
\(\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ast^{\leq}((x)_{Lt(x)})=d^{\prime}\wedge\left((\forall i\in\mathbf{N})_{i\leq Lt(x)\dot{-}1}\;Q(\ast^{\leq}((x)_{i}),\ast^{\leq}((x)_{i+1}))\right)\)
Nótese que dicho rápidamente \(Q_{1}(x,d,d^{\prime})=1\) sii \(x\) codifica una computación que parte de \(d\) y llega a \(d^{\prime}\). Se deja al lector la verificación de que este predicado es \((\Gamma\cup Q)\)-p.r.. Nótese que \[\lambda ndd^{\prime}\left[d\underset{M}{\overset{n}{\vdash}}d^{\prime}\right]=\lambda ndd^{\prime}\left[\left(\exists x\in\mathbf{N}\right)\;Lt(x)=n+1\wedge Q_{1}(x,d,d^{\prime})\right]\] Es decir que solo nos falta acotar el cuantificador existencial, para poder aplicar el lema de cuantificación acotada. Ya que cuando \(d_{1},...,d_{n+1}\in Des\) son tales que \(d_{1}\underset{M}{\vdash}d_{2}\underset{M}{\vdash}\cdots\underset{M}{\vdash}d_{n+1}\) tenemos que \[\left\vert d_{i}\right\vert \leq\left\vert d_{1}\right\vert +n\text{, para }i=1,...,n\] una posible cota para dicho cuantificador es \[\prod_{i=1}^{n+1}pr(i)^{\left\vert \Gamma\cup Q\right\vert ^{\left\vert d\right\vert +n}}\text{.}\] O sea que, por el lema de cuantificación acotada, tenemos que el predicado \(\lambda ndd^{\prime}\left[d\underset{M}{\overset{n}{\vdash}}d^{\prime}\right]\) es \((\Gamma\cup Q)\)-p.r.
4.6 (Godel vence a Turing). Supongamos \(f:S\subseteq\omega^{n}\times\Sigma^{\ast}{}^{m}\rightarrow O\) es \(\Sigma\)-Turing computable. Entonces \(f\) es \(\Sigma\)-recursiva.
Proof. Supongamos \(O=\Sigma^{\ast}\) y sea \(M=\left(Q,\Sigma,\Gamma,\delta,q_{0},B,\shortmid,F\right)\) una máquina de Turing con unit la cual compute a \(f\). Sea \(\leq\) un orden total sobre \(\Sigma\). Nótese que por el Teorema 4.2, la función \(\ast^{\leq}\) es \((\Gamma\cup Q)\)-p.r.. Sea \(P:\mathbf{N}\times\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) dado por \(P(x,\vec{x},\vec{\alpha})=1\) sii
adhocprefixadhocsufix \((\exists q\in Q)\;\left\lfloor q_{0}B\shortmid^{x_{1}}...B\shortmid^{x_{n}}B\alpha_{1}...B\alpha_{m}\right\rfloor \underset{M}{\overset{(x)_{1}}{\vdash}}\left\lfloor qB\ast^{\leq}((x)_{2})\right\rfloor \wedge\)
adhocprefixadhocsufix \(\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \wedge(\forall d\in Des)_{\left\vert d\right\vert \leq\left\vert \ast^{\leq}((x)_{2})\right\vert +2}\;\lnot\left(\left\lfloor qB\ast^{\leq}((x)_{2})\right\rfloor \underset{M}{\vdash}d\right)\)
Dejamos al lector la prueba de que \(P\) es \((\Gamma\cup Q)\)-p.r.. Ya que \(P\) es \(\Sigma\)-mixto, el Teorema 4.2 nos dice que \(P\) es \(\Sigma\)-p.r.. Nótese que \[f=\lambda\vec{x}\vec{\alpha}\left[\ast^{\leq}\left(\left(\min_{x}P(x,\vec{x},\vec{\alpha})\right)_{2}\right)\right]\text{,}\] lo cual nos dice que \(f\) es \(\Sigma\)-recursiva.
Probaremos que toda función \(\Sigma\)-computable es \(\Sigma\)-Turing computable. Para esto probaremos un resultado general que nos enseñara a simular el comportamiento de un programa con una máquina de Turing. Es importante notar que la simulación que nos interesa que haga la máquina simuladora no es a nivel de la función que computa el programa sino a un nivel mas general, es decir nos interesa que simule a dicho programa como transformador de estados. En particular y usada adecuadamente, la máquina simuladora nos servirá para confeccionar una máquina que compute una función computada por un programa dado.
Dado \(\mathcal{P}\in\mathrm{Pro}^{\Sigma}\), definamos \[\begin{aligned} N(\mathcal{P}) & =\mathrm{menor}\ k\in\mathbf{N}\ \mathrm{tal\ que\ las\ variables\ que\ ocurren\ en\ }\mathcal{P}\\ & \mathrm{esta}\text{n}\mathrm{\ todas\ en\ la\ lista\ N}1,...,\mathrm{N}\bar{k},\mathrm{P}1,...,\mathrm{P}\bar{k} \end{aligned}\] Por ejemplo si \(\mathcal{P}\) es el siguiente programa (aquí \(\Sigma=\{\blacktriangle,\#\}\)) \[\begin{array}{ll} \mathrm{L}1 & \mathrm{N}4\leftarrow\mathrm{N}4+1\\ & \mathrm{P}1\leftarrow\mathrm{P}1.\blacktriangle\\ & \mathrm{IF\ N}1\neq0\ \mathrm{GOTO}\;\mathrm{L}1 \end{array}\] entonces tenemos \(N(\mathcal{P})=4\)
Sea \(\mathcal{P}\) un programa y sea \(k\) fijo y mayor o igual a \(N(\mathcal{P})\). La construcción de la máquina simuladora dependerá de \(\mathcal{P}\) y de \(k\). Nótese que cuando \(\mathcal{P}\) se corre desde algún estado de la forma \[\left\Vert x_{1},...,x_{k},\alpha_{1},...,\alpha_{k}\right\Vert\] los sucesivos estados por los que va pasando son todos de la forma \[\left\Vert y_{1},...,y_{k},\beta_{1},...,\beta_{k}\right\Vert\] es decir en todos ellos las variables con índice mayor que \(k\) valen \(0\) o \(\varepsilon\). La razón es simple: ya que en \(\mathcal{P}\) no figuran las variables \[\begin{aligned} & \mathrm{N}\overline{k+1},\mathrm{N}\overline{k+2},...\\ & \mathrm{P}\overline{k+1},\mathrm{P}\overline{k+2},... \end{aligned}\] estas variables quedan con valores \(0\) y \(\varepsilon\), respectivamente a lo largo de toda la computación.
La máquina simuladora que construiremos simulara a \(\mathcal{P}\) en cuanto a su funcionamiento cuando partimos de estados de la forma \(\left\Vert x_{1},...,x_{k},\alpha_{1},...,\alpha_{k}\right\Vert\). Necesitaremos tener alguna manera de representar en la cinta los diferentes estados por los cuales se va pasando, a medida que corremos a \(\mathcal{P}\). Esto lo haremos de la siguiente forma: al estado \[\left\Vert x_{1},...,x_{k},\alpha_{1},...,\alpha_{k}\right\Vert\] lo representaremos en la cinta de la siguiente manera \[B\shortmid^{x_{1}}...B\shortmid^{x_{k}}B\alpha_{1}...B\alpha_{k}BBBB....\] Por ejemplo consideremos el programa \(\mathcal{P}\) mostrado recién y fijemos \(k=6\). Entonces al estado \[\left\Vert 3,2,5,0,4,2,\blacktriangle,\blacktriangle\blacktriangle,\varepsilon,\#\blacktriangle,\#,\#\#\#\right\Vert\] lo representaremos en la cinta de la siguiente manera \[B\mathrm{\shortmid\shortmid\shortmid}B\mathrm{\shortmid\shortmid}B\mathrm{\shortmid\shortmid\shortmid\shortmid\shortmid}BB\mathrm{\shortmid\shortmid\shortmid\shortmid}B\mathrm{\shortmid\shortmid}B\blacktriangle B\blacktriangle\blacktriangle BB\#\blacktriangle B\#B\#\#\#BBBBB....\] A lo que queda entre dos blancos consecutivos (es decir que no hay ningún blanco entre ellos) lo llamaremos "bloque", por ejemplo en la cinta de arriba tenemos que los primeros 12 bloques son \[\shortmid\shortmid\shortmid\ \ \ \shortmid\shortmid\ \ \ \shortmid\shortmid\shortmid\shortmid\shortmid\ \ \ \ \varepsilon\ \ \ \ \shortmid\shortmid\shortmid\shortmid\ \ \ \shortmid\shortmid\ \ \ \blacktriangle\ \ \ \ \ \blacktriangle\blacktriangle\ \ \ \ \ \varepsilon\ \ \ \ \ \#\blacktriangle\ \ \ \ \ \#\ \ \ \ \ \#\#\#\] y después los bloques siguientes (que son infinitos ya que la cinta es infinita hacia la derecha) son todos iguales a \(\varepsilon\).
Una observación importante es que esta forma de representación de estados en la cinta depende del \(k\) elegido, es decir si tomáramos otro \(k\), por ejemplo \(k=9\), entonces el estado anterior se representaría de otra forma en la cinta. Aquí se ve claramente que la máquina simuladora que construiremos dependerá del \(k\) elegido.
Construcción de las máquinas simuladoras de instrucciones
Armaremos la máquina simuladora como concatenación de máquinas las cuales simularan, vía la representación anterior, el funcionamiento de las distintas instrucciones de \(\mathcal{P}\). Asumiremos que en \(\mathcal{P}\) no hay instrucciones de la forma \(\mathrm{GOTO}\;\mathrm{L}\bar{m}\) ni de la forma \(\mathrm{L}\bar{n}\ \mathrm{GOTO}\;\mathrm{L}\bar{m}\). Esto simplificara un poco la construcción de la máquina simuladora y de hecho lo podemos hacer ya que toda función \(\Sigma\)-computable puede ser computada por un programa sin este tipo de instrucciones, tal como lo veremos mas adelante (Lema 4.57).
Para poder hacer concretamente las máquinas simuladoras de instrucciones deberemos diseñar antes algunas máquinas auxiliares. Todas las máquinas descriptas a continuación tendrán a \(\shortmid\) como unit y a \(B\) como blanco, tendrán a \(\Sigma\) como su alfabeto terminal y su alfabeto mayor será \(\Gamma=\Sigma\cup\{B,\shortmid\}\cup\{\tilde{a}:a\in\Sigma\cup\{\shortmid\}\}\). Además tendrán uno o dos estados finales con la propiedad de que si \(q\) es un estado final, entonces \((q,\sigma)\notin D_{\delta}\), para cada \(\sigma\in\Gamma\).
Para cada \(j\geq1\), sea \(D_{j}\) la siguiente máquina:

Nótese que \[\begin{array}{lcr} \alpha B\beta_{1}B\beta_{2}B...B\beta_{j}B\gamma & \overset{\ast}{\vdash} & \alpha B\beta_{1}B\beta_{2}B...B\beta_{j}B\gamma\\ \ \uparrow & & \uparrow\ \\ \ q_{0} & & q_{f}\ \end{array}\] siempre que \(\alpha,\gamma\in\Gamma^{\ast}\), \(\beta_{1},...,\beta_{j}\in(\Gamma-\{B\})^{\ast}\). Es decir la máquina \(D_{j}\) lo único que hace es mover el cabezal desde el blanco de la izquierda de un bloque determinado, exactamente \(j\) bloques a la derecha
Análogamente \(I_{j}\) será una máquina que desplaza el cabezal \(j\) bloques a la izquierda del blanco que esta escaneando. Es decir \(I_{j}\) cumplirá que \[\begin{array}{lcr} \alpha B\beta_{j}B...B\beta_{2}B\beta_{1}B\gamma & \overset{\ast}{\vdash} & \alpha B\beta_{j}B...B\beta_{2}B\beta_{1}B\gamma\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \uparrow & & \uparrow\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ q_{0} & & q_{f}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \end{array}\] siempre que \(\alpha,\gamma\in\Gamma^{\ast}\), \(\beta_{1},...,\beta_{j}\in(\Gamma-\{B\})^{\ast}\). Dejamos al lector la manufactura de esta máquina.
Para \(j\geq1\), sea \(TD_{j}\) una máquina con un solo estado final \(q_{f}\) y tal que \[\begin{array}{ccc} \alpha B\gamma & \overset{\ast}{\vdash} & \alpha BB\gamma\\ \uparrow & & \uparrow\ \ \\ q_{0} & & q_{f}\ \ \end{array}\] cada vez que \(\alpha,\gamma\in\Gamma^{\ast}\) y \(\gamma\) tiene exactamente \(j\) ocurrencias de \(B\). Es decir la máquina \(TD_{j}\) corre un espacio a la derecha todo el segmento \(\gamma\) y agrega un blanco en el espacio que se genera a la izquierda. Por ejemplo, para el caso de \(\Sigma=\{a\}\) podemos tomar \(TD_{3}\) igual a la siguiente máquina:

Análogamente, para \(j\geq1\), sea \(TI_{j}\) una máquina tal que \[\begin{array}{ccc} \alpha B\sigma\gamma & \overset{\ast}{\vdash} & \alpha B\gamma\\ \uparrow\ & & \uparrow\\ q_{0}\ \ & & q_{f} \end{array}\] cada vez que \(\alpha\in\Gamma^{\ast}\), \(\sigma\in\Gamma\) y \(\gamma\) tiene exactamente \(j\) ocurrencias de \(B\). Es decir la máquina \(TI_{j}\) corre un espacio a la izquierda todo el segmento \(\gamma\) (por lo cual en el lugar de \(\sigma\) queda el primer símbolo de \(\gamma\)). Dejamos al lector la construcción de por ejemplo \(TI_{3}\) para \(\Sigma=\{a\}\).
A continuación describiremos las distintas máquinas simuladoras de instrucciones (y para algunos casos mostraremos concretamente como pueden ser hechas usando las máquinas anteriores).
Para \(1\leq i\leq k\), sea \(M_{i,k}^{+}\) una máquina tal que cualesquiera sean \(x_{1},...,x_{k}\in\omega\) y \(\alpha_{1},...,\alpha_{k}\in\Sigma^{\ast}\): \[\begin{array}{lcl} B\shortmid^{x_{1}}...B\shortmid^{x_{k}}B\alpha_{1}...B\alpha_{k} & \overset{\ast}{\vdash} & B\shortmid^{x_{1}}...B\shortmid^{x_{i-1}}B\shortmid^{x_{i}+1}B\shortmid^{x_{i+1}}...B\shortmid^{x_{k}}B\alpha_{1}...B\alpha_{k}\\ \uparrow & & \uparrow\\ q_{0} & & q_{f} \end{array}\] donde \(q_{0}\) es el estado inicial y \(q_{f}\) es el único estado final de \(M_{i,k}^{+}\). Es claro que la máquina \(M_{i,k}^{+}\) simula la instrucción \(\mathrm{N}\bar{\imath}\leftarrow\mathrm{N}\bar{\imath}+1\), vía la representación de estados en la cinta con respecto a \(k\).
Para \(1\leq i\leq k\), sea \(M_{i,k}^{\dot{-}}\) una máquina tal que cualesquiera sean \(x_{1},...,x_{k}\in\omega\) y \(\alpha_{1},...,\alpha_{k}\in\Sigma^{\ast}\): \[\begin{array}{lcl} B\shortmid^{x_{1}}...B\shortmid^{x_{k}}B\alpha_{1}...B\alpha_{k} & \overset{\ast}{\vdash} & B\shortmid^{x_{1}}...B\shortmid^{x_{i-1}}B\shortmid^{x_{i}\dot{-}1}B\shortmid^{x_{i+1}}...B\shortmid^{x_{k}}B\alpha_{1}...B\alpha_{k}\\ \uparrow & & \uparrow\\ q_{0} & & q_{f} \end{array}\] donde \(q_{0}\) es el estado inicial y \(q_{f}\) es el único estado final de \(M_{i,k}^{\dot{-}}\). Es claro que la máquina \(M_{i,k}^{\dot{-}}\) simula la instrucción \(\mathrm{P}\bar{\imath}\leftarrow\mathrm{P}\bar{\imath}\dot{-}1\), vía la representación de estados en la cinta con respecto a \(k\).
Para \(1\leq i\leq k\) y \(a\in\Sigma\), sea \(M_{i,k}^{a}\) una máquina tal que cualesquiera sean \(x_{1},...,x_{k}\in\omega\) y \(\alpha_{1},...,\alpha_{k}\in\Sigma^{\ast}\): \[\begin{array}{lcl} B\shortmid^{x_{1}}...B\shortmid^{x_{k}}B\alpha_{1}...B\alpha_{k} & \overset{\ast}{\vdash} & B\shortmid^{x_{1}}...B\shortmid^{x_{k}}B\alpha_{1}...B\alpha_{i-1}B\alpha_{i}aB\alpha_{i+1}...B\alpha_{k}\\ \uparrow & & \uparrow\\ q_{0} & & q_{f} \end{array}\] donde \(q_{0}\) es el estado inicial y \(q_{f}\) es el único estado final de \(M_{i,k}^{a}\). Es claro que la máquina \(M_{i,k}^{a}\) simula la instrucción \(\mathrm{P}\bar{\imath}\leftarrow\mathrm{P}\bar{\imath}.a\), vía la representación de estados en la cinta con respecto a \(k\). La máquina \(M_{i,k}^{a}\).puede hacerse de la siguiente manera:

Para \(1\leq i\leq k\), sea \(M_{i,k}^{\curvearrowright}\) una máquina tal que cualesquiera sean \(x_{1},...,x_{k}\in\omega\) y \(\alpha_{1},...,\alpha_{k}\in\Sigma^{\ast}\): \[\begin{array}{lcl} B\shortmid^{x_{1}}...B\shortmid^{x_{k}}B\alpha_{1}...B\alpha_{k} & \overset{\ast}{\vdash} & B\shortmid^{x_{1}}...B\shortmid^{x_{k}}B\alpha_{1}...B\alpha_{i-1}B^{\curvearrowright}\alpha_{i}B\alpha_{i+1}...B\alpha_{k}\\ \uparrow & & \uparrow\\ q_{0} & & q_{f} \end{array}\] donde \(q_{0}\) es el estado inicial y \(q_{f}\) es el único estado final de \(M_{i,k}^{\curvearrowright}\). Es claro que la máquina \(M_{i,k}^{\curvearrowright}\) simula la instrucción \(\mathrm{P}\bar{\imath}\leftarrow\ ^{\curvearrowright}\mathrm{P}\bar{\imath}\), vía la representación de estados en la cinta con respecto a \(k\).
Para \(1\leq i,j\leq k\), sea \(M_{i\leftarrow j}^{\#,k}\) una máquina tal que cualesquiera sean \(x_{1},...,x_{k}\in\omega\) y \(\alpha_{1},...,\alpha_{k}\in\Sigma^{\ast}\): \[\begin{array}{lcl} B\shortmid^{x_{1}}...B\shortmid^{x_{k}}B\alpha_{1}...B\alpha_{k} & \overset{\ast}{\vdash} & B\shortmid^{x_{1}}...B\shortmid^{x_{i-1}}B\shortmid^{x_{j}}B\shortmid^{x_{i+1}}...B\shortmid^{x_{k}}B\alpha_{1}...B\alpha_{k}\\ \uparrow & & \uparrow\\ q_{0} & & q_{f} \end{array}\] donde \(q_{0}\) es el estado inicial y \(q_{f}\) es el único estado final de \(M_{i\leftarrow j}^{\#,k}\). Es claro que la máquina \(M_{i\leftarrow j}^{\#,k}\) simula la instrucción \(\mathrm{N}\bar{\imath}\leftarrow\mathrm{N}\bar{j}\), vía la representación de estados en la cinta con respecto a \(k\).
Para \(1\leq i,j\leq k\), sea \(M_{i\leftarrow j}^{\ast,k}\) una máquina tal que cualesquiera sean \(x_{1},...,x_{k}\in\omega\) y \(\alpha_{1},...,\alpha_{k}\in\Sigma^{\ast}\): \[\begin{array}{lcl} B\shortmid^{x_{1}}...B\shortmid^{x_{k}}B\alpha_{1}...B\alpha_{k} & \overset{\ast}{\vdash} & B\shortmid^{x_{1}}...B\shortmid^{x_{k}}B\alpha_{1}...B\alpha_{i-1}B\alpha_{j}B\alpha_{i+1}...B\alpha_{k}\\ \uparrow & & \uparrow\\ q_{0} & & q_{f} \end{array}\] donde \(q_{0}\) es el estado inicial y \(q_{f}\) es el único estado final de \(M_{i\leftarrow j}^{\ast,k}\). Es claro que la máquina \(M_{i\leftarrow j}^{\ast,k}\) simula la instrucción \(\mathrm{P}\bar{\imath}\leftarrow\mathrm{P}\bar{j}\), vía la representación de estados en la cinta con respecto a \(k\). La máquina \(M_{i\leftarrow j}^{\ast,k}\), para el caso \(\Sigma=\{a,b\}\) y \(i<j\) puede hacerse de la siguiente manera:

Para \(1\leq i\leq k\), sea \(M_{i\leftarrow0}^{k}\) una máquina tal que cualesquiera sean \(x_{1},...,x_{k}\in\omega\) y \(\alpha_{1},...,\alpha_{k}\in\Sigma^{\ast}\): \[\begin{array}{lcl} B\shortmid^{x_{1}}...B\shortmid^{x_{k}}B\alpha_{1}...B\alpha_{k} & \overset{\ast}{\vdash} & B\shortmid^{x_{1}}...B\shortmid^{x_{i-1}}BB\shortmid^{x_{i+1}}...B\shortmid^{x_{k}}B\alpha_{1}...B\alpha_{k}\\ \uparrow & & \uparrow\\ q_{0} & & q_{f} \end{array}\] donde \(q_{0}\) es el estado inicial y \(q_{f}\) es el único estado final de \(M_{i\leftarrow0}^{k}\). Es claro que la máquina \(M_{i\leftarrow0}^{k}\) simula la instrucción \(\mathrm{N}\bar{\imath}\leftarrow0\), vía la representación de estados en la cinta con respecto a \(k\).
Para \(1\leq i\leq k\), sea \(M_{i\leftarrow\varepsilon}^{k}\) una máquina tal que cualesquiera sean \(x_{1},...,x_{k}\in\omega\) y \(\alpha_{1},...,\alpha_{k}\in\Sigma^{\ast}\): \[\begin{array}{lcl} B\shortmid^{x_{1}}...B\shortmid^{x_{k}}B\alpha_{1}...B\alpha_{k} & \overset{\ast}{\vdash} & B\shortmid^{x_{1}}...B\shortmid^{x_{k}}B\alpha_{1}...B\alpha_{i-1}BB\alpha_{i+1}...B\alpha_{k}\\ \uparrow & & \uparrow\\ q_{0} & & q_{f} \end{array}\] donde \(q_{0}\) es el estado inicial y \(q_{f}\) es el único estado final de \(M_{i\leftarrow\varepsilon}^{k}\). Es claro que la máquina \(M_{i\leftarrow\varepsilon}^{k}\) simula la instrucción \(\mathrm{P}\bar{\imath}\leftarrow\varepsilon\), vía la representación de estados en la cinta con respecto a \(k\).
Sea \[M_{\mathrm{SKIP}}=\left(\{q_{0},q_{f}\},\Gamma,\Sigma,\delta,q_{0},B,\shortmid,\{q_{f}\}\right),\] con \(D_{\delta}=\{(q_{0},B)\}\) y \(\delta(q_{0},B)=(q_{f},B,K)\). Es claro que la máquina \(M_{\mathrm{SKIP}}\) simula la instrucción \(\mathrm{SKIP}\), vía la representación de estados en la cinta con respecto a \(k\) (cualquiera sea el \(k\)).
Para \(1\leq j\leq k\), sea \(IF_{j,k}\) una máquina con estado inicial \(q_{0}\) y dos estados finales \(q_{si}\) y \(q_{no}\) tal que cualesquiera sean \(x_{1},...,x_{k}\in\omega\) y \(\alpha_{1},...,\alpha_{k}\in\Sigma^{\ast}\), si \(x_{j}\neq0\), entonces \[\begin{array}{lcl} B\shortmid^{x_{1}}...B\shortmid^{x_{k}}B\alpha_{1}...B\alpha_{k} & \overset{\ast}{\vdash} & B\shortmid^{x_{1}}...B\shortmid^{x_{k}}B\alpha_{1}...B\alpha_{k}\\ \uparrow & & \uparrow\\ q_{0} & & q_{si} \end{array}\] y si \(x_{j}=0\), entonces \[\begin{array}{lcl} B\shortmid^{x_{1}}...B\shortmid^{x_{k}}B\alpha_{1}...B\alpha_{k} & \overset{\ast}{\vdash} & B\shortmid^{x_{1}}...B\shortmid^{x_{k}}B\alpha_{1}...B\alpha_{k}\\ \uparrow & & \uparrow\\ q_{0} & & q_{no} \end{array}\]
Para \(1\leq i\leq k\) y \(a\in\Sigma\), sea \(IF_{j,k}^{a}\) una máquina con estado inicial \(q_{0}\) y dos estados finales \(q_{si}\) y \(q_{no}\) tal que cualesquiera sean \(x_{1},...,x_{k}\in\omega\) y \(\alpha_{1},...,\alpha_{k}\in\Sigma^{\ast}\), si \(\alpha_{j}\) comienza con \(a\), entonces \[\begin{array}{lcl} B\shortmid^{x_{1}}...B\shortmid^{x_{k}}B\alpha_{1}...B\alpha_{k} & \overset{\ast}{\vdash} & B\shortmid^{x_{1}}...B\shortmid^{x_{k}}B\alpha_{1}...B\alpha_{k}\\ \uparrow & & \uparrow\\ q_{0} & & q_{si} \end{array}\] y en caso contrario \[\begin{array}{lcl} B\shortmid^{x_{1}}...B\shortmid^{x_{k}}B\alpha_{1}...B\alpha_{k} & \overset{\ast}{\vdash} & B\shortmid^{x_{1}}...B\shortmid^{x_{k}}B\alpha_{1}...B\alpha_{k}\\ \uparrow & & \uparrow\\ q_{0} & & q_{no} \end{array}\] La máquina \(IF_{j,k}^{a}\) puede hacerse de la siguiente manera:

Ejemplo de máquina simuladora de un programa
A continuación veremos un ejemplo de como se arma la máquina simuladora de un programa dado. Sea \(\Sigma=\{\blacktriangle,\#\}\) y sea \(\mathcal{P}\) el siguiente programa \[\begin{array}{ll} \mathrm{L}3 & \mathrm{N}4\leftarrow\mathrm{N}4+1\\ & \mathrm{P}1\leftarrow\ ^{\curvearrowright}\mathrm{P}1\\ & \mathrm{IF\ P}1\ \mathrm{BEGINS\ }\blacktriangle\ \mathrm{GOTO}\;\mathrm{L}3\\ & \mathrm{P}3\leftarrow\mathrm{P}3.\# \end{array}\] Tomemos \(k=5\). Es claro que \(k\geq N(\mathcal{P})=4\). A la máquina que simulara a \(\mathcal{P}\) respecto de \(k\), la llamaremos \(M_{sim}\) y será la siguiente máquina:

Veamos con un ejemplo como \(M_{sim}\) simula a \(\mathcal{P}\). Supongamos que corremos \(\mathcal{P}\) desde el estado \[\left\Vert 2,1,0,5,3,\#\blacktriangle\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#\right\Vert\] Tendremos entonces la siguiente sucesión de descripciones instantáneas: \[\begin{aligned} & (1,\left\Vert 2,1,0,5,3,\#\blacktriangle\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#\right\Vert )\\ \\ & (2,\left\Vert 2,1,0,6,3,\#\blacktriangle\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#\right\Vert )\\ \\ & (3,\left\Vert 2,1,0,6,3,\blacktriangle\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#\right\Vert )\\ \\ & (1,\left\Vert 2,1,0,6,3,\blacktriangle\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#\right\Vert )\\ \\ & (2,\left\Vert 2,1,0,7,3,\blacktriangle\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#\right\Vert )\\ \\ & (3,\left\Vert 2,1,0,7,3,\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#\right\Vert )\\ \\ & (4,\left\Vert 2,1,0,7,3,\#\#,\varepsilon,\blacktriangle\blacktriangle,\#\blacktriangle,\#\right\Vert )\\ \\ & (5,\left\Vert 2,1,0,7,3,\#\#,\varepsilon,\blacktriangle\blacktriangle\#,\#\blacktriangle,\#\right\Vert ) \end{aligned}\] Si hacemos funcionar a \(M_{sim}\) desde \(q_{0}B\shortmid^{2}B\shortmid BB\shortmid^{5}B\shortmid^{3}B\#\blacktriangle\#\#BB\blacktriangle\blacktriangle B\#\blacktriangle B\#B\) obtendremos una sucesión de descripciones instantáneas dentro de la cual estará la siguiente subsucesión que se corresponde con las descripciones instantáneas de la computación anterior. \[\begin{aligned} q_{0}B & \shortmid^{2}B\shortmid BB\shortmid^{5}B\shortmid^{3}B\#\blacktriangle\#\#BB\blacktriangle\blacktriangle B\#\blacktriangle B\#B\\ \\q_{1}B & \shortmid^{2}B\shortmid BB\shortmid^{6}B\shortmid^{3}B\#\blacktriangle\#\#BB\blacktriangle\blacktriangle B\#\blacktriangle B\#B\\ q_{2}B & \shortmid^{2}B\shortmid BB\shortmid^{6}B\shortmid^{3}B\#\blacktriangle\#\#BB\blacktriangle\blacktriangle B\#\blacktriangle B\#B\\ \\q_{3}B & \shortmid^{2}B\shortmid BB\shortmid^{6}B\shortmid^{3}B\blacktriangle\#\#BB\blacktriangle\blacktriangle B\#\blacktriangle B\#B\\ q_{4}B & \shortmid^{2}B\shortmid BB\shortmid^{6}B\shortmid^{3}B\blacktriangle\#\#BB\blacktriangle\blacktriangle B\#\blacktriangle B\#B\\ \\q_{si}B & \shortmid^{2}B\shortmid BB\shortmid^{6}B\shortmid^{3}B\blacktriangle\#\#BB\blacktriangle\blacktriangle B\#\blacktriangle B\#B\\ q_{0}B & \shortmid^{2}B\shortmid BB\shortmid^{6}B\shortmid^{3}B\blacktriangle\#\#BB\blacktriangle\blacktriangle B\#\blacktriangle B\#B\\ \\q_{1}B & \shortmid^{2}B\shortmid BB\shortmid^{7}B\shortmid^{3}B\blacktriangle\#\#BB\blacktriangle\blacktriangle B\#\blacktriangle B\#B\\ q_{2}B & \shortmid^{2}B\shortmid BB\shortmid^{7}B\shortmid^{3}B\blacktriangle\#\#BB\blacktriangle\blacktriangle B\#\blacktriangle B\#B\\ \\q_{3}B & \shortmid^{2}B\shortmid BB\shortmid^{7}B\shortmid^{3}B\#\#BB\blacktriangle\blacktriangle B\#\blacktriangle B\#B\\ q_{4}B & \shortmid^{2}B\shortmid BB\shortmid^{7}B\shortmid^{3}B\#\#BB\blacktriangle\blacktriangle B\#\blacktriangle B\#B\\ \\q_{no}B & \shortmid^{2}B\shortmid BB\shortmid^{7}B\shortmid^{3}B\#\#BB\blacktriangle\blacktriangle B\#\blacktriangle B\#B\\ q_{5}B & \shortmid^{2}B\shortmid BB\shortmid^{7}B\shortmid^{3}B\#\#BB\blacktriangle\blacktriangle B\#\blacktriangle B\#B\\ \\q_{6}B & \shortmid^{2}B\shortmid BB\shortmid^{7}B\shortmid^{3}B\#\#BB\blacktriangle\blacktriangle\#B\#\blacktriangle B\#B \end{aligned}\] Dejamos al lector ver en detalle el paralelismo que hay entre las dos sucesiones de descripciones instantáneas arriba expuestas.
La construcción de la máquina simuladora
A continuación describiremos en general como hacer la máquina simuladora de \(\mathcal{P}\), respecto de \(k\). Supongamos que \(\mathcal{P}=I_{1}...I_{n}\). Para cada \(i=1,...,n\), llamaremos \(M_{i}\) a la máquina que simulara el efecto que produce la instrucción \(I_{i}\), es decir tomemos
adhocprefix-adhocsufix \(M_{i}=M_{j,k}^{+}\), si \(Bas(I_{i})=\mathrm{N}\bar{j}\leftarrow\mathrm{N}\bar{j}+1\)
adhocprefix-adhocsufix \(M_{i}=M_{j,k}^{\dot{-}}\), si \(Bas(I_{i})=\mathrm{N}\bar{j}\leftarrow\mathrm{N}\bar{j}\dot{-}1\)
adhocprefix-adhocsufix \(M_{i}=M_{j,k}^{a}\), si \(Bas(I_{i})=\mathrm{P}\bar{j}\leftarrow\mathrm{P}\bar{j}.a\)
adhocprefix-adhocsufix \(M_{i}=M_{j,k}^{\curvearrowright}\), si \(Bas(I_{i})=\mathrm{P}\bar{j}\leftarrow\ ^{\curvearrowright}\mathrm{P}\bar{j}\)
adhocprefix-adhocsufix \(M_{i}=M_{j\leftarrow m}^{\#,k}\), si \(Bas(I_{i})=\mathrm{N}\bar{j}\leftarrow\mathrm{N}\bar{m}\)
adhocprefix-adhocsufix \(M_{i}=M_{j\leftarrow m}^{\ast,k}\), si \(Bas(I_{i})=\mathrm{P}\bar{j}\leftarrow\mathrm{P}\bar{m}\)
adhocprefix-adhocsufix \(M_{i}=M_{j\leftarrow0}^{k}\), si \(Bas(I_{i})=\mathrm{N}\bar{j}\leftarrow0\)
adhocprefix-adhocsufix \(M_{i}=M_{j\leftarrow\varepsilon}^{k}\), si \(Bas(I_{i})=\mathrm{P}\bar{j}\leftarrow\varepsilon\)
adhocprefix-adhocsufix \(M_{i}=M_{\mathrm{SKIP}}\), si \(Bas(I_{i})=\mathrm{SKIP}\)
adhocprefix-adhocsufix \(M_{i}=IF_{j,k}\), si \(Bas(I_{i})=\mathrm{IF}\;\mathrm{N}\bar{j}\not=0\) \(\mathrm{GOTO}\;\mathrm{L}\bar{m}\), para algún \(m\)
adhocprefix-adhocsufix \(M_{i}=IF_{j,k}^{a}\), si \(Bas(I_{i})=\mathrm{IF}\;\mathrm{P}\bar{j}\;\mathrm{BEGINS}\;a\;\mathrm{GOTO}\;\mathrm{L}\bar{m}\), para algún \(m\)
Ya que la máquina \(M_{i}\) puede tener uno o dos estados finales, la representaremos como se muestra a continuación:

entendiendo que en el caso en que \(M_{i}\) tiene un solo estado final, este esta representado por el circulo de abajo a la izquierda y en el caso en que \(M_{i}\) tiene dos estados finales, el circulo de abajo a la izquierda corresponde al estado final \(q_{no}\) y el circulo de abajo a la derecha corresponde al estado \(q_{si}\). Para armar la máquina que simulara a \(\mathcal{P}\) hacemos lo siguiente. Primero unimos las máquinas \(M_{1},...,M_{n}\) de la siguiente manera:

Luego para cada \(i\) tal que \(Bas(I_{i})\) es de la forma \(\alpha\mathrm{GOTO}\;\mathrm{L}\bar{m}\), ligamos con una flecha de la forma \[\underrightarrow{\;\;\;\;\;\;B,B,K\;\;\;\;\;\;}\] el estado final \(q_{si}\) de la \(M_{i}\) con el estado inicial de la \(M_{h}\), donde \(h\) es tal que \(I_{h}\) es la primer instrucción que tiene label \(\mathrm{L}\bar{m}\).
A continuación enunciaremos en forma de lema la existencia de la máquina simuladora y de las propiedades esenciales que usaremos luego para probar que toda función \(\Sigma\)-computable es \(\Sigma\)-Turing computable.
4.57. Sea \(\mathcal{P}\in\mathrm{Pro}^{\Sigma}\) y sea \(k\geq N(\mathcal{P})\). Supongamos que en \(\mathcal{P}\) no hay instrucciones de la forma \(\mathrm{GOTO}\;\mathrm{L}\bar{m}\) ni de la forma \(\mathrm{L}\bar{n}\ \mathrm{GOTO}\;\mathrm{L}\bar{m}\). Para cada \(a\in\Sigma\cup\{\shortmid\}\), sea \(\tilde{a}\) un nuevo símbolo. Sea \(\Gamma=\Sigma\cup\{B,\shortmid\}\cup\{\tilde{a}:a\in\Sigma\cup\{\shortmid\}\}\). Entonces hay una máquina de Turing con unit \(M=\left(Q,\Gamma,\Sigma,\delta,q_{0},B,\shortmid,\{q_{f}\}\right)\) la cual satisface
adhocprefix(1)adhocsufix \((q_{f},\sigma)\notin D_{\delta}\), para cada \(\sigma\in\Gamma\).
adhocprefix(2)adhocsufix Cualesquiera sean \(x_{1},...,x_{k}\in\omega\) y \(\alpha_{1},...,\alpha_{k}\in\Sigma^{\ast}\), el programa \(\mathcal{P}\) se detiene partiendo del estado \[\left\Vert x_{1},...,x_{k},\alpha_{1},...,\alpha_{k}\right\Vert\] sii \(M\) se detiene partiendo de la descripción instantánea \[\left\lfloor q_{0}B\shortmid^{x_{1}}B...B\shortmid^{x_{k}}B\alpha_{1}B...B\alpha_{k}B\right\rfloor\]
adhocprefix(3)adhocsufix Si \(x_{1},...,x_{k}\in\omega\) y \(\alpha_{1},...,\alpha_{k}\in\Sigma^{\ast}\) son tales que \(\mathcal{P}\) se detiene partiendo del estado \[\left\Vert x_{1},...,x_{k},\alpha_{1},...,\alpha_{k}\right\Vert\] y llega al estado \[\left\Vert y_{1},...,y_{k},\beta_{1},...,\beta_{k}\right\Vert\] entonces \[\left\lfloor q_{0}B\shortmid^{x_{1}}B...B\shortmid^{x_{k}}B\alpha_{1}B...B\alpha_{k}B\right\rfloor \overset{\ast}{\underset{M}{\vdash}}\left\lfloor q_{f}B\shortmid^{y_{1}}B...B\shortmid^{y_{k}}B\beta_{1}B...B\beta_{k}B\right\rfloor\]
Cabe destacar que si bien la veracidad de este lema es sustentada en las explicaciones anteriores, una prueba formal rigurosa del mismo resultaría extremadamente larga y tediosa. La ventaja de que sea un resultado intuitivamente claro nos permite aceptarlo y seguir adelante en nuestro análisis.
En lo que sigue usaremos la existencia de la máquina simuladora de un programa para probar que toda función \(\Sigma\)-computable es \(\Sigma\)-Turing computable. Antes un lema.
4.58. Si \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\Sigma^{\ast}\) es \(\Sigma\)-computable, entonces hay un programa \(\mathcal{Q}\) el cual computa a \(f\) y el cual cumple con las siguientes propiedades
adhocprefix(1)adhocsufix En \(\mathcal{Q}\) no hay instrucciones de la forma \(\mathrm{GOTO}\;\mathrm{L}\bar{\imath}\) ni de la forma \(\mathrm{L}\bar{j}\ \mathrm{GOTO}\;\mathrm{L}\bar{\imath}\)
adhocprefix(2)adhocsufix Cuando \(\mathcal{Q}\) termina partiendo de un estado cualquiera dado, el estado alcanzado es tal que las variables numéricas tienen todas el valor \(0\) y las alfabéticas tienen todas excepto \(\mathrm{P}1\) el valor \(\varepsilon\).
Proof. Sea \(\mathcal{P}\) un programa que compute a \(f\). Sea \(r\in\mathbf{N}\) tal que \(r>N(\mathcal{P}),n,m\). Sea \(\mathcal{\tilde{P}}\) el resultado de reemplazar en \(\mathcal{P}\) cada instrucción de la forma \[\alpha\mathrm{GOTO}\;\mathrm{L}\bar{\imath}\] con \(\alpha\in\{\varepsilon\}\cup\{\mathrm{L}\bar{j}:j\in\mathbf{N}\}\) por \(\alpha\mathrm{IF\ N}\bar{r}\neq0\ \mathrm{GOTO}\;\mathrm{L}\bar{\imath}\). Ahora sea \(\mathcal{Q}\) el siguiente programa \[\begin{array}{l} \mathrm{N}\bar{r}\leftarrow\mathrm{N}\bar{r}+1\\ \mathcal{\tilde{P}}\\ \mathrm{N}1\leftarrow0\\ \vdots\\ \mathrm{N}\bar{r}\leftarrow0\\ \mathrm{P}2\leftarrow\varepsilon\\ \vdots\\ \mathrm{P}\bar{r}\leftarrow\varepsilon \end{array}\] Es fácil ver que \(\mathcal{Q}\) tiene las propiedades (1) y (2).
Por supuesto, hay un lema análogo para el caso en que \(f\) llega a \(\omega\) en lugar de llegar a \(\Sigma^{\ast}\). Ahora sí, el anunciado teorema:
4.7 (Turing vence a Neumann). Si \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow O\) es \(\Sigma\)-computable, entonces \(f\) es \(\Sigma\)-Turing computable.
Proof. Supongamos \(O=\Sigma^{\ast}\). Por el Lema 4.58 existe \(\mathcal{P}\in\mathrm{Pro}^{\Sigma}\) el cual computa \(f\) y tiene las propiedades (1) y (2). Sea \(k=\max\{n,m,N(\mathcal{P})\}\) y sea \(M_{sim}\) la máquina de Turing con unit que simula a \(\mathcal{P}\) respecto de \(k\). Como puede observarse, la máquina \(M_{sim}\), no necesariamente computara a \(f\). Sea \(M_{1}\) la siguiente máquina:

(Cuando \(n=0\) debemos interpretar que \(D_{0}=\left(\{q_{0},q_{f}\},\Gamma,\Sigma,\delta,q_{0},B,\shortmid,\{q_{f}\}\right)\), con \(D_{\delta}=\{(q_{0},B)\}\) y \(\delta(q_{0},B)=(q_{f},B,K)\). Nótese que \(M_{1}\) cumple que para cada \((\vec{x},\vec{\alpha})\in\omega^{n}\times\Sigma^{\ast m}\), \[\left\lfloor q_{0}B\shortmid^{x_{1}}B...B\shortmid^{x_{n}}B\alpha_{1}B...B\alpha_{m}B\right\rfloor \overset{\ast}{\vdash}\left\lfloor q_{f}B\shortmid^{x_{1}}B...B\shortmid^{x_{n}}B^{k-n}B\alpha_{1}B...B\alpha_{m}B\right\rfloor\] Sea \(M_{2}\) la siguiente máquina

Nótese que \(M_{2}\) cumple que para cada \(\alpha\in\Sigma^{\ast}\), \[\left\lfloor q_{0}B^{k+1}\alpha\right\rfloor \overset{\ast}{\vdash}\left\lfloor q_{f}B\alpha\right\rfloor\] Sea \(M\) la siguiente máquina:

A continuación veremos que \(M\) computa a \(f\). Supongamos que \((\vec{x},\vec{\alpha})\in(\omega^{n}\times\Sigma^{\ast m})-D_{f}\). Deberemos ver que \(M\) no termina partiendo de
adhocprefix(*)adhocsufix \(\left\lfloor q_{0}B\shortmid^{x_{1}}B...B\shortmid^{x_{n}}B\alpha_{1}B...B\alpha_{m}B\right\rfloor\)
Primero notemos que, ya que \(\mathcal{P}\) computa a \(f\), tenemos que \(\mathcal{P}\) no termina partiendo de \(\left\Vert x_{1},...,x_{n},\alpha_{1},...,\alpha_{m}\right\Vert\) por lo cual \(\mathcal{P}\) no termina partiendo de \[\left\Vert x_{1},...,x_{n},\overset{k-n}{\overbrace{0,...,0}},\alpha_{1},...,\alpha_{m},\overset{k-m}{\overbrace{\varepsilon,...,\varepsilon}}\right\Vert\] lo cual implica (Lema 4.57) que
adhocprefix(**)adhocsufix \(M_{sim}\) no termina partiendo de \(\left\lfloor q_{0}B\shortmid^{x_{1}}B...B\shortmid^{x_{n}}B^{k-n}B\alpha_{1}B...B\alpha_{m}B\right\rfloor\)
Ahora nótese que si hacemos funcionar a \(M\) desde la descripción instantánea dada en (*), llegaremos (vía la copia de \(M_{1}\) dentro de \(M\)) indefectiblemente (ya que \(M\) es deterministica) a la siguiente descripción instantánea \[\left\lfloor q_{2}B\shortmid^{x_{1}}B...B\shortmid^{x_{n}}B^{k-n}B\alpha_{1}B...B\alpha_{m}B\right\rfloor\] Luego entonces (**) nos dice que al seguir trabajando \(M\) (ahora vía la copia de \(M_{sim}\) dentro de \(M\)), la máquina \(M\) nunca terminara.
Para terminar de ver que \(M\) computa a \(f\), tomemos \((\vec{x},\vec{\alpha})\in D_{f}\) y veamos que \[\left\lfloor q_{0}B\shortmid^{x_{1}}B...B\shortmid^{x_{n}}B\alpha_{1}B...B\alpha_{m}B\right\rfloor \overset{\ast}{\underset{M}{\vdash}}\left\lfloor q_{5}Bf(\vec{x},\vec{\alpha})\right\rfloor\] y que la máquina \(M\) se detiene en \(\left\lfloor q_{5}Bf(\vec{x},\vec{\alpha})\right\rfloor\). La máquina \(M\) se detiene en \(\left\lfloor q_{5}Bf(\vec{x},\vec{\alpha})\right\rfloor\) ya que \(q_{5}\) es el estado final de una copia de \(M_{2}\) y por lo tanto no sale ninguna flecha desde el. Ya que \(\mathcal{P}\) computa a \(f\) y tiene la propiedad (2) del Lema 4.58, tenemos que \(\mathcal{P}\) termina partiendo de \(\left\Vert x_{1},...,x_{n},\alpha_{1},...,\alpha_{m}\right\Vert\) y llega al estado \(\left\Vert f(\vec{x},\vec{\alpha})\right\Vert\), o lo que es lo mismo, \(\mathcal{P}\) termina partiendo de \[\left\Vert x_{1},...,x_{n},\overset{k-n}{\overbrace{0,...,0}},\alpha_{1},...,\alpha_{m},\overset{k-m}{\overbrace{\varepsilon,...,\varepsilon}}\right\Vert\] y llega al estado \[\left\Vert \overset{k}{\overbrace{0,...,0}},f(\vec{x},\vec{\alpha}),\overset{k-1}{\overbrace{\varepsilon,...,\varepsilon}}\right\Vert\] Pero entonces el Lema 4.57 nos dice que
adhocprefix(***)adhocsufix \(\left\lfloor q_{0}B\shortmid^{x_{1}}B...B\shortmid^{x_{n}}B^{k-n}B\alpha_{1}B...B\alpha_{m}B\right\rfloor \overset{\ast}{\underset{M_{sim}}{\vdash}}\left\lfloor q_{f}B^{k+1}f(\vec{x},\vec{\alpha})\right\rfloor\)
Como ya lo vimos, si hacemos funcionar a \(M\) desde \(\left\lfloor q_{0}B\shortmid^{x_{1}}B...B\shortmid^{x_{n}}B\alpha_{1}B...B\alpha_{m}B\right\rfloor\), llegaremos (vía la copia de \(M_{1}\) dentro de \(M\)) indefectiblemente a la siguiente descripción instantánea \[\left\lfloor q_{2}B\shortmid^{x_{1}}B...B\shortmid^{x_{n}}B^{k-n}B\alpha_{1}B...B\alpha_{m}B\right\rfloor\] Luego (***) nos dice que, vía la copia de \(M_{sim}\) dentro de \(M\), llegaremos a \(\left\lfloor q_{3}B^{k+1}f(\vec{x},\vec{\alpha})\right\rfloor\) e inmediatamente a \(\left\lfloor q_{4}B^{k+1}f(\vec{x},\vec{\alpha})\right\rfloor\). Finalmente, vía la copia de \(M_{2}\) dentro de \(M\), llegaremos a \(\left\lfloor q_{5}Bf(\vec{x},\vec{\alpha})\right\rfloor\), lo cual termina de demostrar que \(M\) computa a \(f\)
En virtud de los teoremas ya probados tenemos el siguiente teorema que asegura que los tres paradigmas son equivalentes.
4.8. Sea \(\Sigma\) un alfabeto finito. Dada una función \(f\), las siguientes son equivalentes:
adhocprefix(1)adhocsufix \(f\) es \(\Sigma\)-Turing computable
adhocprefix(2)adhocsufix \(f\) es \(\Sigma\)-recursiva
adhocprefix(3)adhocsufix \(f\) es \(\Sigma\)-computable
Proof. (1)\(\Rightarrow\)(2) es probado en el Teorema 4.6. (2)\(\Rightarrow\)(3) es probado en el Teorema 4.3. (3)\(\Rightarrow\)(1) es probado en el Teorema 4.7.
También los tres paradigmas son equivalentes con respecto a los dos tipos de conjuntos estudiados, es decir:
4.9. Sea \(\Sigma\) un alfabeto finito y sea \(S\subseteq\omega^{n}\times\Sigma^{\ast m}\). Las siguientes son equivalentes:
adhocprefix(1)adhocsufix \(S\) es \(\Sigma\)-Turing enumerable
adhocprefix(2)adhocsufix \(S\) es \(\Sigma\)-recursivamente enumerable
adhocprefix(3)adhocsufix \(S\) es \(\Sigma\)-enumerable
Proof. Directo de las definiciones y el teorema anterior.
4.10. Sea \(\Sigma\) un alfabeto finito y sea \(S\subseteq\omega^{n}\times\Sigma^{\ast m}\). Las siguientes son equivalentes:
adhocprefix(1)adhocsufix \(S\) es \(\Sigma\)-Turing computable
adhocprefix(2)adhocsufix \(S\) es \(\Sigma\)-recursivo
adhocprefix(3)adhocsufix \(S\) es \(\Sigma\)-computable
Proof. Directo de las definiciones y el teorema anterior.
Otro modelo matemático de computabilidad efectiva es el llamado lambda calculus, introducido por Church, el cual también resulta equivalente a los estudiados por nosotros. El hecho de que tan distintos paradigmas computacionales hayan resultado equivalentes hace pensar que en realidad los mismos han tenido éxito en capturar la totalidad de las funciones \(\Sigma\)-efectivamente computables. Esta aseveración es conocida como la
Tesis de Church: Toda función \(\Sigma\)-efectivamente computable es \(\Sigma\)-recursiva.
Y por supuesto puede ser sintetizada diciendo que Godel vence a Leibniz (y por lo tanto los cuatro próceres empatan!). Si bien no se ha podido dar una prueba estrictamente matemática de la Tesis de Church, es un sentimiento común de los investigadores del área que la misma es verdadera.
En esta sección presentaremos varios de los resultados básicos de computabilidad, expresados en el paradigma recursivo, ya que es el mas habitual y cómodo. Varios de estos resultados ya han sido establecidos dentro del desarrollo de la computabilidad efectiva en el Capítulo Procedimientos Efectivos. A estos resultados los enunciaremos dentro del paradigma de Godel y daremos pruebas rigurosas matemáticas de ellos usando la teoría desarrollada hasta ahora. Sin embargo, veremos que hay otros resultados que son dependientes del desarrollo matemático hecho y aportan nueva información al paradigma filosófico (la indecidibilidad del halting problem, por ejemplo).
Como veremos muchas de las pruebas serán de naturaleza imperativa basadas en la equivalencia del paradigma de Godel con el imperativo de Neumann.
4.59. Supongamos \(f_{i}:D_{f_{i}}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow O\), \(i=1,...,k\), son funciones \(\Sigma\)-recursivas tales que \(D_{f_{i}}\cap D_{f_{j}}=\emptyset\) para \(i\neq j\). Entonces la función \(f_{1}\cup...\cup f_{k}\) es \(\Sigma\)-recursiva.
Proof. Probaremos el caso \(k=2\) y \(O=\Sigma^{\ast}\). Además supondremos que \(n=m=1\). Sean \(\mathcal{P}_{1}\) y \(\mathcal{P}_{2}\) programas que computen las funciones \(f_{1}\) y \(f_{2}\), respectivamente. Para \(i=1,2\), definamos \[H_{i}=\lambda tx_{1}\alpha_{1}\left[Halt^{1,1}(t,x_{1},\alpha_{1},\mathcal{P}_{i})\right]\] Notar que \(D_{H_{i}}=\omega^{2}\times\Sigma^{\ast}\) y que \(H_{i}\) es \(\Sigma\)-mixta. Además sabemos que la función \(Halt^{1,1}\) es \((\Sigma\cup\Sigma_{p})\)-p.r. por lo cual resulta fácilmente que \(H_{i}\) es \((\Sigma\cup\Sigma_{p})\)-p.r.. Por Independencia del Alfabeto tenemos que \(H_{i}\) es \(\Sigma\)-p.r. y por lo tanto el Segundo Manantial de Macros nos dice que en \(\mathcal{S}^{\Sigma}\) hay un macro: \[\left[\mathrm{IF}\;H_{i}(\mathrm{V}1,\mathrm{V}2,\mathrm{W}1)\;\mathrm{GOTO}\;\mathrm{A}1\right]\] Para hacer mas intuitivo el uso de este macro lo escribiremos de la siguiente manera \[\left[\mathrm{IF}\;Halt^{1,1}(\mathrm{V}1,\mathrm{V}2,\mathrm{W}1,\mathcal{P}_{i})\;\mathrm{GOTO}\;\mathrm{A}1\right]\] Ya que cada \(f_{i}\) es \(\Sigma\)-computable, el Primer Manantial de Macros nos dice que en \(\mathcal{S}^{\Sigma}\) hay macros \[\begin{aligned} & \left[\mathrm{W}2\leftarrow f_{1}(\mathrm{V}1,\mathrm{W}1)\right]\\ & \left[\mathrm{W}2\leftarrow f_{2}(\mathrm{V}1,\mathrm{W}1)\right] \end{aligned}\] Sea \(\mathcal{P}\) el siguiente programa: \[\begin{array}{l} \mathrm{L}1\ \mathrm{N}20\leftarrow\mathrm{N}20+1\\ \left[\mathrm{IF}\;Halt^{1,1}(\mathrm{N}20,\mathrm{N}1,\mathrm{P}1,\mathcal{P}_{1})\;\mathrm{GOTO}\;\mathrm{L}2\right]\\ \left[\mathrm{IF}\;Halt^{1,1}(\mathrm{N}20,\mathrm{N}1,\mathrm{P}1,\mathcal{P}_{2})\;\mathrm{GOTO}\;\mathrm{L}3\right]\\ \mathrm{GOTO}\;\mathrm{L}1\\ \mathrm{L}2\ \left[\mathrm{P}1\leftarrow f_{1}(\mathrm{N}1,\mathrm{P}1)\right]\\ \mathrm{GOTO}\;\mathrm{L}4\\ \mathrm{L}3\ \left[\mathrm{P}1\leftarrow f_{2}(\mathrm{N}1,\mathrm{P}1)\right]\\ \mathrm{L}4\ \mathrm{SKIP} \end{array}\] Nótese que \(\mathcal{P}\) computa la función \(f_{1}\cup f_{2}\) por lo cual ya que sabemos que Godel vence a Neumann, la función \(f_{1}\cup f_{2}\) es \(\Sigma\)-recursiva.
La prueba del lema anterior es de naturaleza imperativa ya que da explícitamente un programa (de todas maneras usa el paradigma recursivo o Godeliano para justificar la existencia de los macros). A continuación daremos una prueba la cual es mas recursiva (aunque aun usa el paradigma imperativo en la existencia de los programas \(\mathcal{P}_{i}\)).
Proof. Sean \(\mathcal{P}_{1}\) y \(\mathcal{P}_{2}\) programas que computen las funciones \(f_{1}\) y \(f_{2}\), respectivamente. Sean \[\begin{aligned} P_{1} & =\lambda t\vec{x}\vec{\alpha}\left[Halt^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}_{1})\right]\\ P_{2} & =\lambda t\vec{x}\vec{\alpha}\left[Halt^{n,m}(t,\vec{x},\vec{\alpha},\mathcal{P}_{2})\right] \end{aligned}\] Nótese que \(D_{P_{1}}=D_{P_{2}}=\omega\times\omega^{n}\times\Sigma^{\ast m}\) y que \(P_{1}\) y \(P_{2}\) son \((\Sigma\cup\Sigma_{p})\)-p.r.. Ya que son \(\Sigma\)-mixtos, el Teorema 4.2 nos dice que son \(\Sigma\)-p.r.. También nótese que \(D_{M((P_{1}\vee P_{2}))}=D_{f_{1}}\cup D_{f_{2}}\). Definamos \[\begin{aligned} g_{1} & =\lambda\vec{x}\vec{\alpha}\left[E_{\ast1}^{n,m}(M\left((P_{1}\vee P_{2})\right)(\vec{x},\vec{\alpha}),\vec{x},\vec{\alpha},\mathcal{P}_{1})^{P_{1}(M\left((P_{1}\vee P_{2})\right)(\vec{x},\vec{\alpha}),\vec{x},\vec{\alpha})}\right]\\ g_{2} & =\lambda\vec{x}\vec{\alpha}\left[E_{\ast1}^{n,m}(M\left((P_{1}\vee P_{2})\right)(\vec{x},\vec{\alpha}),\vec{x},\vec{\alpha},\mathcal{P}_{2})^{P_{2}(M\left((P_{1}\vee P_{2})\right)(\vec{x},\vec{\alpha}),\vec{x},\vec{\alpha})}\right] \end{aligned}\] Nótese que \(g_{1}\) y \(g_{2}\) son \(\Sigma\)-recursivas y que \(D_{g_{1}}=D_{g_{2}}=D_{f_{1}}\cup D_{f_{2}}\), Además nótese que \[g_{1}(\vec{x},\vec{\alpha})=\left\{ \begin{array}{lll} f_{1}(\vec{x},\vec{\alpha}) & & \text{si }(\vec{x},\vec{\alpha})\in D_{f_{1}}\\ \varepsilon & & \text{caso contrario} \end{array}\right.\] \[g_{2}(\vec{x},\vec{\alpha})=\left\{ \begin{array}{lll} f_{2}(\vec{x},\vec{\alpha}) & & \text{si }(\vec{x},\vec{\alpha})\in D_{f_{2}}\\ \varepsilon & & \text{caso contrario} \end{array}\right.\] O sea que \(f_{1}\cup f_{2}=\lambda\alpha\beta\left[\alpha\beta\right]\circ\left[g_{1},g_{2}\right]\) es \(\Sigma\)-recursiva.
A continuación probaremos los resultados básicos sobre conjuntos \(\Sigma\)-efectivamente computables y \(\Sigma\)-efectivamente enumerables, dados en el Capítulo Procedimientos Efectivos, pero enunciados dentro del paradigma de Godel.
4.60. Si \(P:S\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) y \(Q:S\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) son predicados \(\Sigma\)-r., entonces \((P\vee Q)\), \((P\wedge Q)\) y \(\lnot P\) lo son también.
Proof. Note que \[\begin{aligned} \lnot P & =\lambda xy\left[x\dot{-}y\right]\circ\left[C_{1}^{n,m},P\right]\\ (P\wedge Q) & =\lambda xy\left[x.y\right]\circ[P,Q]\\ (P\vee Q) & =\lnot(\lnot P\wedge\lnot Q). \end{aligned}\]
4.61. Supongamos \(S_{1},S_{2}\subseteq\omega^{n}\times\Sigma^{\ast m}\) son conjuntos \(\Sigma\)-recursivos. Entonces \(S_{1}\cup S_{2}\), \(S_{1}\cap S_{2}\) y \(S_{1}-S_{2}\) son \(\Sigma\)-recursivos
Proof. Es directa del lema anterior.
4.62. Supongamos \(S_{1},S_{2}\subseteq\omega^{n}\times\Sigma^{\ast m}\) son conjuntos \(\Sigma\)-r.e.. Entonces
adhocprefix(1)adhocsufix \(S_{1}\cup S_{2}\) es \(\Sigma\)-r.e..
adhocprefix(2)adhocsufix \(S_{1}\cap S_{2}\) es \(\Sigma\)-r.e..
Proof. Podemos suponer que ni \(S_{1}\) ni \(S_{2}\) son vacíos ya que de lo contrario (1) y (2) se cumplen trivialmente. Además supondremos que \(n=2\) y \(m=1\).
(1). La idea de la prueba es la misma que la que usamos para probar que la unión de conjuntos \(\Sigma\)-efectivamente enumerables es \(\Sigma\)-efectivamente enumerable. Daremos usando macros un programa que enumera a \(S_{1}\cup S_{2}\) y luego aplicaremos la Caracterización de \(\Sigma\)-enumerabilidad. Por hipótesis hay funciones \(F:\omega\rightarrow\omega\times\omega\times\Sigma^{\ast}\) y \(G:\omega\rightarrow\omega\times\omega\times\Sigma^{\ast}\) tales que \(F_{(1)}\), \(F_{(2)}\), \(F_{(3)}\), \(G_{(1)}\), \(G_{(2)}\) y \(G_{(3)}\) son \(\Sigma\)-recursivas, \(\mathrm{Im}(F)=S_{1}\) y \(\mathrm{Im}(G)=S_{2}\). Ya que estas funciones también son \(\Sigma\)-computables, hay macros \[\begin{aligned} & \left[\mathrm{V}2\leftarrow F_{(1)}(\mathrm{V}1)\right]\\ & \left[\mathrm{V}2\leftarrow F_{(2)}(\mathrm{V}1)\right]\\ & \left[\mathrm{W}1\leftarrow F_{(3)}(\mathrm{V}1)\right]\\ & \left[\mathrm{V}2\leftarrow G_{(1)}(\mathrm{V}1)\right]\\ & \left[\mathrm{V}2\leftarrow G_{(2)}(\mathrm{V}1)\right]\\ & \left[\mathrm{W}1\leftarrow G_{(3)}(\mathrm{V}1)\right] \end{aligned}\] Ya que el predicado \(Par=\lambda x[x\) es par\(]\) es \(\Sigma\)-p.r., tenemos que hay un macro: \[[\mathrm{IF\ }Par(\mathrm{V}1)\ \mathrm{GOTO\ A}1]\] el cual escribiremos de la siguiente manera mas intuitiva \[[\mathrm{IF\ V}1\text{ es par }\mathrm{GOTO\ A}1]\] Ya que la función \(D=\lambda x[\lfloor x/2\rfloor]\) es \(\Sigma\)-p.r., tenemos que hay un macro: \[[\mathrm{V}2\leftarrow D(\mathrm{V}1)]\] el cual escribiremos de la siguiente manera mas intuitiva \[[\mathrm{V}2\leftarrow\lfloor\mathrm{V}1/2\rfloor]\] Sea \(\mathcal{P}\) el siguiente programa: \[\begin{array}{ll} & [\mathrm{IF\ N}1\text{ es par }\mathrm{GOTO\ L}1\\ & \mathrm{N}1\leftarrow\mathrm{N}1\dot{-}1\\ & [\mathrm{N}1111\leftarrow\lfloor\mathrm{N}1/2\rfloor]\\ & \left[\mathrm{N}1\leftarrow G_{(1)}(\mathrm{N}1111)\right]\\ & \left[\mathrm{N}2\leftarrow G_{(2)}(\mathrm{N}1111)\right]\\ & \left[\mathrm{P}1\leftarrow G_{(3)}(\mathrm{N}1111)\right]\\ & \mathrm{GOTO\ L}2\\ \mathrm{L}1 & [\mathrm{N}1111\leftarrow\lfloor\mathrm{N}1/2\rfloor]\\ & \left[\mathrm{N}1\leftarrow F_{(1)}(\mathrm{N}1111)\right]\\ & \left[\mathrm{N}2\leftarrow F_{(2)}(\mathrm{N}1111)\right]\\ & \left[\mathrm{P}1\leftarrow F_{(3)}(\mathrm{N}1111)\right]\\ \mathrm{L}2 & \mathrm{SKIP} \end{array}\] Es fácil ver que \(\mathcal{P}\) cumple (a) y (b) de (3) de la Caracterización de \(\Sigma\)-enumerabilidad por lo cual \(S_{1}\cup S_{2}\) es \(\Sigma\)-enumerable. Esto nos dice que \(S_{1}\cup S_{2}\) es \(\Sigma\)-r.e. ya que como vimos Godel vence a Neumann.
(2). Es dejada al lector
Tal como veremos mas adelante hay conjuntos \(\Sigma\)-recursivamente enumerables los cuales no son \(\Sigma\)-recursivos. Sin embargo tenemos el siguiente interesante resultado.
4.11 (Caracterización de conjuntos \(\Sigma\)-r.). Sea \(S\subseteq\omega^{n}\times\Sigma^{\ast m}\). Son equivalentes
adhocprefix(a)adhocsufix \(S\) es \(\Sigma\)-recursivo
adhocprefix(b)adhocsufix \(S\) y \((\omega^{n}\times\Sigma^{\ast m})-S\) son \(\Sigma\)-recursivamente enumerables
Proof. (a)\(\Rightarrow\)(b). Si \(S=\emptyset\), por definición \(S\) es \(\Sigma\)-recursivamente enumerable. Supongamos entonces \(S\neq\emptyset\). Haremos el caso en el que \(n=m=1\) y \((0,\varepsilon)\in S\). Sea \(\leq\) un orden total sobre \(\Sigma\). Por hipótesis tenemos que \(\chi_{S}^{\omega\times\Sigma^{\ast}}\) es \(\Sigma\)-recursiva por lo cual hay un macro \[[\mathrm{IF\ }\chi_{S}^{\omega\times\Sigma^{\ast}}(\mathrm{V}1,\mathrm{W}1)\ \mathrm{GOTO\ A}1]\] Ya que la función \(f=\lambda x[(x)_{1}]\) es \(\Sigma\)-p.r. hay un macro \[[\mathrm{V}2\leftarrow f(\mathrm{V}1)]\] el cual escribiremos de la siguiente manera: \[[\mathrm{V}2\leftarrow(\mathrm{V}1)_{1}]\] Ya que la función \(g=\lambda x[\ast^{\leq}((x)_{2})]\) es \(\Sigma\)-p.r. hay un macro \[[\mathrm{W}1\leftarrow g(\mathrm{V}1)]\] el cual escribiremos de la siguiente manera: \[[\mathrm{W}1\leftarrow\ast^{\leq}((\mathrm{V}1)_{2})]\] (Dejamos al lector entender bien el funcionamiento de estos macros.) Sea \(\mathcal{P}\) el siguiente programa: \[\begin{array}{l} \mathrm{N}1\leftarrow\mathrm{N}1+1\\{} [\mathrm{N}2\leftarrow(\mathrm{N}1)_{1}]\\{} [\mathrm{P}2\leftarrow\ast^{\leq}(\mathrm{N}1)_{2}]\\{} [\mathrm{IF\ }\chi_{S}^{\omega\times\Sigma^{\ast}}(\mathrm{N}2,\mathrm{P}2)\ \mathrm{GOTO\ L}1\\ \mathrm{N}1\leftarrow0\\ \mathrm{P}1\leftarrow\varepsilon\\ \mathrm{GOTO\ L}2\\ \mathrm{L}1\ [\mathrm{N}1\leftarrow\mathrm{N}2]\\ \left[\mathrm{P}1\leftarrow\mathrm{P}2)\right]\\ \mathrm{L}2\ \mathrm{SKIP} \end{array}\] Nótese que \(\mathrm{Dom}(\left[\Psi_{\mathcal{P}}^{1,0,\#},\Psi_{\mathcal{P}}^{1,0,\ast}\right])=\omega\) y que \(\mathrm{Im}(\left[\Psi_{\mathcal{P}}^{1,0,\#},\Psi_{\mathcal{P}}^{1,0,\ast}\right])=S\) por lo cual \(S\) es \(\Sigma\)-enumerable lo que nos dice que \(S\) es \(\Sigma\)-recursivamente enumerable.
(b)\(\Rightarrow\)(a). Haremos el caso en que los conjuntos \(S\) y \((\omega^{n}\times\Sigma^{\ast m})-S\) son no vacíos. También supondremos \(n=m=1\). Por hipótesis hay funciones \(F:\omega\rightarrow\omega\times\Sigma^{\ast}\) y \(G:\omega\rightarrow\omega\times\Sigma^{\ast}\) tales que \(F_{(1)}\), \(F_{(2)}\), \(G_{(1)}\) y \(G_{(2)}\) son \(\Sigma\)-recursivas, \(\mathrm{Im}(F)=S\) y \(\mathrm{Im}(G)=(\omega\times\Sigma^{\ast})-S\). Hay macros \[\begin{aligned} & \left[\mathrm{V}2\leftarrow F_{(1)}(\mathrm{V}1)\right]\\ & \left[\mathrm{W}1\leftarrow F_{(2)}(\mathrm{V}1)\right]\\ & \left[\mathrm{V}1\leftarrow G_{(1)}(\mathrm{V}1)\right]\\ & \left[\mathrm{W}1\leftarrow G_{(2)}(\mathrm{V}1)\right] \end{aligned}\] Ya que los predicados \(D=\lambda xy[x\neq y]\) y \(D^{\prime}=\lambda\alpha\beta[\alpha\neq\beta]\) son \(\Sigma\)-p.r. hay macros \[\begin{aligned} & \left[\mathrm{IF}\;D(\mathrm{V}1,\mathrm{V}2)\;\mathrm{GOTO}\;\mathrm{A}1\right]\\ & \left[\mathrm{IF}\;D^{\prime}(\mathrm{W}1,\mathrm{W}2)\;\mathrm{GOTO}\;\mathrm{A}1\right] \end{aligned}\] los cuales para hacer mas amigable la lectura los escribiremos de la siguiente manera \[\begin{aligned} & \left[\mathrm{IF}\;\mathrm{V}1\neq\mathrm{V}2\;\mathrm{GOTO}\;\mathrm{A}1\right]\\ & \left[\mathrm{IF}\;\mathrm{W}1\neq\mathrm{W}2\;\mathrm{GOTO}\;\mathrm{A}1\right] \end{aligned}\] También usaremos el macro \[[\mathrm{V}1\leftarrow C_{1}^{0,0}(\lozenge)]\] (asociado a la función \(\Sigma\)-p.r. \(C_{1}^{0,0}\)), el cual escribiremos de la siguiente manera \[[\mathrm{V}1\leftarrow1]\] Sea \(\mathcal{P}\) el siguiente programa: \[\begin{array}{l} \mathrm{L}1\ [\mathrm{N}2\leftarrow F_{(1)}(\mathrm{N}20)]\\{} [\mathrm{P}2\leftarrow F_{(2)}(\mathrm{N}20)]\\ \left[\mathrm{IF}\;\mathrm{N}2\neq\mathrm{N}1\;\mathrm{GOTO}\;\mathrm{L}2\right]\\ \left[\mathrm{IF}\;\mathrm{P}2\neq\mathrm{P}1\;\mathrm{GOTO}\;\mathrm{L}2\right]\\{} [\mathrm{N}1\leftarrow1]\\ \mathrm{GOTO}\;\mathrm{L}3\\ \mathrm{L}2\ [\mathrm{N}2\leftarrow G_{(1)}(\mathrm{N}20)]\\{} [\mathrm{P}2\leftarrow G_{(2)}(\mathrm{N}20)]\\ \left[\mathrm{IF}\;\mathrm{N}2\neq\mathrm{N}1\;\mathrm{GOTO}\;\mathrm{L}4\right]\\ \left[\mathrm{IF}\;\mathrm{P}2\neq\mathrm{P}1\;\mathrm{GOTO}\;\mathrm{L}4\right]\\ \mathrm{N}1\leftarrow0\\ \mathrm{GOTO}\;\mathrm{L}3\\ \mathrm{L}4\ \mathrm{N}20\leftarrow\mathrm{N}20+1\\ \mathrm{GOTO}\;\mathrm{L}1\\ \mathrm{L}3\ \mathrm{SKIP} \end{array}\] Nótese que \(\mathcal{P}\) computa a la función \(\chi_{S}^{\omega\times\Sigma^{\ast}}\) por lo cual \(\chi_{S}^{\omega\times\Sigma^{\ast}}\) es \(\Sigma\)-computable lo que nos dice que es \(\Sigma\)-recursiva. Esto por definición nos dice que \(S\) es \(\Sigma\)-recursivo
4.63. Supongamos \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow O\) es \(\Sigma\)-recursiva y \(S\subseteq D_{f}\) es \(\Sigma\)-r.e., entonces \(f|_{S}\) es \(\Sigma\)-recursiva.
Proof. Si \(S=\emptyset\), entonces \(f|_{S}=\emptyset\) y por lo tanto \(f|_{S}\) es \(\Sigma\)-recursiva. Supongamos \(S\neq\emptyset\). Haremos el caso \(n=m=1\) y \(O=\Sigma^{\ast}\). Tenemos que hay una \(F:\omega\rightarrow\omega\times\Sigma^{\ast}\) tal que \(\mathrm{Im}F=S\) y \(F_{(1)}\), \(F_{(2)}\) son \(\Sigma\)-recursivas. Ya que \(f\), \(F_{(1)}\) y \(F_{(2)}\) son \(\Sigma\)-recursivas, hay macros \[\begin{aligned} & \left[\mathrm{W}2\leftarrow f(\mathrm{V}1,\mathrm{W}1)\right]\\ & \left[\mathrm{V}2\leftarrow F_{(1)}(\mathrm{V}1)\right]\\ & \left[\mathrm{W}1\leftarrow F_{(2)}(\mathrm{V}1)\right] \end{aligned}\] Usaremos los macros \[\begin{aligned} & \left[\mathrm{IF}\;\mathrm{V}1\neq\mathrm{V}2\;\mathrm{GOTO}\;\mathrm{A}1\right]\\ & \left[\mathrm{IF}\;\mathrm{W}1\neq\mathrm{W}2\;\mathrm{GOTO}\;\mathrm{A}1\right] \end{aligned}\] Sea \(\mathcal{P}\) el siguiente programa \[\begin{array}{ll} \mathrm{L}2 & [\mathrm{N}2\leftarrow F_{(1)}(\mathrm{N}20)]\\ & [\mathrm{P}2\leftarrow F_{(2)}(\mathrm{N}20)]\\ & \left[\mathrm{IF}\;\mathrm{N}1\neq\mathrm{N}2\;\mathrm{GOTO}\;\mathrm{L}1\right]\\ & \left[\mathrm{IF}\;\mathrm{P}1\neq\mathrm{P}2\;\mathrm{GOTO}\;\mathrm{L}1\right]\\ & \left[\mathrm{P}1\leftarrow f(\mathrm{N}1,\mathrm{P}1)\right]\\ & \mathrm{GOTO}\;\mathrm{L}3\\ \mathrm{L}1 & \mathrm{N}20\leftarrow\mathrm{N}20+1\\ & \mathrm{GOTO}\;\mathrm{L}2\\ \mathrm{L}3 & \mathrm{SKIP} \end{array}\] Es fácil ver que \(\mathcal{P}\) computa a \(f|_{S}\)
Ahora probaremos el análogo recursivo del Teorema 3.2.
4.12 (Caracterización de conjuntos \(\Sigma\)-r. e.). Dado \(S\subseteq\omega^{n}\times\Sigma^{\ast m}\), son equivalentes
adhocprefix(1)adhocsufix \(S\) es \(\Sigma\)-recursivamente enumerable
adhocprefix(2)adhocsufix \(S=I_{F}\), para alguna \(F:D_{F}\subseteq\omega^{k}\times\Sigma^{\ast l}\rightarrow\omega^{n}\times\Sigma^{\ast m}\) tal que cada \(F_{(i)}\) es \(\Sigma\)-recursiva.
adhocprefix(3)adhocsufix \(S=D_{f}\), para alguna función \(\Sigma\)-recursiva \(f\)
adhocprefix(4)adhocsufix \(S=\emptyset\) o \(S=I_{F}\), para alguna \(F:\omega\rightarrow\omega^{n}\times\Sigma^{\ast m}\) tal que cada \(F_{(i)}\) es \(\Sigma\)-p.r.
Proof. El caso \(n=m=0\) es fácil y es dejado al lector. Supongamos entonces que \(n+m\geq1\).
(2)\(\Rightarrow\)(3). Haremos el caso \(k=l=1\) y \(n=m=2\). El caso general es completamente análogo. Nótese que entonces tenemos que \(S\subseteq\omega^{2}\times\Sigma^{\ast2}\) y \(F:D_{F}\subseteq\omega\times\Sigma^{\ast}\rightarrow\omega^{2}\times\Sigma^{\ast2}\) es tal que \(\mathrm{Im}F=S\) y \(F_{(1)}\), \(F_{(2)}\), \(F_{(3)}\), \(F_{(4)}\) son \(\Sigma\)-recursivas. Para cada \(i\in\{1,2,3,4\}\), sea \(\mathcal{P}_{i}\) un programa el cual computa a \(F_{(i)}\). Sea \(\leq\) un orden total sobre \(\Sigma\). Definamos \[H_{i}=\lambda tx_{1}\alpha_{1}\left[\lnot Halt^{1,1}(t,x_{1},\alpha_{1},\mathcal{P}_{i})\right]\] Notar que \(D_{H_{i}}=\omega^{2}\times\Sigma^{\ast}\) y que \(H_{i}\) es \(\Sigma\)-mixta. Además sabemos que la función \(Halt^{1,1}\) es \((\Sigma\cup\Sigma_{p})\)-p.r. por lo cual resulta fácilmente que \(H_{i}\) es \((\Sigma\cup\Sigma_{p})\)-p.r.. Por Independencia del Alfabeto tenemos que \(H_{i}\) es \(\Sigma\)-p.r., por lo cual el Segundo Manantial de Macros nos dice que hay un macro: \[\left[\mathrm{IF}\;H_{i}(\mathrm{V}2,\mathrm{V}1,\mathrm{W}1)\;\mathrm{GOTO}\;\mathrm{A}1\right]\] Para hacer mas intuitivo el uso de este macro lo escribiremos de la siguiente manera \[\left[\mathrm{IF}\;\lnot Halt^{1,1}(\mathrm{V}2,\mathrm{V}1,\mathrm{W}1,\mathcal{P}_{i})\;\mathrm{GOTO}\;\mathrm{A}1\right]\] Para \(i=1,2\), definamos \[E_{i}=\lambda xtx_{1}\alpha_{1}\left[x\neq E_{\#1}^{1,1}(t,x_{1},\alpha_{1},\mathcal{P}_{i})\right]\] Para \(i=3,4\), definamos \[E_{i}=\lambda tx_{1}\alpha_{1}\alpha\left[\alpha\neq E_{\ast1}^{1,1}(t,x_{1},\alpha_{1},\mathcal{P}_{i})\right]\] Dejamos al lector probar que las funciones \(E_{i}\) son \(\Sigma\)-p.r.. O sea que para cada \(i\in\{1,2\}\) hay un macro \[\left[\mathrm{IF}\;E_{i}(\mathrm{V}2,\mathrm{V}3,\mathrm{V}1,\mathrm{W}1)\;\mathrm{GOTO}\;\mathrm{A}1\right]\] y para cada \(i\in\{3,4\}\) hay un macro \[\left[\mathrm{IF}\;E_{i}(\mathrm{V}2,\mathrm{V}1,\mathrm{W}1,\mathrm{W}2)\;\mathrm{GOTO}\;\mathrm{A}1\right]\] Haremos mas intuitiva la forma de escribir estos macros, por ejemplo para \(i=1\), lo escribiremos de la siguiente manera \[\left[\mathrm{IF}\;\mathrm{V}2\neq E_{\#1}^{1,1}(\mathrm{V}3,\mathrm{V}1,\mathrm{W}1,\mathcal{P}_{1})\;\mathrm{GOTO}\;\mathrm{A}1\right]\] Ya que la función \(f=\lambda x[(x)_{1}]\) es \(\Sigma\)-p.r., hay un macro \[[\mathrm{V}2\leftarrow f(\mathrm{V}1)]\] el cual escribiremos de la siguiente manera: \[[\mathrm{V}2\leftarrow(\mathrm{V}1)_{1}]\] Similarmente hay macros: \[[\mathrm{W}1\leftarrow\ast^{\leq}(\mathrm{V}1)_{3}]\] \[[\mathrm{V}2\leftarrow(\mathrm{V}1)_{2}]\] (dejamos al lector entender bien el funcionamiento de estos macros). Sea \(\mathcal{P}\) el siguiente programa de \(\mathcal{S}^{\Sigma}\): \[\begin{array}{l} \mathrm{L}1\ \mathrm{N}20\leftarrow\mathrm{N}20+1\\{} [\mathrm{N}10\leftarrow(\mathrm{N}20)_{1}]\\{} [\mathrm{N}3\leftarrow(\mathrm{N}20)_{2}]\\{} [\mathrm{P}3\leftarrow\ast^{\leq}(\mathrm{N}20)_{3}]\\ \left[\mathrm{IF}\;\lnot Halt^{1,1}(\mathrm{N}10,\mathrm{N}3,\mathrm{P}3,\mathcal{P}_{1})\;\mathrm{GOTO}\;\mathrm{L}1\right]\\ \left[\mathrm{IF}\;\lnot Halt^{1,1}(\mathrm{N}10,\mathrm{N}3,\mathrm{P}3,\mathcal{P}_{2})\;\mathrm{GOTO}\;\mathrm{L}1\right]\\ \left[\mathrm{IF}\;\lnot Halt^{1,1}(\mathrm{N}10,\mathrm{N}3,\mathrm{P}3,\mathcal{P}_{3})\;\mathrm{GOTO}\;\mathrm{L}1\right]\\ \left[\mathrm{IF}\;\lnot Halt^{1,1}(\mathrm{N}10,\mathrm{N}3,\mathrm{P}3,\mathcal{P}_{4})\;\mathrm{GOTO}\;\mathrm{L}1\right]\\ \left[\mathrm{IF}\;\mathrm{N}1\neq E_{\#1}^{1,1}(\mathrm{N}10,\mathrm{N}3,\mathrm{P}3,\mathcal{P}_{1})\;\mathrm{GOTO}\;\mathrm{L}1\right]\\ \left[\mathrm{IF}\;\mathrm{N}2\neq E_{\#1}^{1,1}(\mathrm{N}10,\mathrm{N}3,\mathrm{P}3,\mathcal{P}_{2})\;\mathrm{GOTO}\;\mathrm{L}1\right]\\ \left[\mathrm{IF}\;\mathrm{P}1\neq E_{\ast1}^{1,1}(\mathrm{N}10,\mathrm{N}3,\mathrm{P}3,\mathcal{P}_{3})\;\mathrm{GOTO}\;\mathrm{L}1\right]\\ \left[\mathrm{IF}\;\mathrm{P}2\neq E_{\ast1}^{1,1}(\mathrm{N}10,\mathrm{N}3,\mathrm{P}3,\mathcal{P}_{4})\;\mathrm{GOTO}\;\mathrm{L}1\right] \end{array}\] Dejamos al lector la tarea de comprender el funcionamiento de este programa y convencerse de que computa la función \(p_{1}^{2,2}|_{S}\). Pero entonces \(p_{1}^{2,2}|_{S}\) es \(\Sigma\)-computable por lo cual es \(\Sigma\)-recursiva, lo cual prueba (3) ya que \(\mathrm{Dom}(p_{1}^{2,2}|_{S})=S\).
(3)\(\Rightarrow\)(4). Supongamos \(S\neq\emptyset\). Sea \((z_{1},...,z_{n},\gamma_{1},...,\gamma_{m})\in S\) fijo. Sea \(\mathcal{P}\) un programa el cual compute a \(f\) y Sea \(\leq\) un orden total sobre \(\Sigma\). Sea \(P:\mathbf{N}\rightarrow\omega\) dado por \(P(x)=1\) sii \[Halt^{n,m}\left((x)_{n+m+1},(x)_{1},...,(x)_{n},\ast^{\leq}((x)_{n+1}),...,\ast^{\leq}((x)_{n+m})),\mathcal{P}\right)=1\] Es fácil ver que \(P\) es \((\Sigma\cup\Sigma_{p})\)-p.r. por lo cual es \(\Sigma\)-p.r.. Sea \(\bar{P}=P\cup C_{0}^{1,0}|_{\{0\}}\). Para \(i=1,...,n\), definamos \(F_{i}:\omega\rightarrow\omega\) de la siguiente manera \[F_{i}(x)=\left\{ \begin{array}{ccc} (x)_{i} & \text{si} & \bar{P}(x)=1\\ z_{i} & \text{si} & \bar{P}(x)\neq1 \end{array}\right.\] Para \(i=n+1,...,n+m\), definamos \(F_{i}:\omega\rightarrow\Sigma^{\ast}\) de la siguiente manera \[F_{i}(x)=\left\{ \begin{array}{lll} \ast^{\leq}((x)_{i}) & \text{si} & \bar{P}(x)=1\\ \gamma_{i-n} & \text{si} & \bar{P}(x)\neq1 \end{array}\right.\] Por el Lema de División por Casos, cada \(F_{i}\) es \(\Sigma\)-p.r.. Es fácil ver que \(F=[F_{1},...,F_{n+m}]\) cumple (4).
La prueba de (2)\(\Rightarrow\)(3) del teorema anterior es de naturaleza imperativa ya que da explícitamente un programa (de todas maneras usa el paradigma recursivo o Godeliano para justificar la existencia de los macros). A continuación daremos una prueba de (2)\(\Rightarrow\)(3) la cual es mas recursiva (aunque aun usa el paradigma imperativo en la existencia de los programas \(\mathcal{P}_{i}\)).
Proof. (De (2)\(\Rightarrow\)(3)). Para \(i=1,...,n+m\), sea \(\mathcal{P}_{i}\) un programa el cual computa a \(F_{(i)}\) y Sea \(\leq\) un orden total sobre \(\Sigma\). Sea \(P:\mathbf{N}\times\omega^{n}\times\Sigma^{\ast m}\rightarrow\omega\) dado por \(P(t,\vec{x},\vec{\alpha})=1\) sii se cumplen las siguientes condiciones \[\begin{aligned} Halt^{k,l}(\left((t)_{k+l+1},(t)_{1},...,(t)_{k},\ast^{\leq}((t)_{k+1}),...,\ast^{\leq}((t)_{k+l})),\mathcal{P}_{1}\right) & =1\\ & \vdots\\ Halt^{k,l}\left((t)_{k+l+1},(t)_{1}...(t)_{k},\ast^{\leq}((t)_{k+1})...\ast^{\leq}((t)_{k+l})),\mathcal{P}_{n+m}\right) & =1\\ E_{\#1}^{k,l}((t)_{k+l+1},(t)_{1},...,(t)_{k},\ast^{\leq}((t)_{k+1}),...,\ast^{\leq}((t)_{k+l})),\mathcal{P}_{1}) & =x_{1}\\ & \vdots\\ E_{\#1}^{k,l}((t)_{k+l+1},(t)_{1},...,(t)_{k},\ast^{\leq}((t)_{k+1}),...,\ast^{\leq}((t)_{k+l})),\mathcal{P}_{n}) & =x_{n}\\ E_{\ast1}^{k,l}((t)_{k+l+1},(t)_{1},...,(t)_{k},\ast^{\leq}((t)_{k+1}),...,\ast^{\leq}((t)_{k+l})),\mathcal{P}_{n+1}) & =\alpha_{1}\\ & \vdots\\ E_{\ast1}^{k,l}((t)_{k+l+1},(t)_{1},...,(t)_{k},\ast^{\leq}((t)_{k+1}),...,\ast^{\leq}((t)_{k+l})),\mathcal{P}_{n+m}) & =\alpha_{m} \end{aligned}\] Note que \(P\) es \((\Sigma\cup\Sigma_{p})\)-p.r. y por lo tanto \(P\) es \(\Sigma\)-p.r.. Pero entonces \(M(P)\) es \(\Sigma\)-r. lo cual nos dice que se cumple (3) ya que \(D_{M(P)}=I_{F}=S\).
4.6. Supongamos \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow O\) es \(\Sigma\)-recursiva y \(S\subseteq I_{f}\) es \(\Sigma\)-r.e., entonces \(f^{-1}(S)=\{(\vec{x},\vec{\alpha}):f(\vec{x},\vec{\alpha})\in S\}\) es \(\Sigma\)-r.e..
Proof. Por el teorema anterior \(S=D_{g}\), para alguna función \(\Sigma\)-recursiva \(g\). Note que \(f^{-1}(S)=D_{g\circ f}\), lo cual nuevamente por el teorema anterior nos dice que \(f^{-1}(S)\) es \(\Sigma\)-r.e..
Dejamos como ejercicio dar una prueba imperativa del corolario anterior. Los Lemas 4.63 y 4.62 pueden obtenerse fácilmente como corolarios del teorema anterior. Se gana en elegancia y simplicidad pero cabe destacar que se pierde en intuición.
4.7. Supongamos \(f:D_{f}\subseteq\omega^{n}\times\Sigma^{\ast m}\rightarrow O\) es \(\Sigma\)-recursiva y \(S\subseteq D_{f}\) es \(\Sigma\)-r.e., entonces \(f|_{S}\) es \(\Sigma\)-recursiva.
Proof. Supongamos \(O=\Sigma^{\ast}\). Por el teorema anterior \(S=D_{g}\), para alguna función \(\Sigma\)-recursiva \(g\). Nótese que componiendo adecuadamente podemos suponer que \(I_{g}=\{\varepsilon\}.\) O sea que tenemos \(f|_{S}=\lambda\alpha\beta\left[\alpha\beta\right]\circ[f,g]\).
4.8. Supongamos \(S_{1},S_{2}\subseteq\omega^{n}\times\Sigma^{\ast m}\) son conjuntos \(\Sigma\)-r.e.. Entonces \(S_{1}\cap S_{2}\) es \(\Sigma\)-r.e..
Proof. Por el teorema anterior \(S_{i}=D_{g_{i}}\), con \(g_{1},g_{2}\) funciones \(\Sigma\)-recursivas\(.\) Nótese que podemos suponer que \(I_{g_{1}},I_{g_{2}}\subseteq\omega\) por lo que \(S_{1}\cap S_{2}=D_{\lambda xy\left[xy\right]\circ[g_{1},g_{2}]}\) es \(\Sigma\)-r.e.\(.\)
4.9. Supongamos \(S_{1},S_{2}\subseteq\omega^{n}\times\Sigma^{\ast m}\) son conjuntos \(\Sigma\)-r.e.. Entonces \(S_{1}\cup S_{2}\) es \(\Sigma\)-r.e.
Proof. Supongamos \(S_{1}\neq\emptyset\neq S_{2}.\) Sean \(F,G:\omega\rightarrow\omega^{n}\times\Sigma^{\ast m}\) tales que \(I_{F}=S_{1}\), \(I_{G}=S_{2}\) y las funciones \(F_{(i)}\) y \(G_{(i)}\) son \(\Sigma\)-recursivas. Sean \(f=\lambda x\left[Q(x,2)\right]\) y \(g=\lambda x\left[Q(x\dot{-}1,2)\right].\) Sea \(H:\omega\rightarrow\omega^{n}\times\Sigma^{\ast m}\) dada por \[H_{(i)}=(F_{(i)}\circ f)\mathrm{|}_{\{x:x\mathrm{\ es\ par}\}}\cup(G_{(i)}\circ g)\mathrm{|}_{\{x:x\mathrm{\ es\ impar}\}}\] Por el Lema 4.63 y el Lema 4.59, cada \(H_{i}\) es \(\Sigma\)-recursiva. Ya que \(I_{H}=S_{1}\cup S_{2}\), tenemos que \(S_{1}\cup S_{2}\) es \(\Sigma\)-r.e.
A continuación dejamos un sketch de una prueba alternativa del Teorema 4.11. Dejamos al lector completar los detalles. Proof. (a)\(\Rightarrow\)(b)\(.\) Note que \(S=D_{Pred\circ\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}}.\)
(b)\(\Rightarrow\)(a). Note que \(\chi_{S}^{\omega^{n}\times\Sigma^{\ast m}}=C_{1}^{n,m}\)\(|\)\(_{S}\cup C_{0}^{n,m}\)\(|\)\(_{(\omega^{n}\times\Sigma^{\ast m})-S}\).
Los dos siguientes teoremas, nos agregan una equivalencia mas al Teorema 4.12, para el caso \(n=0\), \(m=1\).
4.13. Si \(L\subseteq\Sigma^{\ast}\) es \(\Sigma\)-r.e., entonces \(L=L(M)=H(M)\) para alguna máquina de Turing \(M\).
Proof. La prueba es similar a la del Teorema 4.7 asique solo daremos un skech de la misma. Por el Teorema 4.12 \(L=D_{f}\) para alguna función \(f\) la cual es \(\Sigma\)-recursiva. Nótese que podemos suponer que \(\mathrm{Im}f\subseteq\Sigma^{\ast}\). Ya que \(f\) es \(\Sigma\)-recursiva, también es \(\Sigma\)-computable. Por el Lema 4.58 existe \(\mathcal{P}\in\mathrm{Pro}^{\Sigma}\) el cual computa \(f\) y tiene las propiedades (1) y (2). Sea \(k=N(\mathcal{P})\) y sea \(M_{sim}\) la máquina de Turing con unit que simula a \(\mathcal{P}\) respecto de \(k\). Sea \(M_{1}\) una máquina de Turing con un solo estado final \(q_{f}\) (del cual no salen flechas) y tal que para todo \(\alpha\in\Sigma^{\ast}\), \[\left\lfloor q_{0}B\alpha\right\rfloor \overset{\ast}{\vdash}\left\lfloor q_{f}B^{k+1}\alpha\right\rfloor\] Note que la concatenación de \(M_{1}\) con \(M\) produce una máquina de Turing \(M_{2}\) tal que \(H(M_{2})=L(M_{2})=L\). Dejamos al lector los detalles de la construcción de \(M_{2}.\)
4.14. Sea \(M=\left(Q,\Sigma,\Gamma,\delta,q_{0},B,F\right)\) una máquina de Turing. Entonces \(L(M)\) y \(H(M)\) son \(\Sigma\)-recursivamente enumerables.
Proof. Veamos que \(L(M)\) es \(\Sigma\)-recursivamente enumerable. Sea \(P\) el siguiente predicado \((\Gamma\cup Q)\)-mixto \[\lambda n\alpha\left[(\exists d\in Des)\;\left\lfloor q_{0}B\alpha\right\rfloor \underset{M}{\overset{n}{\vdash}}d\wedge St(d)\in F\right]\] Nótese que \(D_{P}=\omega\times\Gamma^{\ast}\). Dejamos al lector probar que \(P\) es \((\Gamma\cup Q)\)-p.r.. Sea \(P^{\prime}=P|_{\omega\times\Sigma^{\ast}}\). Nótese que \(P^{\prime}(n,\alpha)=1\) sii \(\alpha\in L(M)\) atestiguado por una computación de longitud \(n\). Ya que \(P^{\prime}\) es \((\Gamma\cup Q)\)-p.r. (por que?) y además es \(\Sigma\)-mixto, el Teorema 4.2 nos dice que \(P^{\prime}\) es \(\Sigma\)-p.r.. Ya que \(L(M)=D_{M(P^{\prime})}\), el Teorema 4.12 nos dice que \(L(M)\) es \(\Sigma\)-r.e..
Dejamos al lector la prueba parecida de que \(H(M)\) es \(\Sigma\)-recursivamente enumerable.
Cuando \(\Sigma\supseteq\Sigma_{p}\), podemos definir \[AutoHalt^{\Sigma}=\lambda\mathcal{P}\left[(\exists t\in\omega)\;Halt^{0,1}(t,\mathcal{P},\mathcal{P})\right]\text{.}\] Notar que el dominio de \(AutoHalt^{\Sigma}\) es \(\mathrm{Pro}^{\Sigma}\) y que para cada \(\mathcal{P}\in\mathrm{Pro}^{\Sigma}\) tenemos que
adhocprefix(*)adhocsufix \(AutoHalt^{\Sigma}(\mathcal{P})=1\) sii \(\mathcal{P}\) se detiene partiendo del estado \(\left\Vert \mathcal{P}\right\Vert\).
4.64. Supongamos \(\Sigma\supseteq\Sigma_{p}\). Entonces \(AutoHalt^{\Sigma}\) no es \(\Sigma\)-recursivo.
Proof. Supongamos \(AutoHalt^{\Sigma}\) es \(\Sigma\)-recursivo. Por el Segundo Manantial de Macros tenemos que hay un macro \[\left[\mathrm{IF}\;AutoHalt^{\Sigma}(\mathrm{W}1)\;\mathrm{GOTO}\;\mathrm{A}1\right]\] Sea \(\mathcal{P}_{0}\) el siguiente programa de \(\mathcal{S}^{\Sigma}\) \[\mathrm{L}1\;\left[\mathrm{IF}\;AutoHalt^{\Sigma}(\mathrm{P}1)\;\mathrm{GOTO}\;\mathrm{L}1\right]\] Note que
adhocprefix-adhocsufix \(\mathcal{P}_{0}\) termina partiendo desde \(\left\Vert \mathcal{P}_{0}\right\Vert\) sii \(AutoHalt^{\Sigma}(\mathcal{P}_{0})=0\),
lo cual produce una contradicción si tomamos en (*) \(\mathcal{P}=\mathcal{P}_{0}\).
Usando el lema anterior y la Tesis de Church podemos probar el siguiente impactante resultado.
4.15. Supongamos \(\Sigma\supseteq\Sigma_{p}\). Entonces \(AutoHalt^{\Sigma}\) no es \(\Sigma\)-efectivamente computable. Es decir no hay ningún procedimiento efectivo que decida si un programa de \(\mathcal{S}^{\Sigma}\) termina partiendo de si mismo.
Proof. Si \(AutoHalt^{\Sigma}\) fuera \(\Sigma\)-efectivamente computable, la Tesis de Church nos diría que es \(\Sigma\)-recursivo, contradiciendo el lema anterior.
Nótese que \(AutoHalt^{\Sigma}\) provee de un ejemplo natural en el cual la cuantificación (no acotada) de un predicado \(\Sigma\)-p.r. con dominio rectangular no es \(\Sigma\)-efectivamente computable
Ahora estamos en condiciones de dar un ejemplo natural de un conjunto \(A\) que es \(\Sigma\)-recursivamente enumerable pero el cual no es \(\Sigma\)-recursivo.
4.65. Supongamos que \(\Sigma\supseteq\Sigma_{p}.\) Entonces \[A=\left\{ \mathcal{P}\in\mathrm{Pro}^{\Sigma}:AutoHalt^{\Sigma}(\mathcal{P})=1\right\}\] es \(\Sigma\)-r.e. y no es \(\Sigma\)-recursivo. Mas aun el conjunto \[N=\left\{ \mathcal{P}\in\mathrm{Pro}^{\Sigma}:AutoHalt^{\Sigma}(\mathcal{P})=0\right\}\] no es \(\Sigma\)-r.e.
Proof. Para ver que \(A\) es \(\Sigma\)-r.e. se lo puede hacer imperativamente dando un programa (usando macros) que enumere a \(A\). De esta forma probaríamos que \(A\) es \(\Sigma\)-enumerable y por lo tanto es \(\Sigma\)-r.e.. Daremos ahora una prueba no imperativa de este hecho, es decir mas propia del paradigma funcional. Sea \(P=\lambda t\mathcal{P}\left[Halt^{0,1}(t,\mathcal{P},\mathcal{P})\right]\). Note que \(P\) es \(\Sigma\)-p.r. por lo que \(M(P)\) es \(\Sigma\)-r.. Además note que \(D_{M(P)}=A\), lo cual implica que \(A\) es \(\Sigma\)-r.e..
Supongamos ahora que \(N\) es \(\Sigma\)-r.e.. Entonces la función \(C_{0}^{0,1}|_{N}\) es \(\Sigma\)-recursiva ya que \(C_{0}^{0,1}\) lo es. Además ya que \(A\) es \(\Sigma\)-r.e. tenemos que \(C_{1}^{0,1}|_{A}\) es \(\Sigma\)-recursiva. Ya que \[AutoHalt^{\Sigma}=C_{1}^{0,1}|_{A}\cup C_{0}^{0,1}|_{N}\] el Lema 4.59 nos dice que \(AutoHalt^{\Sigma}\) es \(\Sigma\)-recursivo, contradiciendo el Lema 4.64. Esto prueba que \(N\) no es \(\Sigma\)-r.e..
Finalmente supongamos \(A\) es \(\Sigma\)-recursivo. Entonces el conjunto \[N=\left(\Sigma^{\ast}-A\right)\cap\mathrm{Pro}^{\Sigma}\] debería serlo, lo cual es absurdo. Hemos probado entonces que \(A\) no es \(\Sigma\)-recursivo.
Cabe destacar aquí que el dominio de una función \(\Sigma\)-recursiva no siempre será un conjunto \(\Sigma\)-recursivo. Por ejemplo si tomamos \(\Sigma\) tal que \(\Sigma\supseteq\Sigma_{p}\), entonces \(C_{1}^{0,1}|_{A}\) es una función \(\Sigma\)-recursiva ya que es la restricción de la función \(\Sigma\)-recursiva \(C_{1}^{0,1}\) al conjunto \(\Sigma\)-r.e. \(A\), pero \(\mathrm{Dom}(C_{1}^{0,1}|_{A})=A\) no es \(\Sigma\)-recursivo.
Usando la Tesis de Church obtenemos el siguiente resultado.
4.17. Supongamos que \(\Sigma\supseteq\Sigma_{p}.\) Entonces \(A\) es \(\Sigma\)-efectivamente enumerable y no es \(\Sigma\)-efectivamente computable. El conjunto \(N\) no es \(\Sigma\)-efectivamente enumerable. Es decir, \(A\) puede ser enumerado por un procedimiento efectivo pero no hay ningún procedimiento efectivo que decida la pertenencia a \(A\) y no hay ningún procedimiento efectivo que enumere a \(N\). Mas aun, si un procedimiento efectivo da como salida siempre elementos de \(N\), entonces hay una cantidad infinita de elementos de \(N\) los cuales nunca da como salida
Con los resultados anteriores estamos en condiciones de dar un ejemplo de un predicado \(\Sigma\)-recursivo, cuya minimización no es \(\Sigma\)-efectivamente computable (y por lo tanto es no \(\Sigma\)-recursiva).
4.18. Supongamos que \(\Sigma\supseteq\Sigma_{p}\). Sea \(P=C_{1}^{0,1}|_{A}\circ\lambda t\alpha\left[\alpha^{1\dot{-}t}\mathrm{SKIP}^{t}\right]|_{\omega\times\mathrm{Pro}^{\Sigma}}\). La función \(M(P)\) no es \(\Sigma\)-efectivamente computable (y por lo tanto es no \(\Sigma\)-recursiva)
Proof. Nótese que \(D_{M(P)}=\mathrm{Pro}^{\Sigma}\) y que para cada \(\mathcal{P}\in\mathrm{Pro}^{\Sigma}\) se tiene que \[M(P)(\mathcal{P})=0\text{ sii }\mathcal{P}\in A\] O sea que \(AutoHalt^{\Sigma}=\lambda x[x=0]\circ M(P)\) lo cual nos dice que \(M(P)\) no es \(\Sigma\)-recursiva ya que si lo fuese lo seria también \(AutoHalt^{\Sigma}\). Por la Tesis de Church \(M(P)\) tampoco es \(\Sigma\)-efectivamente computable
Supongamos \(\Sigma\supseteq\Sigma_{p}\). Sea \(f=\lambda\mathcal{P}\left[T^{0,1}(\mathcal{P},\mathcal{P})\right]\). Note que \(D_{f}=A\) y \(f(\mathcal{P})\) es la cantidad de pasos en la que \(\mathcal{P}\) se detiene partiendo de \(\left\Vert \mathcal{P}\right\Vert\).
4.66. No hay ninguna función \(F:\mathrm{Pro}^{\Sigma}\rightarrow\omega\) la cual sea \(\Sigma\)-recursiva y extienda a \(f\)
Proof. Supongamos hay una tal \(F\). Nótese que \(AutoHalt^{\Sigma}=\lambda\mathcal{P}\left[Halt^{0,1}(F(\mathcal{P}),\mathcal{P},\mathcal{P})\right]\) lo cual nos dice que \(AutoHalt^{\Sigma}\) es \(\Sigma\)-recursiva, llegando a una contradicción.