Tải bản đầy đủ (.pdf) (29 trang)

bài giảng môn lý thuyết tính toán - ch2 thuật toán phổ dụng

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 (602.41 KB, 29 trang )



1
Chương 2. THUẬT TOÁN PHỔ DỤNG

NỘI DUNG

2.1 Máy Turing phổ dụng
2.2 Vấn đề không tính được; Định lý Goedel
2.3 Tính khó của bài toán

TÀI LIỆU THAM KHẢO

1. Bài giảng về cơ sở tính toán tại địa chỉ (Chương 2)
2. Michael Sipser , Introduction to the Theory of Computation, 2nd edition, Couse
technology 2005 (Chương 3, 4, 5, 9)
3. Nguyễn Văn Ba. Lý thuyết ngôn ngữ và tính toán. NXB ĐHQG Hà nội, 2006 (Bài tập
1, 2 chương 5)




2
2.1. Máy Turing phổ dụng

Mô phỏng máy tính bằng máy Turing

Mô hình hoạt động của máy tính :

- Vùng lưu trữ của máy tính bao gồm một dãy (Có thể xem là vô hạn) chúa các từ nhớ
(word), mỗi từ có một địa chỉ (adress).



- Chương trình của máy tính được lưu trong một số từ nhớ. Mỗi từ nhớ biểu diễn một chỉ
thị (lệnh) đơn giản giống như trong ngôn ngữ máy.
Ví dụ, chỉ thị di chuyển dữ liệu từ một từ nhớ này đến một từ nhớ khác hoặc cộng
chúng với nhau. Cho phép « định địa chỉ gián tiếp »  một địa chỉ có thể chỉ đến một từ
khác và dùng nội dung của từ nhớ đó làm địa chỉ của từ nhớ sẽ được áp dụng phép toán
(Kiểu danh sách liên kết).

- Mỗi chỉ thị cần một số nhất định các từ nhớ và chỉ thay đổi giá trị cho tối đa 1 từ nhớ.

- Các thanh ghi (Register) : là các từ nhớ có khả năng truy xuất nhanh.



3
Thiết kế máy Turing mô phỏng máy tính :

Máy Turing M gồm 5 băng (Xem hình 1):

- Băng 1 (bộ nhớ) biểu diễn toàn bộ bộ nhớ của máy tính. Địa chỉ và nội dung
của từ nhớ được mã hóa nhị phân và sắp xếp xen kẽ nhau trên băng. Các dấu
ghi * và # để đánh dấu các điểm cuối của địa chỉ và nội dung.

- Băng 2 là con đếm chỉ thị và lưu giữ một số nguyên nhị phân biểu diễn vị trí
của bộ nhớ trên băng 1. Giá trị được lưu ở vị trí đó sẽ được diễn giải như chỉ thị
máy tính tiếp theo cần được thực hiện.

- Băng 3 giữ một địa chỉ bộ nhớ hoặc nội dung của địa chỉ đó sau khi địa chỉ đã
được định vị trên băng 1.


- Băng 4: lưu giữ nguyên liệu của máy tính.

- Băng 5: băng dùng chung.


4




Hình 1: Máy Turing mô phỏng máy tính



5
Máy Turing M thực hiện một chỉ thị của máy tính:
- Chép địa chỉ cần tìm vào băng 3
- So sánh với các địa chỉ trên băng 1 để tìm được địa chỉ cần tìm
- Chép nội dung của địa chỉ cần tìm vào băng 3 và di chuyển đến chỗ cần dùng nó.

Máy Turing M mô phỏng chu trình chỉ thị (Instruction Cycle) :
- Tìm trên băng 1 một địa chỉ theo đúng con số chỉ thị trên băng 2 bằng cách: bắt đầu tại $ trên
băng 1 và di chuyển sang phải, so mỗi địa chỉ với nội dung của băng 2.
- Khi đã tìm ra địa chỉ của chỉ thị, M xem xét giá trị của nó: khi từ nhớ là một chỉ thị, một số bit
đầu tiên biểu diễn hành động cần thực hiện và các bít còn lại là địa chỉ cần cho hành động đó.
- Nếu chỉ thị đòi hỏi giá trị của một địa chỉ khác thì địa chỉ đó phải là thành phần của chỉ thị: M
chép địa chỉ đó vào băng ba đánh dấu vị trí của chỉ thị nhờ rãnh thứ hai của băng 1 để quay về chỉ
thị nếu cần. M tìm địa chỉ bộ nhớ trên băng 1 và chép giá trị của nó vào băng 3 (đang chứa địa chỉ
của bộ nhớ đó).
- M thực hiện chỉ thị (hoặc một phần chỉ thị) liên quan đến giá trị này:

