Para responder a esta pregunta, primero debemos tener una definición precisa de lo que es una "cadena".
La formalización habitual es que tenemos un "alfabeto" que contiene un número finito de símbolos. El "alfabeto" no consiste necesariamente en las letras de un idioma; por ejemplo, podríamos tener un alfabeto de $36$ símbolos ( $26$ cartas y $10$ dígitos numéricos) o un alfabeto de $1000$ símbolos. Una "cadena" es una secuencia de estos símbolos, posiblemente con repeticiones. Una "cadena" puede ser tan larga como queramos, así que dada cualquier cadena siempre hay otra más larga. En podría incluir cadenas de longitud infinita en nuestro modelo, pero (al menos por ahora) consideremos sólo cadenas de longitud finita.
Ahora observa que si tomas el alfabeto formado por los diez dígitos decimales 0, 1, 2, 3, 4, 5, 6, 7, 8, y 9, formamos cadenas sobre este alfabeto, y luego escribimos un punto decimal antes del primer símbolo de cada una de estas cadenas, tenemos todas las fracciones decimales terminales en el intervalo $[0,1).$
Ahora bien, si este conjunto estuviera estrictamente ordenado por valor numérico, casi habríamos terminado. Desafortunadamente, estas fracciones decimales terminales incluyen muchas que terminan con uno o más ceros, y estos son numéricamente iguales a los decimales con menos dígitos.
Así que para cualquier decimal con ceros al final, cuenta el número de ceros al final y escribe ese número antes de el punto decimal. Por ejemplo, de esta forma la cadena "123000" corresponde al número $3.123.$ Utilícelo como regla para definir una asignación $f$ a partir de cadenas sobre los dígitos decimales hasta números racionales. Cada cadena sobre este alfabeto se mapeada a un número único (diferente de cualquier otra cadena). Ahora bien, si $X$ y $Y$ son dos cadenas cualesquiera sobre este alfabeto, digamos que $X < Y$ si $f(X) < f(Y).$
Ahora observa que cualquier número decimal $x$ con un número finito de dígitos es igual a $f(X)$ para alguna cadena $X$ de dígitos decimales; específicamente, $X$ consiste en todos los dígitos de $x$ después del punto decimal (excluyendo los ceros finales), seguido de $\lfloor x \rfloor$ ceros.
Entre dos números decimales terminales cualesquiera hay otro número decimal terminal. Por lo tanto, para cualquier cadena $X$ y $Z$ tal que $X < Z,$ hay un número decimal de terminación $y$ tal que $f(X) < y < f(Z).$ Construir la cadena $Y$ tal que $f(Y) = y,$ y tenemos $X < Y < Z.$
Cualquier otro alfabeto puede tratarse de forma similar. Para un alfabeto de $N$ símbolos, dar a cada símbolo un valor único en el rango $0$ a $N-1,$ y definir la ordenación de las cadenas como hicimos para los diez dígitos decimales, pero utilizando una base- $N$ representación en lugar de la base $10$ si $N \neq 10.$
Hay algunas pequeñas complicaciones si permitimos cadenas infinitamente largas.
Por cierto, ¿qué pasa si no estipulamos explícitamente que nuestro alfabeto tiene una número finito de símbolos? Los alfabetos finitos son la norma para los ejercicios de teoría de la computación. (o al menos lo eran cuando yo estudiaba ese campo), y esto tiene sentido si imaginamos que cada símbolo debe escribirse en un número fijo de bits de memoria en un ordenador, como $8$ -cadenas ANSI de bits. Pero hay codificaciones que permiten codificar diferentes "caracteres" en diferentes número de bits; por ejemplo, Unicode tiene varios $8$ -bit, entonces un número de $16$ -y $24$ -de bits. Podríamos definir una codificación "Unicode infinitamente extendida" que repitiera este patrón para simplemente aumentar el tamaño del siguiente grupo de caracteres en $8$ bits, indefinidamente. Y entonces podríamos definir el orden de los caracteres de este alfabeto para que siempre haya un $8n+8$ -que precede léxicamente a cualquier carácter carácter de $8n$ o menos bits. Usando tal alfabeto, hay sería sea una cadena que se encuentre léxicamente entre "4a" y "4a0", y otras cadenas que léxicamente entre otras dos cadenas cualesquiera que podamos elegir como contraejemplos.
Pero las cadenas infinitas y los alfabetos infinitos son una digresión. Las cadenas finitas sobre alfabetos finitos son suficientemente interesantes para el propósito de esta pregunta.
0 votos
Bueno, en teoría, claro. Podrías mapear un conjunto contable a los racionales, y los racionales son densos. Usa la función de diagonalización de Cantor para convertir cada cadena en un racional. Sería computacionalmente feo, sin embargo, no sé si hay una manera práctica de hacerlo.