討論鎖和鑰匙問題 |
送交者: zhf 2020年10月02日12:51:45 於 [靈機一動] 發送悄悄話 |
鎖和鑰匙問題 A盒子裡有n把鎖。每個鎖都有產品號。B盒子裡有m個錢包,每個錢包里最多有一把鑰匙。每個鑰匙都有產品號。現在定義命題S: 對於A盒子裡的任意一把鎖,在B盒子裡,都存在一個錢包,當這個錢包里有鑰匙且鑰匙產品號大於這把鎖的產品號時,鑰匙能開這把鎖。 這樣S為真。請定義S 的逆命題。自然語言,邏輯語言均可。 解: 用Li表示A盒子裡的第i把鎖,Li.#表示鎖頭產品號,pj表示B盒子裡的第j個錢包,pj.e表示該錢包里沒有鑰匙,pj.k表示該錢包里有鑰匙,pj.k.#表示該鑰匙在的產品號,pj.k[Li]表示該鑰匙能打開第i把鎖,->表示推出。 先寫出 “對於第i把鎖,在B盒子裡的錢包j, 當這個錢包里有鑰匙且鑰匙產品號大於這把鎖的產品號時,鑰匙能開這把鎖”的邏輯表達式: (pj.k)(pj.k.#>Li.#)-> pj.k[Li] (1) 再寫出”對於第i把鎖,在B盒子裡,都存在一個錢包,當這個錢包里有鑰匙且鑰匙產品號大於這把鎖的產品號時,鑰匙能開這把鎖”的邏輯表達式: OR(j=1,m)[(pj.k)(pj.k.#>Li.#)-> pj.k[Li]] (2) 這是在(1)的基礎上對下標j求OR。OR的意思是只要一個變量為真,整體就為真。 現在寫出”對於A盒子裡的任意一把鎖,在B盒子裡,都存在一個錢包,當這個錢包里有鑰匙且鑰匙產品號大於這把鎖的產品號時,鑰匙能開這把鎖”的邏輯表達式: S= AND(i =1,n)[OR(j=1,m)[(pj.k)(pj.k.#>Li.#)-> pj.k[Li]]] (3) 這是在(2)的基礎上對下標i 求AND。AND的意思是所有變量為真,整體才為真。 對S求逆 NOT(S)= OR(i =1,n)[AND(j=1,m) NOT [(pj.k)(pj.k.#>Li.#)-> pj.k[Li]]] = OR(i =1,n)[AND(j=1,m)[(pj.k)(pj.k.#>Li.#) NOT(pj.k[Li])]] 用自然語言敘述就是: 在A盒子裡,存在一把鎖,對於B盒子裡的所有錢包,雖然這個錢包里有鑰匙且鑰匙產品號大於這把鎖的產品號,但這鑰匙仍然不能打開這把鎖。 |
|
|
|
實用資訊 | |