6 votos

¿Cómo se define matemáticamente una "variable informática"?

Las variables utilizadas en las fórmulas matemáticas no son las mismas que las de los programas de computación. Las variables matemáticas pueden ser ligadas a un valor dado sólo una vez, y luego mantener ese valor.

Por otro lado, una variable de programación es "mutable". Es como una caja con un nombre, a la que podemos cambiar su valor con el tiempo.

¿Cómo se puede definir matemáticamente una variable de programación mutable?

4voto

Hagen von Eitzen Puntos 171160

Aparentemente lo que buscas es el hecho de que no podemos tener una igualdad $x=x+1$ en matemáticas, mientras que las asignaciones $x=x+1$ son omnipresentes en los programas. Lo más parecido a este "nosotros" que tenemos es una sustitución variable, tal vez. Por supuesto, las variables matemáticas también son "locales" en algún sentido, es decir, podría escribir "deja $p$ ser un número entero parejo" y después de terminar el argumento correspondiente comenzar uno nuevo con "dejar $p$ ser cualquier primo" - y el lector no debe asumir que ambas restricciones se mantienen (lo que forzaría $p=2$ ). Pero dentro de una discusión, $p$ no ha cambiado - aunque tal vez ni siquiera tiene un valor fijo en absoluto: Si dejo que $p$ ser un número entero parejo, es un arbitraria incluso entero; podría ser $42$ o $666$ pero tampoco es ninguna de estas posibilidades específicamente (excepto, por ejemplo, durante un caso refinado de diferenciación en un subargumento) ni, por lo tanto, cambia nunca su "valor".

Pero lo que realmente hacemos no tiene es el aspecto temporal de la ejecución de programas de ordenador per se . Siempre que tenemos la necesidad de emular esto, usamos secuencias $(x_n)_{n\in\mathbb N}$ o funciones $f(t)$ donde tal vez pueda interpretar $x_n$ como el "valor de $x$ después de $n$ pasos" o $f(t)$ como el "valor de $f$ en el tiempo $t$ "; pero tenga en cuenta que podemos privarle de esta interpretación utilizando otros conjuntos de índices que $\mathbb N$ / otros dominios que no sean $\mathbb R$ . Específicamente - y esto puede provocar algunos debates sobre el "infinito real vs. potencial" - uno debería considerar tal secuencia (o función) como dada como un objeto completo - incluso si una definición recursiva sugiere que la calculamos (o incluso la definimos) paso a paso; si uno no lo hiciera, trascender a infinitos más grandes que los contables (o de hecho llegar a ellos en primer lugar) se vería obstaculizado.

Una historia totalmente diferente son las variables aleatorias. La idea del programador de invocar rand() es muy diferente de la idea de los teóricos de la probabilidad de que las variables aleatorias sean funciones medibles en espacios de medida adecuados. Mientras que una variable aleatoria informática asume valores una y otra vez, una variable aleatoria matemática nunca asume un valor, sólo tiene una probabilidad de asumir un valor dentro de ciertos conjuntos.

4voto

Mauro ALLEGRANZA Puntos 34146

Desde el NOTAS DEL EDITOR a David Hilbert & Wilhelm Ackermann, Principios de la lógica matemática (2ª edición: 1937; traducción al inglés: 1950), página 168:

La distinción entre variables y constantes [...] a veces es difícil de entender claramente. No siempre se entiende que una constante, como una variable, es un símbolo, una expresión lingüística, pero con la importante distinción de que una constante tiene una designación fija, que permanece inalterada a lo largo de la discusión en la que aparece la constante; mientras que una variable designa ambiguamente, por así decirlo, suponiendo que cualquiera de un rango de valores. Sin embargo, sería un grave error suponer que la distinción entre variables y constantes refleja una distinción correspondiente en el dominio de los objetos a los que se refieren tanto las variables como las constantes. Así pues, afirmar con referencia, por ejemplo, a la teoría de los números reales que las variables " $x$ "y" $y$ " designan números variables, mientras que las constantes como " $2$ "y" $\pi$ " designar números constantes, sería una tontería; o al menos no se conoce ninguna teoría inteligible que pueda dar cabida a una noción tan impar como la de un número variable.

En la lógica matemática, variables se utilizan principalmente con cuantificadores .

Para comparar con la ciencia de la computación, podemos ver el Zohar Manna, Teoría matemática de la computación (1974), donde se utiliza el lenguaje del cálculo de predicados [página 77-on] para la descripción de programas .

Tenemos [página 82] la definición habitual de una fórmula bien formada :

c) Si $v_i$ es una variable y $A$ es un wff, entonces $\forall v_i A$ y $\exists v_i A$ son wffs.

Entonces él usa variables para formalizar los programas de diagramas de flujo [página 161] :

