MathLabs

Nền tảng toán học

Logic vị từ

Logic vị từ mở rộng logic mệnh đề bằng các lượng từ ∀x P(x)\forall x\, P(x) ("với mọi xx, P(x)P(x)") và ∃x P(x)\exists x\, P(x) ("tồn tại xx sao cho P(x)P(x)"), cho phép hình thức hóa các phát biểu về mọi phần tử hoặc một phần tử của một miền, và suy luận trên chúng bằng ngữ nghĩa thỏa mãn Tarski.

Trực giác"Với mọi" và "tồn tại"

"Mọi học sinh trong phòng này đều đỗ kỳ thi" và "có một học sinh trong phòng này đỗ kỳ thi" là hai khẳng định rất khác nhau, dù cả hai đều nói về cùng một phòng. Logic vị từ làm rõ sự khác biệt này: một vị từ P(x)P(x) là một tính chất trở thành mệnh đề đúng/sai khi xx được thay bằng một đối tượng cụ thể từ một miền (vũ trụ diễn ngôn) MM. Lượng từ phổ dụng ∀x P(x)\forall x\, P(x) khẳng định PP đúng với mọi đối tượng trong MM; lượng từ tồn tại ∃x P(x)\exists x\, P(x) khẳng định PP đúng với ít nhất một đối tượng trong MM.

Đồ thị tương tác phụ thuộc giữa các biến lượng hóa x và y, thể hiện sự phụ thuộc của nhân chứng.
Đồ thị phụ thuộc giữa biến xx và yy: cạnh từ xx tới yy cho thấy nhân chứng cho yy có thể phụ thuộc vào xx được chọn — kéo phần tô sáng để so sánh "nhân chứng cố định" ∃y ∀x R(x,y)\exists y\, \forall x\, R(x,y) với "nhân chứng thay đổi" ∀x ∃y R(x,y)\forall x\, \exists y\, R(x,y).

Đại họcCú pháp hình thức và phủ định lượng từ

Định nghĩa: Lượng từ và biến tự do/bị buộc

Cho miền MM và vị từ P(x)P(x): ∀x P(x)\forall x\, P(x) ("với mọi xx, P(x)P(x)") đúng trong MM khi PP đúng với mọi phần tử của MM; ∃x P(x)\exists x\, P(x) ("tồn tại xx sao cho P(x)P(x)") đúng khi PP đúng với ít nhất một phần tử. Một biến nằm trong phạm vi của lượng từ buộc nó là biến bị buộc; ngược lại là biến tự do. Một công thức không có biến tự do là một câu, và có giá trị chân lý xác định trong một cấu trúc cho trước.

¬(∀x P(x))≡∃x ¬P(x)\neg(\forall x\, P(x)) \equiv \exists x\, \neg P(x)

Luật này nói: "không phải ai cũng có tính chất PP" nghĩa chính xác là "có ai đó thiếu PP". Luật song sinh ¬(∃x P(x))≡∀x ¬P(x)\neg(\exists x\, P(x)) \equiv \forall x\, \neg P(x) nói "không ai có tính chất PP" giống với "mọi người đều thiếu PP". Hai luật này là phiên bản lượng từ của luật De Morgan cho ∧,∨\wedge, \vee, và là bước then chốt để đẩy mọi phủ định vào trong, đạt tới dạng chuẩn tắc tiền tố (prenex) — công thức có mọi lượng từ đưa ra phía trước, ví dụ ∀x ∃y φ\forall x\, \exists y\, \varphi với φ\varphi không chứa lượng từ.

¬(∃x P(x))≡∀x ¬P(x)\neg(\exists x\, P(x)) \equiv \forall x\, \neg P(x)
Dạng chuẩn tắc tiền tố: đẩy phủ định và lượng từ
Công thứcDạng tiền tố tương đương
¬∀x P(x)\neg \forall x\, P(x)∃x ¬P(x)\exists x\, \neg P(x)
¬∃x P(x)\neg \exists x\, P(x)∀x ¬P(x)\forall x\, \neg P(x)
∀x P(x)∧∀x Q(x)\forall x\, P(x) \wedge \forall x\, Q(x)∀x (P(x)∧Q(x))\forall x\, (P(x) \wedge Q(x))
∃x P(x)∨∃x Q(x)\exists x\, P(x) \vee \exists x\, Q(x)∃x (P(x)∨Q(x))\exists x\, (P(x) \vee Q(x))

Đại họcCác định lý then chốt: thay thế và thứ tự lượng từ