a) Chép giá trị vào một địa chỉ khác
b) Cộng giá trị vào giá trị của một địa chỉ nào đó.
c) Thực hiện một thao tác nhảy (pump): chỉ dẫn lấy chỉ thị tiếp theo từ địa chỉ có giá trị hiện
được lưu trên băng ba, M chép băng ba vào băng hai và bắt đầu lại chu trình chỉ thị
- Sau khi thực hiện chỉ thị và xác định chỉ thị không phải là thao tác nhảy, M cộng 1 vào con đếm
chỉ thị trên băng hai và bắt đầu lại chu trình chỉ thị.



6
2.1.1. Các định nghĩa hình thức
1) Liệt kê các chuối nhị phân
- w là chuỗi nhị phân  1w được xem như một số nguyên nhị phân thứ i nào đó  w là
chuỗi nhị phân thứ i, ký hiệu w
i
.
- Các chuỗi nhị phân được sắp xếp theo thứ tự tăng của độ dài chuỗi, các chuỗi có cùng độ
dài được sắp xếp theo thứ tự từ điển.
Như vậy: Chuỗi rỗng  là chuỗi thứ 1, 0 là chuỗi thứ 2, 1 là chuỗi thứ 3, 00 là chuỗi thứ 4, 01 là
chuỗi thứ 5, ….

2) Bản mã cho máy Turing
Xét máy Turing M = (Q, {0, 1}, , , B, F):
- Q gồm r trạng thái : q
1
, q
2
, …, q
r
; q

1
là trạng thái đầu, q
2
là trạng thái cuối (thừa nhận).
-  gồm s ký hiệu băng X
1
, X
2
, …, X
s
; X
1
là ký hiệu 0, X
2
là ký hiệu 1, X
3
là ký hiệu trắng B, các
ký hiệu băng khác có thể được gán cho các số nguyên còn lại một cách tùy ý.
- Hướng L ký hiệu là D
1
, hướng R là D
2
.
- Hàm chuyển (q
i
, X
j
) = (q
k
, X

l
, D
m
)  bản mã chuyển vị C = 0
i
10
j
10
k
10
l
10
m
.
Bản mã của M là tập hợp các bản mã của các chuyển vị theo một thứ tự nào đó và ngăn cách bởi
cặp ký hiệu 1:
C
1
11C
2
11… C
n-1
11C
n

Trong đó, C
i
, 1  i  n, là bản mã cho một chuyển vị của M.



7
Ví dụ 1. Cho máy Turing M = ({q
1
, q
2
, q
3
}, {0, 1}, {0, 1, B}, , q
1
, B, {q
2
}), trong đó

(q
1
, 1) = (q
3
, 0, R)
(q
3
, 1) = (q
2
, 0, R)
(q
3
, 0) = (q
1
, 1, R)
(q
3

, B) = (q
3
, 1, L)

Bản mã cho các qui tắc tương ứng:

0100100010100
00010010010100
0001010100100
0001000100010010

Một bản mã của M:
01001000101001100010101001001100010010010100110001000100010010

Có thể có tất cả 4! = 24 bản mã của M.
Bản mã của căp (M, w) là bản mã của M, theo sau là 111 và w.

Ví dụ 2. Xét (M, w), trong đó M được cho trong ví dụ 1, còn w = 1011. Khi đó bản mã
của (M, w) là:

010010001010011000101010010011000100100101001100010001000100101111011


8
3) Ngôn ngữ chéo hóa
Máy Turing M là máy thứ i: M
i
 bản mã của M là chuỗi nhị phân thứ i: w
i
.

Xét w
i
bất kỳ. Nếu w
i
không phải là bản mã có nghĩa của một máy Turing thì ta chọn M
i
là máy
Turing chỉ gồm 1 trạng thái và không có chuyển vị. Như vậy, M
i
là máy Turing sẽ dừng ngay lập
tức trên mọi nguyên liệu  L(M
i
) = .
Ngôn ngữ L
d
là ngôn ngữ chéo hóa (Diagonalzation Language)  L
d
= {w
i
w
i
 L(M
i
)}
 L
