主合取范式

合集下载

离散数学-产生主析取与主合取范式程序代码

离散数学-产生主析取与主合取范式程序代码

产生主析取与主合取范式测试结果:输入a&b|c输出结果代码://离散程序2- 产生主析取范式和主合取范式#include<stdio.h>#include<string.h>char s[100],res[100],stc[100],b[26]; //s为公式;res记录后缀表达式;stc为栈;int a[26],c[100],top=0,len,r=0,ss[50]; //a纪录字母是否出现, c记录0,1; len代表公式的长度,r为后缀表达式长度int f(char cc,char ccc) // 验证字母与操作之间是否正确{if( !(cc==')'||cc=='('||cc=='~'||cc=='!'||cc=='&'||cc=='|'||(cc<='z'&&cc>='a') ) )return 0;if( !(ccc==')'||ccc=='('||ccc=='~'||ccc=='!'||ccc=='&'||ccc=='|'|| (ccc<='z'&&ccc>='a') ) )return 0;if( (cc<='z'&&cc>='a') && (ccc=='!'||ccc<='z'&&ccc>='a') )return 0;if( (cc=='(' )&& (ccc==')'||ccc=='~'||ccc=='&'||ccc=='|') )return 0;if( (cc==')')&&(ccc=='!'||ccc<='z'&&ccc>='a') ) return 0;if( (cc=='~'||cc=='!'||cc=='&'||cc=='|')&&(ccc=='~'||ccc=='&'||ccc=='|' ||ccc==')') ) return 0;return 1;}int push(char cc) //压栈{stc[top++]=cc;}char pop() //出栈{return stc[--top];}int compare(char cc,char ccc){ // printf("*");if(cc=='!'&&(ccc=='&'||ccc=='|'||ccc=='~')) return 1;else if(cc=='&'&&(ccc=='|'||ccc=='~') )return 1;else if(cc==ccc)return 1;else if( (cc=='~'&&ccc=='|')||(cc=='|'&&ccc=='~') )return 1;else return 0;}void solve() //求逆波兰式{int i;char cc;for(i=0;i<len;i++){ //printf("*");if(s[i]<='z'&&s[i]>='a')res[r++]=s[i];else{switch(s[i]){case '(': push(s[i]);break;case ')': cc=pop();while(cc!='('){res[r++]=cc;cc=pop();}break;default: while( top>=1&&compare(stc[top-1],s[i]) ){res[r++]=stc[--top];}push(s[i]);}}}for(i=top-1;i>=0;i--)res[r++]=stc[i];res[r]='\0';// printf("逆波兰式:%s\n",res);}int f1(int i) //求!if(i==1)return 0;else return 1;}int f2(int i,int j) //求|{return i>j?i:j;}int f3(int i,int j) //求& {return i*j;}int f4(int i,int j) //求~{if(i==0)return 1;else if(i==1&&j==1)return 1;else return 0;}int main()int i,j,flag,rr=0,h=0,hh=0,len2=0; // flag代表公式是否正确printf("公式中字母请用小写,或用|,和用&,非用!,蕴含联结词->用~,空格不允许:如p|q&(r~q)\n");while(1){printf("请输入公式:\n");gets(s);len=strlen(s);flag=0;int aa=0; // 验证括号是否匹配for(i=0;i<len;i++){if(s[i]=='(')aa++;if(s[i]==')')aa--;if(aa<0){flag=1;break;}}if(aa!=0)flag=1;if(flag){printf("输入公式有错误,需重输\n");continue;}for(i=0;i<len-1;i++) // 验证字母与操作之间是否正确if( !f(s[i],s[i+1]) ){flag=1;break;}if( !(s[0]<='z'&&s[0]>='a' ||s[0]=='!' ||s[0]=='(') )flag=1;if(!(s[i]<='z'&&s[i]>='a'||s[i]==')') )flag=1;if(flag){printf("输入公式有错误,需重输\n");continue;}int k=0; // k记录字母总数for(i=0;i<len;i++)if(s[i]<='z'&&s[i]>='a'&&a[s[i]-'a']==0){a[s[i]-'a']=++k;b[k]=s[i];}solve();printf("主析取范式:\n");//求主析取范式len2=strlen(res);h=0;while(!c[k+1]){rr=0;for(i=0;i<len2;i++)if( !(res[i]>='a'&&res[i]<='z') ){if(res[i]=='!')ss[rr-1]=f1(ss[rr-1]);if(res[i]=='|'){ss[rr-2]=f2(ss[rr-2],ss[rr-1]);rr--;}if(res[i]=='&'){ss[rr-2]=f3(ss[rr-2],ss[rr-1]);rr--;}if(res[i]=='~'){ss[rr-2]=f4(ss[rr-2],ss[rr-1]);rr--;}}else ss[rr++]=c[a[res[i]-'a']];hh=0;if(ss[0]){if(h)printf("∨");printf("(");for(i=1;i<=k;i++){if(hh)printf("∧");if(c[a[b[i]-'a']]==0)printf("﹁%c",b[i]);else printf("%c",b[i]);hh++;}printf(")");h++;}c[1]++;for(i=1;i<=k;i++)if(c[i]>1){c[i]=0;c[i+1]++;}}printf("\n");printf("主合取范式:\n"); //求主合取范式for(i=1;i<=k+1;i++)c[i]=0;h=0;while(!c[k+1]){rr=0;for(i=0;i<len2;i++)if( !(res[i]>='a'&&res[i]<='z') ){if(res[i]=='!')ss[rr-1]=f1(ss[rr-1]);if(res[i]=='|'){ss[rr-2]=f2(ss[rr-2],ss[rr-1]);rr--;}if(res[i]=='&'){ss[rr-2]=f3(ss[rr-2],ss[rr-1]);rr--;}if(res[i]=='~'){ss[rr-2]=f4(ss[rr-2],ss[rr-1]);rr--;}}else ss[rr++]=c[a[res[i]-'a']];hh=0;if(!ss[0]){if(h)printf("∧");printf("(");for(i=1;i<=k;i++){if(hh)printf("∨");if(c[a[b[i]-'a']]==0)printf("%c",b[i]);else printf("﹁%c",b[i]);hh++;}printf(")");h++;}c[1]++;for(i=1;i<=k;i++)if(c[i]>1){c[i]=0;c[i+1]++;}}printf("\n");for(i=1;i<=k+1;i++)c[i]=0;for(i=0;i<=25;i++){a[i]=0;b[i]=0;}top=0;r=0;printf("\n");// if(!flag)printf("yes\n");}return 0;}。