Với mọi cấu trúc M\mathcal{M} có miền MM, mọi phép gán ss, và mọi hạng tử tt thay thế được cho xx trong P(x)P(x): nếu M⊨s∀x P(x)\mathcal{M} \models_s \forall x\, P(x), thì M⊨sP(t)\mathcal{M} \models_s P(t). Dạng quy tắc: ∀x P(x)⊢P(t)\forall x\, P(x) \vdash P(t).

Vì sao đúng?

∀x P(x)\forall x\, P(x) có nghĩa "dù thay xx bằng gì, PP vẫn đúng" — nên thay bằng một hạng tử cụ thể tt thì P(t)P(t) vẫn phải đúng. Đây là quy tắc biến luật tổng quát thành trường hợp cụ thể: từ "∀x (Human(x)→Mortal(x))\forall x\, (\text{Human}(x) \to \text{Mortal}(x))" ta thay thế tại t=Socratest = \text{Socrates} để được "Human(Socrates)→Mortal(Socrates)\text{Human}(\text{Socrates}) \to \text{Mortal}(\text{Socrates})", tiền đề đầu của tam đoạn luận cổ điển.

Chứng minh

Ta lập luận trực tiếp từ ngữ nghĩa thỏa mãn Tarski, định nghĩa tính đúng trong một cấu trúc theo đệ quy trên cấu trúc công thức.

Theo mệnh đề ngữ nghĩa cho ∀\forall: M⊨s∀x P(x)  ⟺  for every d∈M, M⊨s[x↦d]P(x)\mathcal{M} \models_s \forall x\, P(x) \iff \text{for every } d \in M,\ \mathcal{M} \models_{s[x \mapsto d]} P(x). Giả sử giả thiết M⊨s∀x P(x)\mathcal{M} \models_s \forall x\, P(x); theo mệnh đề này, M⊨s[x↦d]P(x)\mathcal{M} \models_{s[x \mapsto d]} P(x) đúng với mọi d∈Md \in M, không ngoại lệ.

Vì khẳng định đúng với mọi d∈Md \in M, nó đúng đặc biệt với d=tM,sd = t^{\mathcal{M},s}, phần tử mà hạng tử tt biểu thị trong M\mathcal{M} dưới ss. Thay dd cụ thể này cho ta M⊨s[x↦tM,s]P(x)\mathcal{M} \models_{s[x \mapsto t^{\mathcal{M},s}]} P(x).

Theo Bổ đề Thay thế (một kết quả chuẩn liên hệ phép gán biến với phép thay thế hạng tử, chứng minh được bằng quy nạp theo cấu trúc của PP): M⊨s[x↦tM,s]P(x)  ⟺  M⊨sP(t)\mathcal{M} \models_{s[x \mapsto t^{\mathcal{M},s}]} P(x) \iff \mathcal{M} \models_s P(t), đúng chính xác vì tt thay thế được cho xx trong P(x)P(x) (không biến tự do nào của tt bị buộc ngoài ý muốn). Áp dụng bổ đề biến M⊨s[x↦tM,s]P(x)\mathcal{M} \models_{s[x \mapsto t^{\mathcal{M},s}]} P(x) thành M⊨sP(t)\mathcal{M} \models_s P(t).

Vì M\mathcal{M}, ss, tt tùy ý, nên suy luận từ ∀x P(x)\forall x\, P(x) tới P(t)P(t) bảo toàn tính đúng trong mọi cấu trúc dưới mọi phép gán: quy tắc là đúng đắn.

Với mọi cấu trúc M\mathcal{M} và công thức R(x,y)R(x,y): ∃y ∀x R(x,y)⇒∀x ∃y R(x,y)\exists y\, \forall x\, R(x,y) \Rightarrow \forall x\, \exists y\, R(x,y). Mệnh đề đảo nói chung không đúng.

Vì sao đúng?

∃y ∀x R(x,y)\exists y\, \forall x\, R(x,y) đòi hỏi một nhân chứng yy duy nhất dùng được cho mọi xx (nhân chứng "cố định"), còn ∀x ∃y R(x,y)\forall x\, \exists y\, R(x,y) chỉ đòi hỏi mỗi xx có một nhân chứng nào đó, có thể khác nhau với mỗi xx (nhân chứng "di động"). Một nhân chứng cố định tự động là nhân chứng di động (dùng lại nó), nhưng chiều ngược lại thì không — đây chính là khác biệt giữa "có người yêu tất cả mọi người" (một người yêu duy nhất) và "ai cũng được ai đó yêu" (có thể khác người mỗi lần), một nguồn mơ hồ kinh điển trong ngôn ngữ tự nhiên mà logic vị từ làm rõ.

