TLA+ 《Specifying Systems》翻译初稿——Section 1.1 Propositional Logic(命题逻辑)

本节要点

  • 命题逻辑的5种基本运算( , , ¬ , , \wedge,\vee,\neg,\Rightarrow,\equiv )的定义,优先级及性质(结合律,分配率)
  • 命题逻辑重言式及真值表的运用

初等代数是研究实数及其四则运算+、-、*(乘) 和 /(除)的数学。命题逻辑是研究两个布尔值TRUE和FALSE及其5种运算的数学分支,这5种运算分别是:

 符号   英文名   中文名   英文通称   中文通称  c o n j u n c t i o n a n d d i s j u n c t i o n o r ¬ n e g a t i o n n o t i m p l i c a t i o n i m p l i e s e q u i v a l e n c e is equivalent to \begin{array}{c|c|c|c|c} \text{ 符号 } & \text{ 英文名 } & \text{ 中文名 } & \text{ 英文通称 } & \text{ 中文通称 }\\ \hline \wedge&conjunction &合取词&and & 与 \\ \vee&disjunction&析取词&or & 或 \\ \neg&negation&否定词&not & 非 \\ \Rightarrow&implication&蕴含词&implies & 隐含了 \\ \equiv&equivalence&等价词&\text{is equivalent to} & 相当于 \\ \end{array}

为了学习如何用数字计算,你必须记住加法和乘法表以及用多位数字计算的算法。命题逻辑要简单得多,因为只有两个值,TRUE和FALSE。要学习如何计算这些值,你只需要知道以下5个布尔运算符的定义:

F G \wedge \quad F \wedge G 为真 当且仅当 F F G G 都为真。
F G \vee \quad F \vee G 为真 当且仅当 F F G G 有一个为真 或者都为真。
¬ ¬ F \neg \quad \neg F 为真 当且仅当 F F 为假。
F G \Rightarrow \quad F \Rightarrow G 为真 当且仅当 F F 为假 或者 G G 为真,或者都为真。
F G \equiv \quad F \equiv G 为真 当且仅当 F F G G 都为真或者都为假。

我们也可以用真值表来描述这些运算符。下面这个真值表给出了 F G F \Rightarrow G 对于 F F G G 的所有四种真值组合的值:
F G F G TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE TRUE FALSE FALSE TRUE \begin{array}{|c|c||c|} \hline F & G & F \Rightarrow G \\ \hline \text{TRUE} & \text{TRUE}& \text{TRUE}\\\hline \text{TRUE} & \text{FALSE}& \text{FALSE}\\\hline \text{FALSE} & \text{TRUE}& \text{TRUE}\\\hline \text{FALSE} & \text{FALSE}& \text{TRUE}\\\hline \end{array}

公式 F G F \Rightarrow G 声明, F F 蕴含了 G G ,也就是说, F G F \Rightarrow G 为真当且仅当语句"F蕴含了G"为真。人们常常对“蕴含”这个词的定义感到困惑,他们不明白为什么 FALSE TRUE \text{FALSE} \Rightarrow \text{TRUE} FALSE FALSE \text{FALSE} \Rightarrow \text{FALSE} 都为真。解释其实很简单,在我们认知中,如果 n n 大于3,那么它应该大于1,所以 n > 3 n > 3 就意味着 n > 1 n > 1 。因此,公式 ( n > 3 ) ( n > 1 ) (n > 3) \Rightarrow (n > 1) 应该等于TRUE。在这个公式中用 4 , 2 , 0 4,2,0 分别代入 n n , 得到 ( 4 > 3 ) ( 4 > 1 ) (4 > 3) \Rightarrow (4 > 1) ( 2 > 3 ) ( 2 > 1 ) (2 > 3) \Rightarrow (2 > 1) ( 0 > 3 ) ( 0 > 1 ) (0 > 3) \Rightarrow (0 > 1) 都为真,这可以解释为什么 F G F \Rightarrow G 意味着 F F 蕴含了 G G ,或者等价地,如果 F F 为真,那么 G G 为真。

等价运算符 \equiv 只用于布尔等式中。我们可以用 = = 代替 \equiv 但不能反过来。(例如我们可以写 FALSE ¬ TRUE \text{FALSE} \equiv \neg \text{TRUE} ,但不能写 2 + 2 4 2+2 \equiv 4 )。在布尔表达式中用 \equiv 代替 = = 表述会比较清晰。

