Что такое пересечение двух языков?
Учитывая языки
L1={anb2m|n,m≥1}
L2={anb3n|n≥0}
L = L1 ∩ L2
Я знаю, что L1 является регулярным языком и L2 может быть представлен КПК.
Но я не понимаю ответа, который гласит, что L является {a2nb6n|n≥1}. Как было вычислено это решение?1 ответ:
Язык - это просто набор (допустимых строк), поэтому то, что мы имеем здесь, на самом деле просто простая задача в целочисленной арифметике. Стоит только снять элегантный костюм формальных языков, чтобы прийти к сути проблемы.
Оба множества
L1иL2являются подмножествами{acount(a)bcount(b)|j,k≥0}; то есть они состоят из некоторого числа a s, за которым следует некоторое число b s. условиеL1ограничиваетcount(b)быть положительным четным числом, так как оно должно быть2mдля некоторое целое числоm≥1. Условие дляL2ограничиваетcount(b)быть точно3×count(a).Теперь пересечение двух множеств, определенных предикатами, - это множество элементов, таких, что оба предиката истинны. Таким образом,
count(b)должно быть одновременно делимо на 2 и на 3, Что означает, что оно должно быть делимо на 6; другими словами, оно должно быть6nдля некоторого положительного целогоn. А это значит, чтоcount(a)должно быть2n, Поскольку существует ровно в три раза больше b s. предоставленный ответ.Как
L2,Lне является регулярным, но его можно реализовать с помощью очень похожего КПК.