d
bao gồm tất cả các chuỗi w sao cho máy M với bản mã w không thừa nhận w.
Xét bảng gồm các ô (i, j) nhận giá trị 1 nếu máy M
i
thừa nhận chuỗi w

j
và nhận giá trị 0 trong
trường hợp ngược lại.
Hàng i  vectơ đặc trưng (Characteristic Vector) của ngôn ngữ L(M
i
).
Giá trị của đường chéo bảng cho biết máy M
i
có thừa nhận w
i
hay không?
L
d
= {Phần bù giá trị của đường chéo gồm các ô (i, i)}
Kỹ thuật lấy bù đối với đường chéo  Kỹ thuật chéo hóa (Diagonaization)

Định lý 1. L
d
không phải là ngôn ngữ kể được đệ qui  Không có máy
Turing thừa nhận L
d
.
Chứng minh. Giả sử L
d
là L(M) của một máy Turing M  M = M
i
tương ứng
w
i
.

Nếu w
i
 L
d
 M
i
thừa nhận w
i
. Theo định nghĩa, w
i
 L
d
 Vô lý.
Nếu w
i
 L
d
 M
i
không thừa nhận w
i
. Theo định nghĩa, w
i
 L
d
 Vô lý.


9
4) Ngôn ngữ không kể được đệ qui

L là ngôn ngữ kể được đệ qui (RE-Recursively Enumerable Language)  L = L(M), với M
là một máy Turing nào đó.
- Nếu nguyên liệu w  L  M dừng ở một trạng thái thừa nhận.
- Nếu nguyên liệu w  L  M dừng ở một trạng thái không thừa nhận hoặc không dừng.

5) Ngôn ngữ đệ qui
Ngôn ngữ L đệ qui  L = L(M), trong đó M là máy Turing nào đó thỏa mãn:
- Nếu w thuộc L thì M thừa nhận w (và vì thế sẽ dừng)
- Nếu w không thuộc L thì cuối cùng M sẽ dừng

6) T-tính được
Máy Turing có thể tính một hàm : Đối của hàm là xâu vào ; giá trị của hàm là xâu được ghi
trên băng khi máy dừng thực hiện.
Hàm bộ phận f : 
*
 
*
là hàm bộ phận T-tính được  tồn tại máy Turing M sao cho:
- Với xâu vào w thuộc miền xác định của f thì M dừng ở một hình trạng mà f(w) đang ở trên
băng.
- Với xâu vào w không thuộc miền xác định của f thì M không dừng hoặc sẽ dừng và thông
báo hàm là không xác định nhờ một giá trị qui ước trên băng.
Hàm toàn phần f : 
*
 
*
là hàm (toàn phần) T-tính được  tồn tại máy Turing M sao cho
với mọi xâu vào w, M luôn dừng ở một hình trạng mà f(w) đang ở trên băng.




10
Ví du. Xây dựng một máy Turing M để thực hiện phép nhân hai số nguyên dương m, n.
- Input : 0
m
10
n
- Output : B0
mn
B
- Hoạt động của M : Trước hết M viết số 1 sau 0
m
10
n
, sau đó chép m lần liên tiếp khối n số
0, mỗi lần chép 1 khối, loại bớt 1 số 0 trong khối 0
m
 10
n
10
mn
. Cuối cùng cần xóa tiền tố
10
n
1  0
mn
còn lại trên băng là giá trị của hàm.
- Thiết kế một chương trình con CHEP :
Hình trạng bắt đầu : #0
m-i

1q
1
0
n
10
in
# Hình trạng kết thúc : #0
m-i-1
1q
5
0
n
10
(i+1)n
# Hàm chuyển :


0
1
2
B
q
1

(q
2
, 2, R)
(q
4
, 1, L)



q
2

(q
2
, 0, R)
(q
2
, 1, R)

(q
3
, 0, R)
q
3

(q
3
, 0, L)
(q
1
, 1, L)
(q
1
, 2, R)

q
4


(q
5
, 1, R)
(q
4
, 0, L)


