4 votos

¿Cómo demostrar que esta función es recursiva primitiva?

¿Cómo puedo resolver el siguiente problema?

Dejemos que $f, \pi, g$ aceptan uno, dos y tres argumentos respectivamente. Si se sabe que $f, \pi, g$ son funciones recursivas primitivas demuestran que $h$ definido como: $$ \begin{align*} h(0, y) &\simeq f(y) \\ h(x + 1, y) &\simeq g(x, y, h(x, \pi(x, y))) \end{align*} $$ también es una función recursiva primitiva.

La definición de recursión primitiva que conozco es: $$ \begin{align*} h(\bar{x}, 0) &\simeq f(\bar{x}) \\ h(\bar{x}, y + 1) &\simeq g(\bar{x}, y, h(\bar{x}, y)) \end{align*} $$

5voto

GmonC Puntos 114

Puede parecer una tontería publicar una segunda respuesta a una pregunta que parece que ya no interesa a nadie, ni siquiera al autor original, pero recientemente me he dado cuenta de que para el problema tal y como está planteado, se puede hacer bastante mejor que mi respuesta anterior. Además, esta cuestión parece ser más importante en el desarrollo de funciones recursivas primitivas de lo que me parecía al principio, ya que una solución permite construir un valor en un argumento mientras se realiza una recursión primitiva en otro. Por ejemplo, si uno quiere codificar listas de números por emparejamiento repetido como en LISP, y quiere definir una función que añada un número $x$ al final de un $n$ -lista de elementos $l$ se puede especificar como $$ \begin{align} \mathit{append}(0,l,x) &= \mathit{cons}(x,0)\\ \mathit{append}(n+1,l,x) &= \mathit{cons}(\mathit{head}(l),\mathit{append}(n,\mathit{tail}(l),x))\\ \end{align} $$ donde $0$ codifica la lista vacía; encontramos nuestro esquema de recursión no primitiva con $\mathit{tail}$ en el papel de $\pi$ . Por lo tanto, parece relevante tener un método para resolver este esquema que no dependa de la codificación de secuencias en números.