离散数学14.主合取范式

离散数学14.主合取范式
M0∧M1式(R∧R)形式 补R.用分配律等公式加以整理.
例2 求((PQ)R)P的主合取范式. 解: 原式 ((P∨Q)∨R)∨P (P∨Q)∧(R∨P ) (合取范式) ((P∨Q)∨(R∧R ))∧((R∨P )∨(Q∧Q)) (P∨Q∨R)∧(P∨Q∨R)∧(P∨Q∨R)∧ (P∨Q∨R) (P∨Q∨R)∧(P∨Q∨R)∧(P∨Q∨R) (主合取范式)
⑶用“∧”联结上述大项,即可.
例1 求 PQ和PQ的主合取范式
P Q PQ PQ
FF T
T
FT T
F
TF F
F
TT T
T
PQ M2 P∨Q PQ M1∧M2
(P∨Q )∧(P∨Q)
方法2:用公式的等价变换 ⑴先写出给定公式的合取范式
A1∧A2∧...∧An . ⑵除去合取范式中的所有为永真的合取项. ⑶合并相同的析取项和相同的变元. (4)为使每个Ai变成大项,对缺少变元的析取式Ai补全变
主合取范式
主合取范式
1.定义:给定的命题公式,如果有一个等价公式, 它仅由大项的合取所组成,则该等价式称作原式的主 合取范式.
2.主合取范式的求法 方法1:列真值表 ⑴列出给定公式的真值表. ⑵找出真值表中每个“F”对应的大项.
如何根据一组指派写对应的为“F”的大项:如果变 元P被指派为F,P在大项中以P形式出现;如变元P被指 派为T,P在大项中以P形式出现(确保该大项为F).

利用真值表求主合取范式

利用真值表求主合取范式

利用真值表求主合取范式
1、把变量的各种可能取值与想对应的函数值,用表格的形式一一列举出来,这种表格就叫做真值表。

2、设一个变量均有0、1两种可能取值,n个变量共有2n种可能,将它们按顺序(一般按二进制数递增规律)排列起来,同时在相应位置上写上逻辑函数的值,便可得到该逻辑函数的真值表。

3、例如:逻辑函数的Y=AB+BC+CA的真值表如下:真值表以表格的形式表示逻辑函数,其优点是直观明了。

4、输入变量取值一旦确定,即可以从表中查出相应的函数值。

5、所以,在许多数字集成电路手册中,常常以不同形式的真值表,给出器件的逻辑功能。

6、另外,在把一个实际逻辑问题,抽象成为数学表达形式时,使用真值表是最方便的。

7、所以,在数字电路逻辑设计过程中,第一步就是要列出真值表;在分析数字电路逻辑功能时,最后也要列出真值表。

8、但是,真值表也有一些缺点:首先,难以对其使用逻辑代数的公式和定理进行运算和变换;其次,当变量比较多时,列真值表会十分繁琐。

实验一利用真值表法求取主析取范式以及主合取范式的实现

实验一利用真值表法求取主析取范式以及主合取范式的实现
函数递归计算各种赋值情况下b的取值
联接词运算符定义
cal(b, s): switch b[s] case…(!...&…|…>…-…)
基本思路参考
!: b[s+1]=!b[s] &: b[s+1]=b[s-1]&b[s+1] … 若下标s+2 超出表达式长,则返回b[s+1],
规范列出所输合式公式的真值表 给出相应主析取和主合取范式
基本思路参考
可用字符数组a记录输入的合式公式(!表示;& 表示;|表示;>表示;-表示)
多重循环显示真值表(1表示T,0表示F,先1后0) 并对公式进行相应赋值得数组b
assign(a, i, j, k): switch a[s] case…(!&|>-: b[s]=a[s]; ‘P’-i; ‘Q’-j; ‘R’-k)
实验目的:通过编程实现主析取范式以及主合 取范式的真值表求法以巩固相关理论的掌握
实验类型:验证 实验学时:4 实验环境:Windows+VC
实验内容
编程实现用真值表法求取含三个以内变量的 合式公式的主析取范式和主合取范式
要求:
从屏幕输入含三个以内变量的合式公式(其中 联结词按照从高到底的顺序出现)
否则返回cal(b, s+2)

