三值逻辑
维库,知识与思想的自由文库
三元(ternary)、三值(three-valued)或三价(trivalent)逻辑是描述有指示真、假和某个第三值的三个真值的任何多值逻辑系统的术语。这相对于更常见的只提供真与假的二值逻辑(比如布尔逻辑)。
目录 |
[编辑] 定义
本文主要展示使用真值 {false, unknown,, true} 的三值命题逻辑系统。它把常规的布尔连结词扩展到了三价上下文中。
[编辑] 基本真值表
下面是给有 true/false/unknown 状态的系统的一些逻辑运算的真值表。
| A | B | A ∨ B | A ∧ B | ¬ A |
|---|---|---|---|---|
| True | True | True | True | False |
| True | Unknown | True | Unknown | |
| True | False | True | False | |
| Unknown | True | True | Unknown | Unknown |
| Unknown | Unknown | Unknown | Unknown | |
| Unknown | False | Unknown | False | |
| False | True | True | False | True |
| False | Unknown | Unknown | False | |
| False | False | False | False |
在这个真值表中,UNKNOWN 状态可以被比拟认为是一个密封的盒子,其中包含要么一个明确的 TRUE 值要么一个明确的 FALSE 值。不能随时及时获得任何特定 UNKNOWN 状态秘密的表示 TRUE 还是 FALSE 的知识。但是,特定逻辑运算可以生成一个明确的结果,即使它们涉及到了至少一个 UNKNOWN 操作数。例如,因为 TRUE ∨ TRUE 等于 TRUE,而 TRUE ∨ FALSE 等于 TRUE,你同样可以推出 TRUE ∨ UNKNOWN 等于 TRUE。在这个例子中,因为两个二价状态都可以被 UNKNOWN 状态暗含,但两个状态都生成相同的结果,在所有这三种情况下都是一个明确的 TRUE 结果。
[编辑] 值的表示
同二值逻辑一样,在三值逻辑中的真值可以使用各种三进制系统表示来数值表示。一些常见的例子有:
- 1 用于真,2 用于假,0 用于“未知”、“无关”或“二者”。[1]
- 0 用于假,1 用于真,第三值使用非整数符号比如 # 或 ½。[2]
- 平衡三进制:= -1 用于假,1 用于真,0 用于第三值;这些值还可以分别简化为 -、+ 和 0。[3]
[编辑] 在数据库应用中的三值逻辑
数据库查询语言 SQL 实现三值逻辑作为处理 NULL 字段内容的一种方式。SQL 使用 NULL 来表示在数据库中缺失数据。如果一个字段不包含定义的值,对于 SQL 这意味着实际的值存在,但是这个值当前没有记录在数据库中。注意缺失的值不同于数值零或零长度字符串值;这两者都表示已知的值。比较任何东西于 NULL—即使是另一个 NULL—结果是 UNKNOWN 真值状态。例如,考虑下列 SQL 表达式:
City = 'Paris'
在 SQL 中,在 City 字段中的 NULL 值表示在理论中导致这个表达式被确认为要么 TRUE (比如 City 包含 'Paris') 要么 FALSE (比如 City 包含 'Philadelphia')的一个缺失的值。样例 SQL 表达式依据如下规则确认:
- 对于在 City 字段中有文字串 'Paris' 的任何记录结果为 TRUE
- 对于在 City 字段中有 NULL 的任何记录结果为 UNKNOWN
- 在所有其他情况结果为 FALSE
在 SQL 数据操纵语言中,表达式(比如在 WHERE 子句中)的 TRUE 真值状态发起在这个行上一个动作(比如返回这一行),而 UNKNOWN 或 FALSE 的真值状态不做事情。[4] 三值逻辑以这种方式来实现在 SQL 中,而对于 SQL 用户表现得如同二值逻辑。
但是,SQL 的检查约束有不同的表现。只有 FALSE 真值状态导致违反检查约束。TRUE 或 UNKNOWN 真值状态指示一行已经成功的通过检查约束验证。[5]
在文章 Null 中深入讨论了三值逻辑的 SQL 实现。
[编辑] 引用
- ↑ Hayes, Brian (November-December, 2001). "Third Base". American Scientist 89 (6): 490-494. URL accessed on 2006-12-25.
- ↑ (1998) The Penguin Dictionary of Mathematics. 2nd Edition. London, England: Penguin Books, 417.
- ↑ Knuth, Donald E. (1981). The Art of Computer Programming Vol. 2. Reading, Mass.: Addison-Wesley Publishing Company, 190.
- ↑ Lex de Haan and Gennick, Jonathan (July-August, 2005). "Nulls: Nothing to Worry About". Oracle Magazine.
- ↑ Coles, Michael (February 26, 2007). "Null Versus Null?". SQL Server Central.
[编辑] 参见
[编辑] 外部链接
- Trinary Computer Systems
- TriINTERCAL - the intentionally-obfuscated INTERCAL programming language supports an implementation of ternary logic
- Boost.Tribool – an implementation of ternary logic in C++
- Team-R2D2 - a French institute that fabricated the first full-ternary logic chip (a 64-tert SRAM and 4-tert adder) in 2004