Chứng minh

Chiều thuận. Giả sử M⊨s∃y ∀x R(x,y)\mathcal{M} \models_s \exists y\, \forall x\, R(x,y). Theo mệnh đề ngữ nghĩa cho ∃\exists, M⊨s∃y φ  ⟺  there is d∈M with M⊨s[y↦d]φ\mathcal{M} \models_s \exists y\, \varphi \iff \text{there is } d \in M \text{ with } \mathcal{M} \models_{s[y \mapsto d]} \varphi; áp dụng ở đây cho ta một d0∈Md_0 \in M với M⊨s[y↦d0]∀x R(x,y)\mathcal{M} \models_{s[y \mapsto d_0]} \forall x\, R(x,y).

Áp dụng mệnh đề cho ∀\forall vào điều này, M⊨s[y↦d0][x↦a]R(x,y)\mathcal{M} \models_{s[y \mapsto d_0][x \mapsto a]} R(x,y) đúng với mọi a∈Ma \in M, vì ∀x\forall x chạy khắp MM bất kể sau này ta chọn aa nào.

Bây giờ cố định một a∈Ma \in M tùy ý để kiểm chứng ∀x ∃y R(x,y)\forall x\, \exists y\, R(x,y). Từ đoạn trên, lấy x↦ax \mapsto a cho M⊨s[y↦d0][x↦a]R(x,y)\mathcal{M} \models_{s[y \mapsto d_0][x \mapsto a]} R(x,y), cho thấy chính d0d_0 là nhân chứng cho ∃y R(x,y)\exists y\, R(x,y) dưới x↦ax \mapsto a; do đó M⊨s[x↦a]∃y R(x,y)\mathcal{M} \models_{s[x \mapsto a]} \exists y\, R(x,y).

Vì a∈Ma \in M tùy ý, M⊨s[x↦a]∃y R(x,y)\mathcal{M} \models_{s[x \mapsto a]} \exists y\, R(x,y) đúng với mọi aa, đó chính xác là mệnh đề ngữ nghĩa cho M⊨s∀x ∃y R(x,y)\mathcal{M} \models_s \forall x\, \exists y\, R(x,y). Điều này chứng minh ∃y ∀x R(x,y)⇒∀x ∃y R(x,y)\exists y\, \forall x\, R(x,y) \Rightarrow \forall x\, \exists y\, R(x,y).

Chiều đảo không đúng: một phản ví dụ. Cho M\mathcal{M} có miền M=ZM = \mathbb{Z} (số nguyên) và diễn giải R(x,y)R(x,y) là "x<yx < y". Khi đó ∀x ∃y R(x,y)\forall x\, \exists y\, R(x,y) ĐÚNG: với mọi số nguyên xx, lấy y=x+1y = x+1 cho x<yx < y. Nhưng ∃y ∀x R(x,y)\exists y\, \forall x\, R(x,y) SAI: nó đòi hỏi một số nguyên yy duy nhất lớn hơn mọi số nguyên xx, và không tồn tại số nguyên lớn nhất như vậy (với bất kỳ yy ứng viên nào, số nguyên y+1y+1 vi phạm y+1<yy+1 < y). Vậy ∀x ∃y R(x,y)\forall x\, \exists y\, R(x,y) đúng trong khi ∃y ∀x R(x,y)\exists y\, \forall x\, R(x,y) sai, cho thấy mệnh đề đảo nói chung là sai.

Đại họcỨng dụng thực tiễn và Ví dụ minh họa

SQL không có từ khóa "với mọi" nguyên bản, nên cơ sở dữ liệu quan hệ mã hóa ∀x P(x)\forall x\, P(x) bằng luật phủ định lượng từ: "∀x P(x)\forall x\, P(x)" trở thành `NOT EXISTS (... WHERE NOT P ...)`, tức lập trình viên hiện thực ∀\forall qua phủ định kép của ∃\exists đúng như ¬(∀x P(x))≡∃x ¬P(x)\neg(\forall x\, P(x)) \equiv \exists x\, \neg P(x). Các ngôn ngữ đặc tả hình thức (ký pháp Z, tiền/hậu điều kiện Hoare logic, TLA+) dùng trực tiếp ∀\forall và ∃\exists để phát biểu tính chất đúng đắn như "mọi chỉ số mảng đều nằm trong giới hạn" hoặc "tồn tại một đường thực thi hợp lệ", mà công cụ kiểm chứng sau đó kiểm tra bằng kỹ thuật thay thế và khử lượng từ.