- Hoàn thiện chương trình :
Cần biến đổi hình trạng đầu #q
0
0
m
10
n
#  #B0
m-1
10
n
1#
Hàm chuyển :


0
1
2
B
q
0


(q
6
, B, R)



q
6

(q
6
, 0, R)
(q
6
, 1, R)

(q
7
, 1, L)
q
7

(q
7
, 0, L)
(q
1
, 1, R)





11
Cần biến đổi hình trạng #B
i
0
m-i
1q
5
0
n
10
ni
#  #B
i+1
0
m-i-1
q
1
0
n
10
n(i+1)
# để bắt đầu lại
chương trình con CHEP.
Tại mỗi bước cần kiểm tra m = i  Nếu sai tiếp tục chương trình, nếu đúng thì xâu con
10
n
1 cũng bị xóa nốt và dừng ở trạng thái kết thúc q

14
.
Hàm chuyển:


0
1
2
B
q
5

(q
5
, 0, L)
(q
8
, 1, L)


q
8

(q
9
, 0, L)


(q
10

, B, R)
q
9

(q
9
, 0, L)


(q
11
, B, R)
q
10

(q
13
, B, R)


q
11

(q
12
, B, R)



q

12

(q
12
, 0, R)
(q
1
, 1, R)


q
13

(q
13
, B, R)
(q
14
, B, R)



Tổng hợp:
- Q = {q
0
, q
1
, , q
14
};

-  = {0, 1};
-  = {0, 1, 2, B};
- F = {q
14
}
-  được xác định từ các bảng trên.



12
L  Bài toán
M  Thuật toán
L giải được (Dicidable)  L là ngôn ngữ đệ qui
L không giải được (Undicidable)  L không phải là ngôn ngữ đệ qui


Bài toán quyết định: Cho  là tập hợp các đối tượng nào đó và P là một tính chất
(hoặc một quan hệ) trên . Có hay không một thủ tục hữu hiệu (thuật toán) để với mỗi x
 biết được x có tính chất P hay không ?

Ví dụ.
1) Bài toán số nguyên tố: Xét tính chất nguyên tố trên tập các số tự nhiên Tồn tại
thuật toán để xác định số tự nhiên x có phải là số nguyên tố hay không (Chẳng hạn thuật
toán Euclid).

2) Bài toán dừng: Một máy Turing đã cho là có dừng (tức là có một sự thực hiện
hữu hạn) với một xâu vào bất kỳ cho trước hay không ?





13
7) Ngôn ngữ phổ dụng (Universal language) và máy Turing phổ dụng
(Universal Turing Machine)

L
u
là ngôn ngữ phổ dụng  L
u
là tập các chuỗi nhị phân mã hóa cặp (M, w), trong
đó M là máy Turing nào đó với bộ chữ cái nhị phân làm nguyên liệu, w là chuỗi nhị
phân sao cho w  L(M). Như vậy, L
u
là tập các chuỗi nhị phân biểu diễn một máy
Turing M và một nguyên liệu được thừa nhận bởi M.

Máy Turing U là máy Turing phổ dụng  L
u
= L(U).
Như vậy, máy Turing phổ dụng U thừa nhận cả dữ liệu vào và các mô tả quá trình
tính toán (thuật toán/chương trình).

Những máy tính đầu tiên có thể xem như là các phần cứng có thêm chương trình.
Để thay đổi quá trình tính hàm có thể tiến hành bằng cách ngắt kết nối dây dẫn
hoặc là xây dựng máy tính mới. John von Neumanm đã đề xuất sử dụng thuật
toán phổ dụng Turing. Các hàm được tính bằng cách thức mô tả chúng (chương
trình) như là một phần của dữ liệu vào sẽ thuận tiện hơn là thay đổi phần cứng






14
2.1.2. Các dạng máy Turing phổ dụng
Xét về mặt cấu tạo có các loai:
1) Máy Turing phổ dụng với băng vô hạn hai đầu
2) Máy Turing phổ dụng với nhiều băng vô hạn hai đầu
3) Máy Turing phổ dụng nhiều chiều
4) Máy Turing phổ dụng nhiều đầu đọc
Xét về mặt không gian: máy Turing phổ dụng nhỏ và lớn.


Thiết kế máy Turing phổ dụng U:
Cho trước cặp (M, w), trong đó M là máy Turing và w L(M).
Máy Turing phổ dụng U gồm 4 băng:

