[英]Is L = {a^mb^nc^k | if (m=n) then (n=k) } CFL or not?
语言 L = {a^mb^nc^k | if (m = n) then (n = k)} 是一种上下文无关语言,正是因为第二个推导中给出的原因:条件 if (m = n) then (n = k) 不仅在 m = 时为真n 和 n = k,而且当 m 不等于 n 时。 如果条件是 (m = n) 和 (n = k),则该语言将不是上下文无关的,因为此条件等效于 m = n = k。
我们可以通过显示 L 中的任何内容在 L2 中来证明该语言是上下文无关的正确推导,反之亦然。
假设字符串 w 在我们的语言 L 中。那么要么 m = n,要么不。 如果 m = n,则 n = k。 但是字符串 w 在 L2 中,因为 L2 是两种语言的并集,其中一种包含 n = k 的所有字符串。 如果 m = n 不是这种情况,则字符串 w 在 L2 中,因为 L2 是两种语言的并集,其中另一种是 m 和 n 不相等的所有字符串的语言。 所以 L 中的任何字符串都在 L2 中。
假设字符串 w 在 L2 中。 那么要么 m = n 为假,要么 n = k 为真。 假设 m = n 为假。 那么条件 if (m = n) then (n = k) 是空洞的(因为假设是错误的,一切都来自矛盾)。 如果 n = k 为真,那么无论假设的真值如何,蕴涵 if (hypothesis) then (n = k) 必须为真。 所以 L2 中的任何字符串都在 L 中。
因为 L 和 L2 是彼此的子集,所以它们必须相等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.