Tải bản đầy đủ (.doc) (37 trang)

TÌM HIỂU MỘT SỐ VĂN PHẠM VÀ BÀI TẬP RAM THÔ SƠ (TIỂU LUẬN LÝ THUYẾT TÍNH TOÁN)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (346.78 KB, 37 trang )

ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA
  
BÁO CÁO MÔN HỌC
LÝ THUYẾT TÍNH TOÁN
ĐỀ TÀI:
TÌM HIỂU MỘT SỐ VĂN PHẠM
VÀ BÀI TẬP RAM THÔ SƠ
Giáo viên giảng dạy:
PGS TS. PHAN HUY KHÁNH
Học viên thực hiện:
Lê Ngọc Quang
Thái Duy Quý
Ngô Thị Hiền Trang
Đà Nẵng, 5/2010
Báo cáo lý thuyết tính toán Nhóm 12
MỤC LỤC
MỤC LỤC 2
LỜI MỞ ĐẦU 3
PHẤN MỘT: LÝ THUYẾT 5


 !"#$%&"'%!!%(
)*+"#,-!./$%01 !
23$!4$ 5
 !. "65
7893'9,:;,,<=>'?
789,@A=<2
789,B'C,B;33=<:@'D?
:=E
PHẦN HAI: BÀI TẬP 23


'FGF$FH>I$J)
8+K"LMF$-42
,NJ$%OFP5
,NJ$%O>I$J)Q
6$RS))
8TRT"!UV"MFWX$$%0"Y))
Z$[.6$\P)
TÀI LIỆU THAM KHẢO 37
Trang 2
Báo cáo lý thuyết tính toán Nhóm 12
LỜI MỞ ĐẦU

Lý thuyết tính toán là một ngành cơ bản trong lý thuyết, đóng vai trò quan trọng
trong các phép tính toán, làm nền tảng xây dựng các máy và tính toán cơ bản của toán
và tin học. Đây là một ngành khó, phức tạp nhưng đã ra đời khá lâu với các đóng góp
của nhiều nhà khoa học.
Văn phạm không hạn chế(Unregistricted grammar) là văn phạm loại không,
trong phân cấp của Chomsky, đây là loại văn phạm không có ràng buộc giữa các thành
phần trong tập quy tắc của nó. Văn phạm không hạn chế là tổng quát nhất trong các
loại văn phạm, đây đồng thời cũng là văn phạm có ý nghĩa lớn trong việc biểu diễn
ngôn ngữ, việc hiểu ý nghĩa của văn phạm không hạn chế sẽ giúp ta có cái nhìn tổng
quát hơn về văn phạm và từ đó ta tìm hiểu về máy Turing chấp nhận nó đồng thời tìm
hiểu thêm về văn phạm chính quy(Regular grammar) và văn phạm cảm ngữ
cảnh(Context - sensitive grammar) và Automat tuyến tính giới nội chấp nhận ngôn ngữ
này.
Máy RAM thô sơ là loại máy mà tập các lệnh của nó được rút gọn lại một cách
tối thiểu nhất, nhằm chỉ sử dụng các lệnh thô sơ nhưng lại giải quyết được các bài toán
con dễ dàng. Tìm hiểu máy RAM thô sơ sẽ giúp ta hiểu thêm được khả năng xử lý của
các máy khi chỉ sử dụng các lệnh cơ bản để giải quyết các bài toán.
Chúng tôi xin chân thành cảm ơn PGS TS Phan Huy Khánh đã giảng dạy,

hướng dẫn tận tình và cung cấp tài liệu tham khảo quý báu để chúng tôi hoàn thành đề
tài này.
Mặc dù nhóm đã nhiệt tình tìm hiểu, nghiên cứu nhưng do thời gian có hạn,
trình độ cũng còn hạn chế nên không tránh khỏi những thiếu sót. Kính mong thầy xem
xét, góp ý để nhóm chúng tôi hoàn thiện, hiểu rõ hơn nữa về các bài toán này.
Xin chân thành cám ơn.
Trang 3
Báo cáo lý thuyết tính toán Nhóm 12
YÊU CẦU ĐỀ TÀI
Phần lý thuyết:
Trình bày các khái niệm theo gợi ý sau đây:
- Văn phạm không hạn chế và máy Turing.
- Văn phạm chính quy.
- Văn phạm cảm ngữ cảnh và Automat tuyến tính giới nội.
Phần bài tập:
Bằng cách loại bỏ lệnh hoán đổi S <n, m> trong máy RAM thô sơ để chỉ còn lại
các lệnh I <n>, D <n>, Z <n>, J <n> (i, j) và HALT, viết chương trình RAM thô sơ
tính n^^p là hàm lũy thừa bậc hai (Double Exponent Function: n^^0 = 1 ; n^^p+1 =
nn^^p) với các số nguyên n, p cho trước.
Trang 4
Báo cáo lý thuyết tính toán Nhóm 12
PHẤN MỘT: LÝ THUYẾT
. I MỘT SỐ KHÁI NIỆM
Trước khi đi vào nội dung chính, ta tìm hiểu một số khái niệm liên quan như: ngôn
ngữ, văn phạm, các phân cấp văn phạm của Chomsky,… Đây là các khái niệm ban đầu
giúp làm nền tảng cho các kiến thức liên quan.
I.I.1. Ngôn ngữ(Languages)
Định nghĩa 1.1. Một ngôn ngữ (Languages) L là một tập hợp các chuỗi của các ký
hiệu(symbols) từ một bộ chữ cái Σ nào đó. Tập hợp chứa chuỗi rỗng (ký hiệu {ε}) và
tập hợp rỗng ∅ cũng được coi là ngôn ngữ.