?从屏幕输入含三个以内变量的合式公式其中联结词按照从高到底的顺序出现?规范列出所输合式公式的真值表?给出相应主析取和主合取范式基本思路参考?可用字符数组a记录输入的合式公式
实验一
利用真值表法求取主析取范式 以及主合取范式的实现
9月23日周一晚10-12 教2-216

离散数学14.主合取范式

离散数学14.主合取范式
课程资源
参考书目,网上教学视频,网络微课。
教学过程:
由于一个命题公式的析(合)取范式不是唯一,因而它们不能作为命题公式的规范形式(标准形式),为了使任意命题公式化为唯一的标准形式,下面引入主范式的概念.
1.定义:给定的命题公式,合取范式.
教学设计
课程名称
《离散数学》
教师姓名
授课题目
主合取范式
授课章节
§1.7对偶与范式
授课对象
数学与应用数学专业
教学目标
掌握利用真值表、等值演算求命题公式的主合取范式的方法
教学方式
启发式
教学内容
真值表法、等值演算法求命题公式的主合取范式
教学重点
主析取合取范式的求解
教学难点
等值演算法求主合取范式
教学方法和策略
例2求((PQ)R)P的主合取范式。
解:原式((P∨Q)∨R)∨P
(P∨Q)∧(R∨P ) (合取范式)
((P∨Q)∨(R∧R ))∧((R∨P )∨(Q∧Q))
(P∨Q∨R)∧(P∨Q∨R)∧(P∨Q∨R)∧
(P∨Q∨R)
(P∨Q∨R)∧(P∨Q∨R)∧(P∨Q∨R)
M0∧M1∧M3
补充说明
2.主合取范式的求法
方法1:列真值表
⑴列出给定公式的真值表.
⑵找出真值表中每个“F”对应的大项.
如何根据一组指派写对应的为“F”的大项:如果变元P被指派为F,P在大项中以P形式出现;如变元P被指派为T,P在大项中以P形式出现(确保该大项为F).
⑶用“∧”联结上述大项,即可.
例1求PQ和PQ的主合取范式
采用多媒体课件辅助,分析主合取范式的概念及特点,分析利用命题公式的真值表求解主合取范式;注意师生互动,以学生为教学主体,共同完成教学目标。

主析取范式和主合取范式

主析取范式和主合取范式

应用主析取范式分析和解决实际 问题
例2.12 某科研所要从3名科研骨干A,B,C中挑 选1~2名出国进修。由于工作原因,选派时 要满足以下条件: (1)若A去,则C同去。 (2)若B去,则C不能去。 (3)若C不去,则A或B可以去。 问应如何选派他们去?
分析: (1)将简单命题符号化
说明
• n个命题变项共可产生2n个不同的极小项。其 中每个极小项都有且仅有一个成真赋值。若 成真赋值所对应的二进制数转换为十进制数i ,就将所对应极小项记作mi 。 • 类似地,n个命题变项共可产生2n个极大项, 每个极大项只有一个成假赋值,将其对应的 十进制数i做极大项的角标,记作Mi。
表2.3 p,q形成的极小项与极大项
定理2.5 任何命题公式都存在着与之等值的主析取 范式和主合取范式,并且是唯一的。
定理2.4.5的证明
(只证主析取范式的存在和唯一性) (1)证明存在性。 设A是任一含n个命题变项的公式。 由定理2.3可知,存在与A等值的析取范式A′, 即AA′,若A′的某个简单合取式Ai中既不含 命题变项pj,也不含它的否定式┐pj,则将Ai展 成如下形式: Ai Ai∧1 Ai∧(pj∨┐pj) (Ai∧pj)∨(Aj∧┐pj)
析取范式和合取范式的性质
定理2.2 (1)一个析取范式是矛盾式当且仅当它的每个 简单合取式都是矛盾式。 (2)一个合取范式是重言式当且仅当它的每个 简单析取式都是重言式。
范式存在的讨论
• 在范式中不会出现联结词→与,否则可使 用等值式消除 A→B ┐A∨B AB (┐A∨B)∧(A∨┐B) • 在范式中不会出现形如 ┐┐A,┐(A∧B),┐(A∨B)的公式: ┐┐A A ┐(A∧B) ┐A∨┐B • ┐(A∨B)┐A∧┐B

主析取范式与主合取范式

主析取范式与主合取范式

第四节 主析取范式与主合取范式n 个命题变项虽然可以构成无穷多个形式各异的命题公式,但就其真值而言,只有22n种。

对应每种真值情况虽然又有无穷多个等值的公式,但这些公式却有相同的标准形式。

