Autor Tema: Comentarios a "La Aritmética Recursiva Primitiva"

0 Usuarios y 1 Visitante están viendo este tema.

18 Junio, 2023, 11:36 pm
Respuesta #80

argentinator

  • Consultar la FIRMAPEDIA
  • Administrador
  • Mensajes: 7,796
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
Citar
Tú estás tratando de que el ordenador use de algún modo los convenios de notación que usamos para hablar en español de ARP, pero es absurdo pretender que un ordenador se adapte a normas gramaticales del español.

No pretendo eso,
sino que en todo momento decía que pretendía hacer una analogía,
y traducir de un contexto a otro.

Citar
Igualmente, cuando hablo de un ordenador, yo estoy hablando de un algoritmo expresable en un lenguaje de programación.

Pues entonces dejémoslo bajo ese entendimiento,
así no te hago perder más tiempo.   :-[
Y de paso yo también mejor me pongo a programar algo.

Citar
No sé de dónde sacas que me pongo de mal humor. Sólo procuro darte los argumentos que me parecen más claros o ilustrativos a cada cosa que dices.

Bueno, no sé. Te noté algo ofuscado, pero también son impresiones subjetivas de lo que uno lee a veces.

Citar
¿O sí que puedes?

Si afirmo que lo hace, es porque miro el código Python que dirige el funcionamiento del ordenador, y tengo la garantía al verlo de que, sea cual sea la entrada que introduzca (mientras no agote la capacidad del ordenador) la salida será la que digo que será. Para concluir eso, sólo necesito mirar el texto del código Python (al menos si tuviera la capacidad cuasidivina de detectar bugs sin necesidad de ejecutar el código). Los ordenadores reales son del todo irrelevantes para lo que yo afirmo.

Ok. Si miro tu programa en Python, y juzgo si funcionará o no, diría que sí.

_____________

Yo mismo quiero ya cansarme de esto y pasar a otra cosa...

18 Junio, 2023, 11:56 pm
Respuesta #81

Carlos Ivorra

  • Administrador
  • Mensajes: 11,883
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
    • Página web personal
Pues entonces dejémoslo bajo ese entendimiento,
así no te hago perder más tiempo.   :-[
Y de paso yo también mejor me pongo a programar algo.

Ahora ya casi ha terminado el curso (estoy casi de vacaciones de verano) y no tengo problemas de tiempo, pero me parece más preocupante el tiempo que yo diría que estás perdiendo tú. Me refiero a que, si sigues a este ritmo, pueden pasar varios meses antes de que hayas avanzado mínimamente en el hilo. Yo diría que, en lugar de filosofar sobre qué es un ordenador, sería más práctico que te ciñeras a lo necesario para seguir el hilo.

Por ejemplo, tenías dudas sobre cómo entender el uso de las comillas y eso ya está claro. Pues eso ha sido un punto en el que este hilo de comentarios ha cumplido una misión, aclarando una duda que podría haber dado problemas a la hora de entender el hilo principal. Mi opinión es que si aprovecharas este hilo para resolver esa clase de dudas, sacarías mucho más partido al conjunto de los dos hilos en general. Pero eso ya es decisión tuya. Yo respondo a lo que plantees.

Citar
No sé de dónde sacas que me pongo de mal humor. Sólo procuro darte los argumentos que me parecen más claros o ilustrativos a cada cosa que dices.

Bueno, no sé. Te noté algo ofuscado, pero también son impresiones subjetivas de lo que uno lee a veces.

Pues no sé. Yo leo lo que dices y, en cuanto detecto algo con lo que no estoy de acuerdo (o no tengo nada que objetar, pero me parece irrelevante, que es algo que pasa mucho en este hilo) te digo la objeción que encuentro o por qué me parece irrelevante. No hay nada de pasión en ello. Yo creo que si me tomara la tensión mientras escribo, no se notaría ninguna variante significativa, ni en ningún otro parámetro fisiológico que pudiera indicar excitación, enfado, o qué sé yo.

19 Junio, 2023, 12:04 am
Respuesta #82

feriva

  • $$\Large \color{#a53f54}\pi\,\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 11,991
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino

No sé por qué me insisten con lo del bajo nivel y el alto nivel.

Python opera en binario, aún a "alto nivel".

El compilador de Python nunca traduce de número a caracter y viceversa.
Es algo innecesario.
La información pasa de manera transparente.

A lo mejor hace algunas verificaciones por cuestiones de consistencia y seguridad,
pero si quisiera, podría tan sólo quitar las comillas y pasar eso a la pantalla para que se imprima.
Y eso, que está en binario, no se imprime en binario en la pantalla.
Pero eso no es cosa de Python.

No sé.
Será que al final ya veo todo en binario.

____________

Lo que digo es que no tiene sentido hablar de signos entre computadoras.
Por eso busco algo similar, para que tenga sentido decir lo mismo en el contexto informático.

Pero es que el propio lenguaje \( \mathcal L_{\rm arp} \) tampoco sabe lo que es un signo o un nombre, somos nosotros los que damos una interpretación a ese lenguaje de igual modo que somos nosotros los que interpretamos lo que sale en la pantalla del ordenador cuando un programa hace algo; el \( \mathcal L_{\rm arp} \) ha sido creado por humanos, igual que los lenguajes de programación. Un lenguaje como C o Python no es más que un programa que funciona sobre otro programa de un nivel más bajo.
Cómo no se va a poder implementar o programar ese lenguaje, con la cantidad de cosas que puede hacer hoy en día la inteligencia artificial; no tienes ni que programarlo tú, le das unas indicaciones a una IA y te lo hace ella.

Saludos.

19 Junio, 2023, 10:39 am
Respuesta #83

Eparoh

  • $$\Large \color{#c88359}\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 971
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
Hola.

Aún no he leído el último mensaje completo, pero como me ha surgido una duda nada más empezar y no tengo justo ahora mucho tiempo, lo pauso de momento aquí y en cuanto pueda continuo leyendo :P

El significado de estas fórmulas es claro. Fijada una valoración \( v \), tenemos:

  • \( \vDash \color{blue}\neg\color{red}\alpha[v] \) si y sólo si \( 1\dot{-} N(t_\alpha)[v] =0 \), si y sólo si \( N(t_\alpha)[v]\neq 0 \), si y sólo si no se cumple \( \vDash \alpha[v] \).

  • \( \vDash(\alpha\lor \beta)[v] \) si y sólo si \( N(t_\alpha)[v]\cdot N(t_\beta)[v] =0 \), si y sólo si \( N(t_\alpha)[v] =0 \) o \( N(t_\beta)[v] =0 \), si y sólo si \( \vDash \alpha[v] \) o \( \vDash \beta[v] \).

  • \( \vDash(\alpha\land \beta)[v] \) si y sólo si \( N(t_\alpha)[v]+ N(t_\beta)[v] =0 \), si y sólo si \( N(t_\alpha)[v] =0 \) y \( N(t_\beta)[v] =0 \), si y sólo si \( \vDash \alpha[v] \) y \( \vDash \beta[v] \).

  • \( \vDash(\alpha\rightarrow \beta)[v] \) si y sólo si \( (1\dot{-} N(t_\alpha)[v])\cdot N(t_\beta)[v]=0 \), lo cual equivale a que \( 1\dot{-} N(t_\alpha)[v]=0 \) o \( N(t_\beta)[v]=0 \), que a su vez equivale a que \( N(t_\alpha)\neq 0 \) o \( N(t_\beta)[v]=0 \), que a su vez equivale a que, o bien no \( \vDash \alpha[v] \), o bien \( \vDash \beta[v] \).

  • Claramente \( \vDash (\alpha\leftrightarrow \beta)[v] \) si y sólo \( \alpha \) y \( \beta \) son equivalentes, en el sentido de que se cumple \( \vDash \alpha[v] \) si y sólo si se cumple \( \vDash \beta[v] \).

A parte de la pequeña errata marcada en azul tengo una duda sobre esto. En todos veo claro las equivalencias hasta la última de ellas, que es donde tengo la duda. Se que esto es consecuencia de las dos reglas de inferencia dichas anteriormente y del teorema de corrección, pero el teorema de corrección nos dice que si la premisa es verdadera, entonces la conclusión también lo es. Ahora bien, aquí estamos trabajando con valoraciones particulares, sin partir en ningún momento de que cierta fórmula sea o no verdadera, por tanto, el teorema de corrección no aplica tal cual, ¿no?

Porque, cuando se probó que las reglas de inferencia si parten de fórmulas verdaderas dan conclusiones verdaderas, se utilizó explícitamente que las premisas eran ciertas para cualquier valoración (pues se utilizaba que se satisfacian en valoraciones ligeramente distintas a la fijada), por tanto no parece que se pueda concluir que si tienes cierta regla de inferencia de ARP y la premisa es satisfecha por una valoración fija (sin saber si la fórmula es verdadera), entonces la conclusión también lo sea. De hecho, no es así pues, por ejemplo, para la regla \( S_1 \) si se considera la fórmula \( x+y=2 \) y la valoración \( v \) tal que \( v(x)=1, v(y)=1, v(z)=3 \), entonces es claro que dicha fórmula es satisfecha por \( v \), pero no lo es la fórmula \( z+y=2 \) que se concluye por \( S_1 \).

En resumen, mi pregunta es, ¿no debería enunciarse lo que he citado en términos de fórmulas verdaderas y no de valoraciones concretas?
Por ejemplo, el 1. no debería ser más bien:

\( \vDash \neg\alpha \) si y sólo si \( \vDash 1\dot{-} t_\alpha =0 \), si y solo si, para cualquier valoración \( v \) es \( 1\dot{-} N(t_\alpha)[v] =0 \), si y sólo si, para cualquier valoración \( v \) es \( N(t_\alpha)[v]\neq 0 \), si y sólo si \( t_\alpha=0 \) es falsa, si y sólo si \( \alpha \) es falsa.

EDITO: Aunque, pensándolo ahora, tampoco estoy seguro que se pueda asegurar que \( t_\alpha=0 \) es falsa si, y solo si, \( \alpha \) es falsa, pues lo que sabemos es que \( t_\alpha=0 \) es verdadera si, y solo si, \( \alpha \) es verdadera, pero ser falso no es la negación de ser verdadero. Por tanto, ¿no habría que ver de alguna forma que para una valoración cualquiera \( v \) se tiene que \( \vDash \alpha[v] \) si, y solo si, \( \vDash (t_\alpha = 0)[v] \)? Porque, como decía antes, esto no se deduce de las reglas de inferencia dadas al principio de este último mensaje y el teorema de corrección.

Un saludo.

19 Junio, 2023, 11:57 am
Respuesta #84

Carlos Ivorra

  • Administrador
  • Mensajes: 11,883
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
    • Página web personal
En todos veo claro las equivalencias hasta la última de ellas, que es donde tengo la duda. Se que esto es consecuencia de las dos reglas de inferencia dichas anteriormente y del teorema de corrección,

Ahí te has rayado. La última equivalencia se reduce a las anteriores por la definición del coimplicador. El teorema de corrección no hace falta para nada. Simplemente aplica que \( \alpha\rightarrow \beta\equiv (\alpha\rightarrow \beta)\land (\beta\rightarrow\alpha) \) y los casos ya probados para el conjuntor y el implicador:

\( \vDash (\alpha\leftrightarrow \beta)[v] \) si y sólo si \( \vDash (\alpha\rightarrow \beta)[v] \) y \( \vDash (\beta\rightarrow \alpha)[v] \), si y sólo si (no \( \vdash \alpha[v] \) o \( \vDash \beta[v] \)) o bien (no \( \vdash \beta[v] \) o \( \vDash \alpha[v] \)) y, combinando las cuatro posibilidades, sale que esto sucede si \( \vDash \alpha[v] \) y \( \vDash \beta[v] \) o bien no \( \vDash \alpha[v] \) y no \( \vDash \beta[v] \).

No había detallado la prueba porque no requería pelear con valoraciones directamente, sino únicamente usar los casos ya probados.

En resumen, mi pregunta es, ¿no debería enunciarse lo que he citado en términos de fórmulas verdaderas y no de valoraciones concretas?

Es que una vez probados los resultados con valoraciones son trivialmente ciertos si quitas las valoraciones:

Si \( \vDash \lnot\alpha \) y tomas cualquier valoración \( v \), tienes que no \( \vDash \alpha[v] \), luego puedes concluir que \( \alpha \) es falsa, y viceversa.

EDITO: Aunque, pensándolo ahora, tampoco estoy seguro que se pueda asegurar que \( t_\alpha=0 \) es falsa si, y solo si, \( \alpha \) es falsa, pues lo que sabemos es que \( t_\alpha=0 \) es verdadera si, y solo si, \( \alpha \) es verdadera, pero ser falso no es la negación de ser verdadero. Por tanto, ¿no habría que ver de alguna forma que para una valoración cualquiera \( v \) se tiene que \( \vDash \alpha[v] \) si, y solo si, \( \vDash (t_\alpha = 0)[v] \)? Porque, como decía antes, esto no se deduce de las reglas de inferencia dadas al principio de este último mensaje y el teorema de corrección.

Eso es cierto. Si \( \alpha\equiv s_1 = s_2 \), entonces, \( \vDash t_\alpha = 0[v] \) significa que \( |N(s_1)[v]-N(s_2)[v]| = 0 \) (puedes poner resta truncada o considerar la resta y el valor absoluto entre enteros, que es lo mismo). El caso es que esto, lo mires como lo mires, equivale a \( N(s_1)[v] = N(s_2)[v] \), que a su vez equivale a \( \vDash \alpha [v] \).

En cuanto tenga un momento añadiré esto en el mensaje, que ahora mismo no puedo.

19 Junio, 2023, 01:13 pm
Respuesta #85

argentinator

  • Consultar la FIRMAPEDIA
  • Administrador
  • Mensajes: 7,796
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
Citar
TypeError: startswith first arg must be str or a tuple of str, not int

A mí no me sale este error, me compila bien.

El error debe saltar después, ya que yo, al cambiar los índices a valores enteros,
y luego tu programa intenta acceder con valores string,
pues lógicamente salta un error.


19 Junio, 2023, 01:57 pm
Respuesta #86

argentinator

  • Consultar la FIRMAPEDIA
  • Administrador
  • Mensajes: 7,796
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
Diremos que una cadena de signos \( f \) de \( \mathcal L_{\rm arp} \) es un funtor de rango \( n \) (o un  funtor \( n \)-ádico) si existen una sucesión \( f_1,\ldots, f_r \) de cadenas de signos y una sucesión \( n_1,\ldots, n_r \) de números naturales de modo que \( f\equiv f_r \), \( n = n_r \) y, para cada índice \( i \), se da uno de los casos siguientes:

  • \( f_i\equiv S \) y \( n_i = 1 \),
  • \( f_i\equiv c \) y \( n_i = 1 \),
  • Existe \( 1\leq k\leq n_i \) tal que \( f_i\equiv p^{n_i}_k \),
  • Existen índices \( j, j_1,\ldots, j_m<i \) tales que \( n_j=m \), \( n_{j_i}= n_i \), para todo \( i \) y
    \( f_i \equiv \kappa(f_j,f_{j_1},\ldots, f_{j_m})\equiv \kappa f_jf_{j_1}\cdots f_{j_m} \),

  • Existen \( j, k<i \) tales que \( n_i = n_j+1 \), \( n_k = n_j+2 \) y
    \( f_i \equiv \rho(f_j, f_k)\equiv \rho f_jf_k \).

Aquí \( n_i = n_j+1 \) sólo significa que \( n_i \) es el siguiente de \( n_j \), mientras que \( n_k = n_j+2 \) sólo significa que \( n_k \) es el siguiente del siguiente de \( n_j \), y todo esto lo puede entender un lector que no sepa sumar.

Veo algo raro en el caso 4.

El índice  \(i\) está prefijado,
pero luego dice que \(n_{j_i}=n_i\) para todo \(i\).
¿No debería usarse otro índice en vez de \(i\)?

19 Junio, 2023, 01:58 pm
Respuesta #87

Carlos Ivorra

  • Administrador
  • Mensajes: 11,883
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
    • Página web personal
Citar
TypeError: startswith first arg must be str or a tuple of str, not int

A mí no me sale este error, me compila bien.

El error debe saltar después, ya que yo, al cambiar los índices a valores enteros,
y luego tu programa intenta acceder con valores string,
pues lógicamente salta un error.

No sé si no estamos diciendo lo mismo. Te decía que el diccionario lo lee sin problemas. El error salta cuando quiere comprobar si la cadena introducida por el usuario empieza por una de las entradas del diccionario y, como éstas son números, dice que no quiere números ahí, que quiere cadenas. El error lo da concretamente la línea

for s in signos:
        if c.startswith(s):
            lectura = s

Es ahí donde no le gusta que s sea un entero en lugar de una cadena.

19 Junio, 2023, 02:02 pm
Respuesta #88

Carlos Ivorra

  • Administrador
  • Mensajes: 11,883
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
    • Página web personal
Diremos que una cadena de signos \( f \) de \( \mathcal L_{\rm arp} \) es un funtor de rango \( n \) (o un  funtor \( n \)-ádico) si existen una sucesión \( f_1,\ldots, f_r \) de cadenas de signos y una sucesión \( n_1,\ldots, n_r \) de números naturales de modo que \( f\equiv f_r \), \( n = n_r \) y, para cada índice \( i \), se da uno de los casos siguientes:

  • \( f_i\equiv S \) y \( n_i = 1 \),
  • \( f_i\equiv c \) y \( n_i = 1 \),
  • Existe \( 1\leq k\leq n_i \) tal que \( f_i\equiv p^{n_i}_k \),
  • Existen índices \( j, j_1,\ldots, j_m<i \) tales que \( n_j=m \), \( n_{j_i}= n_i \), para todo \( i \) y
    \( f_i \equiv \kappa(f_j,f_{j_1},\ldots, f_{j_m})\equiv \kappa f_jf_{j_1}\cdots f_{j_m} \),

  • Existen \( j, k<i \) tales que \( n_i = n_j+1 \), \( n_k = n_j+2 \) y
    \( f_i \equiv \rho(f_j, f_k)\equiv \rho f_jf_k \).

Aquí \( n_i = n_j+1 \) sólo significa que \( n_i \) es el siguiente de \( n_j \), mientras que \( n_k = n_j+2 \) sólo significa que \( n_k \) es el siguiente del siguiente de \( n_j \), y todo esto lo puede entender un lector que no sepa sumar.

Veo algo raro en el caso 4.

El índice  \(i\) está prefijado,
pero luego dice que \(n_{j_i}=n_i\) para todo \(i\).
¿No debería usarse otro índice en vez de \(i\)?

Sí. En cuanto pueda lo arreglo. Debe ser  \(n_{j_k}=n_i\) para todo \(k\).  Gracias.

19 Junio, 2023, 03:18 pm
Respuesta #89

Eparoh

  • $$\Large \color{#c88359}\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 971
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
Hola.

En todos veo claro las equivalencias hasta la última de ellas, que es donde tengo la duda. Se que esto es consecuencia de las dos reglas de inferencia dichas anteriormente y del teorema de corrección,

Ahí te has rayado. La última equivalencia se reduce a las anteriores por la definición del coimplicador. El teorema de corrección no hace falta para nada. Simplemente aplica que \( \alpha\rightarrow \beta\equiv (\alpha\rightarrow \beta)\land (\beta\rightarrow\alpha) \) y los casos ya probados para el conjuntor y el implicador:

\( \vDash (\alpha\leftrightarrow \beta)[v] \) si y sólo si \( \vDash (\alpha\rightarrow \beta)[v] \) y \( \vDash (\beta\rightarrow \alpha)[v] \), si y sólo si (no \( \vdash \alpha[v] \) o \( \vDash \beta[v] \)) o bien (no \( \vdash \beta[v] \) o \( \vDash \alpha[v] \)) y, combinando las cuatro posibilidades, sale que esto sucede si \( \vDash \alpha[v] \) y \( \vDash \beta[v] \) o bien no \( \vDash \alpha[v] \) y no \( \vDash \beta[v] \).

No había detallado la prueba porque no requería pelear con valoraciones directamente, sino únicamente usar los casos ya probados.

No me había explicado bien. Me refería que en cada uno de los 4 casos veo claro todos los "si, y solo si", excepto el último, no que no viera claro el caso 5).

En resumen, mi pregunta es, ¿no debería enunciarse lo que he citado en términos de fórmulas verdaderas y no de valoraciones concretas?

Es que una vez probados los resultados con valoraciones son trivialmente ciertos si quitas las valoraciones:

Si \( \vDash \lnot\alpha \) y tomas cualquier valoración \( v \), tienes que no \( \vDash \alpha[v] \), luego puedes concluir que \( \alpha \) es falsa, y viceversa.

Claro, pero es que lo que trataba decir antes es que no veo claro el último "si, y solo si" al tratar con las valoraciones. Por esto que puse:

Se que esto es consecuencia de las dos reglas de inferencia dichas anteriormente y del teorema de corrección, pero el teorema de corrección nos dice que si la premisa es verdadera, entonces la conclusión también lo es. Ahora bien, aquí estamos trabajando con valoraciones particulares, sin partir en ningún momento de que cierta fórmula sea o no verdadera, por tanto, el teorema de corrección no aplica tal cual, ¿no?

Porque, cuando se probó que las reglas de inferencia si parten de fórmulas verdaderas dan conclusiones verdaderas, se utilizó explícitamente que las premisas eran ciertas para cualquier valoración (pues se utilizaba que se satisfacian en valoraciones ligeramente distintas a la fijada), por tanto no parece que se pueda concluir que si tienes cierta regla de inferencia de ARP y la premisa es satisfecha por una valoración fija (sin saber si la fórmula es verdadera), entonces la conclusión también lo sea. De hecho, no es así pues, por ejemplo, para la regla \( S_1 \) si se considera la fórmula \( x+y=2 \) y la valoración \( v \) tal que \( v(x)=1, v(y)=1, v(z)=3 \), entonces es claro que dicha fórmula es satisfecha por \( v \), pero no lo es la fórmula \( z+y=2 \) que se concluye por \( S_1 \).

Es decir, que parecía que el último "si, y solo si" era consecuencia del teorema de corrección, pero no es así, es porque dada una valoración cualquiera se cumple \( \vDash \alpha[v] \) si, y solo si, \( \vDash (t_\alpha=0)[v] \), que es lo que veo que has puesto al final del mensaje, y con lo que ahora ya veo todo claro :)

Un saludo.