TLA+ hyperbook读书笔记--Chapter 13 Arithmetic and Logic

声明:本人刚开始接触形式化验证相关技术TLA+,该文档仅为本人以后复习之用,不保证内容的正确性。该文也是本人向大牛请教的一种形式(文章表达我的个人理解,并给出不解之处),欢迎相关大牛指点。

注:文中的英文名词是需要理解的概念,故文中保留英文以减少个人理解导致的语义误差。

翻译部分

13.1 Arithmetic

一般的数字(如2,3,4)和小数(如3.14)属于TLA+内置的符号,TLA+中标准的算数运算符已经定义在Integers模块中:

    + 加,- 减,* 乘,^ 指数

该模块还定义了如下的非等关系:

    < 小于,> 大于,<= 小于等于,>= 大于等于

Integers模块还定义了如下符号:

    Int 整数集,Nat 自然数集, ..  这个符号表示一个区间,例如 2..5 表示集合{2,3,4,5}

但是,Integers模块中未定义一般的除法运算符(/),因为两个数相除的结果可能不为整数,Integers模块无法处理非证书。但是,Integers模块定义了如下两个运算符:

    ÷ 不同于一般数学中的除法运算,该运算符的结果是两个数相除的整数部分

    % 为两个数求余,即两个数相除的剩余部分(如 3 %2 = 1)

针对传统的除法运算符(/)TLA+中的Reals模块中给出了定义,然而,TLC工具无法处理/和非整数的数值。此外,TLA+中还有Naturals模块定义了自然数集,但其中不提供负号(-)。

13.2 Mathematical Logic(数学逻辑 or 数字逻辑)

刚开始的时候,数字仅仅作为修饰符(modifier)使用。人们所说的2只羊,3头猪。当其中的2和3变成名词的时候,数学家们诞生了。两个名词之间加上中间的运算符结果还是名词,如:(名词)(运算符)(名词)1+1 还是一个名词。

开始的时候等式就是句子,等号是动词,如  (主语)(动词)(宾语)(1+1) =  2

在数字逻辑中,等式是名词,等号是运算符(就像加号一样)。

正如名词1 + 1命名数字2,名词1 + 1 = 2命名值为真。 名词1 + 1 = 3将值命名为假。

这里的真和假被称为真值(truth values)或布尔值(Booleans)。真值对应着数字逻辑,而数字对应着算数。因为真值仅仅有两个取值,所以其相对简单。

1+1=2断言(assert)公式(formula)(也称为名词)1+1=2为真。常被数学家写为

                                                                 |- 1+1=2

其中,|- F表示F为Theorem。(这里的 |- 见书中所示,因为无法输入所以以此符号代替)。但是很多数学家将1+1=2用来表示formula和assertion,这时就需要根据上下文来判断1+1=2真正的语义了。

很多数学家认为所有的数学表达式都是句子,将1+1读做“1加上1”,他们认为1+1=2是用来断言“1加上1得到2”,但是这样的想法常常束缚了使用数学思维思考问题的空间。如Formula

1+1/2+1/4+1/8+... = 2

这个Formula使用来断言无限多次运算后的结果。然而,如果要在无限的运算上进行推理将很困难。

(这里是啥意思呢?不是很明白)

13.3 Propositional Logic(命题逻辑)

命题逻辑主要是学习Booleans上的简单运算,就像数字的加减乘除。命题逻辑中使用到的5个运算符如下面小结。

13.3.1 ∧ 和 ∨

    ∧   逻辑与 同真为真,其它为假

    ∨   逻辑或 同假为假,其它为真

13.3.2 另外3个运算符

    ⇒  Implication,读做implies(隐含)   a ⇒ b 

    ≡   Equivalence,也写为⇔,读做is equivalent to(等价于)a ≡ b

    ¬   Negation, 读做 not(非)¬a

前两个是中缀操作符(binary (infix) operators),后一个是前缀操作符(unary (prefix) operator)。

(针对我个人,下面的描述有点难以理解)

\***********************************************************************************************