Distinguimos tres tipos de variables (agrupadas como tres vectores): 1) una entrada vector $\overline{x} = (x_l, x_2,. . . , x_a)$ que consiste en los valores de entrada dados y por lo tanto nunca cambia durante el cálculo; (2) un vector de programa $\overline{y} = (y_1, y_2, ..., y_b)$ que se utiliza como almacenamiento temporal durante el cómputo; y 3) un vector de salida $\overline{z} = (z_1, z_2, ... z_c)$ que da los valores de salida cuando termina el cómputo.

Por último, se introduce la función de asignación [página 164] :

Tengan en cuenta que $(y_1, y_2) \leftarrow (0, x_1)$ significa que $y_1$ es reemplazado por $0$ y $y_2$ es reemplazado por $x_1$ [...]. En general, usaremos la notación $(y_1, y_2, ..., y_n) \leftarrow (g_1(\overline{x}, \overline{y}), ... g_n(\overline{x}, \overline{y}))$ para indicar que las variables $y_i, 1 \le i \le n$ son reemplazados por $g_i(\overline{x}, \overline{y})$ simultáneamente es decir.., todos el $g_i$ son evaluados antes de cualquier $y_i$ está cambiado. Por ejemplo, si $y_1 = 1$ y $y_2 = 2$ la asignación $(y_1, y_2) \leftarrow (y_1 + 1, y_1 + y_2)$ rendimientos $y_2 = 3$ no $y_2 = 4$ .

En lenguajes de computación la instrucción $x=x+1$ (si se permite) no es una identidad numérica; hay no significados razonables del concepto "número" que pueden dar sentido a una declaración como : "un número es igual a sí mismo más $1$ ".

En el contexto de los lenguajes informáticos, cuando utilizamos la instrucción

$x_1 \leftarrow x_1 + 1$

el símbolo $x_1$ no es un variable es un constante .

Es el nombre de un lugar de almacenamiento (matriz o registro de memoria), como el cuadrado de la cinta de una máquina de Turing, y la simple declaración anterior es una instrucción "compleja" que especifica la siguiente operación :

i) leer el contenido del lugar de almacenamiento ("celda") $x_1$ digamos $n$ );

ii) añadir $1$ a ese número;

iii) borrar el contenido de la célula $x_1$ ;

iv) escribe el número $n+1$ en la celda $x_1$ .

Durante el contexto de la ejecución del programa, el nombre $x_1$ no cambiará su denotación (la "célula").

El proceso anterior puede describirse de la siguiente manera: tenemos una caja con seis huevos dentro y sacamos los huevos de la caja. Luego añadimos un nuevo huevo y finalmente ponemos los siete huevos en la caja:

la caja no cambia, su contenido ha cambiado.

1voto

logc Puntos 169

Tenga en cuenta que asignación de "variables informáticas" ocurre en algunos lenguajes de programación, a saber, los del paradigma de programación imperativa, como C o Java. En otros paradigmas de programación esto está explícitamente prohibido - por ejemplo, la programación funcional o lógica.

En Haskell o Prolog, una declaración de la forma

x = x + 1

llevará a un error de compilación. Las variables son inmutables, como las de las matemáticas. Esto lleva naturalmente a un énfasis en funciones que transforman la entrada en la salida, no en datos que se reescribe de la entrada a la salida. (Y muchas más ventajas en el sentido de acercar la programación a las matemáticas, como funciones que devuelven siempre la misma salida dada la misma entrada ).

Probablemente la confusión surge de usar las mismas palabras en ambos campos para cosas diferentes. Una variable en la programación, como has notado, es "una caja con un nombre". Más formalmente, es una referencia a una dirección en la memoria. Lo que contiene esta parte de la memoria no podemos saberlo a partir de la variable; podemos saber algunas cosas, como su longitud si se trata de una variable mecanografiada, pero no el valor real a menos que miremos el contenido de la memoria.

Las "variables de la computadora" podrían compararse con una índice dentro de un vector o matriz . Si consideramos la memoria como un vector $m$ entonces una variable es su $i$ -el elemento

$$ \overrightarrow{m}_{i}, 0 < i < \left| \overrightarrow{m} \right| $$

Esto supone que todas las variables necesitan precisamente un elemento de memoria para mantenerse. Esto probablemente no es cierto, ya que un número de doble precisión requiere el doble de memoria que un flotador. Así que, una variable de ordenador podría ser comparada con una gama de elementos dentro de un vector .

$$ [\overrightarrow{m}_{i}, \overrightarrow{m}_{j}] , 0 < i < j < \left| \overrightarrow{m} \right| $$

Podrías imaginar diferentes estados de memoria como diferentes vectores $\overrightarrow{m}'$ , $\overrightarrow{m}''$ ... La indexación de esos diferentes vectores en los mismos índices $i$ , $j$ (por lo tanto, la misma "variable informática") arrojaría elementos diferentes cada vez.

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