- Băng thứ nhất lưu các chuyển vị cùng với w.
- Băng thứ hai lưu băng được mô phỏng bởi M, tức là sử dụng khuôn dạng bản mã của
M, trong đó ký hiệu băng X
i
được biểu diễn 0
i
và phân cách bởi 1.
- Băng thứ ba lưu trạng thái của M, trong đó trạng thái q
i
được biểu diễn bởi 0
i
.
- Băng thứ tư là băng chung.
Xem hình 2 dưới đây:




15



Hình 2: Mô hình máy Turing phổ dụng




16
Hoạt động của U:
(1) Xem xét nguyên liệu để đảm bảo bản mã cho M là một bản mã hợp lệ của một máy Turing nào đó.
Nếu không U sẽ dừng và không thừa nhận.
(2) Khởi gán băng thứ hai với nguyên liệu w ở dạng mã hóa: với mỗi 0 của w đặt 10 lên băng thứ hai,
với mỗi 1 của w đặt 100 tại đó. Ký hiệu trắng trên băng cần mô phỏng của M biểu diễn bởi 1000. Tất
cả các ô nằm ngoài phần được dùng cho w đều giữ ký hiệu trắng của U.
(3) Đặt 0, khởi trạng của M trên băng thứ ba và di chuyển đầu đọc-ghi ở băng hai của U đến ô đầu tiên
cần mô phỏng.
(4) Mô phỏng một bước chuyển của M: U tìm băng thứ nhất của nó một chuyển vị dạng 0
i
10
j
10
k
10
l
10

m

sao cho 0
i
là trạng thái trên băng ba và 0
j
là ký hiệu băng của M bắt đầu tại vị trí trên băng hai đang
được quét bởi U. Chuyển vị này là chuyển vị mà tiếp theo M sẽ thực hiện. U cần phải:
- Thay đổi nội dung của băng ba thành 0
k
(mô phỏng sự thay đổi trạng thái của M) bằng hai thao tác:
Trước hết U thay tất cả các 0 trên băng ba thành ký hiệu trắng, sau đó chép 0
k
từ băng một vào băng
ba.
- Thay 0
i
trên băng hai bằng 0
l
, tức là thay ký hiệu băng của M. Nếu cần thêm bớt chỗ (i  l) sử dụng
băng chung và kỹ thuật xê dịch.
- Di chuyển đầu đọc-ghi trên băng hai về vị trí của 1 kế tiếp ở bên trái nếu m = 1 và ở bên phải nếu m
= 2 (U mô phỏng hướng chuyển của M).
(5) Nếu M không có chuyển vị khớp với trạng thái và ký hiệu băng được mô phỏng thì trong (4) sẽ
không tìm được chuyển vị nào. Do đó M dừng trong cấu hình được mô phỏng và U thực hiện đúng
như vậy.
(6) Nếu M chuyển vào một trạng thái thừa nhận của nó thì U thừa nhận cặp (M, w).




17
U thừa nhận cặp (M, w)  M thừa nhận w.

Tính không giải được của ngôn ngữ phổ dụng:
Định lý 2. L
u
là ngôn ngữ kể được đệ qui nhưng không đệ qui.

Gọi R là lớp các hàm tính được toàn phần hoặc bộ phận. Xét u  R là hàm phổ
dụng. Hàm u sẽ mô phỏng mọi hàm f  R với thời gian c
2
T và không gian S+c, trong đó
S, T > xlà không gian và thời gian tính f(x), c là độ dài của chương trình.

Như vậy, u đòi hỏi phần đầu m của dữ liệu vào mx là danh sách các lệnh của
máy Turing M và trạng thái khởi tạo của đầu đọc-ghi.
Hàm u(mx) được thực hiện theo chu trình. Mỗi chu trình mô phỏng một bước
của M(x). Sau khi thực hiện bước thứ i của M(x), l
i
là phần băng bên trái, r
i
là phần
băng bên phải (kể từ đầu đọc-ghi) và s
i
là trạng thái của đầu đọc. Cấu hình của băng
của u(mx) sau khi chu trình i là t
i
= l
i
ms