Tập hợp tất cả các chuỗi con kể cả chuỗi rỗng trên bộ chữ cái cố định Σ, ký hiệu là
Σ
*
cũng là một ngôn ngữ. Mỗi ngôn ngữ trên bộ chữ cái Σ đều là tập con của Σ
*
.
Ngoài ra tập hợp tất cả các chuỗi sinh ra từ bộ chữ cái Σ, ngoại trừ chuỗi rỗng ε,
được ký hiệu là Σ
+
. Dễ thấy:
Σ
+
= Σ
*
- {ε} hay Σ
*
= Σ
+
+ {ε}
I.I.2. Văn phạm cấu trúc(Grammars):
Định nghĩa 1.2.Văn phạm cấu trúc G là một hệ thống gồm bốn thành phần xác định
như sau G (V, T, P, S), trong đó:
o V: tập hợp các biến (variables) hay các ký hiệu chưa kết thúc (non terminal)
o T: tập hợp các ký hiệu kết thúc (terminal) (với V ∩ T = ∅)
o P: tập hữu hạn các quy tắc ngữ pháp được gọi là các luật sinh (production), mỗi
luật sinh được biểu diễn dưới dạng α → β, với α, β là các chuỗi ∈ (V ∪ T)
*
.
o S ⊂ V: ký hiệu chưa kết thúc dùng làm ký hiệu bắt đầu (start)
Người ta thường dùng các chữ cái Latinh viết hoa (A, B, C, ) để chỉ các ký hiệu

trong tập biến V; các chữ cái Latinh đầu bảng viết thường (a, b, c, ) dùng chỉ các ký
hiệu kết thúc thuộc tập T. Chuỗi các ký hiệu kết thúc thường được biểu diễn bằng các
chữ cái Latinh cuối bảng viết thường (x, y, z, ).
I.I.3. Sự phân cấp Chomsky trên văn phạm
Dựa trên các kiểu văn phạm, Chomsky đã phân loại các văn phạm theo các cấp bậc
như sau:
o Văn phạm loại 0: Một văn phạm không cần thỏa ràng buộc nào trên tập các
luật sinh được gọi là văn phạm loại 0 hay còn được gọi là văn phạm không hạn chế
(Unrestricted Grammar).
Trang 5
Báo cáo lý thuyết tính toán Nhóm 12
o Văn phạm loại 1: Nếu văn phạm G có các luật sinh dạng α → β và thỏa | β | ≥ |
α | thì G là văn phạm loại 1 hoặc còn được gọi là văn phạm cảm ngữ cảnh CSG
(Context-Sensitive Grammar).Ngôn ngữ của lớp văn phạm này được gọi là ngôn ngữ
cảm ngữ cảnh (CSL).
o Văn phạm loại 2: Nếu văn phạm G có các luật sinh dạng A → α với A là một
biến đơn và α là một chuỗi các ký hiệu ∈ (V ∪ T)
*
thì G là văn phạm loại 2 hoặc còn
được gọi là văn phạm phi ngữ cảnh CFG (Context-Free Grammar). Ngôn ngữ của
lớp văn phạm này được gọi là ngôn ngữ phi ngữ cảnh (CFL).
o Văn phạm loại 3: Nếu văn phạm G có mọi luật sinh dạng tuyến tính phải
(right-linear): A → wB hoặc A → w với A, B là các biến đơn và w là chuỗi ký hiệu kết
thúc (có thể rỗng); hoặc có dạng tuyến tính trái (left-linear): A → Bw hoặc A → w thì
G là văn phạm loại 3 hay còn được gọi là văn phạm chính quy RG (Regular
Grammar). Ngôn ngữ của lớp văn phạm này được gọi là ngôn ngữ chính quy (RL)
I.I.4. Ôtômát hữu hạn
Định nghĩa 1.3. Một cách hình thức ta định nghĩa ôtômát hữu hạn là bộ gồm năm
thành phần (Q, Σ, δ, q
0

, F), trong đó :
o Q là tập hợp hữu hạn các trạng thái.
o Σ là bộ chữ cái nhập hữu hạn.
o δ là hàm chuyển ánh xạ từ Q × Σ → Q, tức là δ(q, a) là một trạng thái được cho
bởi phép chuyển từ trạng thái q trên ký hiệu nhập a.
o q
0
∈ Q là trạng thái bắt đầu.
o F ⊆ Q là tập các trạng thái kết thúc.
I.I.5. Văn phạm không hạn chế.
Định nghĩa 1.4. Một văn phạm không hạn chế (unrestricted grammar) là một bộ 4
bao gồm gồm G = (V, Σ, S, P), với V và Σ tương ứng là tập rời rạc của các biến và ký
tự kết thúc; S ⊆ V gọi là ký tự bắt đầu, và P là một tập hợp các quy tắc dạng α

β với α, β ∈ (V ∪ Σ)* và α chứa ít nhất một biến.
Ngôn ngữ của văn phạm không hạn chế có dạng:
L(G) = { x ∈ Σ* | S =>
G
*
x }
Trang 6
Báo cáo lý thuyết tính toán Nhóm 12
Máy Turing:
Định nghĩa 1.5. Máy Turing(Turing Machine – TM) là một hệ thống M (Q, Σ, Γ, δ, q
0
,
B, F), trong đó:
o Q : tập hữu hạn các trạng thái.
o Σ: bộ ký hiệu nhập.
o Γ : tập hữu hạn các ký tự được phép viết trên băng.

o B : ký hiệu thuộc Γ dùng chỉ khoảng trống trên băng (Blank).
o δ : hàm chuyển ánh xạ : Q × Γ → Q × Γ × {L, R, ∅}
o (δ có thể không xác định với một vài đối số).
o q
0
∈ Q là trạng thái bắt đầu.
o F ⊆ Q là tập các trạng thái kết thúc.
Trang 7
Báo cáo lý thuyết tính toán Nhóm 12
. II VĂN PHẠM KHÔNG HẠN CHẾ VÀ CÁC MÁY TURING
Như đã thấy ở chương trước văn phạm không hạn chế là tổng quát nhất trong phân
cấp các của Chomsky, trong phần này chúng ta sẽ đi vào văn phạm loại 0 và cho thấy
rằng ngôn ngữ thừa nhận chúng có thể được chấp nhận mởi máy Turing.
Định lý 2.1. Nếu G = (V,
Σ
, S, P) là văn phạm không hạn chế thì có một máy
Turing T = (Q, Σ, Γ, q
0
,
δ
) với L(T) = L(G).
Chứng minh:
Chúng ta chứng minh định lý bởi việc xây dựng một máy Turing không đơn
định(Nondeterministic Turing Machine – NTM) để chấp nhận L(G). Nó được tổ hợp từ
nhiều thành phần:
T = MovePastInput

Simulate

Equal

