Я новичок в Isabelle/HOL (хотя и не в HOL), поэтому решил начать обучение, работая над примерами в отличный "prog-prove" tutorial.Индукция по длине, а затем по индуктивному правилу для контекстной свободной грамматики (пример из прог-доказы)
Я застрял в контексте бесплатной грамматики (упражнение 3.5 на стр. 43). В этом вопросе вы получаете два контекстных бесплатных грамматики:
S → ε | aSb | SS
T → ε | TaTb
, и вас попросят доказать, что они описывают один и тот же язык. Доказательство того, что элементы из Т лежат на языке, описанном S, легко, но я борюсь с другим направлением. В частности, я хочу показать, что язык, описанный Т, закрывается при конкатенации.
Это неофициальное доказательство. Предположим, что u
и v
лежат на этом языке. Затем мы хотим доказать, что uv
лежит на этом языке. Продолжайте индукцию по длине v
. Если length v = 0
, то v
- это пустая строка и uv = u
, и все готово. В противном случае рассмотрим правила производства для T. Очевидно, что v
не является пустой строкой, поэтому он должен иметь вид waxb
для некоторого w, x
на этом языке. Поскольку w
короче v
, (сильная) индукция показывает, что uw
должен лежать на языке. Теперь используйте второе правило производства.
Это доказательство кажется довольно сложным, поэтому я подозреваю, что это не тот, о котором говорил автор prog-proof. Поэтому у меня есть два вопроса:
Что (неофициально или официально) является доказательством того, что автор упражнения надеется использовать?
(Более технический) Как я могу выразить свое неофициальное доказательство выше в Isabelle/HOL?
Моя попытка/верчение до сих пор начинается со следующим:
lemma T_mult: "cfT u ==> cfT v ==> cfT (u @ v)"
apply (induction "length v")
apply (auto)
apply (induction v rule: cfT.induct)
и второй индукционный сбой приложения, но я предполагаю, что это потому, что я прошу Изабеллу делать неправильные вещи. ..
Большое спасибо за ответ, но я все еще смущен. Неформально я не понимаю, как может работать доказательство, основанное только на форме 'x' и' y': после того, как я написал 'y' как' uavb', мне все равно нужно сделать вывод, что 'T (x @u) '. Почему это должно быть правдой? –
Это не просто использование формы 'x' и' y', правило 'induct: T.induct' выше делает индукцию над структурой' T y', которая даст вам индуктивную гипотезу для работы. – chris
@RupertSwarbrick См. Также мое обновление выше. – chris