数学-蕴涵->真值表理解

1. 结论

先说结论!!!(此结非彼结)
一个成立的前提有且仅有一个结论,而且它是成立的结论。(规定)
一个不成立的前提可以有任意的结论,包括成立和不成立的结论。
所以
1->1是对的
1->0是错的
0->1是对的
0->0是对的
可以理解成 基于真话只有定论,基于假话,可以说的真真假假

2. 问题

之前一直不理解为什么0->1=1,0->0=1?

3. 解决

->(蕴涵)是命题A是否可以推出命题B的结果。
如果用自然语言描述的话,发现命题A和命题B存在一定联系时,其蕴涵表达式才有意义。
对于逻辑上毫无关系的两件事,蕴涵表达式仅仅起计算作用,或者你也可以认为是你的计算使得
这两件事有了关联!!!

1. 先摆上真值表

ABF
001
011
100
111

2. 我们反过来看

1. 后两个

A=1,B=1,F=1,前提 成立,结论 成立 时,我们规定这个推理是正确的。
A=1,B=0,F=0,前提 成立,结论 不成立,怎么理解呢,这是上个推理的对立事件,因为一个成立的前提只能推出一种结论,而结论只有成立或者不成立,当我们规定上个推理正确时,那么这个推理就是错误的。

2. 前两个

A=0,B=0,F=1 和 A=0,B=1,F=1
我们可以发现,他们两者的前提都不成立,那么,根据之前写到的

前提 成立,结论 成立 时,我们规定这个推理是正确的。

那我们是否可以认为 前提不成立, 结论不成立 的推理也是正确的呢?

然而我们并没有规定,

这需要我们思考一下

前提不成立时,你也可以得到结论有两种状态,要么成立要么不成立废话,这不就是没有前提时也可以得出的结果??!是的,当前提不成立时,前提就和我们的推理无关了,那么这时候的推理不就随便推,你可以说它推出正确的结论,也可以说它推出错误的结论。所以都是对的!!!

这正好是前两种情况。

总之,当你有了错误的前提,可以推出任何结论!!!
而当你有了正确的前提,结论就唯一了!!!

这也让我们认识到->计算返回的是推理的正确与否,它在乎的是推理的过程是否正确,不是其他的东西。

4. 新的认识

->蕴涵,不适合翻译为:如果…那么…,它更像是一条基本运算,真值表就是这个,没有理由。什么是基本运算,比如你可以定义A#B,然后定义它的真值表,然后一个崭新的逻辑连接词就形成了。

至于为什么这样定义真值表,逻辑学家在考虑如何表示:P是Q的充分条件。
当P出现,一定导致Q出现,(因为P前提可以 推出 结论Q)。
当P不出现,Q可出现,Q可不出现,(因为可能存在其他前提 推出 结论Q)。
对应到真值表,就P->~Q是推不出的。

即之前说的话,可以直接跳过,只需记住
P->Q是指P是Q的充分条件,
有P,Q成立,没P,还有A,B,C,D...

好的,根据您的问题,我理解您需要一个工具或程序来生成逻辑表达式的真值表。实现这个功能的一个常见方法是通过递归算法来计算每一个逻辑变量取值组合下的表达式的值。以下是一个示例 Python 代码,用于生成真值表: ```python # 定义逻辑联结词和优先级 operators = { '!': (lambda x: not x, 5), # 否定 '^': (lambda x, y: x and y, 4), # 合取 '||': (lambda x, y: x or y, 3), # 析取 '->': (lambda x, y: not x or y, 2), # 蕴涵 '<->': (lambda x, y: x == y, 1) # 等值 } # 定义递归函数 def evaluate(expression, variables): if len(expression) == 1: # 如果表达式只有一个变量 return variables[expression[0]] else: # 找到优先级最高的逻辑联结词 best_operator = None best_priority = -1 for operator in operators: if operator in expression and operators[operator][1] > best_priority: best_operator = operator best_priority = operators[operator][1] # 根据逻辑联结词进行递归计算 if best_operator == '!': return operators[best_operator][0](evaluate(expression[1:], variables)) else: i = expression.index(best_operator) left = evaluate(expression[:i], variables) right = evaluate(expression[i+1:], variables) return operators[best_operator][0](left, right) # 定义生成真值表的函数 def generate_truth_table(variables, expression): n = len(variables) for i in range(2**n): values = [(i >> j) & 1 for j in range(n)] # 生成当前取值组合 result = evaluate(expression, dict(zip(variables, values))) # 计算表达式的值 print(f"{values} -> {int(result)}") ``` 您可以将逻辑表达式和逻辑变量作为函数的输入,然后调用 generate_truth_table 函数来生成真值表。例如,对于逻辑表达式 "p^q",您可以这样调用: ```python generate_truth_table(['p', 'q'], ['p', '^', 'q']) ``` 这将输出以下真值表: ``` [0, 0] -> 0 [0, 1] -> 0 [1, 0] -> 0 [1, 1] -> 1 ``` 希望这可以帮助您生成逻辑表达式的真值表
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值