Chương 8
TÍNH CHẤT CỦA NGÔN NGỮ PHI NGỮ CẢNH
Họ ngôn ngữ phi ngữ cảnh ở vò trí trung tâm trong ngôn ngữ hình thức.
Ngôn ngữ này bao gồm nhiều họ ngôn ngữ quan trọng. Ta chỉ xét đến ngôn ngữ
phi ngữ cảnh đơn đònh và ngôn ngữ phi ngữ cảnh chính qui.
8.1 HAI BỔ ĐỀ BƠM (Pumping)
Bổ đề bơm đã cho trong chương 4 là một công cụ hữu hiệu để biết
được ngôn ngữ nào đó có là ngôn ngữ chính qui hay không. Tương tự bổ đề
cũng được biết đến cho những họ ngôn ngữ khác. Trong chương này ta bàn đến
hai kết qủa Một, là cho ngôn ngữ phi ngữ cảnh trong tổng quát . Hai, một loại
ngôn ngữ phi ngữ cảnh đã được giới hạn.
Bổ đề Bơm cho ngôn ngữ phi ngữ cảnh
Đònh lý 8.1
Cho L là một ngôn ngữ phi ngữ cảnh vô hạn, thì tồn tại một số
nguyên dương m sao cho bất kỳ một chuỗi w ∈ L với |w| ≥ m có thể được
phân rã thành
w = uvxyz (8.1)
với |vxy| ≤ m (8.2)
và |vy| ≥ 1 (8.3)
sao cho
uv
i
xy
i
z ∈ L (8.4)
với mọi i = 0,1,2,3, . . .
Chứng minh
Xem xét ngôn ngữ L – {λ} và văn phạm G không có luật sinh λ và đơn vò
chấp nhận nó. Vì chiều dài vế phải của luật sinh bò giới hạn, gọi là k, chiều dài
của dẫn xuất của chuỗi bất kỳ w ∈ L ít nhất là |w|/k. Vì L vô hạn, nên có
những dẫn xuất dài tùy ý.
115
Hãy coi một dẫn xuất trái nhất, vì không có giới hạn số biến của G,
nhưng chiều dài của dẫn xuất thì không, ít nhất có một biến, gọi là A, phải ở vò
trí trái nhất. Do vậy, ta có một dẫn xuất.
S uAy
1
uvAy
2
y
1
uvxy
2
y
1
(8.5)
Với u, v, x trong T* và y
1
, y
2
∈ (V ∪ T)*
Vì G không có luật sinh λ hay đơn vò, mỗi bước trong dẫn xuất hoặc là tạo lập
một tận, hay tăng chiều dài của hình thức câu . Điều này suy ra rằng
| vy
2
| ≥ 1
dạng (8.5) cho ta
A vAy
2
và A x
là có thể. Điều này chỉ ra những dẫn xuất
S uxy
1
và S uv
i
xy
i
2
y
1
, i = 1,2 . . . (8.6)
là có thể.
Cuối cùng, dạng câu (8.5) phải giảm đến chuỗi tận w, vì vậy ta có
y
2
y
y
1
z
với y, z ∈ T*. Do thế w = uvxyz và (8.6) suy ra rằng uv
i
xy
i
z ở trong L
bởi vì |vy
2
| ≥ 1, thỏa (8.3). Để thỏa (8.2). Ta lấy A để mà A x không có
biến lặp lại ở vò trí trái nhất . Do vậy |x| bò giới hạn không phụ thuộc vào w,
thỏa (8.2)
Ví dụ 8.1
Chỉ ra rằng ngôn ngữ L = {a
n
b
n
c
n
: n ≥ 0} là không phi ngữ cảnh
Một khi đối phương đã chọn m, ta lấy một chuỗi a
m
b
m
c
m
trong L. Bấy giờ
đối phương có một số cách chọn . Nếu họ chọn vxy chỉ chứa toàn kí hiệu a thì
chuỗi được bơm hiển nhiên là không ở trong L .Nên họ chọn một chuỗi có số
kí hiệu a và b bằng nhau thì chuỗi được bơm a
k
b
k
c
m
với k = m có thể được
sinh ra, và một lần nữa ta phải sinh ra một chuỗi không ở trong L. Sự thực đối
phương chỉ có một cách có thể chặn không cho ta thắng được là lấy chuỗi vxy
sao cho vy có cùng số ký hiệu a,b và c. Nhưng điều này không thể do giới
hạn bởi (8.2) . Vì vậy L là không phi ngữ cảnh.
116
Ví dụ 8.2
Xem xét ngôn ngữ
L = {ww : w ∈ {a, b}*}
Ngôn ngữ này thì gần giống như ngôn ngữ phi ngữ cảnh trong ví dụ 5.1.
Nhưng nó không phi ngữ cảnh
Xem xét chuỗi a
m
b
m
a
m
b
m
Hình 8.1
Dễ thấy, đối phương không có thể chọn vxy, ta luôn có mâu thuẫn với
bổ đề bơm. Cách chọn như hình 8.1, ta chọn i = 0, được chuỗi có dạng.
a
k
b
j
a
m
b
m
, k
<
m hay j
<
m
không thuộc L. Cho đối phương cách chọn khác, lý luận tương tự, ta
kết luận L không phi ngữ cảnh.
Ví dụ 8.3
Chỉ ra ngôn ngữ
L = {a
n!
: n ≥ 0) là không phi ngữ cảnh
Trong ví dụ 4.11 ta đã chỉ ra ngôn ngữ này không chính qui. Tuy
nhiên, một ngôn ngữ trên bộ chữ cái với ký tự đơn, có một chút khác
giữa đònh lý 8.1 và bổ đề bơm cho ngôn ngữ chính qui. Chuỗi được bơm
gồm một ký tự đơn, chuỗi mới có thể được sinh ra do đònh lý 8.1 hay
đònh lý 4.8. Do vậy, ta có thể lý luận tương tự 4.11 để chỉ ra L là không
phi ngữ cảnh.
Ví dụ 8.4
Chỉ ra ngôn ngữ
L = { a
n
b
j
: n = j
2
}
Không phi ngữ cảnh.
Cho trước m trong đònh lý 8.1. ta chọn chuỗi a
m
2
b
m
. Đối phương có một
số cách chọn. Xem hình 8.2. Bơm i lần, ta được một chuỗi mới có
117
a . . . a b . . . b a . . . a b . . . b
m
2
+ (i – 1)k1 ký tự a và m + (i –1)k2 kí tự b.
Nếu đối phương chọn k1 ≠ 0, k2 ≠ 0, ta chọn i = 0.
Ta có
( m - k2)
2
≤ ( m – 1)
2
= m
2
– 2m + 1
<
m
2
– k1
Kết qủa là không ở trong L
Nếu đối phương chọn k1 = 0, k2 ≠ 0 hay k1 ≠ 0, k2 = 0, thì, một lần nữa với
i = 0, chuỗi được bơm không có trong L. Ta kết luận L không phi ngữ cảnh.
Hình 8.2
Bổ đề pumping cho ngôn ngữ tuyến tính
Trước đây chúng ta đã phân biệt giữa văn phạm phi ngữ cảnh tuyến tính và
không tuyến tính. Bây giờ chúng ta thực hiện sự phân biệt tương tự giữa những
ngôn ngữ.
Đònh nghóa 8.1
Ngôn ngữ phi ngữ cảnh L là tuyến tính nếu tồn tại một văn phạm phi
cảnh tuyến tính G sao cho L = L(G).
Rõ ràng ngôn ngữ tuyến tính là phi ngữ cảnh nhưng ngược lại thì chưa
chắc đúng
Ví dụ 8.5
Xem ngôn ngữ L = {w : n
a
(w) = n
b
(w)}
Văn phạm sau đây sinh ra nó, thuộc loại văn phạm không tuyến tính
S -> SS
S -> λ
S -> aSb
S -> bSa
Do vậy, ngôn ngữ này không nhất thiết phải tuyến tính
118
Dó nhiên , một văn phạm không tuyến tính thì không suy ra được ngôn ngữ
sinh ra bởi văn phạm ấy là không tuyến tính. Nếu chúng ta muốn chứng minh một
ngôn ngữ không tuyến tính, thì phải chỉ ra rằng không tồn tại một văn phạm tuyến
tính tương đương cho nó . Một cách thông thường, để chứng minh một ngôn ngữ
không tuyến tính là thiết lập các tính chất cho ngôn ngữ đó, rồi chỉ ra một ngôn
ngữ phi ngữ cảnh nào đó không có đòi hỏi tính chất này.
Đònh lí 8.2
Coi L là ngôn ngữ tuyến tính vô hạn, tồn tại số nguyên dương m, sao cho bất
kỳ chuỗi w ∈ L với {w{≥ m có thể được phân rã w = uvxyz với
{uvyz{ ≤ m (8.7)
{vy{ ≥ 1 (8.8)
sao cho
uv
i
xy
i
z
∈
L (8.9)
với mọi i = 0,1,2 . . .
Chú ý : Kết luận của đònh lí này khác đònh lí 8.1 chỉ ở (8.7). Chuỗi v và y được
bơm phải nằm bên trong m kí hiệu của bên trái và cuối bên phải của w tương
ứng. Chuỗi x ở giữa có chiều dài tùy ý.
Chứng minh
Bởi vì, ngôn ngữ là tuyến tính, thì tồn tại một văn phạm tuyến tính G sinh
ra nó. Dùng lý luận như đònh lý 8.1. Ta cũng cần G không chứa luật sinh λ hay
đơn vò. G tuyến tính nên ta phải có u, v, y
1
, y
2
∈
T* . Coi A là một biến đầu tiên,
mà cuối cùng được lặp lại. Trong dẫn xuất riêng phần
S uAz
Có thể có ít nhất | V| bước ( vì không có biến chưa được lặp lại), vì vậy u và z
có thể bò giới hạn.
Tương tự trong
uAz uvAyz
Có thể có |V| bước, điều này dẫn đến kết luận chuỗi u, v, y bò giới hạn nghiêm
ngặt và thỏa (8.7). Phần lý luận còn lại, tương tự như đònh lí 8.1.
119
Ví dụ 8.6
Ngôn ngữ L = { w : n
a
(w) = n
b
(w) }
Là không tuyến tính
Giả sử , ngôn ngữ đó là tuyến tính, áp dụng đònh lý 8.2 cho chuỗi
w = a
m
b
2m
a
m
bất đẳng thức (8.7) chỉ ra trong trường hợp này chuỗi u, v, y, z toàn là kí tự a.
Nếu bơm chuỗi này, ta được
a
m+k
b
2m
a
m+2
Ví dụ này đưa ra câu trả lời tổng cho quát cho quan hệ giữa họ ngôn ngữ
phi ngữ cảnh và tuyến tính. Họ ngôn ngữ tuyến tính là tập con đúng của họ
ngôn ngữ phi ngữ cảnh.
BÀI TẬP
1. Chứng tỏ ngôn ngữ L là phi ngữ cảnh
L = { a
n
: n là số nguyên tố }
2. Chỉ ra rằng ngôn ngữ trên ∑ = {a, b} là không phi ngữ cảnh
a) L = {a
n
b
j
: n ≤ j
2
}
b) L = { a
n
b
j
: n ≥ (j - 1)
3
}
c) L = {a
n
b
j
c
k
: k = jn }
3. Xác đònh ngôn ngữ L là phi ngữ cảnh hay không
a) L = {a
n
ww
R
a
n
n ≥ 0, w ∈ {a, b}*}
b) L = {a
n
b
j
a
n
b
j
: n ≥ 0, j ≥ 0 }
c) L = {a
n
b
j
a
j
b
n
: n ≥ 0, j ≥ 0 }
120
Tính đóng và giải thuật quyết đònh
cho ngôn ngữ phi ngữ cảnh
Trong chương 4. ta đã biết tính đóng dưới một số phép toán cho họ ngôn ngữ
chính qui. Bây giờ ta đặt vấn đề này cho ngôn ngữ phi ngữ cảnh.Tính đóng cho
ngôn ngữ chính qui thì không đúng cho ngôn ngữ phi ngữ cảnh. Trong phần
này, chúng ta chỉ trình bày một số kết qủa cơ bản.
Tính đóng của ngôn ngữ phi ngữ cảnh
Đònh lý 8.3
Họ ngôn ngữ phi ngữ cảnh thì đóng dưới phép hội, kết nối và bao đóng –sao
Chứng minh
Coi L1 và L2 là hai ngôn ngữ phi ngữ cảnh sinh bởi văn phạm
G1 = (V1, T1, S1, P1) và G2 = ( V2, T2, S2, P2) tương ứng, giả sử rằng V1 và V2 rời
nhau.
Coi ngôn ngữ L(G3) sinh bởi văn phạm
G3 = ( V1 ∪ V2 ∪ {S3}, T1 ∪ T2, S3, P3 }
mà S3 ∉ V1 ∪ V2. Luật sinh của G3 là tất cả các luật sinh của G1 và G2
P3 = P1
∪
P2 ∪ {S3 -> S1 | S2}
Hiển nhiên G3 là văn phạm phi ngữ cảnh, nên L(G3) phi ngữ cảnh,
dễ thấy
L(G3) = L1 ∪ L2
Giả sử w ∈ L1
thì S3 => S1 w
là một dẫn xuất có thể trong văn phạm G3. Một lý luận tương tự.
Ta có, w thuộc L2, cũng vậy, nếu w thuộc L(G3) thì
hoặc S3 => S1 hoặc S3 => S2 (8.10)
Vì dạng câu dược dẫn từ S1 , có biến trong V
1
, và V
1
và V
2
rời nhau nên dẫn xuất
S1 w
có thể gồm những luật sinh trong P1. Do vậy w phải thuộc L1.
121
Chọn theo (8.10) thì w phải thuộc L2 và L(G3) là L1 ∪ L2
tiếp theo, xem xét
G4 = ( V1 ∪ V2 ∪ {S4}, T1 ∪ T2, S4, P4)
Lần nữa S4 là biến mới và
P4 = P1 ∪ P2 ∪ { S4 -> S1S2 }
khi đó
L(G4) = L(G1)L(G2)
Cuối cùng, xem xét L(G5) với
G5 = ( V1 ∪ {S5}, T1, S5, P5)
mà S5 là biến mới và
P5 = P1 ∪ {S5 -> S1S5 | λ}
khi đó
L(G5) = L(G1)*
Do đó, họ ngôn ngữ phi ngữ cảnh là đóng dưới phép hội, phép kết nối và
bao đóng_sao.
Đònh lý 8.4
Họ ngôn ngữ phi ngữ cảnh thì không đóng dưới phép giao và phép lấy phần bù
Chứng minh
Hãy coi hai ngôn ngữ
L1 = { a
n
b
n
c
n
: n ≥ 0, m ≥ 0 }
và
L2 = {a
n
b
m
c
m
: n ≥ 0, m ≥ 0 }
có một số cách để chỉ ra L1 và L2 là phi ngữ cảnh.
Ví dụ chẳng hạn, một văn phạm cho L1 là
S -> S1S2
S1 -> aS1b | λ
S2 -> cS2|λ
Theo cách chọn, ta chú ý rằng L1 là kết nối của hai ngôn ngữ phi ngữ
cảnh, vì thế nó là phi ngữ cảnh theo đònh lý 8.3. Nhưng
122
L1 ∩ L2 = { a
n
b
n
c
n
: n ≥ 0}
Là không phi ngữ cảnh. Vì vậy họ ngôn ngữ phi ngữ cảnh không đóng dưới phép
giao.
Phần thứ hai của đònh lý, theo đònh lý 8.3 và xem biểu thức
Nếu họ ngôn ngữ phi ngữ cảnh là đóng dưới phép lấy phần bù, thì vế phải của
biểu thức trên phải là ngôn ngữ phi ngữ cảnh cho L1 và L2 bất kỳ. Nhưng ngược lại
giao của hai ngôn ngữ phi ngữ cảnh không nhất thiết là phi ngữ cảnh. Do vậy, họ
ngôn ngữ phi ngữ cảnh không đóng dưới phép lấy phần bù.
Trong khi phép giao của hai ngôn ngữ phi ngữ cảnh có thể sinh ra một ngôn ngữ
không phi ngữ cảnh. Tính đóng là đúng, khi một trong hai ngôn ngữ là chính qui.
Đònh lý 8.5
Cho L1 là ngôn ngữ phi ngữ cảnh và L2 là ngôn ngữ chính qui.
Thì L1 ∩ L2 là ngôn ngữ chính qui. Ta nói rằng họ ngôn ngữ phi ngữ cảnh là
đóng dưới phép giao chính qui (regular intersection).
Chứng minh
Coi M1 = (Q, ∑, Γ,
δ
1, q0, z, F1 ) là npda chấp nhận L1
và M2 = (Q, ∑, Γ,
δ
2, p0, z, F2 ) là dfa chấp nhận L2
Ta xây dựng một automat đẩy xuống
mô phỏng hoạt động của M1 và M2
Mỗi khi một ký hiệu được đọc từ chuỗi nhập,
mô phỏng những dòch chuyển của M1 và M2
Ta có :
= Q x P
= (q
0
, p
0
)
= F1 x F2
và đònh nghóa sao cho
(( q
k
, p
l
), x) ∈ ((qi, pj), a, b)
nếu và chỉ nếu
(q
k
, x) ∈
δ
1(q
i
, a, b)
và
δ
2 (p
j
, a) = p
l
123
Ta cũng cần rằng, nếu a = λ thì p
j
= p
l
. Phát biểu , trạng thái của được
đánh nhãn là cặp ( qi, pj), biểu thò cho những trạng thái tương ứng của
M1 và M2 sau khi đọc một số ký hiệu nhập. Dùng qui nạp ta được
((q0, p0), w, z)
(qr, ps), x)
Với qr ∈ F1 và Ps ∈ F2 nếu và chỉ nếu
(q
0
, w, s)
M
1
(q
s
, x)
và δ*(p
0
, w) = ps
Do đó, chuỗi chấp nhận bởi nếu và chỉ nếu nó được chấp nhận bởi M1
và M2 , đó là, nếu nó thuộc vào L(M1) ∩ L(M2) = L1 ∩ L2.
Ví dụ 8.7
Chỉ ra rằng ngôn ngữ
L = { a
n
b
n
: n ≥ 0, n ≠ 100 }
là phi ngữ cảnh
Ta có thể xây dựng một pda hay một văn phạm phi ngữ cảnh cho L . Dùng
lý luận như đònh lý 8.5. Chú ý rằng
L = { a
n
b
n
: n ≥ 0 } ∩ L1
Mà L1 là ngôn ngữ chính qui gồm những chuỗi trong L(a*b*) trừ chuỗi
a
100
b
100
. Do vậy L là phi ngữ cảnh.
Ví dụ 8.8
Chỉ ra rằng ngôn ngữ
L = { w ∈ {a, b, c} : n
a
(w) = n
b
(w) = n
c
(w) }
là không phi ngữ cảnh
Bổ đề bơm có thể sử dụng cho ví dụ này, nhưng ta có thể lý luận ngắn
hơn, bằng cách dùng tính đóng dưới phép giao chính qui. Giả sử rằng L là
phi ngữ cảnh, khi đó
L ∩ L( a* b* c*) = {a
n
b
n
c
n
: n ≥ 0}
cũng là phi ngữ cảnh, nhưng điều này không đúng. Ta kết luận
L không phi ngữ cảnh.
124
Một số những tính chất có thể quyết đònh
của ngôn ngữ phi ngữ cảnh
Kết hợp đònh lý 5.2 và 6.6. ta đã thiết lập sự tồn tại của giải thuật thành viên
cho ngôn ngữ phi ngữ cảnh. Dó nhiên, đây là một tính chất thiết thực cho bất kỳ họ
ngôn ngữ nào hữu dụng trong thực tế . Một số tính chất đơn giản khác cũng đưa ra ở
đây . Ta giả sử rằng ngôn ngữ được mô tả bằng văn phạm.
Đònh lý 8.6
Cho một văn phạm phi ngữ cảnh G = ( V, T, S, P) , tồn tại một giải
thuật để quyết đònh L(G) có rỗng hay không.
Chứng minh
Giả sử rằng λ ∉ L(G). ta dùng giải thuật để khử những ký hiệu và luật
sinh vô dụng. Nếu S là vô dụng thì L(G) là rỗng. Nếu không, thì L(G) chứa ít
nhất là một phần tử.
Đònh lý 8.7
Cho một văn phạm phi ngữ cảnh G = (V, T, S, P), tồn tại một giải thuật
để xác đònh L(G) có vô hạn hay không.
Chứng minh
Giả sử G không chứa luật sinh λ , đơn vò, không có kí hiệu vô dụng và
văn phạm có một biến lặp lại, trong trường hợp này, tồn tại A ∈ V, để có dẫn
xuất
A xAy
Vì G không có luật sinh λ và đơn vò, và x,y không thể cùng rỗng một lúc. Vì A
không rỗng và cũng không vô dụng, ta có
S uAv w
và
A z
nhưng, khi đó
S => uAv => ux
n
Ay
n
v => ux
n
zy
n
v
là có thể với mọi n, vì vậy L là vô hạn.
125
BÀI TẬP
1. Cho L trong đònh lý 8.4. chứng tỏ L là tuyến tính
2. Chứng tỏ rằng L là phi ngữ cảnh
a) L = { a
n
b
n
: n ≥ 0 , n không chia hết cho 5}
b) L = { w ∈ {a, b}* : n
a
(w) = n
b
(w), w không chứa chuỗi con aab }
126