Así que aquí tenemos una solución que no utiliza la codificación. Definir $h$ utilizando funciones auxiliares $P$ y $G$ de tres argumentos cada uno, que satisfacen las siguientes especificaciones que coinciden con el esquema recursivo primitivo básico: $$ \begin{align} P(n,x,0)&=x\\ P(n,x,i+1)&=\pi(n-(i+1),P(n,x,i)) \\ G(n,x,0)&=f(P(n,x,n)) \\ G(n,x,i+1)&=g(i,P(n,x,n-(i+1)),G(n,x,i)) \\ h(n,x) &= G(n,x,n) \\ \end{align} $$ El efecto previsto de estas definiciones es $$ \begin{align} P(n,x,n-i) &= \pi(i,\pi(i+1(\ldots,\pi(n-1,x)\ldots)) \quad\text{and}\\ G(n,x,i) &= g(i-1,P(n,x,n-i),g(i-2,P(n,x,n-i+1),g(\ldots \\ & \qquad\qquad\qquad\qquad\qquad\qquad g(0,P(n,x,n-1),y)\ldots))) \quad\text{where}\\ y &= f(P(n,x,n)) = f(\pi(0,\pi(1,\ldots,\pi(n-1,x)\ldots))), \\ \end{align} $$ y $h(n,x) = G(n,x,n)$ se puede ver que da la expansión deseada.

Para demostrar formalmente que las ecuaciones anteriores resuelven la relación recursiva requerida para $h$ , se demuestra sucesivamente

Lema Para todos $n,i\in\mathbf N$ uno tiene $P(n+1,x,i+1)=P(n,\pi(n,x),i)$ ,

por inducción en $i$ y luego

Lema Para todos $n,i\in\mathbf N$ uno tiene $G(n+1,x,i)=G(n,\pi(n,x),i)$ ,

por inducción en $i$ . Ambas pruebas son reescrituras directas utilizando las definiciones y la hipótesis de inducción. Por último, para $h$ uno tiene $$ h(0,x) = G(0,x,0) = f(P(0,x,0)) = f(x) $$ y $$ \begin{align} h(n+1,x) &= G(n+1,x,n+1) \\ &= g(n,P(n+1,x,0),G(n+1,x,n)) \\ &= g(n,x,G(n+1,x,n)) \\ &= g(n,x,G(n,\pi(n,x),n)) \\ &= g(n,x,h(n,\pi(n,x))) \\ \end{align} $$ como se desee.

1voto

GmonC Puntos 114

Me encontré con esta pregunta porque yo mismo quería demostrar algo muy parecido (mientras enseño un curso sobre computabilidad, ¡así que esto no es tarea para mí!). Desgraciadamente, la pregunta estaba planteada de tal manera que casi nadie parece haber entendido la verdadera cuestión, y en particular no he encontrado ninguna respuesta adecuada ni aquí ni en MathOverflow. Así que voy a tratar de dar lo mejor de mí, pero me gustaría mucho aprender una respuesta más simple (dado que era la tarea, tal vez el OP aprendido una solución por ahora?).

Así que, en primer lugar, la dificultad es que mientras el esquema básico de la recursión primitiva permite pasar parámetros adicionales que no son objeto de la recursión ( $\bar x$ en el texto de la pregunta) sin cambios, la pregunta se refiere a qué hacer cuando este parámetro se modifica por la aplicación de $\pi$ . Que esto no es en general inocente puede demostrarse mediante la función de Ackermann, que opera mediante una modificación similar de su parámetro de no recursión, y que es no primitivo recursivo (por supuesto la modificación es aquí en términos de la propia función de Ackermann mientras que en la pregunta $\pi$ debe ser recursivo primitivo, por lo que aún podemos esperar una respuesta positiva).

Primero asumiré que $\pi$ satisface $\pi(x,y)\leq y$ para todos $x,y$ para que las relaciones de recursión sólo disminuyan el parámetro adicional $y$ . En ese caso se tiene la siguiente solución, algo similar a cómo Recurrencia de curso de valores se maneja: definir primero otra función $H$ de dos argumentos por $H(x,y)=\left<h(x,0),\ldots,h(x,y)\right>$ la codificación de la lista indicada en un solo número; aunque aparentemente $H$ es más complicado que $h$ puede definirse más directamente mediante una recursión primitiva. En efecto, lo que se necesita es una función recursiva primitiva $G$ para calcular $H(x+1,y)=\left<h(x+1,0),\ldots,h(x+1,y)\right>$ dados los valores $x$ , $y$ y $H(x,y)=\left<h(x,0),\ldots,h(x,y)\right>$ . Debería devolver una lista con el componente final $h(x+1,y)=g(x,y,h(x,\pi(x,y)))$ donde $h(x,\pi(x,y))$ es uno de los componentes de $H(x,y)$ por la suposición $\pi(x,y)\leq y$ . Este componente puede calcularse a partir de $x,y,H(x,y)$ mediante una función recursiva primitiva, por ejemplo $G_0(x,y,z)$ con $z$ que se toma como $H(x,y)$ . Ya que lo único que $G_0$ necesita hacer con la lista $z$ es seleccionar un componente del mismo, podemos suponer que devuelve el mismo valor siempre que $z$ se sustituye por una lista más larga que contiene $z$ como prefijo. Ahora podemos definir $G$ primitiva recursivamente por $$ \begin{align*} G(x,0,z) &= \left< G_0(x,0,z) \right> \\ G(x,y+1,z) &= \mathit{append}(G(x,y,z),G_0(x,y+1,z)) \end{align*} $$ donde $\mathit{append}$ añade un elemento a la lista codificada como su primer argumento. (Obsérvese cómo hemos evitado tener que modificar $z$ en la recurrencia para $G$ ya que esto nos habría metido en una situación de huevo y gallina). Ahora podemos definir $H(x,y)$ mediante una recursión primitiva en $x$ utilizando $G$ (Dejo la computación $H(0,y)$ como ejercicio), y finalmente $h(x,y)$ tomando el último elemento de la lista codificada por $H(x,y)$ .

(Otra aproximación más bruta a este caso es definir $h'(z)$ por $h'(\langle x,y\rangle)=h(x,y)$ para una codificación $\langle x,y\rangle$ de la pareja $(x,y)$ cuya codificación puede considerarse biyectiva (cada $z$ codifica un par) y monótona (creciente $x$ o $y$ siempre aumenta el código $\langle x,y\rangle$ (esto es cierto para cualquier codificación razonable). Entonces, como $\langle x+1,y\rangle > \langle x, \pi(x,y)\rangle$ la relación de recurrencia que $h$ debe satisfacer conduce a una recursión de valores para $h'$ que sabemos manejar).

Ahora la mayoría de las funciones recursivas primitivas $\pi$ de dos argumentos hacen por supuesto no satisfacer $\pi(x,y)\leq y$ para todos $x,y$ y si no los métodos anteriores no funcionan. Sin embargo, el aumento del argumento no recursivo no constituye un verdadero obstáculo para el cálculo de $h$ ya que para cada par $(x+1,y)$ podemos predecir (usando $\pi$ ) cuántos valores $(x,y')$ necesitamos calcular $f$ para la primera, y así sucesivamente para la disminución $x$ . Así que intuitivamente podemos calcular $h(x,y)$ calculando "filas" sucesivas (es decir, con $x$ ) hasta un punto computable de antemano. (Esto es distinto a lo que ocurre con la función de Ackermann, en la que cada fila debe desarrollarse sólo hasta un punto finito, pero no predecible hasta que se conozca la propia función de Ackermann).

Para tratar el caso general, primero reduzco al caso que realmente $\pi(x,y)\geq y$ para todos $x,y$ y también que $\pi(x,y)$ es monótona en $y$ al mismo tiempo que se generaliza al caso de que $g$ depende (además de $x$ y $y$ ) no sólo en el valor $h(x,\pi(x,y))$ pero en toda la fila (codificada) $\left<h(x,0),\ldots,h(x,\pi(x,y))\right>$ Como hemos visto, esta generalización no complica esencialmente las cosas. Para obtener la reducción, sustituir $\pi$ por $\pi'$ definido como $\pi'(x,y)=\mathrm{max}(y,\pi(x,0),\ldots,\pi(x,y))$ si es necesario. Ahora bien, la característica que permite predecir cuántos valores hay que precalcular, es que para un determinado $x,y$ el valor final $l(x,y)$ de la secuencia $y$ , $\pi(x-1,y)$ , $\pi(x-2,\pi(x-1,y))$ , ... $\pi(0,\pi(1,\ldots\pi(x-1,y)\ldots))=l(x,y)$ del máximo $y$ -necesarios, respectivamente, para $x$ , $x-1$ , $x-2$ , ..., $0$ puede calcularse de forma primitiva-recursiva. En efecto, este valor viene dado por $l(x,y)=L(x,x,y)$ donde $L$ satisface $$ \begin{align*} L(0,x,y) &= y, \\ L(i+1,x,y) &= \pi(x-i,L(i,x,y)). \end{align*} $$ Obsérvese que por nuestra suposición sobre $\pi$ la función $l$ también es monótona en $y$ y satisface $l(x,y)\geq y$ para todos $x,y$ . Además $l(x+1,y)=l(x,\pi(x,y))$ por definición de $l$ .

Ahora mi idea es definir una función diferente $H(x,z)$ para ayudar a definir $h$ y que codifica la lista de valores $h(x,y)$ para todos $y$ con $l(x,y)\leq z$ . La función $h$ puede definirse entonces tomando $h(x,y)$ sea el valor de la lista $H(x,l(x,y))$ en el índice $y$ que está garantizada su existencia (y probablemente el último valor de la lista). El punto de $H$ es que, por lo que sabemos sobre $l$ la lista codificada por $H(x,z)$ es finito, y $H(x,z)$ contiene todos los valores anteriores $h(x,y)$ que uno necesita saber para calcular los valores (en general mucho menos) codificados en la lista $H(x+1,z)$ . Así que debería ser posible definir $H$ mediante una recursión primitiva en $x$ con $z$ como un segundo argumento invariable. Sin embargo, estoy un poco cansado de dar detalles (y estoy seguro de que el lector también), así que me detendré aquí.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X