Nơi thành phần đầu tiên di chuyển trên băng vào đến các ô trống cho phép chuỗi
vào, thành phần thứ hai bắt chước một máy nhận trong G bắt đầu tại vị trí này và cho
ra kết quả chuỗi trên băng, thành phần thứ ba so sánh kết quả này với đầu vào nguyên
thủy, chỉ dừng nếu hai chuỗi được chấp nhận. Nếu chuỗi vào x chứa trong L(G), máy
TM không đơn định có thể chọn dãy các di chuyển để bắt chước chuỗi nhận của x, và
kết quả là T dừng; ngược lại, máy Turing hoặc phát sinh một chuỗi khác từ x hoặc
không hoàn thành một đoán nhận tất cả và T sẽ hỏng và dừng.
Bộ chữ cái của TM trên băng bao gồm tất cả các ký hiệu của V ∪ Σ và ký hiệu
khác nếu có. Máy hoạt động bằng cách di chuyển một ô sang phía phải nơi nó bắt đầu
và ghi ký hiệu bắt đầu S. Tại điểm này, nó lặp và vòng lặp này bị ngưng trước khi bất
kỳ số nào của chuỗi lặp lại.Tại mỗi điểm bắt đầu của một dãy lặp, một phần băng TM
được sử dụng như ∆γ, khi γ là chuỗi hiện tại trong máy bắt chước đoán
nhận(simulated derivation). Chuỗi lặp tiếp theo tương ứng với quy tắc α

β của G,
một sự lựa chọn không đơn định. Những bước lặp tiếp theo của chuỗi lặp như sau: Có
gắng tìm kiếm một sự kiện của chuỗi α, nếu một trong chúng tìm thấy thì thay thế bởi
β và sau đó trả lại băng vào để bắt đầu lại chuỗi kết quả. Khi TM chọn để kết thúc
vòng lặp, nó sẽ trả lại băng vào về ô trống và dừng máy.
Khả năng không đơn định được biểu diễn trong TM: Khi chọn lựa một quy tắc để
sử dụng trong dãy lặp kế tiếp của vòng lặp, khi lựa chọn một sự kiện của ký hiệu đầu
tiên α trên băng và khi quyết định để kết thúc vòng lặp. Những chọn lựa sai tại bất kỳ
Trang 8
Báo cáo lý thuyết tính toán Nhóm 12
chỗ nào trong ba điểm trên có thể làm cho phần đầu bị hỏng hoặc một chuỗi trái trên
băng vẫn còn chứa các biến, hoặc bị một chuỗi trong L(G) không nối được với chuỗi
nguyên thủy trên băng vào T. Nó có thể bị xóa, tuy nhiên cho bất kỳ x ∈ L(G), tại ít
nhất một lần chọn của di chuyển là nguyên nhân TM rời x trên băng và không có các
chuỗi khác của ký tự kết thúc có thể làm ký tự cuối đầu ra của TM. 


Ví dụ 2.1.
Cho văn phạm không hạn chế với tập các quy tắc:
S

aBS | ∆
aB

Ba
Ba

aB
B

b
Chúng sinh ra ngôn ngữ của của các chuỗi trong {a, b}* với số lượng a và b bằng
nhau.
Hình 2.1 cho thấy máy Turing biểu diễn như trong chứng minh ở Định lý 2.1 Lưu ý
rằng trong ví dụ này chỉ những quy tắc mà chúng ở bên trái hoặc bên phải có độ dài
khác nhau là những S quy tắc, và S xuất hiện cuối cùng bên trái nhất của chuỗi. Trong
trường hợp tổng quát hơn, việc chấp nhận một luật sinh như S

aBS có thể hoàn
thành bởi việc sử dụng một máy Turing chèn hai lần và một luật sinh khác S

∆ yêu
cầu một bộ xóa.
Trang 9
Báo cáo lý thuyết tính toán Nhóm 12
Hình 2.1 Một bắt chước TM cho Ví dụ 2.1
Định lý 2.2. Nếu L


Σ
* là bất kỳ một ngôn ngữ liệt kê đệ quy nào thì có một văn
phạm không hạn chế G sinh ra L.
Chứng minh:
Cho M = (Q,
Σ
, Γ, q
0
,δ) là một TM chấp nhận L. Văn phạm G mà ta xây dựng có
ba kiểu tập các quy tắc:
1. Tập các quy tắc có thể sinh ra hai bản sao chép của một chuỗi bất kỳ trong
Σ
*
thêm một vài ký tự đánh dấu để phân biệt hai chuỗi sao chép.
2. Tập các quy có thể bắt chước một dãy các chuyển động của M. Một trong hai
bản sao chép của chuỗi nguyên thủy là giữ không thay đổi bên trái; cái còn lại biểu
diễn băng vào cho M và thay đổi theo đó(Bởi vì bản sao chép thứ hai này chứa băng
các ký hiệu của T, tất cả ký hiệu trong Γ ∪ {∆} - Σ bao gồm cả các biến trong văn
phạm).
3. Tập các quy tắc có thể xóa đi mọi thứ nhưng không thay đổi sự sao chép của
chuỗi, miễn là những di chuyển tương tự của M chấp nhận một sao chép khác là
nguyên nhân làm M dừng.
Hai bản sao chép của chuỗi nguyên thủy a
1
a
2
… a
k
có dạng

(a
1
a
1
) (a
2
a
2
)… (a
k
a
k
)
Trang 10
\
Q
\

∆/∆, R
∆/S, S
\

B/b, L
\
]
∆/
∆,
R
∆/∆, L
a/a,

L
b/b,
L
a/a,
L
b/b,
L
\
?
∆/∆, L
\
^
h
∆/∆, S
a/a, R
b/b,R
B/B,R
a/
B,
L
B/
a,
R
q
6
B/
a,
L
a/
B,

