讨论锁和钥匙问题 |
送交者: 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盒子里的所有钱包,虽然这个钱包里有钥匙且钥匙产品号大于这把锁的产品号,但这钥匙仍然不能打开这把锁。 |
|
|
|
实用资讯 | |