學(xué)習(xí) TLA+ - 基礎(chǔ)數(shù)學(xué)知識(shí)

TLA+ 并不是一門很容易掌握的語(yǔ)言,在學(xué)習(xí)之前蒜魄,我們需要了解一些簡(jiǎn)單的數(shù)學(xué)知識(shí)扔亥。這里需要注意,為了打字方便谈为,很多數(shù)學(xué)符號(hào)我直接使用了 ASCII 來(lái)表示旅挤,具體符號(hào)與 ASCII 的對(duì)應(yīng),大家可以參考 TLA+ cheat-sheet

算數(shù)

最基本的整數(shù)算數(shù)運(yùn)算包含在 TLA+ 的 Integers module 里面峦阁,主要就是常用的 +谦铃,-*榔昔,^ 驹闰,% 這些,還包括 >撒会,<嘹朗,>=<= 等诵肛。

Integers module 同時(shí)定義了:

  • Int:所有整數(shù)
  • Nat:所有自然數(shù)
  • ..m..n 表示了從 m 到 n 之間的所有整數(shù)集合

對(duì)于 /屹培,則是在 Real module 里面定義了默穴。Real module 也同時(shí)定義了 Real 用來(lái)表示所有的實(shí)數(shù)。

邏輯

在 TLA+ 里面褪秀,TRUE 表示真蓄诽,而 FALSE 則是假。譬如 1 + 1 = 2 的值是 TRUE媒吗,而 1 + 1 = 3 的值是 FALSE仑氛。

命題邏輯

跟整數(shù)有加減乘除運(yùn)算符一樣,布爾也有相關(guān)的命題邏輯運(yùn)算符闸英,我們需要知道如下 5 個(gè):

  • /\:and锯岖,當(dāng)且只有 F 和 G 都等于 TRUE,F /\ G 等于 TRUE
  • \/:or甫何,當(dāng)且只有 F 或者 G 一個(gè)等于 TRUE(或者都為 TRUE)出吹,F \/ G 等于 TRUE
  • ~:negation,當(dāng)且只有 F 等于 FALSE辙喂,~F 等于 TRUE
  • =>:implication捶牢,當(dāng)且只有 F 等于 FALSE 或者 G 等于 TRUE(或者 F 和 G 都為 TRUE 或者 FALSE),F => G 等于 TRUE
  • <=>:equivalence加派,當(dāng)且只有 F 和 G 都為 TRUE 或者都為 FALSE叫确,F <=> G 等于 TRUE

這里我們可能對(duì) => 的定義感到困惑跳芳,為什么只有 F 為 TRUE 并且 G 為 FALSE 的時(shí)候 F => G 才為 FALSE芍锦,我們可以通過(guò) (n > 5) => (n > 3) 來(lái)說(shuō)明,對(duì)于整數(shù) n 來(lái)說(shuō)飞盆,如果 n 為 6娄琉,n > 5 就是 TRUE,自然 n > 3 也是 TRUE吓歇,也就是 (n > 5) 蘊(yùn)含著 (n > 3)孽水,我們可以將 n 設(shè)置為 1,4 這些值在自行推導(dǎo)城看。

謂語(yǔ)邏輯

在命題邏輯基礎(chǔ)上女气,謂語(yǔ)邏輯擴(kuò)展了兩個(gè)運(yùn)算符,我們叫做量詞测柠。一個(gè)是全稱量詞 \A炼鞠,另一個(gè)則是存在量詞 \E。對(duì)于公式 \A x \in S: P(x) 來(lái)說(shuō)轰胁,在集合 S 里面所有的 x谒主,P(x) 都必須等于 TRUE,那么該公式值才是 TRUE赃阀。而對(duì)于 \E x \in S: P(x) 來(lái)說(shuō)霎肯,只要 S 里面一個(gè) x 存在 P(x) 等于 TRUE,那么該公式的值就是 TRUE。

CHOOSE