R
q
5
S/
∆,
L
S/
a,
R
q
3
q
3
∆/
B,
R
∆/
S,
L
a/a, L
b/b,L
B/B,L
Báo cáo lý thuyết tính toán Nhóm 12
Ký hiệu “(“ và “)” được sử dụng như là các biến. Ký tự đầu tiên của mỗi cặp còn
lại thì giống nhau, ngược lại cái thứ hai có thể thay đổi trong quá trình mô phỏng.
Khi M bắt đầu, có một ô trống trên ô vuông 0 của băng. Thêm vào đó, M có thể sử
dụng vài phần ô trống của băng bên phải của chuỗi đầu vào. Điều này có nghĩa là ta
thực sự cần thiết một chuỗi có dạng:
(∆∆)(a
1

a
1
) (a
2
a
2
)… (a
k
a
k
) (∆∆)…(∆∆)
Nếu M chấp nhận x bởi việc đánh dấu một chuỗi di chuyển sử dụng n ô trống qua
bên phải của đầu vào thì dẫn xuất tương ứng của x trong G bắt đầu thay thế ít nhất n
bản sao của (∆∆) tại phần cuối của chuỗi.
Bây giờ ta thấy rõ ràng làm thế nào băng của M được biểu diễn mô phỏng. Trong
thứ tự diễn tả cấu hình hoàn thiện của máy Turing, chúng ta cần một phương pháp cho
cả hai biểu thị là trạng thái và vị trí của băng vào. Ta có thể làm cả hai bởi việc thêm
vào tập các biến các trạng thái của M và chúng thuộc loại một biến xuất hiện trong
chuỗi chỉ trước phần ký hiệu trong vị trí hiện tại. Như vậy khi TM bắt đầu, chuỗi hiện
tại là
q
0
(∆∆)(a
1
a
1
) (a
2
a
2

)… (a
k
a
k
) (∆∆)…(∆∆)
Nếu tại một số điểm trong quá trình xử lý, M có cấu hình
(q, b
0
b
1
… b
i-1
b
i
b
i+1
… b
m)
Thì khi đó chuỗi nhận được tương ứng là
(∆b
0
)(a
1
b
1
)… (a
i-1
b
i-1
)q(a

i
b
i
)… (a
k
b
k
)(∆ b
k+1
)… (∆ b
m
)( ∆∆)…(∆∆)
(Giả sử rằng m > k, m là chiều dài của chuỗi nhập nguyên thủy. Trong trường hợp
khác, chuỗi không đáng kể).
Những quy tắc sau phát sinh chuỗi bắt đầu:
S

S(∆∆)T
T

T(σσ)| q
0
(∆∆)
Khi có một quy tắc T

T(σσ) với các ký hiệu σ ∈ Σ. Tương ứng mỗi máy Turing
di chuyển:
δ(p, a) = (q,b,R)
khi đó a, b ∈ Γ ∪ {∆}, ta có các luật sinh:
p(σ a)


(σ b)q
cho các σ ∈ Σ ∪ {∆}. Lưu ý rằng ký hiệu σ ở đây không thay đổi và trạng thái biến đã
được di chuyển sang trái của cặp ký hiệu. Mỗi di chuyển
Trang 11
Báo cáo lý thuyết tính toán Nhóm 12
δ(p, a) = (q,b,S)
ta có tất cả các luật sinh:
p(σ a)

(σ b)
với (σ


Σ


{∆}), và cho mỗi di chuyển
δ(p, a) = (q,b,L)
ta có các luật sinh:

1
σ
2
)p(σ
3
a)

q(σ
1

σ
2
)( σ
3
b)
cho mọi khả năng kết hợp của σ
1
, σ
3



Σ


{∆} và σ
2


Γ

{∆}.
Nếu các di chuyển theo thứ tự của M làm ngưng trạng thái, và chỉ trong trường hợp
bộ nhận tương ứng cho ra một chuỗi với chứa kí hiệu h. Các luật sinh còn lại cho phép
ta xóa đi bất kỳ chuỗi nào chứa h trong tất cả ký hiệu tại vị trí thứ hai của một cặp và
tất cả các biến phụ (như “(“, “)”, ∆ và các thành phần của Q

{h}), chỉ bỏ đi các ký
hiệu kết thúc của chuỗi nhập được chấp nhận bởi M. Các tập quy tắc hoàn thành như
sau:

h(σ
1
σ
2
)

h(σ
1
σ
2
)h (σ
1



Σ


{∆}, σ
2


Γ

{∆})

1
σ
2
)h


h(σ
1
σ
2
)h (σ
1



Σ


{∆}, σ
2


Γ

{∆})
h(σ
1
σ
2
)

σ
1

1




Σ
, σ
2


Γ

{∆})
h(∆σ)

∆ (σ

Γ

{∆})
Các quy tắc trong hai dòng đầu đơn giản phát sinh các sao chép của h thông qua
chuỗi, và những luật sinh hai dòng cuối xóa đi những thứ cần thiết.
Ví dụ 11.4. Trong ví dụ này, chúng chấp nhận ngôn ngữ đối xứng thông qua {a,
b}. Chúng ta không liệt kê tất cả luật sinh trong văn phạm, chúng có khoảng 251 và
nhiều những thứ không cần thiết bởi vì chúng liên quan đến phép nối (σ
1
, σ
1
) mà không
bao giờ dùng tới. Thay vào đó, chúng ta cho thấy một chấp nhận của chuỗi aba trong
văn phạm. Dãy tương ứng của máy Turing bắt chước di chuyển bởi chuỗi nhận được
thấy bên phải. Bởi vì máy Turing di chuyển phần trước của các ô vuông rỗng sang bên

phải của chuỗi ra và không xa hơn, chuỗi nhận bắt đầu bởi sản sinh một chuỗi với một
bản sao chép của (∆ ∆) bên phải. Tại mỗi bước trong phép nhận, phần gạch chân cho
thấy bên trái của dẫn xuất được sử dụng cho bước kế tiếp:
S

S(∆ ∆)


T(aa)(∆ ∆)
Trang 12
Báo cáo lý thuyết tính toán Nhóm 12

T (bb)(aa)(∆ ∆)