本节将给出规范公式的概念,这种规范的公式能表达真值表所能给出的一切信息。

定义4.1 命题变项及其否定统称为文字。

如p ,q ,¬p ,¬q ,L 都是文字,即每个命题变项产生两个文字。

(1)仅由有限个文字构成的合取式称为简单合取式。

(2)仅由有限个文字构成的析取式称为简单析取式。

例如,p ∧q ,p ∧¬q ∧r ,L 都是简单合取式。

p ∨q , ¬p ∨q ∨r ,L 都是简单析取式。

单个文字既是简单析取式,又是简单合取式。

定义4.2 (1)仅由有限个简单合取式构成的析取式称为析取范式; (2)仅由有限个简单析取式构成的合取式称为合取式。

例如,p ,¬q ,p ∧q ,(p ∧¬q )∨(p ∧q ),L 都是析取范式。

p ,¬r ,p ∨q ,(p ∨q )∧(q ∨¬r ),L 都是合取范式。

注意,两个文字构成的简单合取式与析取式都既是析取范式又是合取范式。

例如,p ∨q 是析取范式,它是由两个简单的合取式p 与q 析取而成。

同时它也是合取范式,看成是一个简单析取式构成的合取范式。

定义 4.3 (1)n 个命题变项1p ,2p ,L ,n p (1n ≥)构成的简单合取式中,若每个i p (1,2,,i n =L )都以文字的形式出现一次且仅出现一次,而且出现在左起的第i 位上,则称它为极小项。

(2)n 个命题变项1p ,2p ,L ,n p (1n ≥)构成的简单析取式中,若每个ip (1,2,,i n =L )以文字的形式出现一次且仅出现一次,而且出现在左起的第i 位上,则称它为极大项。

两个命题变项p ,q 共可形成4个极小项:¬p ∧¬q ,¬p ∧q ,p ∧¬q ,p ∧q 。

主析取范式转主合取范式

主析取范式转主合取范式

主析取范式转主合取范式主析取范式(DNF)和主合取范式(CNF)是命题逻辑中的两种常见的范式形式。

在逻辑推理和谓词逻辑等领域,将主析取范式转为主合取范式是一项重要的任务。

本文将介绍如何将主析取范式转为主合取范式,并提供实例解释。

主析取范式是由多个子句通过析取连接而成的命题公式,其中每个子句由多个文字通过合取连接而成。

而主合取范式则是由多个子句通过合取连接而成的命题公式,其中每个子句由多个文字通过析取连接而成。

在将主析取范式转为主合取范式的过程中,需要进行一系列的步骤。

首先,我们需要将主析取范式中的每个子句进行拆分,确保每个子句只包含一个文字。

这可以通过应用分配律来实现。

接下来,我们需要将拆分后的子句转为合取连接形式,并将所有的子句通过析取连接形式联结起来。

这样,我们就得到了主合取范式。

举个例子来说明转换过程。

假设我们有一个主析取范式:(A∨B)∧(C∨D)。

首先,我们将每个子句进行拆分,得到以下形式:A∧B∧C∧D。

接下来,我们将这些子句通过析取连接形式联结起来,得到主合取范式:(A∧B)∨(C∧D)。

转换完成后,我们可以使用主合取范式进行进一步的逻辑推理和分析。

主合取范式具有更简洁的形式,便于理解和推导。

因此,将主析取范式转为主合取范式可以帮助我们更好地理解和分析命题逻辑问题。

总结起来,将主析取范式转为主合取范式是一项重要的任务,在逻辑推理和谓词逻辑等领域具有广泛的应用。

通过拆分子句和重新联结形式,我们可以将主析取范式转为主合取范式,从而更好地理解和分析命题逻辑问题。

这一转换过程是基于逻辑规则和推导方法的,可以提高逻辑推理的准确性和效率。

离散数学求命题公式的主析取范式和主合取范式

离散数学求命题公式的主析取范式和主合取范式

离散数学求命题公式的主析取范式和主合取范式Description输⼊命题公式的合式公式,求出公式的真值表,并输出该公式的主合取范式和主析取范式。

Input命题公式的合式公式Output公式的主析取范式和主合取范式,输出形式为:“ mi ∨ mj ; Mi ∧ Mj” ,极⼩项和∨符号之间有⼀个空格,极⼤项和∧符号之间有⼀个空格;主析取范式和主合取范式之间⽤“ ; ”隔开,“ ; ”前后各有⼀个空格。

永真式的主合取范式为 1 ,永假式的主析取范式为 0 。