CHOOSE 操作符類似于上面說(shuō)的 \E观游。對(duì)于公式 \E x \in S : P(x) 來(lái)說(shuō)搂捧,如果在集合 S 里面存在一個(gè)值 x,滿足 P(x) 為 TRUE懂缕,那么 CHOOSE x \in S : P(x) 就等于這個(gè)值异旧。

當(dāng)使用 CHOOSE 在集合里面選擇了一個(gè)值之后,每次執(zhí)行都會(huì)使用這個(gè)值提佣,譬如對(duì)于 v' = CHOOSE n \in 1..10 : TRUE 來(lái)說(shuō)吮蛹,我們并不知道 CHOOSE 選擇了哪一個(gè)值,沒(méi)準(zhǔn)是 1拌屏,也沒(méi)準(zhǔn)是 10潮针,但我們能夠確定,每次執(zhí)行都會(huì)是這個(gè)值倚喂。如果我們需要每次使用不同的值每篷,可以通過(guò) \E n \in 1..10 : v' = n 來(lái)設(shè)置。

集合

集合應(yīng)該是 TLA+ 的理論基石端圈,一個(gè)集合可能含有有限或者無(wú)限個(gè)數(shù)的元素焦读。譬如所有自然數(shù)集合就是是一個(gè)無(wú)窮集合。集合主要有以下操作:

  • \intersect 或者 \cap:兩個(gè)集合的交集舱权,譬如 {1, 2} \intersect {2, 3} = {2}
  • \union 或者 \cup:兩個(gè)集合的并集矗晃,譬如 {1, 2} \union {2, 3} = {1, 2, 3}
  • \subseteq:一個(gè)集合是否是另一個(gè)集合的子集,譬如 {1, 3} \subseteq {1, 2, 3} 等于 TRUE
  • \:兩個(gè)集合的差集宴倍,譬如 {1, 2, 3} \ {1, 4} = {2, 3}
  • SUBSET:集合的子集张症,譬如 {1, 2} 的子集就是 {{}, {1}, {2}, {1, 2}}
  • UNION:集合的并集,譬如 {{1, 2}, {2, 3}, {3, 4}} 的并集就是 {1, 2, 3, 4}
  • Cardinality(S):有限集合 S 中元素的個(gè)數(shù)
  • IsFiniteSet(S):驗(yàn)證集合 S 是否是有限的還是無(wú)限的

這里我們?cè)谥攸c(diǎn)關(guān)注兩個(gè)集合的構(gòu)造操作符:

  • {x \in S : P(x)}:集合由在 S 中滿足 P(x) 為 TRUE 的元素構(gòu)造鸵贬,譬如 {n \in Nat : n % 2 = 1} 就返回了一個(gè)偶數(shù)集合
  • {e(x) : x \in S}:集合由在 S 中元素通過(guò) e(x) 得到新值構(gòu)造俗他,譬如 {2 * n + 1 : n \in Nat} 就返回了一個(gè)奇數(shù)集合

函數(shù)

TLA+ 里面的函數(shù)跟我們程序里面的函數(shù)意義是不一樣的,反倒有點(diǎn)類似于數(shù)組阔逼,這點(diǎn)一定要注意兆衅。

對(duì)于函數(shù),首先我們需要了解的是值域嗜浮,我們可以認(rèn)為就是程序語(yǔ)言里面數(shù)組的索引集合羡亩,譬如對(duì)于 tuple(一種特殊的函數(shù)來(lái)說(shuō)),DOMAIN <<"a", "b", "c">> 就是一個(gè) 1..3 的集合周伦。

如果 f 是一個(gè)函數(shù)夕春,而 x 是 f 值域里面的一個(gè)元素,f[x] 就表示的將 f 應(yīng)用到 x 上面专挪。對(duì)于上面的 tuple及志,<<"a", "b", "c">>[2] 就會(huì)得到 "b"片排,而 <<"a", "b", "c">>[4] 則會(huì)報(bào)錯(cuò)。