就像代数公式一样,命题逻辑公式由数值、运算符和代表值的标识符(如 x x )组成。不过,命题逻辑公式只能使用 TRUE \text{TRUE} TRUE \text{TRUE} 这2个值,以及5个布尔运算符( , , ¬ , , \wedge,\vee,\neg,\Rightarrow,\equiv )。在代数公式中,*与+相比,具有更高的优先级(结合更紧密),因此 x = y z x=y*z 表示 x = ( y z ) x=(y*z) 。类似地,在命题逻辑公式中, ¬ \neg 的优先级比 , \wedge,\vee 高,而 , \wedge,\vee 的优先级又比 , \Rightarrow,\equiv 高,所以 ¬ F G H \neg F \wedge G \Rightarrow H 表示 ( ( ¬ F ) G ) H ((\neg F) \wedge G) \Rightarrow H 。其他数学运算符如 + + > > 的优先级高于命题逻辑运算符,所以 n > 0 n 1 0 n>0\Rightarrow n-1 \geq 0 表示 ( n > 0 ) ( n 1 0 ) (n>0)\Rightarrow (n-1 \geq 0) 。多余的括号不会影响反而会更有助于阅读理解公式,如果你对是否需要括号有一点怀疑,那么就使用它们。

运算符 \wedge \vee 是满足结合率的,就像 + + * 一样。 + + 满足结合率意味着 x + ( y + z ) = ( x + y ) + z x + (y + z) = (x + y) + z ,所以我们可以不用括号来写 x + y + z x + y + z 。类似地, \wedge \vee 的结合律让我们写出 F G H F \wedge G \wedge H 或者 F G H F \vee G \vee H 。类似 + + * ,运算符 \wedge \vee 也是满足交换律的,所以 F G F \wedge G 等价于 G F G \wedge F F G F \vee G 等价于 G F G \vee F

为了确定公式 ( x = 2 ) ( x + 1 = 3 ) (x=2)\Rightarrow(x+1=3) 为真,我们必须理解算术的一些基本性质。然而,我们可以说 ( x = 2 ) ( x = 2 ) ( y > 7 ) (x = 2)\Rightarrow (x = 2) \vee (y > 7) 为真,即使我们对数字一无所知。这个公式为真,因为 F F G F\Rightarrow F \vee G 为真,不论 F F G G 是什么公式。换句话说, F F G F\Rightarrow F \vee G 对于其标识符 F F G G 的所有可能取值都为真。这种公式称为重言式。

一般来说,命题逻辑重言式是对于其标识符的任何可能取值都为真的命题逻辑公式。像这样简单的重言式和基于数字的简单代数性质一样明显。重言式 F F G F\Rightarrow F \vee G 为真,对于所有非负数x和y, x x + y x\leq x+y 为真,两者是一样显而易见的。一个人可以通过计算,从简单的重言式推导出复杂的重言式,也可以从简单的数字运算推导出复杂的数学性质,两者是一样的思维过程。但是,这都需要练习,您可能花了数年的时间学习如何计算数值表达式,例如,推导 x x + y x\leq -x+y 2 x y 2*x \leq y 等价, 但您可能还没开始学如何推导 ¬ F G \neg F \vee G F G F \Rightarrow G 等价。

如果你还没有学会如何计算布尔值表达式,可能得靠掰手指来计算。你可能得通过遍历布尔值变量的所有可能取值,并计算公式是否相等,来检查该公式是否是重言式。上述操作最好通过构造一个真值表来完成,该真值表列出变量可能的取值并给出所有子公式的对应值。例如,下面的真值表显示 ( F G ) ( ¬ F G ) (F \Rightarrow G)\equiv (\neg F \vee G) 是重言式。
F G F G ¬ F ¬ F G ( F G ) ¬ F G TRUE TRUE TRUE FALSE TRUE TRUE TRUE FALSE FALSE FALSE FALSE TRUE FALSE TRUE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE TRUE TRUE \begin{array}{|c|c||c|c|c|c|} \hline F & G & F \Rightarrow G & \neg F & \neg F\vee G & (F \Rightarrow G)\equiv \neg F \vee G \\ \hline \text{TRUE} & \text{TRUE}& \text{TRUE}& \text{FALSE}& \text{TRUE}& \text{TRUE} \\\hline \text{TRUE} & \text{FALSE}& \text{FALSE}& \text{FALSE}& \text{FALSE}& \text{TRUE}\\\hline \text{FALSE} & \text{TRUE}& \text{TRUE} & \text{TRUE}& \text{TRUE}& \text{TRUE}\\\hline \text{FALSE} & \text{FALSE}& \text{TRUE}& \text{TRUE}& \text{TRUE}& \text{TRUE}\\\hline \end{array}
编写真值表是提高对命题逻辑的理解的好方法。但是,在进行这种计算方面,计算机要比人类做得更好。在第14章第261页上有说明如何使用TLC模型检查器来验证命题逻辑重言式和执行其他TLA +计算。

发布了4 篇原创文章 · 获赞 1 · 访问量 5524

猜你喜欢

转载自blog.csdn.net/robinhzp/article/details/103592468