声明:本人刚开始接触形式化验证相关技术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
今天先到这,明天接着写。
-----------------------------------------------------------------------------------------------------------------
欢迎志同道合的同志留言交流讨论。