Язык - это возможно бесконечное множество конечных слов, написанных некоторым конечным алфавитом. Поскольку алфавит конечен, а длина каждого слова конечна, слова любого языка перечислимы в том смысле, что существует перечисление. Другими словами, размер любого языка не более чем счетно бесконечен.
Однако, поскольку любое подмножество замыкания Клини в алфавите является языком, количество языков не бесконечно. Следовательно, нет никакого перечисления языков. символы). [Примечание 1] Таким образом, количество возможных грамматик Типа 0 счетно бесконечно, и не может быть соответствия между набором грамматик и набором языков.
Однако. Существование языков (то есть наборов), для которых не существует порождающей грамматики, не обязательно означает, что существует какой-то другой способ описания этих языков, который является «более выразительным», чем порождающие грамматики. Любое описание, которое может быть записано в виде конечной строки с использованием конечного алфавита, может описывать только счетное бесконечное множество множеств. Будет ли это одна и та же счетная бесконечность, будет зависеть от формализмов, и вообще не будет никакого алгоритма, который может продемонстрировать гомоморфизм. Но некоторые эквивалентности известны (например, эквивалентность с машинами Тьюринга, которая является особенно интересной эквивалентностью).
Итак, у нас есть интересная небольшая загадка, которая (конечно) связана с теоремами Гёделя о неполноте. То есть языков больше, чем способов описания языка, независимо от того, какую систему мы используем для описания языка. Итак, вопрос «Как мы можем описать язык, для которого нет описания?» не имеет хорошего ответа (и если мы ответим на него, вызвав некоторый набор "Сью", то все равно будет бесчисленное множество возможных наборов, для которых не существует имени).
Пока все это собиралось в infinitude интересен, у него есть несколько проблем:
Он имеет очень мало (если вообще имеет) отношение к программированию, поэтому сомнительно, что он включен в topi c для StackOverflow.
Курт Гёдель и Георг Кантор, два математика, ответственные за большинство концепций в этом ответе, оба страдали тяжелой депрессией. Просто говорю.
Примечания
- Хотя на первый взгляд может показаться, что алфавит для грамматики типа 0 может быть произвольно больше, чем алфавит описываемого языка, на самом деле это не так. Алфавит грамматики состоит из целевого алфавита плюс конечного набора нетерминалов и символа →; нетерминалы могут быть записаны с использованием чисел в любой удобной основе, например, в двоичной системе. Таким образом, требуются только три дополнительных символа (и вы можете уменьшить их до двух, произвольно назначив одно из нетерминальных чисел стрелкой). (Может показаться, что вам нужен третий символ для разграничения имен нетерминалов, но вы можете использовать кодировку Фибоначчи для создания кодов, которые всегда начинаются с 1 и никогда не включают две единицы, так что вы можете использовать дополнительную 1 в начало однозначно обозначить начало символа.)