T (aa)(bb)(aa)(∆ ∆)


)(
0
∆∆q
(aa)(bb)(aa)(∆ ∆) (q
0,
∆aba)

(∆ ∆)
)(
1
aaq
(bb)(aa)(∆ ∆) ├(q
1

, ∆aba)

(∆ ∆)(a ∆)q
2
(bb)(aa)(∆ ∆) ├(q
2
, ∆∆ba)

(∆ ∆)(a ∆)(bb) q
2
(aa)(∆ ∆) ├(q
2
, ∆∆ba)

(∆ ∆)(a ∆)(bb)(aa)q
2
(∆ ∆) ├(q
2
,∆∆ba∆)

(∆ ∆)(a ∆)(bb)q
3
(aa)(∆ ∆) ├(q
3
,∆∆ba)

(∆ ∆)(a ∆)q
4
(bb)(a∆)(∆ ∆) ├(q
4

,∆∆b)

(∆ ∆)q
4
(a ∆)(bb)(a∆)(∆ ∆) ├(q
4
,∆∆b)

(∆ ∆)(a ∆)q
1
(bb)(a∆)(∆ ∆) ├(q
1
,∆∆b)

(∆ ∆)(a ∆)(b ∆)q
5
(a∆)(∆ ∆) ├(q
5
,∆∆∆∆)

(∆ ∆)(a ∆)q
6
(b ∆)(a∆)(∆ ∆) ├(q
6
,∆∆∆)

(∆ ∆)(a ∆)(b ∆)h(a∆)(∆ ∆) ├(q
h
,∆∆∆∆)


(∆ ∆)(a ∆)(b ∆)h(a ∆)h(∆ ∆)

(∆ ∆)(a ∆)h(b ∆)h(a ∆)h(∆ ∆)

(∆ ∆)h(a ∆)h(b ∆)h(a ∆)h(∆ ∆)

h(∆∆)h(a ∆)h(b ∆)h(a ∆)h(∆ ∆)

h(a ∆)h(b ∆)h(a ∆)h(∆ ∆)

ah(b ∆)h(a ∆)h(∆ ∆)

abh(a ∆)h(∆ ∆)

abah(∆ ∆)

aba
Trang 13
Báo cáo lý thuyết tính toán Nhóm 12
. III VĂN PHẠM CHÍNH QUY
Chúng ta đã thấy được văn phạm tổng quát hơn CFG, ta trở lại các văn phạm kém
tổng quát hơn CFL, đó là dạng ngôn ngữ chính quy. Trong phần này, chúng ta sẽ thấy
rằng chúng có thể được phát sinh bởi văn phạm không hạn chế từ đó.
Ví dụ 3.1 Cho Ôtômát hữu hạn trong hình dưới đây. Ngôn ngữ đón nhận là {0,
1}*{10}, tập hợp tất cả các chuỗi của {0, 1} kết thúc bởi 10.
Hình 11.2 Một Ôômát hữu hạn
Giả sử rằng chúng ta có như một chuỗi, x = 110001010 và nó tự xử lý bởi FA như
sau:
Xử lý chuỗi phụ Trạng thái
A

1
11
110
1100
11000
110001
1100010
11000101
110001010
A
B
B
C
A
A
B
C
B
C
Bảng 3.1 Thứ tự xử lý chuỗi x trong Automat hữu hạn
Nếu chúng ta liệt kê các dòng của bảng này một cách liên tiếp, phân biệt bởi

, ta
có:
Trang 14
A
0
1
B
C

0
1
1
0
Báo cáo lý thuyết tính toán Nhóm 12
A

1B

11B

110C

1100A

11000A

110001B

1100010C


11000101B

110001010C
Điều trông thấy rõ ràng này giống như bộ thu nhận ngữ pháp. Để đón nhận ngữ
pháp ta đặc tả các biến thành các trạng thái của FA và bắt đầu với các quy tắc:
A

1B

B

1B
B

0C
C

0A
A

0A
C

1B
Chúng bao gồm tất cả quy tắc dạng:
P

aQ
khi đó
P
→
a
Q
là một chuyển dịch trong FA. Ký tự bắt đầu là A, khởi tạo trạng thái của FA. Để hoàn
thành bộ thu nhận, ta xóa C trong chuỗi cuối cùng. Chúng ta làm điều này bởi việc
thêm luật sinh B

0, vì thế mà bước cuối cùng của bộ thu nhận thực tế là
11000101B


110001010
Lưu ý rằng luật sinh chúng ta thêm vào có dạng:
P

a
Khi mà
P
→
a
F
Là một dịch chuyển từ P vào một trạng thái chấp nhận F.
Bất kỳ FA nào dẫn dắt một ngữ pháp cũng chính xác trong trường hợp này. Trong
ví dụ chúng ta thật dễ dàng để thấy rằng phát sinh ngôn ngữ là chính xác bởi sự chịu
trách nhiệm bởi FA. Tổng quát hơn, chúng ta phải đủ điều kiện cho phát biểu yếu bởi
vì các quy tắc mà chúng ta liệt kê không có A - quy tắc nào cả, tuy nhiên nó vẫn còn
đúng cho chuỗi khác null được chấp nhận bởi FA thì rõ ràng cho những phát sinh bởi
kết quả của văn phạm.
Định nghĩa 3.1 Một văn phạm G = (V,
Σ
, S, P) là chính quy nếu mọi luật sinh là
một trong hai dạng
B

aC
Trang 15
Báo cáo lý thuyết tính toán Nhóm 12
B

a

Với B, C là các biến, a là ký tự kết thúc.
Định lý 3.1. Với mọi ngôn ngữ L ⊆ Σ*, L là chính quy nếu và chỉ nếu có một văn
phạm chính quy G sao cho L(G) = L – {∆}.
Chứng minh:
Trước tiên, ta giả sử rằng L là chính quy có Ô tô mát hữu hạn M = (Q,
Σ
, q
0
, A,
δ)chấp nhận L. Định nghĩa văn phạm G = (V,
Σ
, S, P) với V = Q, S = q
0
với tập các
quy tắc:
P = {B

aC | δ(B,a) = C}

{B

a | δ(B, a) = F với F

A}
Giả sử rằng x = a
1
a
2
…a
n

được chấp nhận bởi M và n ≥ 1. Khi đó có một dãy các
chuyển tiếp:

q
0

→
1
a
q
1

→
2
a
q
2
→
3a

→
−1n
a
q
n-1
→
n
a
q
n

Với q
n
∈ A. Do định nghĩa của G, ta có dẫn xuất tương ứng:
S = q
0


a
1
q
1


a
1
a
2
q
2




a
1
a
2
… a
n-1
q

n-1

a
1
a
2
… a
n-1
a
n
Tương tự, nếu x được phát sinh bởi G, dễ thấy rằng x được chấp nhận bởi M. 
Ngược lại giả sử rằng G = (V, Σ, S, P) là văn phạm chính quy phát sinh L. Trong
một vài trường hợp ta có thể hoán đổi cấu trúc ở trên: Chúng ta định nghĩa trạng thái
tương ứng cho tất cả các biến và tạo ra chuyển tiếp:
B
→
a
C
cho mọi luật sinh dạng B

aC. Lưu ý rằng điều này giống như một chỉ dẫn không xác
định. Chúng ta có thể nắm giữ kiểu dẫn xuất khác bằng cách thêm một trạng thái mở
rộng f, sẽ chỉ chấp nhận trạng thái và ta có các quy tắc B

a tương ứng cho chuyển
tiếp B
→
a
f.
Ta có máy M = (Q,

Σ
, q
0
, A, δ) là một NFA. Q là tập V

{ f }, q
0
là ký tự bắt đầu S
và A là tập { f }. Với bất kỳ q

V và a


Σ
,
δ(q, a) =



∈→∪∈→∀
∉→∈→∀
P a q {f} P} q |p
P a q } P ap q |{p

Không có chuyển tiếp nào ngoài f
Nếu x = a
1
a
2
…a

n


L = L(G) thì có một dẫn xuất có dạng:
S

a
1
q
1


a
1
a
2
q
2




a
1
a
2
… a
n-1
q
n-1


a
1
a
2
… a
n-1
a
n
Và theo đó, ta có định nghĩa M, có một dãy tương ứng các chuyển tiếp:
q
0

→
1
a
q
1

→
2
a

→
−1n
a
q
n-1
→
n

a
q
n
Trang 16
Báo cáo lý thuyết tính toán Nhóm 12
từ đó cho thấy x được chấp nhận bởi M.
Ngược lại, nếu x = a
1
…a
n
được chấp nhận bởi M, khi đó | x | ≥ 1 bởi vì f chỉ là
trạng thái chấp nhận của M. Một chuyển tiếp gây ra từ x được chấp nhận như sau:
q
0

→
1
a
q
1

→
2
a

→
−1n
a
q
n-1

→
n
a
f
Chuyển tiếp này tương ứng cho kết quả của x trong văn phạm, nó cho thấy rằng x
∈ L(G). 
Một vài tác giả chấp nhận thuật ngữ “chính quy” trong văn phạm là dạng không
hạn chế của các luật sinh với nhiều gay gắt. Ta có thể cho thấy rằng một ngôn ngữ là
chính quy nếu và chỉ nếu nó có thể được sinh ra, ngoại trừ khả năng chuỗi null, bởi
văn phạm mà tất cả các quy tắc đều có dạng:
B

xC
B

x
khi B, C là các biến và x là chuỗi kết thúc khác null. Văn phạm kiểu này còn được gọi
là tuyến tính.
Trang 17
Báo cáo lý thuyết tính toán Nhóm 12
. IV VĂN PHẠM CẢM NGỮ CẢNH VÀ ÔTÔMÁT TUYẾN TÍNH GIỚI
NỘI.
Định nghĩa 4.1. Một văn phạm cảm ngữ cảnh(Context – sensitive grammar) là văn
phạm không hạn chế với mọi luật sinh đều có dạng:
α

β với | β | ≥ | α |
Một ngôn ngữ cảm ngữ cảnh (Context sensitive language - CSL) là ngôn ngữ được
sinh ra từ văn phạm trên.
Có hai lưu ý trong định nghĩa ở trên. Thứ nhất về mặt thuật ngữ thì nhỏ và rờ rạc:

Ta đã định nghĩa một CSG như là “văn phạm không hạn chế” với sự hạn chế đã đặt ra
và mặc dù nghe như là “cảm ngữ cảnh” có nghĩa là “không phải phi ngữ cảnh” thì nó
rõ ràng rằng với mọi CFG nào mà không có luật sinh A thì đều là cảm ngữ cảnh.
Chúng ta đi vào khả năng giống nhau của các bài toán trước đó, như là máy “không
đơn định” rằng, thực tế là đơn định. Một CSL không cần thiết phải là phi ngữ cảnh.
Thứ hai rất dễ hiểu cụm từ “cảm ngữ cảnh” nếu chúng ta nhìn vào những đặc trưng
khác nhau của các ngôn ngữ. Nó cho thấy rằng ngôn ngữ là cảm ngữ cảnh nếu và chỉ
nếu nó được sinh ra bởi văn phạm với các luật sinh dạng:
α A β

α X β
với α, β, X là các chuỗi biến, các ký tự kết thúc hoặc cả hai, X ≠ null, A là biến.
Ví dụ 4.1 : Trong Ví dụ 2.1, chúng ta biểu diễn văn phạm của ngôn ngữ:
L = {a
n
b
n
c
n
| n ≥ 1}
là không phải cảm ngữ cảnh. Bởi một sự thay đổi rõ ràng, tuy nhiên chúng ta có thể
thấy rằng L là một CSL. Thay vì sử dụng một biến phân biệt F đặt phía trước chuỗi, ta
có thể dễ dàng phân biệt giữa ký tự đầu A trong chuỗi và phần còn lại của A. Bạn có
thể kiểm tra rằng CSF với những quy tắc sinh L:
S

ABCS
1
| ABC
S

1


ABCS
1
| ABC
BA

AB CA

AC CB

BC
A

a aA

aa aB

ab
bB

bb bC

bc cC

cc

Trang 18
Báo cáo lý thuyết tính toán Nhóm 12

Định nghĩa 4.2. Một Ôtômát tuyến tính giới nội(Linear – bounded automata –
LBA) là một bộ gồm 5 phần M = (Q, Σ, Γ, q
0
, δ) mà nó như là một máy Turing không
đơn định. Có hai băng mở rộng các ký hiệu



, giả sử rằng không có các thành
phần của Γ. NTM M bắt đầu với cấu hình (q
0
,

x

) với băng vào của nó quét ký tự

trong ô vuông 0 và ký tự

trong ô đầu tiên bên phải của chuỗi vào x; trong các di
chuyển tiếp, M không có quyền thay thế ký hiệu

hoặc

hoặc di chuyển đầu bên trái
của nó từ ô vuông với

hoặc phải từ ô vuông với

.

Định lý 4.1. Nếu L


Σ
* là ngôn ngữ cảm ngữ cảnh, thì có một Ôtômát tuyến tính
giới nội chấp nhận L.
Chứng minh:
Cho G = (V, T, P, S) là một CSG, ta xây dựng ôtômát LBA M như sau: Băng vào
của LBA gồm hai rãnh: rãnh một chứa chuỗi nhập w với các ký hiệu đánh dấu ⊄, $ ở
hai đầu, rãnh hai dùng để phát sinh các dạng câu α. Trạng thái bắt đầu, nếu w = ε thì M
ngừng và không chấp nhận đầu vào, nếu không thì đầu đọc viết ký hiệu S ở rãnh 2,
ngay dưới ký hiệu bên trái nhất của chuỗi w, tiếp đó M thực hiện quá trình sau:
1) Chọn trong số không đơn định một chuỗi con β của chuỗi α trên rãnh 2 sao cho
β → γ là một luật sinh trong P.
2) Thay β bởi γ, nếu cần thiết ta phải dịch chuyển phần cuối chuỗi sang phải cho đủ
chỗ, tuy nhiên nếu dịch chuyển ra ngoài $ thì LBA ngừng và không chấp nhận.
3) (Hình thái hiện tại ở rãnh một là ⊄ w $, còn ở rãnh hai là chuỗi α, mà S ⇒
G
α và
| α | ≤ | w |). So sánh rãnh 1 và rãnh 2, nếu α = w thì LBA ngừng và chấp nhận w. Nếu
không thì trở về bước (1).
Như vậy khi M chấp nhận chuỗi w, thì S ⇒
G
*
w. Ngược lại nếu S ⇒
G
*
w thì mọi
dạng câu α xuất hiện trong chuỗi dẫn xuất đó đều thoả mãn | α | ≤ | w |, bởi vì mọi luật
sinh β → γ trong văn phạm G đều thỏa | β | ≤ | γ |. Như vậy M có thể thực hiện chuỗi

