我将重点放在具体的例子上,这更适合澄清事情。简而言之,您的逻辑表达式由三个子句的连词组成
C1: phone = '141-3304913'
C2: age < 50
C3: age >= 50
其三布尔逻辑表明结果是
True, if any clause is true
False, if all clauses are false
Unknown, in all the other cases
因此,如果与 True 关联的值最大,与 False 关联的值最小,而与 Unknown 关联的任何中间值,那么取MAX
for 连词证明是正确的。同样,析取函数也适用于MIN
函数。只要我们将 0 和 1(排除)之间的任何值解释为未知,否定就有效;显然,如果我们取 1/2,则否定函数是“稳定的”,但这在数学方面并不重要。
更有效的是,这些子句清楚地对您的phone
变量P
和age
变量的以下值(实例)做出反应A
:
P1 such that P1 = '141-3304913'
P2 such that P2 <> '141-3304913'
P3 such that P3 = NULL
A1 such that A1 < 50
A2 such that A2 >= 50
A3 such that A3 = NULL
在条款的满足方面,我们有
P1 -> C1 = 1
P2 -> C1 = 0
P3 -> C1 = 1/2
A1 -> C2 = 1, C3 = 0
A2 -> C2 = 0, C3 = 1
A3 -> C2 = C3 = 1/2
通常存在 3*3 种可能的组合,因为您的两个变量中的每一个都采用三个可能的值:
P1 A1: C1 = 1, C2 = 1, C3 = 0 -> MAX(1,1,0) = 1 -> true
P1 A2: C1 = 1, C2 = 0, C3 = 1 -> MAX(1,0,1) = 1 -> true
P1 A3: C1 = 1, C2 = 1/2, C3 = 1/2 -> MAX(1,1/2,1/2) = 1 -> true
P2 A1: C1 = 0, C2 = 1, C3 = 0 -> MAX(0,1,0) = 1 -> true
P2 A2: C1 = 0, C2 = 0, C3 = 1 -> MAX(0,0,1) = 1 -> true
P2 A3: C1 = 0, C2 = 1/2, C3 = 1/2 -> MAX(0,1/2,1/2) = 1/2 -> unknown
P3 A1: C1 = 1/2, C2 = 1, C3 = 0 -> MAX(1/2,1,0) = 1 -> true
P3 A2: C1 = 1/2, C2 = 0, C3 = 1 -> MAX(1/2,0,1) = 1 -> true
P3 A3: C1 = 1/2, C2 = 1/2, C3 = 1/2 -> MAX(1/2,1/2,1/2) = 1/2 -> unknown
特别是,由于 C2 和 C3 是互斥的,因此您永远不会因为合取而得到 False。
该表达式R.a > R.b OR R.a <= 0 OR R.b >= 0
反而呈现了这些情况:
R.a <= 0, R.a > 0, R.a = unknown
R.b >= 0, R.b < 0, R.b = unknown
R.a - R.b > 0, R.a - R.b <= 0, R.a - R.b = unknown
R.a - R.b
显然,我们有 3 个变量和 27 个可能的情况,但可以轻松排除几个相关的情况。