TRUE ⇒ FALSE;TRUE ⇒ TRUE;  FALSE ⇒ TRUE;  FALSE ⇒ FALSE

这4个Formula对应的真值情况分别是FALSE,TRUE,TRUE,TRUE

最不好理解的是FALSE ⇒ TRUE和FALSE ⇒ FALSE,尤其是FALSE ⇒ TRUE。

                                        (1 > 5) ⇒ (1 > 3)为TRUE  ????

举个例子,我说一句“如果是女生(P),那么请举手(Q)”。

(1)你是女生(P=TRUE),你举手了(Q=TRUE)。我说的没错(P⇒Q为真);

(2)你是女生(P=TRUE),你没举手(Q=FALSE)。我说错了(P⇒Q为假);

(3)你是男生(P=FALSE),你举手了(Q=TRUE)。我说的没错(P⇒Q为真);

(4)你是男生(P=FALSE),你没举手(Q=FALSE)。我说的没错(P⇒Q为真);

(3)(4)中你没有理由说我说的是错的。因为我本来就没考虑男生的情况。也就是说我说这句话的时候,我已经潜意识中意识到男生可能举手或者不举手。换一种理解就是,前提不正确的情况下,你咋弄都成。(尽管我这样说服自己,但是内心仍然糊涂..................,高手请指点!!!!!!!!!!!!!!!!)

***********************************************************************************************/

13.4 Predicate Logic(谓词逻辑)

谓词逻辑通过扩展了两个运算符(quantifiers)对Propositional Logic(命题逻辑)进行了扩展。

∀  universal quantifier,读做for all(对于所有的)。Formula ∀ x ∈ S : P (x )本质上是关于所有x满足x ∈ S的P(x)的逻辑与(∧)连接。例如∀ i ∈ {1, 2, 3} : i*i > i相当与(1*1>1)∧(2*2>2)∧(3*3>2)

该formula的值为假。当且进当所有的x都满足P(x)为真时,该formula才为真。同样,如果我们说∀ num ∈ Nat : num + 1 > num为真,那就时assert这个formula对所有的num ∈ Nat都有num + 1 > num为真。

∃  existential quantifier,读做there exists(存在)。该运算符其实是关于∨逻辑或的连接。

这两个两次之间是有联系的,它们遵守以下两个tautologies(恒真命题,任何情况下都为真)。

    ¬(∀ x ∈ S : P (x )) ≡ ∃ x ∈ S : ¬P (x ) “不是所有的x ∈ S都满足P (x )为真”等价于“存在至少一个x∈ S不满足P (x )”。

    ¬(∃ x ∈ S : P (x )) ≡ ∀ x ∈ S : ¬P (x ) “不存在x ∈ S 满足P (x)”等价于“对于所有的x ∈ S都不满足 P (x)”。

这里的x可能情况都被限制在集合S中(即x ∈ S),这时候称∀ 和 ∃有界(bounded)。∀ x : P (x ) 和∃ x : P (x )写时称∀ 和 ∃无界(unbounded)。同样,有界和无界可以通过一下两个tautologies(恒真命题,任何情况下都为真)进行联系。

    (∀ x ∈ S : P (x )) ≡ (∀ x : (x ∈ S ) ⇒ P (x ))

    (∃ x ∈ S : P (x )) ≡ (∃ x : (x ∈ S ) ∧ P (x ))

下面来找错:

    Foo == ∀ x ∈ S : P ∧ ∀ x ∈ T : Q  这个formula是不正确的

提示:Foo = ∀ x ∈ S : (P ∧ ∀ x ∈ T : Q),其中==表示define,即用==右边的表示==左边的。

一个问题:

 formula ∀ x ∈ S : P中,S是否可以包含符号x?提示:考虑∀ x ∈ S中x的scope。

13.5 The choose Operator

今天先到这,明天接着写。




-----------------------------------------------------------------------------------------------------------------

                                                欢迎志同道合的同志留言交流讨论。

你可能感兴趣的:(TLA+ hyperbook读书笔记--Chapter 13 Arithmetic and Logic)