dẫn xuất đó trên rãnh 2, giữa hai ký hiệu đánh dấu đầu mút ⊄ và $. Vậy M chấp nhận
chuỗi nhập w.
Tóm lại M sẽ chấp nhận mọi chuỗi sinh ra bởi văn phạm G.
Định lý 11.5. Nếu có một Automat tuyến tính giới nội M = (Q,
Σ
, Γ, q
0
, δ) chấp
nhận ngôn ngữ L ⊆ Σ* thì có một văn phạm cảm ngữ cảnh phát sinh L – {∆}.
Chứng minh:
Trang 19
Báo cáo lý thuyết tính toán Nhóm 12
Ta xây dựng một CSG G thực hiện 3 giai đoạn:
oGiai đoạn 1: Văn phạm cho phép sinh ra một chuỗi w (chuỗi nhập của M), cũng
được chứa trong ⊄, $ và q
0
.
oGiai đoạn 2: Văn phạm lặp lại công việc của M.
oGiai đoạn 3: Khi xuất hiện trạng thái q ∈ F, ta thu về chuỗi w với lưu ý rằng
các luật sinh α → β đều có | α | = | β |.
Quá trình mô phỏng lại các luật sinh đó bởi các luật sinh của CSG sẽ không có gì
vướng mắc. Chỉ ở giai đoạn 3, việc xoá đi các ký hiệu đánh dấu hai đầu mút ⊄ và $, q
không được phép làm rút ngắn chuỗi nhập lại. Để giải quyết vướng mắc này, ta gắn
các ký hiệu ⊄, $, q kề bên với các ký hiệu của chuỗi nhập mà không để đứng rời ra
như trước.
Cụ thể, giai đoạn 1 thực hiện bởi các luật sinh trong G sau:
S
1
→ [a, q
0

⊄ a]S
2
S
1
→ [a, q
0
⊄a$]
S
2
→ [a, a]S
2
, S
2
→ [a,a$]
∀a ∈ Σ - {⊄, $}
Các quy tắc trong G cho phép thực hiện giai đoạn 2, giống như LBA M thực hiện.
Cuối cùng, ở giai đoạn 3, các quy tắc sau đây sẽ được sử dụng, với q ∈ F :
[a, αqβ] → a
∀a ∈ Σ - {⊄, $} và ∀α, β có thể có.
Chú ý rằng số quy tắc là hữu hạn, vì α và / hoặc β chỉ gồm ⊄, $ và một ký hiệu
nhập vào. Chúng ta cũng có thể xoá thành phần thứ hai của một biến nếu nó liền kề
với ký hiệu kết thúc bằng cách dùng các luật sinh dạng:
[a, α]b → ab
b[a, α] → ba
∀a, b ∈ Σ - {⊄, $} và ∀α có thể có.
Như vậy tập các quy tắc vừa được xây dựng mô tả văn phạm là CSG và có thể
chứng minh L(M) - {∆} = L(G).