i
r
i
. Sau đó u quan sát m để tìm lệnh đáp ứng
trạng thái s
i
và chữ đầu tiên trong r
i
và biến đổi t
i
. Khi M(x) dừng, u(mx) có ms
i
từ
băng và cũng dừng.
Máy Turing phổ dụng đa băng làm việc tương tự nhưng cũng tiền định theo thời
gian O(t(x)) và dừng tại bước t (cho trước x, t(x) và chương trình thích hợp).



18
2.1.3. Luận đề Turing – Church
 Các dạng khác nhau (nhưng tương đương) của luận đề Turing-Church:

Trên phương diện đoán nhận ngông ngữ: Các ngôn ngữ quyết định được bởi một
thủ tục hữu hiệu là các ngôn ngữ đệ qui
Trên phương diện bài toán quyết định: Các bài toán nhị phân quyết định được
bởi một thủ tục hữu hiệu là các bài toán T-quyết định được.
Trên phương diện tính toán các hàm: Các hàm tính được bởi một thủ tục hữu
hiệu là các hàm T-tính được


 Các sự kiện ủng hộ cho khẳng định của luận đề Turing-Church:
Mọi mở rộng của máy Turing đều không tăng sức mạnh của máy.
Mọi mô hình hóa hợp lý khác của khái niệm thủ tục hữu hiệu đã được đề xuất cho
đến nay đều tương đương với các máy Turing như:
- Hệ thống Post
- -tính toán
- Dạng chuẩn Markov
- Các hàm đệ qui




19
2.2. Vấn đề không tính được; Định lý Goedel
2.2.1. Các hàm phổ dụng và đầy đủ
 Lựa chọn một dấu ghi đặc biệt và sau khi nó xuất hiện lần thứ k, phân chia xâu x thành
Prefix
k
(x) và Suffix
k
(x). Ký hiệu f
+
(x) là f(Prefix
k
(x)) và f

(x) là f( Suffix
k
(x)).
 Hàm u là k-mô phỏng f nếu với p = Prefix

k
(p) và với mọi s có u(ps) = f(ps).
 Một cách trực giác, tiền tố có thể coi như chương trình mà hàm mô phỏng u tác động lên hậu tố
(Input). Hàm u là k-phân cắt f nếu có u(ps) = f(ps), với Prefix
k
(p) nào đó và mọi s. Chẳng hạn,
hàm độ dài xâu có thể k-phân cắt nhưng không mô phỏng một hàm nào khác.
 Hàm u là phổ dụng đối với lớp các hàm F  u là k-mô phỏng mọi hàm trong F với k cố định
nào đó.
 Hàm u là đầy đủ đối với lớp các hàm F  u là k-phân cắt mọi hàm trong F với k cố định nào
đó.
 Trong trường hợp F chứa f
+
và f
-
với mọi f  F, tính phổ dụng tương đương (hệ quả nếu chỉ f
+

 F) với tính đầy đủ : u là k-phân cắt với mọi f  F.
 Hàm u là k-mô phỏng f nếu u là k-phân cắt f


 Hàm u là 2k-phân cắt f nếu u là k-mô phỏng f
+
.
 Phủ định của hàm (toàn phần hoặc bộ phận) f là một tân từ toàn phần –f nhận giá trị 1 nếu f(x)
= 0 và nhận giá trị 0 trong các trường hợp khác. Hiển nhiên, lớp các hàm đầy đủ không đóng
đối với phép lấy phủ định. Do đó, trong lớp các tân từ (tính được hoặc không) tồn tại các hàm
không phổ dụng. Điều này suy ra từ định lý Cantor : Tập tất cả các xâu là không đếm được.
Bài tập. Mô tả hàm đầy đủ đối với lớp các hàm tuyến tính.



20
2.2.2. Định lý Goedel
Có các hàm không đầy đủ trong số các hàm tính được (đệ qui) toàn phần. Lớp các
hàm tính được là đóng với phép phủ định. Vì vậy, hàm u (và u
2
= (u mod 2)) phổ dụng
trong R có mở rộng tính được không toàn phần.
Chứng minh hình thức rằng, các hệ thống tính được các hàm A(P) bằng cách kiểm
tra nếu P là chứng minh được thừa nhận và kết quả thông báo được xác thực. - s có
nghĩa là s = A(P) với P nào đó. A là đa năng nếu nó cho phép tính được bản dịch s
x