输⼊公式的符号说明:! ⾮,相当于书⾯符号中的 “ ¬ ”& 与,相当于书⾯符号中的 “ ∧ ”| 或,相当于书⾯符号中的 “ ∨ ”蕴含联结词,相当于书⾯符号中的 “ → ”等价联结词,相当于书⾯符号中的 “ ↔ ”( 前括号) 后括号Code#include <cstdio>#include <cstring>#include <cmath>#define N 1000#define MAX 10000000char s[N];bool table[30];int explain[30];int value[MAX];int sum = 0;int priority(char c){switch (c){case '#': return -1;case '!': return 5;case '&': return 4;case '|': return 3;case '-': return 2;case '+': return 1;case '(': return 0;default: return 0;}}void postfix(){char post[N] = { '\0' };int pp = -1;char stack[N] = { '#' };int ps = 0;int len = strlen(s);for (int i = 0; i < len; i++){if (s[i] >= 'a' && s[i] <= 'z'){post[++pp] = s[i];continue;}if (s[i] == '!' || s[i] == '&' || s[i] == '|' || s[i] == '-' || s[i] == '+'){while (priority(s[i]) <= priority(stack[ps]))post[++pp] = stack[ps--];stack[++ps] = s[i];continue;}if (s[i] == '('){stack[++ps] = s[i];continue;}if (s[i] == ')'){while (stack[ps] != '(') post[++pp] = stack[ps--];ps--;continue;}}while (ps) post[++pp] = stack[ps--];strcpy(s, post);int l = strlen(s);}void settable(){memset(table, 0, sizeof(table));int len = strlen(s);for (int i = 0; i < len; i++){if (s[i] >= 'a' && s[i] < 'z')table[s[i] - 'a'] = true;}for (int i = 0; i < 26; i++)if (table[i]) sum++;sum = pow(2, sum);}int btoi(){int sum = 0, weight = 1;for (int i = 25; i >= 0; i--)if (table[i]){if (explain[i]) sum += weight;weight *= 2;}return sum;}int calc(int a, int b, char c){switch (c){case '&': return a * b;case '|': if (a + b) return 1; else return 0;case '-': if (a == 1 && b == 0) return 0; else return 1; case '+': return !((a + b) & 1);}}int work(){int stack[N], ps = -1;int len = strlen(s);for (int i = 0; i < len; i++){if (s[i] >= 'a' && s[i] <= 'z'){stack[++ps] = explain[s[i] - 'a'];continue;}if (s[i] == '!'){stack[ps] = (stack[ps] + 1) & 1;continue;}int ans = calc(stack[ps - 1], stack[ps], s[i]);stack[--ps] = ans;}return stack[0];}void assign(){int x = btoi();int ans = work();value[x] = ans;}void generate(char c){while (c <= 'z' && table[c - 'a'] == false) c++;if (c > 'z'){assign();return;}explain[c - 'a'] = 0;generate(c + 1);explain[c - 'a'] = 1;generate(c + 1);}void output1(){int i = 0;while (i < sum && !value[i]) i++;if (i >= sum){printf("0 ; ");return;}printf("m%d", i);for (i++; i < sum; i++)if (value[i]) printf(" ∨ m%d", i);printf(" ; ");}void output2(){int i = 0;while (i < sum && value[i]) i++;if (i >= sum){printf("1\n");return;}printf("M%d", i);for (i++; i < sum; i++)if (!value[i]) printf(" ∧ M%d", i);printf("\n");}int main(){scanf("%s", s);postfix();settable();memset(value, 0, sizeof(value));memset(explain, 0, sizeof(explain)); generate('a');output1();output2();return 0;}。

如何求得公式的求主析取和主合取范式

如何求得公式的求主析取和主合取范式

14
主析取范式:一个由不同的极小项之和构成的公式, 叫主析取范式,如果它与给定的命题公式A等价,则称 它是A的主析取范式。
定理(主析取范式存在定理) 任何不为矛盾式的命题公式一定存在着与其等价的 主析取范式。
2016/10/21
15
证 设A为一个不是矛盾式的公式,先求出A的析取范式A,然后再 进行如下的构造性算法:
2016/10/21
二进制数 十进制数 记号mi 0 0 0 0 m0 0 0 1 1 m1 0 1 0 2 m2 0 1 1 3 m3 1 0 0 4 m4 1 0 1 5 m5 1 1 0 6 m6 1 1 1 7 m7
12
一般地,n个变元的极小项是: m0 P1P2P3…Pn m1 P1P2P3…Pn ……… m2n-1 P1P2P3…Pn
2016/10/21
2
定理(范式存在定理) 任何命题公式都存在与之等价的析取范式和合取范式 求范式的构造性算法,其步骤如下:
① 对任何公式A,首先消去、等其它联结词,只保 留联结词、、。常用到公式 P Q P Q , PQ (PQ)(QP), (PQ)(PQ) (合取范式) (PQ)(PQ) (析取范式)。
①展开 如果A的某基本积B中不含命题变元Pi或其否定Pi,则 将B展开如下: B BT B(PiPi) (BPi)(BPi) ②消去 将重复出现的命题变元(变元否定)、矛盾式、重复出现 的极小项都消去。 (用 PPP, PPF,mimimi)。 ③排序 将极小项按由小到大(或由大到小)顺序排列。 为表达简洁,用∑表极小项的析取。 如 m1m3m5,记成 ∑(1,3,5)
2016/10/21
6
主析取范式和主合取范式
范式为命题公式提供了一种统一的表达形式,给公 式的判定问题提供了一种比较简便的方法。但 ①析取范式和合取范式都不唯一,仍然给研究问题带 来不便; ②对偶然式,公式成真(假)的指派还不是一目了然。

第四讲 对偶定理