Ví dụ 4.1. Trong ví dụ này chúng ta sử dụng ngôn ngữ L của đối xứng của {a, b}.
Một LBA chấp nhận L về cơ bản như máy Turing cho thấy trong Hình 4.1

Trang 20
Báo cáo lý thuyết tính toán Nhóm 12
Một bộ nhận aa trong văn phạm cho thấy với các gạch chân các phần phía trái của
luật sinh sẽ được sử dụng cho bước tiếp theo và LBA di chuyển tương ứng xuất hiện
bên phải.
S

T(aa

)


q
0
(a

a)
L
(aa

) (q
0
,

aa

)

q
1

(a

a)(aa

) ├ (q
1
,

aa

)

(a

∆)q
2
(aa

) ├ (q
2
,

∆a

)


(a

∆)q

2
(aa

)
R
├ (q
2
,

∆a

)

(a

∆)q
3
(aa

) ├ (q
3
,

∆a

)

q
4
(a


∆)(a∆

) ├ (q
4
,

∆∆

)

(a

∆)q
1
(a∆

) ├ (q
1
,

∆∆

)

h(a

∆)(a∆

) ├ (h,


∆∆

)

h(a

∆)h(a∆

)

ah(a∆

)

aa
Hình 4.1. Một LBA chấp nhận ngôn ngữ đối xứng.
Trang 21
q
5
q
6
∆/∆, R
a/∆, L
a/∆, R
a/a, R
b/b, R
a/∆, R
q
0

