三值逻辑

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

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

定义[编辑]

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

基本真值表[编辑]

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

A B AB AB ¬ A
T T T T F
T ? T ? F
T F T F F
? T T ? ?
? ? ? ? ?
? F ? F ?
F T T F T
F ? ? F T
F F F F T

在这个真值表中,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 (PDF). 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. (原始内容存档于2006-11-02). 
  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