第四讲 对偶定理
第四讲 对偶定理、主合取范式、数字电路设计
1.1. 对偶定理
对偶定理针对布尔运算式,是 De.Morgan 率的简单推论。对偶定理的一个最重要的应 用是主范式取非。 对偶定理: L( p1 , , pi , , pn ; , ) 是布尔运算式,那么
L( p1 , , pi , , pn ; , ) = L(p1 , , pi ,, pn ; , )
按照构造定理 理,
A B = ( A B ) = ( A B ) = ( A B ) = M 10 = {M 10 }
也即 即由 A B = F 对应的取 取值情况 A = T , B = F 指定的大项 指 M 10 = A B 。同样由 由

A « B = (A B) ( A B)
L ¢( p1 , , pi , , pn ; , ) 为 使 L( p1 , , pi , , pn ; , ) = F 所 有 p1 , , pi , pn 取 值 情
况对 对应大项的合 合取。 证明:对 L( p1 , , pi , pn ; , ) 的主析取范 范式取非,应 应用对偶定理 理可得。证毕。 例如:
因此
( x Î A x Î B x Î C ) x Î C = {M 000 , M 010 , M 100 }
( x Î A x Î B ) x Î C , ( x Î A x Î B x Î C ) x Î C 的主合取范式相同,所以 ( x Î A x Î B ) x Î C = ( x Î A x Î B x Î C ) x Î C
因此
( x Î A x Î B) x Î C = {M 000 , M 010 , M 100 }

离散数学析取范式与合取范式名师公开课获奖课件百校联赛一等奖课件

离散数学析取范式与合取范式名师公开课获奖课件百校联赛一等奖课件
18
例1.19 由( p q) r 旳真值表求其主析取范式.
p q r p q ( p q) r
000 0
0
001 0
0
010 1
0
011 1
1
100 1
0
101 1
1
110 1
0
111 1
1
主析取范式为: m3m5m7
19
作业: P36 17(1)(3),18(1),19
20
课堂练习:
(pq)r (消去) pqr (结合律) 这既是A旳析取范式(由3个简朴合取式构成旳 析取式),又是A旳合取范式(由一种简朴析 取式构成旳合取式)
6
(2) B = ( pq)r
解: (pq)r
(pq)r (消去第一种)
(pq)r (消去第二个)
(pq)r
(否定号内移——德摩根律)
这一步已为析取范式(两个简朴合取式构成)
39
作业: P36 18(2),20(1)
40
100
M4
p q r
101
M5
p q r
110
M6
p q r
111
M7
32
极小项与极大项比较
由p, q两个命题变项形成旳极小项与极大项
极小项 公式 成真
赋值 p q 0 0 p q 0 1
p q 1 0 pq 1 1
名称
m0 m1 m2 m3
极大项 公式 成假
赋值 pq 0 0 p q 0 1 p q 1 0 p q 1 1
(对分配)
(q p)( p r)(q r) (零律,同一律)
8
(2) 求 ( p q) (p r) 旳合取范式。

命题公式主合取范式的基础离散论文

命题公式主合取范式的基础离散论文

命题公式主合取范式的基础[摘要]:主合取范式是一种仅由有限个文字构成的析取式,在命题逻辑中发挥着重要的作用。

一个简单合取范式是矛盾式当且仅当它同时含某个命题变项及它的否定式。

主合取范式具有特有的性质与作用。

特有的性质与作用。

为了进一步了解主合取范式,为了进一步了解主合取范式,为了进一步了解主合取范式,本文针对它的定义、本文针对它的定义、本文针对它的定义、作用、性质以及与真作用、性质以及与真值表的关系展开讨论。

[关键词]:主合取范式极大值真值表推理法(求法)在离散数学中,吸取范式和合取范式统称为范式,是命题逻辑表达式的重要组成部分。

他们的作用相同与真值表,也就是说规范的主、合取范式可以表达真值表所能给出的一切信息。

以下将从定义、求法、用途实例、与真值表的关系等四个方面进行阐述。

一、定义说明在含有n 个命题变项的简单析取式中,若每个命题的变项和它的否定式不同时出现,而二者之一必出现一次,且第i 个命题变项或它的否定式出现在左算起的第i 位上(若命题变项无角标,就按字典顺序排序),称这样的简单析取式极大项。

由于每个命题变项在极小项中以原形或否定式形式出现且仅出现一次,因而n 个命题变项共可产生2n 个不同的极小项。

其中每个极小项都有且仅有一个成真赋值。

若成真赋值所对应的二进制数转化为十进制数为i ,就将所对应极小项记作m i 。

类似地,类似地,n n 个命题变项共可产生2n 个不同的极大项,每个极大项只有一个成假赋值,将其对应的十进制数i 做极大项的角标,记作M i 。

定义:设由n 个命题变项构成的合取范式中的所有的简单析取式都是极大项,个命题变项构成的合取范式中的所有的简单析取式都是极大项,则称该合则称该合取范式为主合取范式。

二、求法简述(一)一般步骤。

主析取范式在给定的命题公式中,如果有一个等价公式,它仅由小项的析取所组成,则该等价式称作原式的主析取范式。

