Files
cs188/logic/main.typ
2025-12-18 15:09:23 +08:00

97 lines
4.3 KiB
Typst
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#set page(paper: "a4", margin: 2cm)
#set text(font: ("Noto Sans CJK SC", "SimSun"), size: 10.5pt)
#set heading(numbering: "1.")
#align(center)[
#block(text(weight: "bold", size: 18pt)[人工智能课程ch07-09逻辑作业报告])
]
= 命题逻辑合取范式转换
*题目:* $(P and (Q -> R)) -> S$ 的合取范式。
*解答:*
1. 消去蕴含符号:
$ not (P and (not Q or R)) or S $
2. 应用德·摩根定律:
$ (not P or not (not Q or R)) or S $
$ (not P or (Q and not R)) or S $
3. 应用分配律:
$ ((not P or Q) and (not P or not R)) or S $
4. 再次应用分配律(将 $S$ 结合进去):
$ (not P or Q or S) and (not P or not R or S) $
*最终结果:* $(not P or Q or S) and (not P or not R or S)$
= 复合语句分析
*题目:* 考虑语句 $[((F or D) => P) or (M => P)] => [(F and M) => P]$ (简写变量名)。
*(a) 通过枚举模型判断有效性:*
$F, D, M, P$ 为布尔变量。考虑一种情况:使结论 $(F and M) => P$ 为假。
只有当 $F=T, M=T, P=F$ 时,结论为假。
代入左边:$[((T or D) => F) or (T => F)] equiv [F or F] equiv F$
由于“假 $=>$ 假”为真,该语句在所有使结论为假的解释下依然为真。经穷举,该语句在所有解释下均为真。
*结论:* 该语句是 *有效的 (Valid)*
*(b) 转换为合取范式 (CNF)*
左边 (L)$((F or D) => P) or (M => P)$
$ equiv (not(F or D) or P) or (not M or P) $
$ equiv (not F and not D) or P or not M or P $
$ equiv (not F or not M or P) and (not D or not M or P) $
右边 (R)$(F and M) => P equiv not F or not M or P$
全式 $L => R equiv not L or R$
由于 $R$ 已经是 $L$ 的一个合取项,根据 $(A and B) => A$ 永远为真,转换结果支持了有效性结论。
= 一阶逻辑翻译 (基础谓词)
*题目要求:使用给定谓词表示语句。*
1. *有一门课所有老师都教授:*
$ exists c ("Course"(c) and forall t ("Teacher"(t) => "Teach"(t, c))) $
2. *恰有一门课由 "Alice" 教授且被 "Bob" 选修:*
$ exists c ("Course"(c) and "Teach"("Alice", c) and "Study"("Bob", c) and forall c' (("Teach"("Alice", c') and "Study"("Bob", c')) => c = c')) $
3. *所有老师教授的课程都至少有一个学生选修:*
$ forall t forall c (("Teacher"(t) and "Teach"(t, c)) => exists s ("Student"(s) and "Study"(s, c))) $
4. *有一个学生选修了 "Alice" 教授的所有课程:*
$ exists s ("Student"(s) and forall c ("Teach"("Alice", c) => "Study"(s, c))) $
= 一阶逻辑翻译 (自定义谓词)
*自定义谓词:* $"Fail"(s, c)$ 表示 $s$ 考试缺考;$"Pass"(s, c)$ 表示 $s$ 通过课程 $c$$"Borrow"(s, b)$ 表示学生 $s$ 借阅书 $b$
1. *有老师只教授了一门课程:*
$ exists t ("Teacher"(t) and exists c ("Teach"(t, c) and forall c' ("Teach"(t, c') => c' = c))) $
2. *如果一名学生缺考,他就无法通过该课程:*
$ forall s forall c (("Student"(s) and "Course"(c) and "Fail"(s, c)) => not "Pass"(s, c)) $
3. *没有一本书被两名学生同时借出:*
$ not exists b exists s_1 exists s_2 ("Book"(b) and "Student"(s_1) and "Student"(s_2) and s_1 != s_2 and "Borrow"(s_1, b) and "Borrow"(s_2, b)) $
= 推理有效性论证 (归结证明法)
*前提:* 所有的智能手机都是电子设备。 $forall x ("Smartphone"(x) => "ElectronicDevice"(x))$
*结论:* 任何智能手机的制造商都是电子设备制造商。 $forall x forall y (("Smartphone"(x) and "ManufacturedBy"(x, y)) => exists z ("ElectronicDevice"(z) and "ManufacturedBy"(z, y)))$
*归结证明步骤:*
1. *前提子句化:*
$C_1: not "Smartphone"(x) or "ElectronicDevice"(x)$
2. *结论否定并子句化:*
$not [forall x forall y (("Smartphone"(x) and "ManufacturedBy"(x, y)) => exists z ("ElectronicDevice"(z) and "ManufacturedBy"(z, y)))]$
引入常量 $S, M$ (Skolemization)
$C_2: "Smartphone"(S)$
$C_3: "ManufacturedBy"(S, M)$
$C_4: not "ElectronicDevice"(z) or not "ManufacturedBy"(z, M)$
3. *推导矛盾:*
- $C_1$ $C_2$ (置换 $\{x/S\}$): $"ElectronicDevice"(S) (C_5)$
- $C_4$ $C_3$ (无法直接归结,但由于 $S$ 满足 $"ManufacturedBy"(S, M)$):
$C_4$ 中的 $z$ 置换为 $S$: $not "ElectronicDevice"(S) (C_6)$
- $C_5$ $C_6$ 归结产生空子句 $square$
*结论:* 推理有效。