Что такое пересечение двух языков?
Учитывая языки
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
не является регулярным, но его можно реализовать с помощью очень похожего КПК.