主析取范式的惟一性任意含n 个命题变元的非永假命题公式A ,其主析取范式是惟一的。

重言式与矛盾式的主析取范式与主合取范式

重言式与矛盾式的主析取范式与主合取范式

重言式与矛盾式的主析取范式与主合取范式。

1、先看下列简单的问题:命题公式P→(Q→P)的主合取范式为。

解:根据蕴涵词的意义,当P为假时,P→(Q→P)为真;当P为真时,Q→P为真,因而P→(Q→P)为真,所以P→(Q→P)永远为真,即P→(Q→P)是一个重言式。

P→(Q→P)中总共有两个命题变元P和Q,因而对应有个不同的极大项,每个极大项对应着使得P→(Q→P)为假的一种赋值。

现在P→(Q→P)不可能为假,所以P→(Q→P)的主合取范式中不能含有极大项,因而其主合取范式只能是一个不含极大项的空范式。

我们约定:用1表示重言式的主合取范式。

所以命题公式P→(Q→P)的主合取范式为1。

2、一般地,如果一个命题公式G中共有n个命题变元。

每个变元有真和假两种不同的赋值。

因而G总共有2n种不同的赋值。

对应着每一种赋值,都有一个极小项和极大项,极小项在对应的赋值下为真,极大项在对应的赋值下为假。

如果G正好在m种赋值下为真,在另外的种赋值下为假,那么使得G为真的m种赋值所对应的m个极小项的析取就是G的主析取范式,使得G为假的其他种赋值所对应的个极大项的合取就是G的主合取范式。

如果G是重言式,全部2n种赋值都使得G为真,因而所有的2n个极小项的析取是G的主析取范式。

重言式G的主合取范式不含极大项,是空范式,就用1表示。

如果G是矛盾式,全部2n种赋值都使得G为假,因而所有的2n个极大项的合取是G的主合取范式。

矛盾式G的主析取范式不含极小项,是空范式,就用0表示。

3、P→(Q→P)的主析取范式为由P→(Q→P)对应的所有4个极小项的析取得到。

4、重言式和矛盾式的主析取范式和主合取范式,在教材中没有讲清楚,因而在做有关练习和考试题时,同学们感到茫然。

现在,大家应该清楚了。

这里也进一步明确了用真值表方法求主合取范式和主析取范式的依据和步骤。

合取范式与析取范式

合取范式与析取范式

合取范式与析取范式
我们知道在离散数学中,有主合取范式与主析取范式的概念。

本文分享什么是主合取范式与主析取范式,以及如何按步骤求命题公式的主合取范式与主析取范式。

首先,我们需要了解一下数学概念。

简而言之,
主合取范式,就是若干个极大项的合取(交集)。

如何按步骤谋命题公式的主合取范式与主析取范式
主析取范式,就是若干个极小项的析取(并集)。

如何按步骤谋命题公式的主合取范式与主析取范式
而所谓的极大项,就是包含全部数目的命题变元的析取表达式
比如:
如何按步骤求命题公式的主合取范式与主析取范式
所谓的极小项,就是涵盖全部数目的命题变元的谓词表达式
例如:
如何按步骤谋命题公式的主合取范式与主析取范式
下面言归正传,我们看如何按步骤求解命题公式的主合取范式与主析取范式。

常用的方法存有两种,等值演算法和真值表法
等值演算法,就是按照步骤推导公式,最终得到主合取范式或者主析取范式
如何按步骤谋命题公式的主合取范式与主析取范式
下面,我们来举个例子,求出命题公式的主合取范式与主析取范式
如何按步骤谋命题公式的主合取范式与主析取范式
如何按步骤求命题公式的主合取范式与主析取范式
最后,我们看看如何采用真值表方法,谋命题公式的主合取范式与主析取范式。

如何按步骤求命题公式的主合取范式与主析取范式
我们来看这样一个具体内容例子。