của khẳng định “ u
2
(x) = 0” được chứng tỏ luôn đúng và bác bỏ (- -s) mỗi khi u
2
(x) =
1. A là phù hợp nếu tối đa có một cặp tùy ý s
x
, -s
x
được xác thực và là đầy đủ nếu ít
nhất một trong chúng luôn là xác thực (tương đương khi u(x) phân kỳ). Một hệ hình
thức đầy đủ và phù hợp đa năng không tồn tại, bởi vì nó sẽ đưa ra một mở rộng toàn
phần hiển nhiên u
A
của u
2

(bằng cách duyệt vét cạn tất cả P để xác nhận hoặc bác bỏ
s
x
). Đó chính là nội dung của định lý Goedel.

Định lý Goedel thứ nhất (tính không đầy đủ): Mọi lý thuyết được tiên đề hóa một cách thỏa
đáng là không đầy đủ. Đặc biệt, mệnh đề “Mênh đề này là không chứng minh được” là đúng
nhưng không thể chứng minh được trong lý thuyết đang xét.
Định lý Goedel thứ hai (tính không đầy đủ): Trong mỗi lý thuyết được tiên đề hóa phù hợp
(được tiên đề hóa có nghĩa là các tiên đề được sinh ra một cách tính được) mà mã hóa có thể
các dãy số (và cả các ký hiệu cú pháp “công thức”, “mệnh đề”, “chứng minh”) một cách phù
hợp của hệ thống đều không thể chứng minh được trong hệ thống.


21
2.2.3. Các hàm đệ quy
Một vấn đề khác là bài toán dừng (đối với u(x)) cần có mở rộng toàn phần của u và
thực chất là không tính được. Đây chính là nguồn gốc của một vài kết quả không tính
được. Một nguồn khác là định lý điểm bất động của S. Kleene : mỗi chuyển vị A tính
được đầy đủ đối với các chương trình (tiền tố) sắp xếp trong chương trình nào đó là
tương đương nhau. Thật vậy, hàm phổ dụng/đầy đủ u(ps) phân cắt hàm tính được
u(A(p)s).
Các hàm tính được (bộ phận hoặc đầy đủ) còn gọi là các hàm đệ qui.
Có thể qui bài toán thành viên của tập A về một tập B bằng cách định nghĩa hàm đệ
qui f : x A  f(x) B. A được gọi là m-thu về B. Sự thu về Turing phức tạp hơn được
cho bởi thuật toán, bắt đầu từ dữ liệu vào x, phân cắt B bằng cách sinh ra xâu s và yêu
cầu trả lời câu hỏi : s có thuộc B hay không ? Có thể xảy ra thuật toán dừng và x A.
Tập kể được đệ qui (thường gọi là bài toán dừng) có thể m-thu về được gọi là kể được
đệ qui đầy đủ. Một trong các cách trình bày tập kể được đệ qui đầy đủ (thực chất là
không giải được) là thu gọn bài toán dừng về nó.

Ju. Matijasevich đã đưa ra một tập hợp kể được đệ qui đối với bài toán phương trình
Diophang : Cho một đa thức bậc 4 với hệ số nguyên ; tìm nghiệm nguyên của đa thức.
Phép thu bài toán P
1
về bài toán P
2
là một thuật toán biến đổi các thể hiện của P
1

thành các thể hiện của P
2
và có cùng trả lời đúng hoặc sai.



22
a) Các hàm đệ qui nguyên thủy
Cho { 
k
   k  0} là tập hợp các hàm (toàn phần) mà các đối số (với số lượng k bất kỳ) và
giá trị của hàm đều là các số tự nhiên.
Hàm đệ qui nguyên thủy cơ sở là các hàm sau :
(1) Hàm không 0() : không có đối số và luôn nhận giá trị 0.
(2) Các hàm chiếu 
i
k
(n
1
, …, n
k

) = n
i
với k  1 và 1  i  k.
(3) Hàm kế tiếp (n) = n+1
Phép hợp thành: Đặt X = (n
1
, …, n
k
). Cho g là hàm có l đối số và h
1
, , h
l
là l hàm có k đối
số. Hợp thành của g và h
1
, , h
l
là hàm có k đối số f: f(X) = g(h
1
(X), , h
l
(X)).
Phép đệ qui nguyên thủy: Cho g là hàm có k đối số và h là hàm có k+2 đối số. hàm f xác
định từ g và h bởi phép đệ qui nguyên thủy là hàm có k+1 đối số sao cho: f(X,0) = g(X);
f(X, m+1) = h(X,m,f(X, m))
Hàm đệ qui nguyên thủy là tất cả các hàm:
- Các hàm đệ qui nguyên thủy cơ sở
- Các hàm nhận được từ các hàm đệ qui nguyên thủy cơ sở bởi một số lần áp
dụng các phép hợp thành và đệ qui nguyên thủy


