ChatGPT có thể trả lời những câu hỏi phức tạp, các AI Agent có thể tự động sử dụng công cụ để hoàn thành công việc và nhiều hệ thống AI ngày nay đã có khả năng lập kế hoạch hay đưa ra quyết định. Nhưng có lẽ một câu hỏi thú vị hơn lại ít khi được nhắc đến: Làm thế nào để một cỗ máy có thể suy luận? Và bằng cách nào máy tính có thể biết rằng kết luận mà nó vừa tạo ra thực sự là đúng?
Hóa ra, câu trả lời cho những câu hỏi này không bắt đầu từ Machine Learning hay các Large Language Models. Nó bắt đầu từ một ý tưởng đã xuất hiện từ rất lâu: Logic.
Trước khi có thể suy luận về thế giới, máy tính phải học được ngôn ngữ để mô tả thế giới đó. Nó cần biết đâu là đối tượng, đâu là thuộc tính, đâu là những quy luật tổng quát đang chi phối chúng và bằng cách nào những quy luật đó có thể được sử dụng để tạo ra những kết luận mới. Logic, First-order Logic và Predicate Logic chính là những viên gạch đầu tiên của hành trình ấy.
Chúng ta sẽ cùng khám phá cách Logic đã dạy máy tính học cách hiểu thế giới và vì sao nó lại trở thành nền móng của Automated Reasoning cũng như rất nhiều công nghệ AI hiện đại ngày nay.
1. Tại sao máy tính cần một ngôn ngữ của suy luận?
Hãy
hình dung chúng ta đưa cho một chiếc máy tính ba câu nói rất đơn giản:
- Mọi con mèo đều đáng yêu.
- Tom là một con mèo.
- Tom đáng yêu.
Với
con người, chúng ta gần như không cần suy nghĩ để nhận ra rằng câu thứ ba là hệ
quả tất yếu của hai câu đầu tiên. Thậm chí, nếu bỏ đi câu "Tom đáng
yêu", chúng ta vẫn có thể dễ dàng tự suy ra kết luận đó.
Nhưng
đối với máy tính, ba câu nói trên chỉ đơn thuần là ba chuỗi ký tự không có bất
kỳ ý nghĩa nào. Nó không biết "con mèo" là gì, không hiểu "đáng
yêu" là một thuộc tính và cũng không thể nhận ra rằng Tom xuất hiện ở cả
ba câu nói. Đối với nó, đây chỉ là ba mẩu dữ liệu hoàn toàn độc lập với nhau.
Điều
này dẫn đến một câu hỏi rất thú vị: Làm thế nào để một cỗ máy có thể hiểu được
rằng hai thông tin đã biết có thể tạo ra một tri thức mới?
Nếu
chúng ta chỉ lưu trữ dữ liệu, máy tính sẽ không thể trả lời được câu hỏi đó. Muốn
một hệ thống có khả năng suy luận, trước hết chúng ta phải dạy cho nó một ngôn
ngữ để mô tả thế giới xung quanh.
Ngôn
ngữ đó cần trả lời được những câu hỏi như:
- Trong thế giới này đang tồn tại những
đối tượng nào?
- Chúng có những thuộc tính gì?
- Chúng liên hệ với nhau ra sao?
- Có những quy luật tổng quát nào đang
chi phối chúng?
- Từ những điều đã biết, hệ thống được
phép suy ra thêm những điều gì?
Đây
chính là nơi Logic xuất hiện.
Logic
không được tạo ra để làm cho máy tính trở nên thông minh hơn. Nó được tạo ra để
giúp máy tính có thể suy nghĩ một cách chính xác hơn. Nếu dữ liệu trả lời câu hỏi
"máy tính biết điều gì?", thì Logic lại trả lời câu hỏi "máy
tính được phép suy luận điều gì từ những gì nó đã biết?".
Trước khi có thể chứng minh một định lý toán học, xác minh tính đúng đắn của một chương trình hay xây dựng các hệ thống AI có khả năng lập luận, máy tính cần phải học được ngôn ngữ của suy luận. Hành trình đó bắt đầu từ Logic, tiếp tục với First-order Logic và Predicate Logic – những viên gạch nền móng giúp máy tính học cách hiểu thế giới mà nó đang tồn tại.
2. Logic là gì?
Hãy
tưởng tượng bạn đang nghe hai người tranh luận với nhau. Người thứ nhất nói:
"Mọi triết gia đều lập dị. Jack là một triết gia. Vậy Jack là người lập dị."
Khi
nghe lập luận này, có lẽ bạn sẽ tự hỏi: "Nhưng liệu mọi triết gia có thực
sự lập dị không?" Tuy nhiên, đó lại không phải là câu hỏi mà logic quan
tâm. Logic không quan tâm câu "mọi triết gia đều lập dị" có đúng
ngoài đời thật hay không. Điều mà logic quan tâm là: nếu hai câu đầu đều
đúng thì câu kết luận có bắt buộc phải đúng theo hay không?
Nói
một cách đơn giản, logic không đi tìm sự thật của thế giới mà đi kiểm tra xem
cách chúng ta suy nghĩ có đúng hay không. Nó giống như một vị trọng tài của các
cuộc tranh luận. Vị trọng tài này không đứng về bên nào, cũng không quan tâm ai
là người nổi tiếng hay ai nói chuyện thuyết phục hơn. Điều duy nhất nó quan tâm
là: kết luận có được suy ra một cách hợp lý từ những điều đã cho hay không.
Mỗi
lập luận đều có hai phần. Phần thứ nhất là các tiền đề (premise) - tức những điều
mà chúng ta giả sử là đúng. Phần thứ hai là cách chúng ta đi từ các tiền đề đó
đến kết luận cuối cùng. Logic chỉ tập trung vào phần thứ hai. Nói cách khác, nó
trả lời câu hỏi: "Nếu những điều ban đầu là đúng thì kết luận có nhất thiết
phải đúng hay không?"
Trước
khi có logic hình thức, con người vẫn tranh luận và thuyết phục lẫn nhau, nhưng
phần lớn chỉ dựa vào cảm giác "nghe có vẻ hợp lý". Vấn đề là rất nhiều
lập luận nghe rất thuyết phục nhưng thực chất lại chứa đầy sai sót trong cách
suy luận. Chẳng hạn, việc một người nổi tiếng phát biểu điều gì đó không có
nghĩa điều đó chắc chắn đúng. Việc hai sự kiện cùng xảy ra cũng không có nghĩa
sự kiện này là nguyên nhân gây ra sự kiện kia. Nếu không có những quy tắc rõ
ràng, chúng ta rất khó phân biệt đâu là một lập luận chặt chẽ và đâu chỉ là một
lập luận "nghe có vẻ đúng".
Ngôn
ngữ tự nhiên của con người lại vô cùng mơ hồ. Cùng một câu nói có thể được hiểu
theo nhiều cách khác nhau, khiến việc đánh giá một lập luận trở nên khó khăn.
Logic
hình thức ra đời để giải quyết vấn đề này. Nó loại bỏ những yếu tố mơ hồ của
ngôn ngữ đời thường và chỉ giữ lại phần cốt lõi của lập luận. Nhờ đó, chúng
ta có thể kiểm tra xem một cách suy luận là đúng hay sai dựa trên những quy tắc
rõ ràng và khách quan, giống như việc kiểm tra một phép tính toán học.
Nếu không có logic, mọi cuộc tranh luận - từ toán học, khoa học, pháp luật cho đến việc thiết kế phần mềm - sẽ chủ yếu dựa vào trực giác, cảm tính hoặc uy tín của người nói. Logic mang lại cho chúng ta một "ngôn ngữ chung của lý trí", giúp những người có quan điểm khác nhau vẫn có thể cùng đồng ý rằng: nếu lập luận tuân theo các quy tắc suy luận thì nó là một lập luận đúng về mặt logic, bất kể người đưa ra nó là ai.
Hiểu bản chất của logic
Nếu
chỉ được nhớ một điều duy nhất về logic, hãy nhớ điều này: "tiền đề
đúng hay sai" và "cách suy luận có đúng hay không" là hai chuyện
hoàn toàn khác nhau.
Rất
nhiều người mới học logic thường nghĩ rằng nếu kết luận đúng thì lập luận đó là
đúng. Nhưng logic không nhìn nhận đơn giản như vậy.
Ví
dụ, hãy xem lập luận sau:
- Tất cả các
con mèo đều biết bay.
- Tom là một
con mèo.
- Vậy Tom biết
bay.
Chúng
ta đều biết tiền đề đầu tiên là sai vì mèo không biết bay. Tuy nhiên, cách suy
luận của lập luận này lại hoàn toàn đúng. Nói cách khác, logic chỉ hỏi: "Nếu
các tiền đề là đúng thì kết luận có bắt buộc phải đúng theo hay không?"
Ngược
lại, hãy xem một ví dụ khác:
- Tất cả con
người đều phải chết.
- Socrates là
con người.
- Vậy hôm nay
trời đang mưa.
Hai
tiền đề đầu tiên đều đúng, nhưng kết luận lại chẳng có liên quan gì đến chúng cả.
Vấn đề ở đây không nằm ở việc kết luận đúng hay sai mà nằm ở chỗ nó không được
suy ra một cách hợp lý từ các tiền đề.
Điều
này cho thấy khi đánh giá một lập luận, chúng ta cần trả lời hai câu hỏi hoàn
toàn độc lập:
1. Các
tiền đề có đúng với thực tế hay không?
2. Kết
luận có được suy ra một cách hợp lý từ các tiền đề hay không?
Logic
hình thức chỉ tập trung vào câu hỏi thứ hai.
Một
ý tưởng rất thú vị của logic là nó nhận ra rằng đằng sau hàng triệu lập luận
khác nhau lại chỉ có một số ít "khuôn mẫu suy luận" giống nhau.
Ví
dụ, hai lập luận dưới đây nói về những sự vật hoàn toàn khác nhau:
- Mọi triết gia
đều thích đọc sách.
- Jack là một
triết gia.
- Vậy Jack
thích đọc sách.
và
- Mọi chim cổ đỏ
đều là loài chim.
- Robin là một
con chim cổ đỏ.
- Vậy Robin là
một loài chim.
Thoạt
nhìn chúng có vẻ khác nhau, nhưng nếu bỏ đi phần nội dung cụ thể thì cả hai đều
có chung một "bộ khung":
- Mọi F đều là
G.
- n là F.
- Vậy n là G.
Trong
đó, F, G và n chỉ là những ký hiệu có thể được thay thế bằng bất kỳ sự vật nào.
Điều quan trọng không phải Jack là ai hay Robin là con gì, mà là cả hai đều được
suy luận theo cùng một khuôn mẫu.
Chính
nhờ việc tách phần "nội dung" ra khỏi "khuôn mẫu suy luận"
mà logic trở thành một môn học có hệ thống. Thay vì phải kiểm tra từng lập luận
riêng lẻ, chúng ta chỉ cần kiểm tra xem khuôn mẫu suy luận của nó có đúng hay
không.
Cuối
cùng, logic hình thức chủ yếu nghiên cứu suy luận diễn dịch (deductive
reasoning). Đây là loại suy luận rất "khắt khe". Nó đòi hỏi rằng
nếu các tiền đề đúng thì kết luận bắt buộc phải đúng theo, không được phép có
ngoại lệ nào.
Ví
dụ:
- Tất cả các số
chia hết cho 4 đều chia hết cho 2.
- 20 chia hết
cho 4.
- Vậy 20 chia hết
cho 2.
Nếu
hai tiền đề đầu tiên đúng thì kết luận không thể sai được.
Điều
này khác với suy luận quy nạp (inductive reasoning). Chẳng hạn, chúng ta có thể
nói:
- Tôi đã uống
loại cà phê này hàng trăm lần và chưa bao giờ bị ngộ độc.
- Vì vậy, tách
cà phê hôm nay chắc cũng an toàn.
Đây
là một suy luận rất hợp lý trong cuộc sống hằng ngày, nhưng nó chỉ cho chúng ta
một kết luận "rất có khả năng đúng", chứ không đảm bảo đúng
100%. Vẫn có khả năng rất nhỏ là tách cà phê hôm nay đã bị nhiễm khuẩn hoặc
được pha chế sai cách.
Nói ngắn gọn, suy luận diễn dịch trả lời câu hỏi: "Nếu các tiền đề đúng thì kết luận có bắt buộc phải đúng hay không?", còn suy luận quy nạp chỉ trả lời câu hỏi: "Kết luận có nhiều khả năng đúng hay không?". Logic hình thức quan tâm chủ yếu đến loại suy luận thứ nhất.
Logic "vận hành" như thế nào?
Hãy
tưởng tượng bạn là một vị trọng tài đang kiểm tra một lập luận. Công việc của bạn
không phải là đi xem ngoài đời thật điều gì đang xảy ra, mà là tưởng tượng ra tất
cả những tình huống có thể xảy ra.
Ví
dụ, hãy xét lập luận sau:
- Tất cả sinh
viên của lớp đều đã nộp bài tập.
- Lan là sinh
viên của lớp.
- Vậy Lan đã nộp
bài tập.
Làm
thế nào để biết lập luận này có đúng về mặt logic hay không?
Logic
sẽ đặt ra một câu hỏi rất đơn giản: "Liệu có tồn tại một tình huống nào
mà hai câu đầu đều đúng nhưng câu cuối lại sai hay không?"
Nếu
câu trả lời là có, lập luận này không đáng tin cậy. Nếu câu trả lời là không,
nghĩa là trong mọi tình huống có thể xảy ra, chỉ cần hai tiền đề đúng thì kết
luận cũng buộc phải đúng theo, khi đó lập luận được xem là hợp lệ (valid).
Đây
chính là cách mà logic vận hành. Nó không cố gắng chứng minh các tiền đề là
đúng hay sai ngoài đời thực. Thay vào đó, nó kiểm tra xem các tiền đề có
"ép buộc" kết luận phải đúng theo hay không.
Các
nhà logic học gọi những tình huống có thể xảy ra đó là các "thế giới khả
dĩ" (possible worlds). Bạn có thể hiểu chúng đơn giản là những kịch bản
khác nhau mà chúng ta tưởng tượng ra để kiểm tra một lập luận.
Ví
dụ, nếu có dù chỉ một "thế giới khả dĩ" mà:
- Tất cả sinh
viên của lớp đều đã nộp bài tập là đúng.
- Lan là sinh
viên của lớp là đúng.
- Nhưng Lan lại
chưa nộp bài tập.
Logic nằm ở đâu trong bức tranh lớn?
Nhiều
người nghĩ rằng logic chỉ là một nhánh của triết học. Trên thực tế, logic là một
trong những nền móng quan trọng nhất của khoa học hiện đại.
Trong
toán học, mọi định lý đều bắt đầu từ các tiên đề và được chứng minh bằng một
chuỗi các bước suy luận logic.
Trong
khoa học máy tính, logic xuất hiện ở khắp mọi nơi. Các mạch điện tử bên trong
CPU, ngôn ngữ lập trình, cơ sở dữ liệu, các công cụ kiểm tra tính đúng đắn của
phần mềm hay các hệ thống bảo mật đều được xây dựng dựa trên những nguyên lý
logic.
Trong
trí tuệ nhân tạo (AI), một tác nhân thông minh (AI Agent) cũng cần logic để trả
lời ba câu hỏi cơ bản:
- Nó biết những
gì?
- Từ những điều
đã biết, nó có thể suy ra được điều gì?
- Nó nên thực
hiện hành động nào tiếp theo?
Chẳng
hạn, nếu một AI Agent biết rằng:
- Nếu trời mưa
thì cần mang ô.
- Hôm nay trời
đang mưa.
nó
có thể suy luận rằng:
- Tôi nên mang
ô.
Khả
năng biểu diễn tri thức và suy luận như vậy chính là một trong những lý do khiến
logic trở thành nền tảng của trí tuệ nhân tạo.
Có
một câu nói rất nổi tiếng trong khoa học máy tính hiện đại rằng: "Logic
is the calculus of computation”
Nếu
giải tích toán học giúp các nhà vật lý mô tả chuyển động của thế giới vật chất
thì logic giúp các nhà khoa học máy tính mô tả cách mà máy tính suy nghĩ, suy
luận và tính toán. Chính vì vậy, logic không chỉ là một môn học về lập luận
mà còn là một trong những viên gạch nền móng của toán học, khoa học máy tính và
trí tuệ nhân tạo ngày nay.
Bạn
có thể ghi nhớ logic hình thức bằng một câu hỏi rất đơn giản:
"Nếu
các tiền đề đều đúng thì kết luận có bắt buộc phải đúng theo hay không?"
3. First-order Logic giúp máy tính hiểu thế giới như thế nào?
First-order
logic (logic bậc một, còn gọi là phép tính vị từ bậc một) là một ngôn ngữ hình
thức giúp chúng ta mô tả và suy luận về thế giới một cách chính xác. Thay vì chỉ
nói rằng một mệnh đề là đúng hay sai như logic mệnh đề ("Hôm nay trời
mưa", "An đang học bài"...), logic bậc một còn cho phép ta nói về
các đối tượng cụ thể trong thế giới (con người, con số, sự vật...), các đặc điểm
của chúng (là số nguyên tố, cao hơn 1 mét...) và mối quan hệ giữa chúng (là anh
của, lớn hơn, nặng hơn...). Nó cũng có thể biểu diễn những phép ánh xạ từ đối
tượng này sang đối tượng khác, chẳng hạn như "cha của một người" hay
"căn bậc hai của một số".
Điểm
khiến logic bậc một mạnh hơn rất nhiều so với logic mệnh đề là nó có thêm hai
khái niệm vô cùng quan trọng: "mọi" (for all) và "tồn
tại" (there exists). Nhờ chúng, ta có thể diễn đạt những quy luật
chung chỉ bằng một câu duy nhất. Ví dụ, thay vì phải nói "An là con người",
"Bình là con người", "Lan là con người" rồi kết luận từng
người đều phải chết, ta chỉ cần phát biểu: "Mọi con người đều phải chết".
Hoặc thay vì liệt kê tất cả các số chẵn, ta chỉ cần nói: "Với mọi số
nguyên n, luôn tồn tại một số nguyên m sao cho n = 2m hoặc n = 2m + 1".
Chính khả năng nói về "mọi đối tượng" hoặc "sự tồn tại của một đối
tượng nào đó" đã làm cho logic bậc một trở thành nền tảng của toán học,
khoa học máy tính và trí tuệ nhân tạo.
Cái
tên "bậc một" (first-order) không có nghĩa là nó "đơn giản"
hay "sơ cấp". Tên gọi này chỉ nói đến phạm vi mà ngôn ngữ cho phép
chúng ta đề cập đến. Trong logic bậc một, từ "mọi" và "tồn tại"
chỉ được dùng để nói về các đối tượng trong thế giới (con người, con số, sự vật...).
Chúng ta không thể nói "mọi thuộc tính đều có tính chất X" hay
"tồn tại một quan hệ có tính chất Y". Những phát biểu như vậy thuộc về
logic bậc hai (second-order logic), nơi mà chính các thuộc tính và quan hệ cũng
có thể được xem như những đối tượng để suy luận.
Trước
khi có First-order logic, chúng ta đã có logic mệnh đề (Propositional Logic).
Tuy nhiên, logic mệnh đề chỉ có thể xem mỗi phát biểu như một "hộp
đen" chỉ mang giá trị đúng hoặc sai. Nó không biết bên trong câu nói đó
đang đề cập đến ai, vật gì hay mối quan hệ nào giữa chúng.
Ví
dụ, nếu chúng ta muốn mô tả một thế giới trò chơi gồm nhiều ô vuông và phát biểu
rằng: "Bất kỳ ô nào nằm cạnh một cái hố đều có gió", logic mệnh đề
không thể diễn đạt quy luật chung này bằng một câu duy nhất. Thay vào đó, chúng
ta phải viết rất nhiều câu riêng lẻ như: "Nếu ô A nằm cạnh hố thì ô A có
gió", "Nếu ô B nằm cạnh hố thì ô B có gió", "Nếu ô C nằm cạnh
hố thì ô C có gió"... Với một bàn cờ lớn hay với thế giới thực có hàng triệu
đối tượng, việc liệt kê từng trường hợp như vậy gần như không khả thi.
Vấn
đề tương tự cũng xuất hiện khi chúng ta chỉ lưu trữ dữ liệu thông thường trong
chương trình máy tính. Máy tính có thể biết rằng "ô [2,2] có hố" hay
"An là sinh viên", nhưng nó không tự hiểu được những quy luật tổng
quát như "mọi sinh viên đều phải đăng ký môn học" hoặc "mọi ô nằm
cạnh hố đều có gió". Muốn làm được điều đó, lập trình viên phải tự viết
thêm rất nhiều câu lệnh để xử lý từng trường hợp cụ thể.
First-order
logic ra đời để giải quyết chính bài toán này. Nó cho phép chúng ta không chỉ
lưu trữ các sự kiện riêng lẻ mà còn có thể biểu diễn những quy luật chung của
thế giới một cách ngắn gọn và chính xác. Thay vì phải liệt kê hàng nghìn hay
hàng triệu trường hợp khác nhau, chúng ta chỉ cần phát biểu quy luật một lần
duy nhất, chẳng hạn như: "Mọi ô nằm cạnh hố đều có gió" hay "Mọi
con người đều phải chết". Từ những quy luật đó và những dữ kiện đã biết,
hệ thống suy luận có thể tự động rút ra những sự thật mới mà không cần con người
phải viết tay cho từng trường hợp.
Bản chất của First-order logic
Để
hiểu First-order logic, bạn không cần nhớ ngay những công thức hay ký hiệu phức
tạp. Điều quan trọng nhất cần nhớ là: First-order logic xem thế giới được tạo
thành từ các đối tượng và những mối quan hệ giữa chúng.
Ví
dụ, trong thế giới của chúng ta có con người, con số, đồ vật hay các ô vuông
trên bàn cờ. Đây chính là các đối tượng. Những phát biểu như "An là
sinh viên", "5 là số nguyên tố", "Lan là chị của Bình"
hay "ô A nằm cạnh ô B" chính là những thuộc tính hoặc mối
quan hệ giữa các đối tượng đó.
Đây
là điểm khác biệt rất lớn so với logic mệnh đề. Logic mệnh đề chỉ biết rằng một
câu nào đó là đúng hay sai, chẳng hạn như "Ô A có gió" hay "An
là sinh viên". Nó không biết bên trong câu nói đó đang đề cập đến đối tượng
nào hay mối quan hệ gì giữa các đối tượng. Với logic mệnh đề, mỗi câu giống như
một chiếc hộp kín chỉ được gắn nhãn "đúng" hoặc "sai".
First-order
logic thì khác. Nó "nhìn thấy" được cấu trúc bên trong của câu nói.
Nó biết rằng "An" là một đối tượng, "là sinh viên" là một
thuộc tính của đối tượng đó hay "Lan là chị của Bình" là một mối quan
hệ giữa hai đối tượng. Chính vì hiểu được cấu trúc này nên nó có thể phát biểu
những quy luật tổng quát áp dụng cho rất nhiều trường hợp khác nhau.
Ví
dụ, thay vì phải viết hàng nghìn câu như "Ô A nằm cạnh hố thì có
gió", "Ô B nằm cạnh hố thì có gió", "Ô C nằm cạnh hố thì có
gió"... First-order logic cho phép chúng ta chỉ cần viết một câu duy nhất:
"Mọi ô nằm cạnh hố đều có gió." Quy luật này sẽ được áp dụng
cho tất cả các ô mà không cần phải liệt kê từng trường hợp riêng lẻ.
Trong
sách và các tài liệu chuyên ngành, cách nhìn nhận rằng "thế giới gồm các đối
tượng và những mối quan hệ giữa chúng" được gọi là cam kết bản thể luận
(ontological commitment) của First-order logic. Bạn có thể hiểu đơn giản rằng
đây chỉ là cách mà First-order logic lựa chọn để mô hình hóa thế giới.
Nếu
chỉ nhớ một điều về First-order logic, hãy nhớ điều này: nó không chỉ lưu trữ
các sự kiện đúng hay sai, mà còn hiểu rằng những sự kiện đó liên quan đến những
đối tượng nào và chúng có mối quan hệ gì với nhau. Chính khả năng đó cho
phép chúng ta diễn đạt những quy luật tổng quát của thế giới một cách ngắn gọn
và tạo nền tảng của suy luận tự động (automated reasoning) trong trí tuệ
nhân tạo.
First-order
logic được xem là một trong những ngôn ngữ hình thức quan trọng nhất của khoa học
máy tính và trí tuệ nhân tạo. Nó giống như một "ngôn ngữ chung" dùng
để mô tả tri thức và các quy luật của thế giới một cách chính xác.
Trong
toán học, First-order logic được sử dụng để xây dựng nền tảng cho nhiều lĩnh vực
như số học và lý thuyết tập hợp. Nói cách khác, rất nhiều khái niệm toán học hiện
đại đều có thể được biểu diễn bằng ngôn ngữ của First-order logic.
Trong
khoa học máy tính, nó được sử dụng trong các hệ thống chứng minh định lý tự động
(Automated Theorem Proving), các kỹ thuật kiểm chứng tính đúng đắn của
phần mềm và phần cứng (Formal Verification) cũng như các ngôn ngữ lập
trình logic như Prolog.
Trong
trí tuệ nhân tạo, First-order logic là một trong những ngôn ngữ biểu diễn tri
thức (Knowledge Representation) kinh điển nhất. Nó cho phép máy tính
không chỉ lưu trữ dữ liệu mà còn hiểu được các quy luật và suy luận từ những dữ
liệu đó. Đây cũng là một trong những nền tảng quan trọng dẫn đến sự ra đời của
các lĩnh vực như Automated Reasoning và AI Agent.
Tất
nhiên, First-order logic không phải là công cụ phù hợp cho mọi bài toán. Nếu chỉ
cần biểu diễn những mệnh đề đơn giản, chúng ta có thể sử dụng Logic mệnh đề
(Propositional Logic). Nếu cần biểu diễn sự thay đổi theo thời gian, chúng ta
có thể sử dụng Logic thời gian (Temporal Logic). Nếu cần xử lý sự không chắc chắn
hay mức độ tin tưởng của thông tin, chúng ta có thể sử dụng Logic xác suất
(Probabilistic Logic). Mỗi loại logic đều có những điểm mạnh riêng và được thiết
kế để giải quyết những bài toán khác nhau.
Những lầm tưởng về First-order logic
"Logic bậc một" có nghĩa là "logic đơn giản" hoặc "logic cấp thấp"
Rất
nhiều người khi mới nghe đến cái tên First-order logic thường nghĩ rằng
đây là loại logic "cơ bản nhất" hay "đơn giản nhất". Thực tế
không phải như vậy.
Từ
"bậc một" (first-order) không dùng để đánh giá độ mạnh hay độ phức tạp
của nó. Cái tên này chỉ cho biết phạm vi mà nó có thể mô tả. First-order logic
cho phép chúng ta nói về các đối tượng trong thế giới (con người, con số, sự vật...)
và những thuộc tính hay mối quan hệ giữa chúng. Tuy nhiên, nó không cho phép
chúng ta xem chính các thuộc tính và mối quan hệ đó như những đối tượng để tiếp
tục suy luận. Khả năng này thuộc về logic bậc hai (Second-order Logic).
Nói
cách khác, "bậc một" chỉ là tên gọi kỹ thuật của một cách thiết kế
ngôn ngữ logic, hoàn toàn không có nghĩa rằng nó "yếu hơn" hay
"đơn giản hơn" các loại logic khác.
First-order logic có thể mô tả hoàn hảo mọi thứ trong thế giới thực
Mặc
dù rất mạnh mẽ, First-order logic không phải là một công cụ "vạn
năng". Nó đặc biệt phù hợp để biểu diễn những tri thức rõ ràng, chính xác
và có các quy luật chặt chẽ.
Ví
dụ, câu nói: "Mọi con người đều phải chết" là một quy luật rất phù hợp
với First-order logic. Nhưng những phát biểu trong đời sống hằng ngày thường
không đơn giản như vậy. Chẳng hạn: "Cà chua thường có màu đỏ". Trong
thực tế vẫn tồn tại cà chua xanh, cà chua vàng hay cà chua tím. Hay câu nói: "Chim
thì biết bay " lại có những ngoại lệ như chim cánh cụt hay đà điểu.
Những
tri thức của con người thường chứa các ngoại lệ, mức độ tin tưởng khác nhau hoặc
có thể thay đổi theo ngữ cảnh. Việc biểu diễn chúng bằng First-order logic thuần
túy đôi khi trở nên phức tạp và không còn tự nhiên nữa. Đây cũng là lý do mà
khoa học máy tính đã phát triển thêm nhiều loại logic khác để xử lý sự không chắc
chắn và các ngoại lệ trong thế giới thực.
First-order logic giống như tiếng Anh được viết bằng ký hiệu toán học
First-order
logic có thể biểu diễn những câu nói của con người, nhưng nó không được tạo ra
để thay thế ngôn ngữ tự nhiên.
Khi
chúng ta nói: "Tôi sẽ gặp bạn vào lúc chiều nhé". Con người có thể dễ
dàng hiểu "chiều" là khoảng thời gian nào, "bạn" đang ám chỉ
ai hay bối cảnh của cuộc gặp là gì. Nhưng đối với máy tính, những cách diễn đạt
như vậy lại khá mơ hồ.
First-order
logic được thiết kế với mục tiêu hoàn toàn ngược lại: loại bỏ tối đa sự mơ hồ.
Mỗi đối tượng, mỗi thuộc tính và mỗi mối quan hệ đều phải được định nghĩa một
cách rõ ràng và chính xác.
Có
thể hình dung rằng ngôn ngữ tự nhiên giống như một cuộc trò chuyện rất linh hoạt
giữa con người với nhau, còn First-order logic giống như một bản hợp đồng pháp
lý được viết cực kỳ chặt chẽ để không cho phép có nhiều cách hiểu khác nhau.
Chính
sự "khô khan" và chặt chẽ đó lại là điểm mạnh lớn nhất của
First-order logic. Nó cho phép máy tính có thể biểu diễn tri thức và thực hiện
suy luận một cách chính xác mà không bị ảnh hưởng bởi sự mơ hồ vốn có của ngôn
ngữ tự nhiên.
Hãy
nhớ rằng: First-order logic cho phép chúng ta mô tả không chỉ "điều gì
đang đúng", mà còn cả "những quy luật chung của thế giới" và từ
đó giúp máy tính có thể tự động suy luận ra những tri thức mới.
4. Predicate Logic đã thay đổi cách máy tính nhìn nhận tri thức ra sao?
Predicate
logic (logic vị từ) là một cách giúp chúng ta "nhìn vào bên trong" một
câu nói. Nếu logic mệnh đề coi cả câu là một khối hoàn chỉnh không thể tách nhỏ,
thì logic vị từ lại hỏi: "Câu này đang nói về ai?" và "Nó đang
nói điều gì về đối tượng đó?".
Ví
dụ, với câu "Socrates khôn ngoan", ta có thể tách thành hai phần:
- "Socrates"
là tên gọi (term), dùng để chỉ một đối tượng cụ thể.
- "...
khôn ngoan" là vị từ (predicate), dùng để nói lên một đặc điểm
của đối tượng đó.
Nói
một cách đơn giản, vị từ giống như một chiếc khuôn có những "ô trống"
cần được điền vào để tạo thành một câu hoàn chỉnh. Chẳng hạn:
- "...
khôn ngoan" chỉ cần điền một đối tượng vào ô trống ("Socrates
khôn ngoan"), đây là vị từ một ngôi.
- "... yêu
..." cần điền hai đối tượng ("Alice yêu Bob"), đây là vị từ
hai ngôi.
- "... nằm
giữa ... và ..." cần điền ba đối tượng ("B nằm giữa A và
C"), đây là vị từ ba ngôi.
Số
lượng ô trống mà một vị từ cần điền được gọi là ngôi (arity) của vị từ.
Trước
khi có logic vị từ, logic mệnh đề coi mỗi câu là một đơn vị không thể chia nhỏ.
Ví dụ, ba câu sau sẽ được xem như ba ký hiệu độc lập:
- Mọi con mèo đều
đáng sợ.
- Felix là một
con mèo.
- Felix đáng sợ.
Logic
mệnh đề chỉ nhìn thấy chúng dưới dạng:
- A
- B
- Vậy C
Vấn
đề là khuôn mẫu "A, B, vậy C" không phải lúc nào cũng đúng. Chỉ nhìn
vào ba chữ cái A, B và C, chúng ta không có cách nào biết được vì sao kết luận
lại hợp lý.
Điều
mà logic mệnh đề không nhìn thấy chính là cấu trúc bên trong các câu. Hãy quan
sát lại ba câu trên:
- "Mọi con
mèo đều đáng sợ" đang nói về mối quan hệ giữa hai thuộc tính "là
mèo" và "đáng sợ".
- "Felix
là một con mèo" cho chúng ta biết Felix thuộc nhóm "con
mèo".
- Vì mọi con
mèo đều đáng sợ, nên Felix cũng phải đáng sợ.
Ta
có thể thấy tên gọi "Felix" xuất hiện ở cả câu thứ hai và thứ ba, còn
hai vị từ "là mèo" và "đáng sợ" được liên kết với nhau bởi
câu thứ nhất. Chính cấu trúc này mới là lý do khiến kết luận "Felix đáng sợ"
chắc chắn đúng.
Nói
cách khác, logic vị từ ra đời để trả lời những câu hỏi mà logic mệnh đề không
thể trả lời:
- Câu này đang
nói về đối tượng nào?
- Những đối tượng
khác nhau có quan hệ gì với nhau?
- Vì sao từ những
thông tin đã biết, ta có thể suy ra một kết luận mới?
Hiểu bản chất của Predicate logic
Ý
tưởng quan trọng nhất của logic vị từ là tách một câu nói thành hai phần:
- Câu này đang
nói về ai hay về cái gì? (tên gọi - term)
- Nó đang nói
điều gì về đối tượng đó? (vị từ - predicate)
Sự
tách biệt đơn giản này giúp chúng ta nhận ra rằng rất nhiều lập luận khác nhau
thực chất lại có cùng một cách suy luận.
Ví
dụ:
- Mọi con mèo đều
đáng yêu. Tom là một con mèo. Vậy Tom đáng yêu.
- Mọi sinh viên
đều phải đóng học phí. An là sinh viên. Vậy An phải đóng học phí.
- Mọi số chẵn đều
chia hết cho 2. Số 8 là số chẵn. Vậy số 8 chia hết cho 2.
Ba
ví dụ trên nói về những đối tượng hoàn toàn khác nhau (con mèo, con người và
các con số), nhưng chúng đều tuân theo cùng một khuôn mẫu suy luận:
·
Mọi F đều là G.
·
n là F.
·
Vậy n là G.
Trong
đó:
- F là một thuộc
tính nào đó (con mèo, sinh viên, số chẵn,...).
- G là một thuộc
tính khác (đáng yêu, phải đóng học phí, chia hết cho 2,...).
- n là một đối
tượng cụ thể (Tom, An, số 8,...).
Điều
mà logic vị từ quan tâm không phải là Tom là ai, An học ở đâu hay số 8 có ý
nghĩa gì. Nó chỉ quan tâm đến cấu trúc của lập luận có hợp lý hay không. Chỉ cần
lập luận tuân theo khuôn mẫu trên, kết luận sẽ luôn đúng, bất kể nội dung cụ thể
là gì.
Một
điểm thú vị khác là logic vị từ không đi sâu vào việc tranh luận "thuộc
tính thực sự là gì". Với nó, một thuộc tính hay một quan hệ chỉ đơn giản
là một cách dùng để mô tả các đối tượng.
Chẳng
hạn:
- "... là
con mèo" là một thuộc tính.
- "... cao
1m80" cũng là một thuộc tính.
- "... yêu
..." là một quan hệ giữa hai đối tượng.
- "... nằm
giữa ... và ..." là một quan hệ giữa ba đối tượng.
Predicate Logic hoạt động như thế nào?
Hãy
lấy ví dụ câu "Romeo yêu Juliet". Câu này có hai tên gọi là
"Romeo" và "Juliet", cùng với vị từ hai ngôi "... yêu
...".
Ta
có thể hình dung vị từ "... yêu ..." giống như một chiếc khuôn có hai
ô trống cần được điền vào: (... ) yêu (... ).
Khi
điền "Romeo" vào ô thứ nhất và "Juliet" vào ô thứ hai, ta
được câu: “Romeo yêu Juliet”. Nếu đổi vị trí của hai cái tên, ta sẽ có: “Juliet
yêu Romeo”.
Đây
là một câu hoàn toàn khác. Điều đó cho thấy thứ tự của các đối tượng trong một
vị từ là rất quan trọng. Vị từ hai ngôi không chỉ cho chúng ta biết
"có tình yêu giữa hai người", mà còn cho biết chính xác ai là người
yêu và ai là người được yêu.
Tương
tự, có những mối quan hệ cần đến ba đối tượng cùng lúc. Chẳng hạn: “York nằm giữa
London và Edinburgh trên tuyến đường sắt”. Ta có thể hình dung vị từ này như
sau: (... ) nằm giữa (... ) và (... ).
Khi
điền ba địa danh vào ba ô trống, ta mới tạo thành một câu hoàn chỉnh. Nếu thay
đổi thứ tự của các địa danh, ý nghĩa của câu cũng sẽ thay đổi.
Nhờ
cách biểu diễn này, logic vị từ có thể mô tả không chỉ các thuộc tính của một đối
tượng ("Socrates khôn ngoan") mà còn cả những mối quan hệ phức tạp giữa
nhiều đối tượng khác nhau ("Romeo yêu Juliet", "York nằm giữa
London và Edinburgh",...). Nói cách khác, nó cho phép chúng ta mô tả thế
giới như một mạng lưới các đối tượng có liên hệ với nhau, thay vì chỉ xem mỗi
câu là một sự thật độc lập và không thể chia nhỏ.
Predicate
logic có thể được xem là bước đầu tiên để xây dựng First-Order Logic (logic vị
từ cấp một). Predicate logic cho chúng ta hai thành phần cơ bản:
- Đối tượng
đang được nói tới (tên gọi - term).
- Điều đang được
nói về đối tượng đó (vị từ - predicate).
Khi
bổ sung thêm các lượng từ như:
- "Mọi"
(For all - ∀).
- "Tồn tại"
(There exists - ∃).
chúng
ta sẽ có một hệ thống đủ mạnh để diễn tả các quy luật tổng quát. Ví dụ: Mọi con
mèo đều đáng yêu, Tồn tại một sinh viên đạt điểm tuyệt đối, Mọi số chẵn đều
chia hết cho 2
Vì
lý do đó, trong rất nhiều tài liệu, hai thuật ngữ "Predicate Logic"
và "First-Order Logic" thường được sử dụng gần như thay thế cho nhau.
Những hiểu lầm về Predicate Logic
Nhầm lẫn giữa "vị từ" trong logic học và "vị ngữ" trong ngữ pháp
Hai
khái niệm này có tên gọi khá giống nhau nhưng lại không hoàn toàn giống nhau.
Trong
ngữ pháp chúng ta học ở trường phổ thông, một câu thường được chia thành hai phần:
- Chủ ngữ: nói về ai hoặc về cái gì.
- Vị ngữ: nói điều gì về chủ ngữ đó.
Ví
dụ: Socrates khôn ngoan. Ta có: chủ ngữ: "Socrates", vị ngữ:
"khôn ngoan".
Trong
logic vị từ, chúng ta cũng có thể phân tích câu này thành:
- Tên gọi (term): "Socrates".
- Vị từ (predicate): "... khôn
ngoan".
Ở
những ví dụ đơn giản như vậy, hai cách phân tích trông có vẻ khá giống nhau.
Tuy nhiên, sự khác biệt sẽ xuất hiện khi câu nói liên quan đến nhiều đối tượng.
Ví
dụ: Romeo yêu Juliet. Trong ngữ pháp, "yêu Juliet" chỉ đơn giản là vị
ngữ của câu. Nhưng trong logic vị từ, "... yêu ..." lại là một vị từ
có hai chỗ trống: (... ) yêu (... ). Nó cần đến hai đối tượng để tạo thành một
câu hoàn chỉnh: Romeo là người yêu, Juliet là người được yêu.
Thậm
chí có những vị từ cần đến ba hoặc nhiều đối tượng cùng lúc. Vì vậy, bạn có thể
hiểu đơn giản rằng: Vị ngữ là một khái niệm của ngữ pháp học, còn vị từ là một
khái niệm của logic học dùng để mô tả thuộc tính và các mối quan hệ giữa các đối
tượng.
Nhầm lẫn giữa Predicate Logic và First-Order Logic
Rất
nhiều người mới học nghĩ rằng Predicate Logic và First-Order Logic là hai hệ thống
logic hoàn toàn khác nhau. Thực tế không phải như vậy.
Bạn
có thể hình dung chúng như việc xây một ngôi nhà:
- Predicate Logic là phần khung của
ngôi nhà.
- First-Order Logic là ngôi nhà đã được
xây dựng hoàn chỉnh trên phần khung đó.
Thay
vì nghĩ rằng đây là hai hệ thống hoàn toàn khác nhau, hãy hình dung chúng như
hai bước phát triển của cùng một ý tưởng:
· Predicate
Logic → phân tích cấu trúc của câu nói.
· Predicate
Logic + các lượng từ (∀,
∃) → First-Order Logic.
5. Vì sao Logic trở thành nền móng của Automated Reasoning?
Điều khó khăn nhất trong việc xây dựng một hệ thống thông minh chưa bao giờ chỉ là lưu trữ thật nhiều dữ liệu. Điều khó khăn hơn rất nhiều là làm thế nào để máy tính có thể hiểu được những dữ liệu đó có ý nghĩa gì và chúng liên hệ với nhau ra sao.
Kết luận
Đến đây, có lẽ chúng ta
đã có thể trả lời được một phần câu hỏi được đặt ra từ đầu bài viết: máy tính cần
một ngôn ngữ của suy luận trước khi có thể trở thành một hệ thống có khả năng lập
luận.
Logic giúp máy tính hiểu
được những đối tượng nào đang tồn tại trong thế giới, First-order Logic cho
phép nó mô tả những quy luật tổng quát của thế giới đó, còn Predicate Logic
giúp nó nhìn thấy được cấu trúc của các tri thức mà mình đang sử dụng để suy luận.
Khi được kết hợp lại, chúng tạo nên nền móng của khả năng suy luận tự động và đặt
những viên gạch đầu tiên cho Automated Reasoning.
Tuy nhiên, hiểu được thế
giới vẫn chưa đủ để tạo nên một hệ thống thông minh. Máy tính còn phải biết
cách sử dụng những tri thức mà nó đã có để tạo ra những kết luận mới, biết mình
đang suy luận đúng hay sai và biết lựa chọn những thông tin nào là quan trọng đối
với việc giải quyết một vấn đề cụ thể.
Điều này dẫn chúng ta đến
một câu hỏi tiếp theo: Liệu biết thật nhiều dữ liệu đã đủ để khiến một hệ thống
trở nên thông minh hay chưa?
Recommended Books
· Cambridge University Press. An Introduction toFormal Logic 2e (2020)
· Dover Publications. Logic for ComputerScience_ Foundations of Automatic Theorem -- Dover Books on Computer Science,2, 2015
· Prentice Hall. Artificial Intelligence_ AModern Approach 4th (2020)
· Springer. Introduction to Mathematical Logic 3rd (1987)
· Springer. Mathematical Logic for Computer Science 3e(2012)
Comments
Post a Comment