2 votos

Equivalentes informales de Mathematica "Set" y "SetDelayed"

¿Cómo se distinguiría entre lo que se entiende por las funciones "Set" y "SetDelayed" de Mathematica en notación matemática informal? ¿Hay alguna manera de hacer esta distinción en algún lógica formal razonablemente estándar? Además, ¿cómo está relacionada la notación matemática informal y la notación lógica formal con el uso de variables como 'x_' en Mathematica? Aquí está la parte relevante de la documentación de Mathematica:

http://reference.wolfram.com/mathematica/howto/CreateDefinitionsForVariablesAndFunctions.html

2voto

Andrea Girardi Puntos 130

Dado que Mathematica es fundamentalmente un sistema de reescritura, podemos usar el concepto de una Forma Normal para abordar tu pregunta.

Podemos formalizar el comportamiento de Mathematica de esta manera para responder a tu pregunta. Considera dos conjuntos de reglas de reescritura, que almacenarán todas las reglas que ingreses en Mathematica. En el primer conjunto, que llamaremos Eager, todos los lados derechos de las reglas se reescriben inmediatamente a sus respectivas formas normales. Sin embargo, en el segundo conjunto, que llamaremos Lazy, no se lleva a cabo tal reescritura. La correspondencia con Mathematica es que Eager es el valor predeterminado, incluido el comando Set y el bucle de lectura-evaluación-impresión; SetDelayed corresponde con Lazy.

Siguiendo el ejemplo en la documentación de Mathematica, al ingresar y = 4 en el símbolo de dólar se coloca la regla de reescritura $y \rightarrow 4$ en el conjunto de Eager:

Eager = $\{y \rightarrow 4\}$, Lazy = $\{\}$

Al ingresar z := y^2 en el símbolo de dólar se coloca la regla $z \rightarrow y^2$ en el conjunto de Lazy:

Eager = $\{y \rightarrow 4\}$, Lazy = $\{z \rightarrow y^2\}$

Al ingresar z en el símbolo de dólar, hace que z se reescriba a su forma normal utilizando la unión de Eager y Lazy.

$z \Rightarrow 16$

Ahora, si ingresamos y = 3 en el símbolo de dólar, la regla que ya está allí se reemplaza:

Eager = $\{y \rightarrow 3\}$, Lazy = $\{z \rightarrow y^2\}$

Por lo tanto, al ingresar nuevamente z hace que se reescriba a su forma normal:

$z \Rightarrow 9$

La lógica subyacente en este ejemplo es ecuacional, es decir, lógica de primer orden con funciones e igualdad. En este contexto, las reglas de reescritura son simplemente ecuaciones con una dirección preferida.

En cuanto a variables como x_, no veo algo correspondiente en las reglas de reescritura a este tipo de notación. Mi suposición es que este formalismo está diseñado para inhibir el evaluador predeterminado de Mathematica, ya que si ya tenemos x = 3 y escribimos lo siguiente en Mathematica....

f[x] := x^2

... obtendríamos

f[3] := x^2

... lo cual claramente no es lo que queremos. Los sistemas de reescritura evitan este problema al no hacer que las asignaciones constantes como x = 4 sean reglas de reescritura. Esto es necesario ya que es importante poder reescribir los lados izquierdos de las reglas de reescritura en sus formas normales, no solo los lados derechos.

0voto

Emil Lundberg Puntos 168

PREGUNTA 1: ¿Cómo se distinguiría entre lo que se entiende por las funciones "Set" y "SetDelayed" de Mathematica en notación matemática informal?

Set vs. SetDelayed

f[x_] = Expand[x^2]

x^2

{f[3], f[3.5], f[x + 1]}

{9, 12.25, (x+1)^2}

f[x+1] no se expande porque eso se evaluó cuando se definió f.

También Set se evalúa una vez para ciertas definiciones.

r1 = Random[]; {r1, r1, r1}

{0.937245,0.937245,0.937245}

SetDelayed se evalúa cada vez.

r2 := Random[]; {r2, r2, r2}

{0.687744,0.629629,0.732141}

Clear["`*"]

f[x_] := Expand[x^2]

Observa que cuando evaluas esta expresión, no hay salida. Eso es porque el rhs se mantiene hasta que la función f se evalúa.

{f[24],f[x + 2],f[(h - 4)^3]}

{576, x^2+4 x+4, h^6-24 h^5+240 h^4-1280 h^3+3840 h^2-6144 h+4096}

Ahora todo funciona porque Expand se evalúa después de que f recibe su entrada.

PREGUNTA 3: Además, ¿cómo se relaciona la notación matemática informal y la notación lógica formal con el uso de variables como 'x_' en Mathematica?

El guion bajo es lo que Mathematica utiliza para mostrar variables de entrada. Se usa con Set y SetDelayed. Incluso f[x_] se evalúa sin :=.

f[x_]

x_^2

La mente humana sabe que la x en f(x) es la entrada. Las computadoras no lo saben a menos que se lo indiques.

PREGUNTA 2: ¿Hay alguna manera de hacer esta distinción en algún tipo de lógica formal estándar?

Nunca lo he visto. ¿La mente humana siempre evaluaría como una definición SetDelayed, no?

Aquí tienes un enlace al cuaderno. Espero que esto ayude.

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