三值逻辑

维基百科,自由的百科全书
跳转至: 导航搜索

三元(ternary)、三值(three-valued)或三价(trivalent)逻辑是描述有指示真、假和某个第三值的三个真值的任何多值逻辑系统的术语。这相对于更常见的只提供真与假的二值逻辑(比如布尔逻辑)。

定义[编辑]

本文主要展示使用真值 {false, unknown,, true} 的克莱尼三值命题逻辑系统。它把常规的布尔连结词扩展到了三价上下文中。

基本真值表[编辑]

下面是给有 true/false/unknown 状态的系统的一些逻辑运算的真值表

A B AB AB ¬ A
True True True True False
True Unknown True Unknown False
True False True False False
Unknown True True Unknown Unknown
Unknown Unknown Unknown Unknown Unknown
Unknown False Unknown False Unknown
False True True False True
False Unknown Unknown False True
False False False False True

在这个真值表中,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 实现。

参见[编辑]

引用[编辑]

  1. ^ Hayes, Brian. Third Base. American Scientist (Sigma Xi, the Scientific Research Society). November-December, 2001, 89 (6): 490–494 [2006-12-25]. 
  2. ^ The Penguin Dictionary of Mathematics. 2nd Edition. London, England: Penguin Books. 1998: 417. 
  3. ^ Knuth, Donald E.. The Art of Computer Programming Vol. 2. Reading, Mass.: Addison-Wesley Publishing Company. 1981: 190. 
  4. ^ Lex de Haan and Gennick, Jonathan. Nulls: Nothing to Worry About. Oracle Magazine (Oracle). July-August, 2005. 
  5. ^ Coles, Michael. Null Versus Null?. SQL Server Central (Red Gate Software). February 26, 2007. 

外部链接[编辑]

  • 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