根据真值表,我们取值为0的指派,得到最大项从而写下最小项的谓词,获得主合取范式
如何按步骤求命题公式的主合取范式与主析取范式。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
若(p,q,r) = (1,0,0)使A取0,则对应的最大项为M100 = M4 = ┐p∨q∨r ; 若(p,q,r) = (0,0,0)使A取0,则对应的最大项为M000 = M0 = p∨q∨r ;
NO 3 :A等值于所有这样写出的最大项的合取。
我们一起来练习练 习吧
例:设p,q和,r是命题变元,求命题公式A = (p ∨q) →r的主合取范式。
解:①p→(q→r) = p→(┓q∨r) = ┓p∨(┓p∨r). ② (p∨q) →r = ┓(p ∨q) ∨r = (┓p ∧ ┓q) ∨r =(┓p ∨r) ∧(┓q ∨r)= (┓p∨(q∧ ┓q)∨r)∧ ((p∧ ┓p)∨ ┓q∨r) =(┓p ∨q ∨r) ∧ (┓p ∨ ┓q ∨r) ∧ (p ∨ ┓q ∨r) ∧ (┓p ∨ ┓q ∨r) =(┓p ∨q ∨r) ∧ (┓p ∨ ┓q ∨r) ∧ (p ∨ ┓q ∨r)
-------------------------------------------------------------对于每一个最大项只有一种指派使其为0,例如, 最大项p∨┐q∨┐r只有指派(p,q,r) = (0,1,1), 使其为0.
很明显,所有最大项的合取为永假式0,而0 个最大项的合取意味着A的永真式为1,这时 A的主合取范式不存在。除这两种极端情形 外,A均为中性公式。
【例】设p和q是命题变元,利用主范式判断命题公式p∧(p→┓q)
的类型。
看一个简单的例 解: p∧(p→┓q) = p∧(┓ p ∨ ┓q) = (p ∧ ┓ 子!!! p) ∨(p ∧ ┓q) = p ∧ ┓q,显然 所给命题公式的主析取范式中仅有一个最小项,所以 它是中性公式。
*利用命题公式的主析取范式和主合取范式可以判断 两个命题公式是否等值。 【例】利用主范式判断下述两个命题公式是否等值。 (1)p→(q→r). (2)(p∨q真值表如下:
p q r p∨ q (p ∨q) →r p q r p∨q ( p ∨q) →r
1
1 1 1
1
1 0 0
1
0 1 0
1
1 1 1
1
0 1 0
0
0 0 0
1
1 0 0
1
0 1 0
1
1 0 0
1
0 1 1
使A = (p ∨q) →r取0的指派110,100,010,对应的最大项分别为 ┓p ∨ ┓q ∨ r, ┓p ∨q∨r , p ∨ ┓q ∨r.于是有 A = (┓p ∨ ┓q ∨ r) ∧(┓p ∨q∨r) ∧(, p ∨ ┓q ∨r)
『注意』命题公式的主合取范式是合
取范式,而一般来说合取范式不是 主合取范式。
例:A = (p→q)↔r,其合取范式为 A=(p∨r)∧(┓q∨r)∧(┓p∨q∨┓r)
它就不是A的主合取范式,主要原因是在该合取范式中,析取 式p∨r以及┓q∨r不是由A中3个命题p,q,r产生的最大项。但 我们可以在合取范式的基础上,对于析取式p∨r 以及┓q∨r, 通过补充所缺少的命题变元将其转化为几个最大项的合取。 p∨r = p∨(q ∧ ┓q) ∨r = (p ∨q ∨r) ∧(p ∨ ┓ q ∨r) ┓q∨r = (p∧┓p)∨┓q∨r = (p∨┓q∨r) ∧(┓p∨┓q∨ r)
求A的主合取范式的第二种方法: 真值表法
利用真值表法求A的主合取范式的3个计算步骤:
NO 1:写出命题公式A的真值表; NO 2:对于使A取0的指派,写出对应的最大项,使该最大项在
该指派下也为0; 例如:若(p,q,r) = (1,1,1)使A取0,则对应的最大项为M111 = M7 = ┐p∨┐q∨┐r;
综上:根据等值式的定义容易得出:A等值于所有写出这样的 最大项的合取。
【定理】任意非永假(非永真)命题公式都 存在唯一的主析取范式(主合取范式)。
显然,命题公式的主析取范式及主合取范式是等值的。主析取 范式中所含的最小项个数加上主合取范式中所含的最大项个数 等于该命题公式的真值指派数目。进一步,可以从主析取范式 求出主合取范式,反过来亦然。
命题公式p→(q→r)的主合取范式中,仅一个最大项; 命题公式(p∨q) →r的主合取范式中,有三个最大项。 于是得出,所给的两个命题公式不等值。
求A的主合取范式的第一种方法: 等值演算法
利用等值演算法求A的主合取范式的计算步骤: NO 1:求出A的合取范式; NO 2:利用分配率补充所缺少的命题变元。
设p,q,r是命题变元,求命题公式A =(p→q)↔r的主合取范式。
解:A的合取范式为A=(p∨r)∧(┓q∨r)∧(┓p∨q∨┓r) ∵p∨r = p∨(q ∧ ┓q) ∨r = (p ∨q ∨r) ∧(p ∨ ┓ q ∨r) ┓q∨r = (p∧┓p)∨┓ q∨r = (p∨┓q∨r) ∧(┓p∨┓q∨ r) 下面我们来举 ∴A的主合取范式为 个例子 A= (p ∨q ∨r) ∧(p ∨ ┓ q ∨r) ∧ (p∨┓q∨r) ∧(┓p∨┓q∨ r) ∧ (┓p∨q∨┓r) 由上边的主合取范式可知,使A取0的真值指派为 (p,q,r) = (0,0,0),(0,1,0),(1,1,0),(1,0,1)
主合取范式
姓名:任玲玲 班级:120402
什么是最大项???
两个命题变元p和q产生的最大项有 p ∨ q , p ∨ ┐q , ┐p∨q , ┐p∨ ┐q 由三个命题变元p,q,r产生的最大项有 p∨q∨r , p∨┐q∨r , ┐p∨q∨r, p∨q∨┐r, ┐p∨┐q∨r , ┐p∨q∨┐r, p∨┐q∨┐r, ┐p∨┐q∨┐r
相关文档
最新文档