用Python代码玩转离散数学:命题逻辑的自动化实践
离散数学作为计算机科学的基石,命题逻辑部分常常让初学者感到抽象枯燥。但如果你手上有Python这把瑞士军刀,一切都会变得生动起来。今天我们就用代码重新理解命题逻辑,从真值表生成到范式计算,让抽象概念变成屏幕上可运行的函数。
1. 命题逻辑的Python化表达
命题逻辑的核心在于用符号系统表达复杂陈述。在Python中,我们可以用布尔值和逻辑运算符完美还原这一过程。先从一个简单的例子开始:
# 定义命题变量
p = True # "今天下雨"
q = False # "我带伞"
# 逻辑联结词实现
print("非p:", not p) # 否定
print("p且q:", p and q) # 合取
print("p或q:", p or q) # 析取
print("如果p那么q:", not p or q) # 蕴含
命题符号化的进阶技巧在于处理复杂陈述。比如"除非A否则B"这类日常表达:
def unless(a, b):
return b if a else True
# "除非下雨,否则我去公园"
rain = False
go_park = unless(rain, True)
对于更复杂的一阶逻辑命题,可以建立命题字典来管理:
propositions = {
'p': '张三去开会',
'q': '李四去开会',
'r': '王五去开会'
}
def symbolize(statement):
# 实现自然语言到符号的转换逻辑
pass
2. 真值表的自动化生成
手工绘制真值表既耗时又容易出错,用Python可以轻松实现自动化。我们先构建一个通用的真值表生成器:
from itertools import product
def generate_truth_table(variables, expression):
# 生成表头
header = variables + [expression.__name__]
print("\t".join(header))
# 遍历所有可能的真值组合
for values in product([False, True], repeat=len(variables)):
row = list(values) + [expression(*values)]
print("\t".join(map(str, row)))
# 示例:验证德摩根律
def de_morgan(p, q):
return not (p and q) == (not p) or (not q)
generate_truth_table(['p', 'q'], de_morgan)
真值表的可视化改进可以借助pandas和matplotlib:
import pandas as pd
import seaborn as sns
def visual_truth_table(variables, func):
combinations = list(product([False, True], repeat=len(variables)))
df = pd.DataFrame(combinations, columns=variables)
df['Result'] = [func(*row) for row in combinations]
plt.figure(figsize=(8, 3))
sns.heatmap(df.replace({False:0, True:1}), annot=True, cmap='YlGnBu', cbar=False)
plt.title(f'Truth Table for {func.__name__}')
plt.show()
3. 范式计算的编程实现
主析取范式和主合取范式是命题逻辑的重要概念,我们可以用算法来自动推导:
3.1 主析取范式生成器
def get_minterms(variables, truth_values):
minterms = []
for i, row in enumerate(product([False, True], repeat=len(variables))):
if truth_values[i]:
term = []



&spm=1001.2101.3001.5002&articleId=92454402&d=1&t=3&u=2b90f7adaa9c4943ab4c68d415a92880)
213

被折叠的 条评论
为什么被折叠?



