两种语言的交集是什么?
What is the intersection of two languages?
给定语言
L<sub>1</sub>={a<sup>n</sup>b<sup>2m</sup>|n,m≥1}
L<sub>2</sub>={a<sup>n</sup>b<sup>3n</sup>|n≥0}
L = L<sub>1</sub> ∩ L<sub>2</sub>
我知道 L<sub>1</sub>
是常规语言 L<sub>2</sub>
可以用PDA表示。
但我不明白 L
是 {a<sup>2n</sup>b<sup>6n[=29 的答案=]|n≥1}
。这个解是如何计算出来的?
语言只是一组(有效字符串),所以我们这里实际上只是整数算术中的一个简单问题。只需脱去形式语言的华美外衣,就能触及问题的本质。
两个集合L<sub>1</sub>
和L<sub>2</sub>
是 {acount(a)bcount(b)|j,k≥0}[= 的子集46=];也就是说,它们由一些 a 后跟一些 b 组成。 L<sub>1</sub>
的条件限制 count(b)
为正偶数,因为对于某个整数它必须是 2m
m≥1
。 L<sub>2</sub>
的条件限制 count(b)
正好是 3×count(a)
。
现在,用谓词定义的两个集合的交集是使两个谓词都为真的元素集合。所以count(b)
必须既能被2整除又能被3整除,也就是必须能被6整除;换句话说,对于某个正整数 n
,它必须是 6n
。这意味着 count(a)
必须是 2n
,因为 b 正好是其三倍。这给了你所提供的答案。
像L<sub>2</sub>
,L
不是正则的,但是可以用非常相似的PDA实现。
给定语言
L<sub>1</sub>={a<sup>n</sup>b<sup>2m</sup>|n,m≥1}
L<sub>2</sub>={a<sup>n</sup>b<sup>3n</sup>|n≥0}
L = L<sub>1</sub> ∩ L<sub>2</sub>
我知道 L<sub>1</sub>
是常规语言 L<sub>2</sub>
可以用PDA表示。
但我不明白 L
是 {a<sup>2n</sup>b<sup>6n[=29 的答案=]|n≥1}
。这个解是如何计算出来的?
语言只是一组(有效字符串),所以我们这里实际上只是整数算术中的一个简单问题。只需脱去形式语言的华美外衣,就能触及问题的本质。
两个集合L<sub>1</sub>
和L<sub>2</sub>
是 {acount(a)bcount(b)|j,k≥0}[= 的子集46=];也就是说,它们由一些 a 后跟一些 b 组成。
L<sub>1</sub>
的条件限制 count(b)
为正偶数,因为对于某个整数它必须是 2m
m≥1
。 L<sub>2</sub>
的条件限制 count(b)
正好是 3×count(a)
。
现在,用谓词定义的两个集合的交集是使两个谓词都为真的元素集合。所以count(b)
必须既能被2整除又能被3整除,也就是必须能被6整除;换句话说,对于某个正整数 n
,它必须是 6n
。这意味着 count(a)
必须是 2n
,因为 b 正好是其三倍。这给了你所提供的答案。
像L<sub>2</sub>
,L
不是正则的,但是可以用非常相似的PDA实现。