Ví dụ: Phép chia quan hệ: "mua mọi sản phẩm"

Cơ sở dữ liệu có bảng `Purchases(customer, product)` và `Products(product)`. Hình thức hóa "khách hàng cc đã mua mọi sản phẩm" bằng logic vị từ, rồi chuyển thành truy vấn SQL chỉ dùng `NOT EXISTS`.

Lời giải

Đặt Bought(c,p)\text{Bought}(c,p) là "(c,p)(c,p) xuất hiện trong Purchases" và Product(p)\text{Product}(p) là "pp xuất hiện trong Products". "Khách hàng cc mua mọi sản phẩm" là ∀p (Product(p)→Bought(c,p))\forall p\, (\text{Product}(p) \to \text{Bought}(c,p)).

SQL không có ∀\forall, nên áp dụng luật phủ định lượng từ ¬(∀x P(x))≡∃x ¬P(x)\neg(\forall x\, P(x)) \equiv \exists x\, \neg P(x) cho ¬∃p ¬(Product(p)→Bought(c,p))\neg\exists p\,\neg(\text{Product}(p) \to \text{Bought}(c,p)), tức viết lại lượng từ phổ dụng thành "không có sản phẩm nào mà khách cc KHÔNG mua": ¬∃p (Product(p)∧¬Bought(c,p))\neg \exists p\, (\text{Product}(p) \wedge \neg\text{Bought}(c,p)).

Dịch trực tiếp: `SELECT c FROM Customers c WHERE NOT EXISTS (SELECT FROM Products p WHERE NOT EXISTS (SELECT FROM Purchases WHERE customer = c.c AND product = p.product))` — mẫu "NOT EXISTS kép" kinh điển hiện thực phép chia quan hệ, một ứng dụng trực tiếp của luật phủ định lượng từ phổ dụng thành tồn tại.

Ví dụ: Đặc tả hình thức: bất biến sắp xếp

Hậu điều kiện của một thuật toán sắp xếp được đặc tả là ∀i (0≤i<n−1→a[i]≤a[i+1])\forall i\, (0 \le i < n-1 \to a[i] \le a[i+1]) trên mảng aa độ dài nn. Người kiểm chứng muốn kiểm trường hợp cụ thể tại i=0i=0. Quy tắc suy luận nào biện minh cho việc rút ra a[0]≤a[1]a[0] \le a[1] từ hậu điều kiện, và công thức thu được là gì?

Lời giải

Đặt P(i)P(i) là 0≤i<n−1→a[i]≤a[i+1]0 \le i < n-1 \to a[i] \le a[i+1]. Hậu điều kiện là ∀i P(i)\forall i\, P(i).

Theo tính đúng đắn của quy tắc thay thế phổ dụng đã chứng minh ở trên, ∀x P(x)⊢P(t)\forall x\, P(x) \vdash P(t) với mọi hạng tử tt trong miền — ở đây lấy t=0t = 0: từ ∀i P(i)\forall i\, P(i) ta suy ra hợp lệ P(0)P(0), tức 0≤0<n−1→a[0]≤a[1]0 \le 0 < n-1 \to a[0] \le a[1].

Vì 0≤0<n−10 \le 0 < n-1 đúng khi n≥2n \ge 2 (một điều kiện phụ mà người kiểm chứng kiểm riêng, ví dụ từ độ dài khai báo của mảng), Modus Ponens sau đó cho a[0]≤a[1]a[0] \le a[1] như mong muốn — chính là trường hợp người kiểm chứng muốn kiểm, thu được bằng cách nối quy tắc thay thế phổ dụng với Modus Ponens.

Công thức nào tương đương logic với ¬(∀x P(x))\neg(\forall x\, P(x))?

Với miền Z\mathbb{Z} và R(x,y)R(x,y) nghĩa là "x<yx < y", điều nào sau đây ĐÚNG?

Mẫu `NOT EXISTS (... WHERE NOT P ...)` trong SQL hiện thực lượng từ nào trên PP?

Cho ∀x P(x)\forall x\, P(x) đúng trong cấu trúc M\mathcal{M}, kết luận nào được biện minh bởi quy tắc thay thế phổ dụng cho hạng tử tt?

Tài liệu tham khảo

  1. Herbert B. Enderton (2001). A Mathematical Introduction to Logic
  2. David Hilbert, Wilhelm Ackermann (1928). Grundzüge der theoretischen Logik