我們可以通過(guò) [x \in S |-> e]構(gòu)造任意值域的函數(shù)速侈,這里仍然先以 tuple 為例率寡, tuple,一種特殊的函數(shù)倚搬,它的值域就是集合 1..n冶共,n 為 tuple 的個(gè)數(shù)。譬如 tuple 可以寫成 [ i \in 1..3 |-> i - 7]每界,這個(gè)就會(huì)得到 tuple <<-6, -5, -4>>捅僵,然后我們可以使用 <<-6, -5, -4>>[1] 得到 -6 了。

我們?cè)賮?lái)看一個(gè)更通用的例子眨层,[i \in {2, 4, 6, 8} |-> i - 42][4] 庙楚,這里我們得到的值是 4 - 42,也就是 38趴樱。

當(dāng)一個(gè)函數(shù) f 的值域在 S馒闷,并且 f[x] 在集合 T 里面,我們就可以用 [S -> T] 來(lái)表示所有這樣函數(shù)的集合叁征。

我們也可以使用 EXCEPT 來(lái)構(gòu)造另一個(gè)函數(shù)纳账,對(duì)于公式 [f EXCEPT ![e1] = e2] 表示新的函數(shù) f’ 等于 f 除了 f'[e1] = e2。我們也可以使用 @ 來(lái)表示 f[e1]捺疼,譬如 f' = [f EXCEPT ![e1] = f[e1] + 1 中疏虫,我們就可以寫成 f' = [f EXCEPT ![e1] = @ + 1

小結(jié)

可以看到,TLA+ 需要的數(shù)學(xué)知識(shí)其實(shí)就是最基本的四則運(yùn)算帅涂,布爾代數(shù)议薪,集合論相關(guān)的尤蛮。當(dāng)然媳友,還有很多運(yùn)算符這里沒(méi)有提到,后面實(shí)際例子的時(shí)候我們繼續(xù)詳細(xì)說(shuō)明产捞。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末醇锚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子坯临,更是在濱河造成了極大的恐慌焊唬,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件看靠,死亡現(xiàn)場(chǎng)離奇詭異赶促,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)挟炬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門鸥滨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)嗦哆,“玉大人,你說(shuō)我怎么就攤上這事婿滓±纤伲” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵凸主,是天一觀的道長(zhǎng)橘券。 經(jīng)常有香客問(wèn)我,道長(zhǎng)卿吐,這世上最難降的妖魔是什么旁舰? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮嗡官,結(jié)果婚禮上鬓梅,老公的妹妹穿的比我還像新娘。我一直安慰自己谨湘,他們只是感情好绽快,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著紧阔,像睡著了一般坊罢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上擅耽,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天活孩,我揣著相機(jī)與錄音,去河邊找鬼乖仇。 笑死憾儒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的乃沙。 我是一名探鬼主播起趾,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼警儒!你這毒婦竟也來(lái)了训裆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蜀铲,失蹤者是張志新(化名)和其女友劉穎边琉,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體记劝,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡变姨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了厌丑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片定欧。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡别伏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出忧额,到底是詐尸還是另有隱情厘肮,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布睦番,位于F島的核電站类茂,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏托嚣。R本人自食惡果不足惜巩检,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望示启。 院中可真熱鬧兢哭,春花似錦、人聲如沸夫嗓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)舍咖。三九已至矩父,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間排霉,已是汗流浹背窍株。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留攻柠,地道東北人球订。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像瑰钮,于是被迫代替她去往敵國(guó)和親冒滩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理飞涂,服務(wù)發(fā)現(xiàn)旦部,斷路器,智...
    卡卡羅2017閱讀 134,651評(píng)論 18 139
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問(wèn)題, 分享了一些自己做題目的經(jīng)驗(yàn)较店。 張土汪:刷leetcod...
    土汪閱讀 12,743評(píng)論 0 33
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 6,401評(píng)論 0 17
  • 如今真真感受到容燕,自己投入了而別人不以為意的失落梁呈。
    jasmone閱讀 211評(píng)論 0 0
  • 總有個(gè)人讓你傾獻(xiàn)心中所有的鮮花~
    寒風(fēng)豹影閱讀 80評(píng)論 0 0