q
1
R,/〈〈
q
2
q
3
L,/〉〉
q
4
∆/∆, R
b/∆, L
∆/∆, L
a/a, R
b/b, R
b/∆, R
L,/〉〉
a/a, L
b/b, L
h
∆/∆, L
L,/〉〉
∆/∆, R
Báo cáo lý thuyết tính toán Nhóm 12
. V KẾT LUẬN
Với yêu cầu tìm hiểu và xây dựng báo cáo với hai phần, lý thuyết và thực
hành, nhóm đã tìm hiểu về một số kiểu văn phạm trên cơ sở lý thuyết, từ đó
phân tích vài ví dụ cơ bản dựa trên nên tảng lý thuyết đó.
Các vấn đề đã thực hiện như sau:
1. Tìm hiểu các khái niệm lý thuyết về văn phạm không hạn chế, các định

nghĩa, định lý.
2. Tìm hiểu về máy Turing chấp nhận ngôn ngữ không hạn chế.
3. Tìm hiểu các khái niệm, định lý, định nghĩa về văn phạm chính quy, phân
tích ví dụ cụ thể.
4. Tìm hiểu về văn phạm cảm ngữ cảnh và Ô tô mát tuyến tính giới nội, có ví
dụ minh họa cụ thể.
Các vấn đề chưa thực hiện được như sau:
1. Phân tích nhiều ví dụ cụ thể, rõ ràng cho người đọc.
2. Trình bày lý thuyết và các ví dụ một cách mạch lạc, rõ ràng hơn.
Trang 22
Báo cáo lý thuyết tính toán Nhóm 12
PHẦN HAI: BÀI TẬP
Đề bài:
Bằng cách loại bỏ lệnh hoán đổi S <n, m> trong máy RAM thô sơ để chỉ còn lại
các lệnh I <n>, D <n>, Z <n>, J <n> (i, j) và HALT, viết chương trình RAM thô sơ
tính n^^p là hàm lũy thừa bậc hai (Double Exponent Function: n^^0 = 1 ; n^^p+1 =
n
n^^p
) với các số nguyên n, p cho trước.
Bài làm:
. I Giới thiệu RAM thô sơ.
Từ một mô hình chương trình RAM, ta có thể rút gọn các lệnh xuống thành
những lệnh cơ bản, nhưng từ những lệnh này, có thể xây dựng các chương trình
như một RAM bình thường. Một RAM chỉ gồm những lệnh cơ bản gọi là RAM thô
sơ.
Ta có thể rút gọn các lệnh trong máy RAM như sau:
- Thu gọn tập lệnh ngắt: Chuyển lệnh ngắt JUMP và JGTZ về thành lệnh ngắt
JZERO.
- Thu gọn tập hợp các lệnh số học: Các lệnh nhân(MULT), chia(DIV) có thể
chuyển về lệnh cộng(ADD), trừ(SUB), các lệnh cộng(ADD) và trừ(SUB) có

thể chuyển về hai kiểu lệnh là tăng 1(INCR) và giảm 1(DECR) bằng cách sử
dụng một thanh ghi trung gian.
Từ đó ta có thể thu hẹp mô hình tính toán, gọi là mô hình RAM thô sơ, chỉ có
tập hợp các lệnh tối thiểu như sau:
Lệnh Ý nghĩa
I<n>
D<n>
Z<n>
S<m,n>
J<n>(i,j)
HALT
Tăng thêm nội dung của thanh ghi R
n
Giảm bớt 1 nội dung của thanh ghi R
n
Đặt nội dung của thanh ghi R
n
về 0
Hoán đổi nội dung các thanh ghi m, n
Nếu nội dung thanh ghi n là 0, nhảy đến lệnh có nhãn I, nếu
không nhảy đến lệnh có nhãn j
Dừng máy.
Trang 23
Báo cáo lý thuyết tính toán Nhóm 12
Với tập hợp các lệnh trên, chương trình cũng là một dãy lệnh có mang nhãn. Thực
tế thì ta có thể rút gọn hơn nữa bằng cách bỏ đi lệnh hoán đổi S<n,n> như chính trong
đề bài yêu cầu.
. II Phân tích bài toán.
Trong đề tài này, việc tính hàm lũy thừa bậc hai có thể được đưa thành biểu thức
như sau:

f(n,p) = n^^p
Ta có: f(n,0) = 1
f(n,p) = n^n^^(p-1)
n, p cho trước.
Thuật toán cơ bản, đệ quy được viết như sau, ta giả sử hàm Exp(a,b) trả về kết quả
a^b:
Tinh (n,p: integer): long
Begin:
If(p = 0) Tinh = 1
Else Tinh = Exp(n,Tinh)
Endif
End
Từ thuật toán trên, ta khử đệ quy, được thuật toán sau đây, ta giả sử kết quả được
lưu vào biến T:
Begin:
Read n,p
T = 1
while(p >0)
p = p -1
T = Exp(n,T)
Endwhile.
Write T.
End
Thuật toán Exp(n,b) có thể triển khai bằng đoạn mã sau đây:
S = n
While(b>0)
Trang 24
Báo cáo lý thuyết tính toán Nhóm 12
S = S * n
b = b -1

Endwhile
Trong thuật toán này, ta bắt chước RAM thô sơ, ta chú ý đến phép toán T = T*n.
Đây là phép nhân T cho n, ta có thể đưa phép nhân T*n về dạng phép cộng như sau:
T * n =
Thuật toán đơn giản cho việc chuyển từ phép nhân về phép cộng như sau, giả sử
kết quả được lưu vào biến Q:
Begin:
Q = 0
While n > 0
Q = Q + T
n = n -1
Endwhile
End
Và phép cộng T + k ta có thể đưa về phép tăng một đơn vị như sau:
T + k = T +
Thuật toán đơn giản cho phép toán này như trong bảng sau, giả sử R1 = T, R2 = k
và kết quả lưu vào R3:
Đoạn mã giả ngữ Đoạn mã RAM thô sơ
Begin:
R3 = 0
While R2 > 0
R1 = R1 + 1
R2 = R2 -1
Endwhile
End
1: S<3> ; gán R3 = 0
2: I<1> ; Tăng R1 lên 1 đơn vị
3: D<2> ; Giảm R2 một đơn vị
4: J<2>(5,2) ; R2 = 0 đến 5, ngược lại
đến 2

Ngoài ra ta có phép gán: S = n, phép gán này có thể thực hiện bằng vòng while như
trong bảng sau, giả sử R1 = S, R2 = n, muốn gán R1 = R2 ta làm như sau:
Trang 25

×