三值逻辑

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

三元(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