Ví dụ. Các hàm đệ qui nguyên thủy:
- Hàm hằng J()= j  J() = (( (0()))) (j lần )
- Hàm cộng plus(n
1
, n
2
) = n
1
+n
2
 plus(n
1
, 0) = 
1
1
(n
1
);
plus(n
1
, n
2
+1) = (
3
3
(n
1
, n
2
, plus(n

1
, n
2
)))


23
- Hàm nhân times(n, m) = n*m  n*0 = 0;
n*(m+1) = n + (n*m)
- Hàm giai thừa n!: 0! = 1; với n  1: n! = 1.2 n  0! = 1;
(n+1)! = (n+1)*n!
- Hàm lũy thừa nm = n
m
 n
0
= 0;
n
m+1
= n*n
m

- Hàm trước pred(n): pred(0) = 0; với n  1: pred(n) = n-1  pred(0) = 0;
pred(n+1) = n
- Hàm dấu sign(n): sign(0) = 0; với n  1: sign(n) = 1  sign(0) = 0;
sign(n+1) = 1
- Hàm trừ: nm = 0 nếu n  m; nm = n-m nếu n > m  n0 = n;
n(m+1) = pred(nm)
b) Các tân từ đệ qui nguyên thủy
Tân từ (vị từ) là một hàm với k đối số tự nhiên và nhận giá trị trong tập hợp {sai,
đúng}: { 

k
 {sai, đúng} k  0}
Hàm đặc trưng của tân từ P  
k
là hàm f: 
k
 {0, 1} sao cho
f(X) =





PX
PX
,0
,1

Tân từ P là đệ qui nguyên thủy  hàm đặc trưng f của P là đệ qui nguyên thủy.


24
Ví dụ. Các tân từ đệ qui nguyên thủy:
- Tân từ không: m = 0 chỉ đúng khi m = 0  có hàm đặc trưng zero:
zero(0) = 1; zero(m+1) = 0
- Tân từ nhỏ thua: n < m  có hàm đặc trưng nhothua: nhothua(n,m) = sign(nm)
- Tân từ bằng: n = m  có hàm đặc trưng bang:
bang(n, m) = 1  (sign(mn) + sign(nm))
- Phép tối tiểu hóa giới nội của hàm từ tân từ q(X,i) với cận m: im q(X,i) 
im q(X,i) = số nhỏ nhất i  m sao cho q(X,i) đúng và im q(X,i) = 0 nếu

không tồn tại i như vây. Có: i0 q(X,i) = 0; i(m+1) q(X,i) = 0 nếu không tồn
tại im+1 để q(X,i) đúng; i(m+1) q(X,i) = im q(X,i) nếu tồn tại im để
q(X,i) đúng và i(m+1) q(X,i) = m+1 nếu q(X,m+1) đúng và không tồn tại i m
để q(X,i) đúng.









25
c) Các hàm - đệ qui

Tối tiểu hóa không giới nội của tân từ q(X,i) là hàm iq(X,i) = số bé nhất
i sao cho q(X, i) = 1 và = 0 nếu không tồn tại i như vậy.
Tân từ q(X, i) là an toàn (safe)  với mọi X tồn tại i để q(X, i) = 1.
Hàm và tân từ là -đệ qui  chúng nhận được từ các hàm đệ qui nguyên
thủy cơ sở bởi các phép
- hợp thành
- đệ qui nguyên thủy
- tối tiểu hóa không giới nội trên các tân từ an toàn

Hàm bộ phận f:  là -đệ qui bộ phận  f nhận được từ các hàm đệ
qui nguyên thủy cơ sở bởi
- Phép hợp thành
- Phép đệ qui nguyên thủy
- Phép tối tiểu hóa không giới nội


Hàm f là -đệ qui  f là T-tính được

×