命题逻辑推理
实验二 命题逻辑推理
【实验目的】加深对命题逻辑推理方法的理解。 【实验内容】用命题逻辑推理的方法解决逻辑推理问题。
实验用例:根据下面的命题,试用逻辑推理方法确定谁是作案者,写出推理过程。
1. 营业员A或B偷了手表;
2. 若A作案,则作案不在营业时间;
3. 若B提供的证据正确,则货柜末上锁;
4. 若B提供的证据不正确,则作案发生在营业时间;
5. 货柜上了锁。 \
【实验原理和方法】
- (1)符号化上面的命题,将它们作为条件,营业员A偷了手表作为结论,得一个复合命题。
- (2)将复合命题中要用到的联结词定义成C语言中的函数,用变量表示相应的命题变元。将复合命题写成一个函数表达式。
- (3)函数表达式中的变量赋初值1。如果函数表达式的值为1,则结论有效, A偷了手表,否则是B偷了手表。
用命题题变元表示:
- A:营业员A偷了手表
- B:营业员B偷了手表
- C:作案不在营业时间
- D:B提供的证据正确
- E:货柜末上锁
则上面的命题符号化为
- (A||B) && (!A||C) && (!D||E) && (D||!C) && !E
要求找到满足上面式子的变元A,B的指派便是结果。
#include<stdio.h>
int main()
{
int A,B,C,D,E;
for(A=0;A<=1;A++)
for(B=0;B<=1;B++)
for(C=0;C<=1;C++)
for(D=0;D<=1;D++)
for(E=0;E<=1;E++)
//(A || B)A作案或者b作案
//(!A || C)A没有作案或者作案不在营业时间
//(!D || E)B提供的证据不正确或者货柜未上锁
//(D || !C)B提供的证据正确或作案在营业时间
// !E货柜上锁了
if((A || B) && (!A || C) && (!D || E) && (D || !C) && !E)
printf("A:%d,B:%d",A,B);
}
运行结果 A=0,B=1