Мы можем довольно легко показать, что нам нужно по крайней мере шесть символов, чтобы надеяться создать CFG в CNF для этого языка, признав, что мы можем в лучшем случае удвоить сгенерированную длину строки с каждой постановкой, и мы должны начать с 2^0:
A_21 := ...
A_16 := A_16 A_16
A_8 := A_4 A_4
A_4 := A_2 A_2
A_2 := A_1 A_1
A_1 := a
Затем мы можем показать, что в CNF нет грамматики с шестью произведениями, которые генерируют наш целевой язык. Мы начинаем рассуждать, строя грамматику снизу вверх.
- У нас должно быть
A_1 := a
, чтобы получить любые строки.
- Мы должны
A_2 := A_1 A_1
получить любую строку с длиной больше 1.
- Теперь мы можем генерировать либо
A_3
или пропустить что и генерировать A_4
, или обоих. Рассмотрим каждый из этих случаев ниже.
Случай 1: A_3
- Добавляет
A_3 := A_2 A_1
.
- У нас уже есть 3 производства, и мы знаем, что нам нужна одна из форм
A_21 := X Y
. Таким образом, мы можем добавить еще два. Даже если мы добавим самые большие производственные мощности, которые теперь возможны - A_6
и A_12
- мы не можем производить A_21
по мере необходимости (мы можем изготовить не более A_18 := A_6 A_12
. Поэтому добавление A_3
не может получить нам грамматику, которая генерирует наш язык в шести постановках.
Случай 2:... A_4
- Добавляем
A_4 := A_2 A_2
- у нас уже есть 3 производств, и знаем, что нужно один вид
A_21 := X Y
Таким образом, мы можем добавить до более двух Наша Optio ns в настоящее время составляют A_5
, A_6
и A_8
. A_5
и A_6
по той же причине, о которой мы говорили выше для случая 1. A_8
, однако, не подводит к этому рассуждению, поэтому мы добавляем A_8 := A_4 A_4
.
- Теперь у нас есть только одна продукция, и она должна быть либо
A_20, A_19, A_17
, либо A_13
. Мы не можем сгенерировать ни одно из них, используя наши существующие постановления.
Мы таким образом исключили грамматику с 6 постановками. Если вы попытаетесь найти грамматику с 7 произведениями, используя приведенные выше рассуждения, вы найдете несколько. Поскольку мы знаем, что в CNF есть грамматики с 7 постановками, а у вас нет 6, вы закончили.Вот несколько из 7-этажных грамматик:
S := A_18 A_3
A_18 := A_9 A_9
A_9 := A_6 A_3
A_6 := A_3 A_3
A_3 := A_2 A_1
A_2 := A_1 A_1
A_1 := a
S := A_17 A_4
A_17 := A_9 A_8
A_9 := A_8 A_1
A_8 := A_4 A_4
A_4 := A_2 A_2
A_2 := A_1 A_1
A_1 := a
S := A_16 A_5
A_16 := A_8 A_8
A_8 := A_4 A_4
A_5 := A_4 A_1
A_4 := A_2 A_2
A_2 := A_1 A_1
A_1 := a
S := A_15 A_6
A_15 := A_9 A_6
A_9 := A_6 A_3
A_6 := A_3 A_3
A_3 := A_2 A_1
A_2 := A_1 A_1
A_1 := a
S := A_14 A_7
A_14 := A_7 A_7
A_7 := A_4 A_3
A_4 := A_3 A_1
A_3 := A_2 A_1
A_2 := A_1 A_1
A_1 := a
S := A_13 A_8
A_13 := A_8 A_5
A_8 := A_5 A_3
A_5 := A_3 A_2
A_3 := A_2 A_1
A_2 := A_1 A_1
A_1 := a
S := A_12 A_9
A_12 := A_9 A_3
A_9 := A_6 A_3
A_6 := A_3 A_3
A_3 := A_2 A_1
A_2 := A_1 A_1
A_1 := a
S := A_11 A_10
A_11 := A_10 A_1
A_10 := A_8 A_2
A_8 := A_4 A_4
A_4 := A_2 A_2
A_2 := A_1 A_1
A_1 := a
И есть еще много. Жесткая часть показывала, что не было никаких 6 постановок.
Я думаю, что понял. Кто-нибудь знает, почему это не сработает? S -> АТ \t \t \t \t Т -> DD \t \t \t \t \t D -> BB \t \t \t \t \t Б -> СА \t \t \t \t \t С-> ЕЕ \t \t \t \t \t Е -> AA \t \t \t \t \t A -> a – Brittney
Да, ваш ответ вполне приемлем: он имеет минимальное количество производств. По моей терминологии это была бы грамматика 21 = 20 + 1; 20 = 10 + 10; 10 = 5 + 5; 5 = 4 + 1; 4 = 2 + 2; 2 = 1 + 1; 1 = 1. Жесткая часть показывает, что нет ни одного из 6 постановок; Смотри ниже. – Patrick87