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.