是否可以按顺序写入所有布尔表达式?

use*_*153 4 boolean-logic boolean

我正在使用一些工具,并且它能够确定特定事务是否成功的唯一方法是它是否通过了各种检查.但是,它的限制方式是它一次只能进行一次检查,并且必须是顺序的.一切都必须从左到右计算.

例如,

A || C && D
Run Code Online (Sandbox Code Playgroud)

它将首先计算A || C,然后结果将被AND编辑D.

括号越来越难.我无法计算这样的表达式,因为B || C需要先计算.我无法处理任何操作顺序;

A && ( B || C)
Run Code Online (Sandbox Code Playgroud)

我想我已经把它归结为这个顺序的布尔表达式,

C || B && A
Run Code Online (Sandbox Code Playgroud)

C || B首先计算在哪里,那么结果是AND'd withA

可以将所有布尔表达式成功地转换为顺序布尔表达式吗?(就像我的例子)

Pau*_*aul 5

答案是不:

考虑A || B && C || D哪个有真值表:

A | B | C | D |
0 | 0 | 0 | 0 | 0
0 | 0 | 0 | 1 | 0
0 | 0 | 1 | 0 | 0
0 | 0 | 1 | 1 | 0
0 | 1 | 0 | 0 | 0
0 | 1 | 0 | 1 | 1
0 | 1 | 1 | 0 | 1
0 | 1 | 1 | 1 | 1
1 | 0 | 0 | 0 | 0
1 | 0 | 0 | 1 | 1
1 | 0 | 1 | 0 | 1
1 | 0 | 1 | 1 | 1
1 | 1 | 0 | 0 | 0
1 | 1 | 0 | 1 | 1
1 | 1 | 1 | 0 | 1
1 | 1 | 1 | 1 | 1
Run Code Online (Sandbox Code Playgroud)

如果有可能按顺序进行评估,那么必须有一个最后一个表达式,它将是两种情况之一:

情况1:

X || YY是其中之一A,B,C,D,X是任何顺序布尔表达式.

现在,因为A,B,C,D只要该变量为真,整个表达式为真的位置就没有变量,所以没有:

X || A
X || B
X || C
X || D
Run Code Online (Sandbox Code Playgroud)

可能是表达式中的最后一个操作(对于任何X).

案例2:

X && Y:这Y是其中之一A,B,C,D,X是任何顺序布尔表达式.

现在,因为A,B,C,D只要该变量为false,整个表达式为false的地方就没有变量,所以没有:

X && A
X && B
X && C
X && D
Run Code Online (Sandbox Code Playgroud)

可能是表达式中的最后一个操作(对于任何X).

因此你不能这样写(A || B) && (C || D).


你能够为某些表达式执行此操作的原因,例如:A && ( B || C)成为C || B && A是因为该表达式可以通过具有以上两个属性之一的表达式递归构建:

IE浏览器.

真值表A && ( B || C)是:

A | B | C |
0 | 0 | 0 | 0
0 | 0 | 1 | 0
0 | 1 | 0 | 0
0 | 1 | 1 | 0
1 | 0 | 0 | 0
1 | 0 | 1 | 1
1 | 1 | 0 | 1
1 | 1 | 1 | 1
Run Code Online (Sandbox Code Playgroud)

我们可以很快看到它的属性,只要A为0,它就是假的X && A.所以我们的表达式可能是.

然后我们从事实表中取出A并仅查看A为1的行是原始的:

B | C
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 1
Run Code Online (Sandbox Code Playgroud)

只要B为1(或C,我们可以在这里选择),它具有真实性.所以我们可以把表达式写成

X || B 整个表达成为 X || B && A

然后我们再次将表减少到B为0的部分,我们得到:

C
0 | 0
1 | 1
Run Code Online (Sandbox Code Playgroud)

X只是C.所以最后的表达是 C || B && A