¿Por qué el lenguaje de las palabras a * b * es decidible?

Aquí hay una máquina explícita, con 4 estados {A, B, Aceptar, Rechazar}. La máquina se detiene en los estados Aceptar y Rechazar, por lo que solo necesitamos reglas de transición para los otros dos. En el estado A todavía no hemos visto ninguna “b”. En el estado B, hemos visto cero o más “a” seguidos de al menos una “b”. Comenzamos en el estado A.

  • A, final -> Aceptar
  • A, a -> A
  • A, b -> B
  • B, final -> Aceptar
  • B, a -> Rechazar
  • B, b -> B

Esto aceptará cualquier cadena finita de cero o más “a” s seguida de cero o más “b” s. Si hubiera un número infinito de “a” s, o un número finito de “a” s seguido de un número infinito de “b” s, la máquina no se detendría, pero se detendría en cualquier cadena infinita que tuviera un ” a ”después de una“ b ”, por lo que la función Rechazar funciona perfectamente incluso en cadenas infinitas. La función Aceptar debe continuar porque “todavía no está segura”.

Este tipo de media capacidad de decisión para casos infinitos es bastante común. Por ejemplo, en el Problema de detención, puede (eventualmente) identificar todos los programas que se detienen, pero no puede identificar todos los programas que no se detienen.

Hay muchos idiomas regulares que no son finitos; L := a*b* es uno de ellos. Por ejemplo, contiene el siguiente conjunto infinito de cadenas:

“”
“una”
“Automóvil club británico”
“aaa”
“aaaa”

¡Y eso sin siquiera traer ningún b s!

En cuanto a por qué este lenguaje es decidible: voy a dar un argumento informal basado en la hipótesis de Church-Turing. Como señala Justin, cada lenguaje regular es decidible, pero eso no es realmente emocionalmente satisfactorio a menos que haya entendido la prueba (también: debe probar cuidadosamente el teorema de que cada lenguaje regular es decidible).

Sin embargo, para dar un argumento más formal, tendríamos que ser muy explícitos sobre lo que significa “decidible” en su contexto. ¿Tiene que dar una máquina de Turing explícita que se detenga precisamente en todas las cadenas de L , y otra que se detenga precisamente en todas las cadenas que no están en L ? ¿Necesita dar una expresión de cálculo lambda que devuelva 1 en cadenas de L y 0 en las demás? ¿Qué modelo formal de computación puede usar?

De todos modos: algoritmo informal para decidir L :

  • Lea la cadena de izquierda a derecha. Si en algún momento nos encontramos con el extremo derecho de la cadena, devuelve true .
  • Lee hasta que encuentres un personaje que no sea a . Si tampoco es b , devuelve false .
  • De lo contrario, continúe leyendo hasta que encuentre un carácter que no sea b , en cuyo momento devuelva false .

¡Eso es! No es el algoritmo más bonito, pero es lo suficientemente fácil como para que un procesador de cuarto grado o procesador AMD pueda llevarlo a cabo. En particular, es fácil demostrar que este algoritmo siempre regresa (porque nunca da marcha atrás).

Cada idioma finito es regular, pero no todos los idiomas regulares son finitos. [math] a ^ * b ^ * [/ math] puede describirse mediante una expresión regular y, por lo tanto, es un lenguaje regular.

A partir de los detalles de la pregunta, creo que puede estar confundido: las secuencias infinitas de a’s o b’s no están en el idioma en absoluto. Solo secuencias finitas (pero arbitrariamente largas). Para que puedan escanearse y decidirse en tiempo finito sin problemas.

More Interesting

Cómo obtener la longitud del dígito de (x * y * z * ...) / (a ​​* b * c * ...), donde x, y, z, a, b, c son enteros, pero (x * y * z. .) o (a * b * c ..) sería muy grande

¿Cuál es el algoritmo eficiente para encontrar la suma de los dígitos del factorial de un número (el número puede ser hasta 500), es decir, para num = 5, ans = 3 (como 5! = 120)?

¿Por qué es importante la teoría de grafos?

¿Cuál es el polinomio más pequeño que puede atravesar todos los conjuntos de n puntos? ¿Hay uno?

¿Cuál es el algoritmo más eficiente para encontrar todos los picos 2D en una matriz?

¿Cuál es la diferencia entre matemática y ciencia?

¿Qué partes de las matemáticas son necesarias para que un ingeniero informático las entienda? Específicamente, ¿cuánto cálculo debe saber un ingeniero informático?

Cómo probar la independencia entre variables continuas

¿Cómo podría implementar un programa que calcule [math] e ^ x [/ math] sumando los primeros 100 términos de su expansión en serie?

¿Cuáles son algunas propiedades interesantes de una caminata aleatoria en un gráfico?

¿Cuáles son sus explicaciones intuitivas favoritas de temas complejos?

¿Qué es el helecho Barnsley?

Criptografía: ¿Qué sucedería si alguien encuentra un algoritmo significativamente más rápido para factorizar enteros grandes?

No puedo entender diferentes algoritmos para la programación competitiva debido a las matemáticas ¿qué cursos de matemáticas necesito tomar para ser fuerte en CP?

Cómo resolver la recurrencia [matemáticas] T (n) = 3T \ left (\ frac {n} {2} \ right) + n \ sqrt {n + 1}