命题逻辑|析取、合取和蕴含到底什么意思

如是我闻:在逻辑学中,“析取”、“合取”和“蕴含”这些术语的中文翻译是有其逻辑和哲学基础的,它们准确地反映了这些逻辑操作的本质。虽然他们被翻译的很高级,但并不能让人一下子就明白。

析取 (Disjunction)

  • 原理: 析取对应于逻辑中的“或”操作,表示在两个命题中至少有一个是真的。逻辑表达式为 p ∨ q p \lor q pq,读作“ p p p q q q”。
  • 理解: “析取”一词来自于“析”和“取”两个字,其中“析”可以理解为分开、分析,而“取”则意味着从中选择。因此,“析取”恰如其分地描述了这种操作的本质——从两个命题中分析并选择至少一个为真的情况。
  • 源起: “Disjunction” 来自拉丁语 “disiungere”,意味着分开或分离。在逻辑学中,它描述了一种选择关系,即在两个命题 p p p q q q 中选择至少一个为真。这与“分开”或“分离”两个选项的概念相吻合,反映了至少有一个命题是正确的。

合取 (Conjunction)

  • 原理: 合取对应于逻辑中的“且”操作,表示两个命题都必须是真的。逻辑表达式为 p ∧ q p \land q pq,读作“ p p p q q q”。
  • 理解: “合取”一词中的“合”指的是结合、联合,而“取”依然表示选择或接受。这个术语很好地反映了合取操作的性质,即两个命题被联合起来,它们都被接受为真。
  • 源起: “Conjunction” 来自拉丁语 “coniungere”,意味着结合或联合。这个词在逻辑中用来表示两个命题 p p p q q q 都必须同时为真的情况。这种结合或联合的含义恰如其分地表达了“且”操作的本质,即两个命题在逻辑上是被联合考虑的。

蕴含 (Implication)

  • 原理: 蕴含是逻辑中的条件表达,表示如果第一个命题为真,则第二个命题也为真。逻辑表达式为 p → q p \rightarrow q pq,可以读作“如果 p p p,则 q q q”。
  • 理解: “蕴含”这个词暗示了一种内在的、隐含的条件关系。如果条件(蕴含者,即 p p p)成立,那么结果(蕴含项,即 q q q)也必然成立。这与日常语言中“蕴含”的使用相吻合,指的是一种事物内在地包含或导致另一事物的关系。
  • 源起: “Implication” 来自拉丁语 “implicare”,意味着折叠或缠绕在一起,引申为涉及或意味着。在逻辑上,它表示如果第一个命题 p p p 为真,则第二个命题 q q q 也为真的条件关系。这种表达方式准确地捕捉了条件语句的本质——一个事实(或命题)的真实性牵涉或导致另一个事实(或命题)的真实性。

这些翻译不仅在语言上通顺,在逻辑和概念上也是恰当的,有效地桥接了逻辑学的概念与中文表达之间的联系,更会让初学者高兴的咬牙切齿。实在不行就把他们的名字背一下吧。

非常的有品

以上

  • 23
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本
好的,那么我可以给你提供一个基于C语言的王浩算法的实现,用于命题逻辑的真值表计算。该算法可以处理命题变量符号、逻辑连接符(否定、合取析取蕴含、等价)和括号。 以下是完整的C语言代码实现: ```c #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h> // 定义一个结构体,用于存储命题逻辑表达式 typedef struct { char *expr; // 命题逻辑表达式 int len; // 表达式长度 int pos; // 当前读取的字符位置 } PropLogicExpr; // 定义一个结构体,用于存储命题变量和它的真值 typedef struct { char var; // 命题变量 bool value; // 真值 } PropVar; // 判断字符是否是命题变量符号 bool isVar(char c) { return c >= 'A' && c <= 'Z'; } // 从命题逻辑表达式中读取一个字符 char readChar(PropLogicExpr *expr) { if (expr->pos >= expr->len) { return '\0'; } return expr->expr[expr->pos++]; } // 预读一个字符 char peekChar(PropLogicExpr *expr) { if (expr->pos >= expr->len) { return '\0'; } return expr->expr[expr->pos]; } // 解析命题变量 PropVar parseVar(PropLogicExpr *expr) { PropVar var; var.var = readChar(expr); var.value = false; return var; } // 解析否定操作 bool parseNot(PropLogicExpr *expr) { readChar(expr); // 跳过'!' bool value = parseProp(expr); return !value; } // 解析合取操作 bool parseAnd(PropLogicExpr *expr) { readChar(expr); // 跳过'^' bool left = parseProp(expr); bool right = parseProp(expr); return left && right; } // 解析析取操作 bool parseOr(PropLogicExpr *expr) { readChar(expr); // 跳过'v' bool left = parseProp(expr); bool right = parseProp(expr); return left || right; } // 解析蕴含操作 bool parseImply(PropLogicExpr *expr) { readChar(expr); // 跳过'->' readChar(expr); bool left = parseProp(expr); bool right = parseProp(expr); return !left || right; } // 解析等价操作 bool parseEqual(PropLogicExpr *expr) { readChar(expr); // 跳过'<->' readChar(expr); bool left = parseProp(expr); bool right = parseProp(expr); return left == right; } // 解析命题公式 bool parseProp(PropLogicExpr *expr) { char c = peekChar(expr); if (isVar(c)) { PropVar var = parseVar(expr); return var.value; } else if (c == '!') { return parseNot(expr); } else if (c == '^') { return parseAnd(expr); } else if (c == 'v') { return parseOr(expr); } else if (c == '-' && peekChar(expr + 1) == '>') { return parseImply(expr); } else if (c == '<' && peekChar(expr + 1) == '-' && peekChar(expr + 2) == '>') { return parseEqual(expr); } else if (c == '(') { readChar(expr); // 跳过'(' bool value = parseProp(expr); readChar(expr); // 跳过')' return value; } return false; } // 打印命题变量及其真值 void printVars(PropVar *vars, int count) { for (int i = 0; i < count; i++) { printf("%c=%s ", vars[i].var, vars[i].value ? "T" : "F"); } printf("\n"); } // 计算命题逻辑表达式的真值 bool calcPropLogicExpr(PropLogicExpr *expr, PropVar *vars, int count) { bool value = parseProp(expr); printVars(vars, count); return value; } // 生成所有命题变量的真值组合 void genVarValues(PropVar *vars, int count, int index, bool *values, int *result) { if (index >= count) { memcpy(result, values, count * sizeof(bool)); } else { vars[index].value = false; genVarValues(vars, count, index + 1, values, result); vars[index].value = true; genVarValues(vars, count, index + 1, values, result); } } // 计算所有命题变量的真值组合下,命题逻辑表达式的真值 void calcPropLogicExprForAllVars(PropLogicExpr *expr, PropVar *vars, int count) { bool values[count]; int result[count]; genVarValues(vars, count, 0, values, result); for (int i = 0; i < count; i++) { vars[i].value = result[i]; } calcPropLogicExpr(expr, vars, count); } // 测试代码 int main() { PropLogicExpr expr; expr.expr = "((A->B)<->(!AvB))"; expr.len = strlen(expr.expr); expr.pos = 0; PropVar vars[2] = {{'A', false}, {'B', false}}; calcPropLogicExprForAllVars(&expr, vars, 2); return 0; } ``` 这份代码实现了命题逻辑表达式的真值表计算,并且可以处理命题变量符号、逻辑连接符(否定、合取析取蕴含、等价)和括号。你可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值