逻辑判断-推理系统

  • 逻辑判断系统

设计概要:

根据联结词的优先级:¬∧∨→↔

输入中缀逻辑式

将之转化为后缀表达式

得到公式模板(后缀式)和变量名集合

构造<变量名,bool>的映射关系

根据后缀式和 构造好的<变量-bool> 映射 可计算其真值

类实现:

C++:(初次实现,无图形界面)

class Logic {

public:

方法:

Logic();                                          //构造

void Load(string);                                //input

int priority(char);                               //获取运算符优先级

string trans(string);                             //中缀式->后缀式

bool calculate(string P, map<string, bool> V);    //真值计算

void Creat_Table();        //创建真值表

void ADD_MDF(int);                                //构造主析取范式

void ADD_MCF(int);                                //构造主合取范式

变量:

string M_exp;                            //中缀式

string P_exp;                            //后缀式

map<string, bool> variate;               //翻译“字典”(变量->bool值)

vector<map<string, bool, cmp>> Table;    //真值表二维映射组

string MDF;                              //主析取范式

string MCF;                              //主合取范式

};

Python:(以C++的类为基础,添加图形界面)

真值表存储结构:<int,map<string,bool>> ,string-bool映射的动态数组

以¬a^b→c为例

将行号转化为二进制数,每一位二进制赋给对应变量,调用calculate函数计算结果,并将结果添加到真值表中。

以这些基本方法和数据为基础就可以实现较复杂的功能。

  • 推理系统

以判断系统为基础,推理系统无非是增加判断逻辑式为重言式

输入前提:以逗号(,)分隔

输入结论:

假设前提为 ¬a∨b, b∧c

结论为 a

我所做的处理:前提两侧加”(“  ”)”,用”)∧(”替换逗号,再用”→”连接结论

比如此时样例为 ((¬a∨b)∧( b∧c))→a,

可通过逻辑判断系统,判断这个式子为重言式(真值表result全为1)

  • 使用说明

优化:

  1. 限制键盘输入,只能输入字母和相应联结词
  2. 自动识别变量
  3. 当变量个数超过13,真值计算超过2^13次,排版会导致卡顿,修改:当变量个数超过13,不创建真值表,添加了一个查询控件,可以输入0/1序列查询真值。

遗憾:

  1. 不能预先判断逻辑式是否合法
  2. ¬为单目运算符,实在想不到办法怎么与其他联结词区分
  3. 第一次是用C++写的代码,但在C++的图形界面出了点问题,这是用Python-tkinter写的,现学现卖,难免存在一些问题,代码很乱,可读性不高。

推理系统,其实是以判断系统的功能为基础,做了一点点扩展。

程序:

源码:https://pan.baidu.com/s/1LLH__dtWTpdLmSHwqxatcw

离散数学——逻辑推理系统相关推荐

  1. 【二】头歌平台实验-离散数学逻辑与推理

    主要介绍基本逻辑运算,利用逻辑推理解决相关问题. 第1关:命题与逻辑 编程要求:编程得出(P→Q)∧R的真值表的所有结果. #coding=utf-8 import sympy as sym# 定义符 ...

  2. 离散数学,自然推理系统,基于假言推理,不能使用消解法的自然推理系统

    离散数学-假言推理系统 文章目录 1. 问题描述 2. 课本中的源码 (1) 抄写课本中的代码 (2) 理解程序的运行逻辑 (3) 优化方案 (4) 测试 3. 我编写的假言推理系统 (1) 程序逻辑 ...

  3. 中学再不学编程就晚了?MIT、JHU研究:程序员大脑思考代码的机制不对劲

    视学算法报道 转载自:机器之心 编辑:泽南.小舟 MIT.约翰霍普金斯大学的研究人员发现,思考编程并不像组织语言,但也不靠纯粹的逻辑.这是因为我们通常是在成年之后才开始学代码? 很多时候,我们认为优秀 ...

  4. 从工具的奴隶到工具的主人

    摘要:我们每个人都是工具的奴隶.随着我们的学习,我们不断的加深自己对工具的认识,从而从它们里面解脱出来.现在我就来说一下我作为各种工具的奴隶,以及逐渐摆脱它们的思想控制的历史吧. 当我高中毕业进入大学 ...

  5. 用python写家族树的基本事实

    课题 写出描述谓词 GrandChild. GreatGrandparent. Ancestor.Brother.Sister, Daughter.Son. FirstCousin.BrotherIn ...

  6. 图灵的文章“Computing machinery and intelligence”译文

    图灵奠基AI的力作"Computing  machinery and intelligence"全文译完,摘自http://blog.sciencenet.cn/blog-2322 ...

  7. 计算机原理与智能-翻译

    英文原文:链接: https://pan.baidu.com/s/14WORaltIGb0U4-8_Baae7g  密码: 8ep0 计算机原理与智能 阿兰 图灵 我建议考虑这个问题,"机器 ...

  8. 人工智能之知识图谱概述(一)

    文章目录 碎碎念 第一章 概念 一.知识图谱概念和分类 1.知识图谱的概念 2.知识图谱的分类 二.知识工程发展历程 三.知识图谱的知识图谱 第二章 技术人才篇 1.知识表示与建模 (1)知识表示模型 ...

  9. 传统人工智能中的三大问题

    基于神经网络和大样本统计规律的深度学习越来越走入瓶颈,人工智能的发展越来越向基于符号推理和因果推理的传统人工智能回归.AI算法工程师不能把眼光仅仅局限在海量样本的统计规律上,而应该学习并掌握基于符号推 ...

  10. 人工智能技术发展历史

    人工智能(Artificial Intelligence,简称 AI)的历史可以追溯到上世纪50年代,以下是其中的关键点: 1956年:达特茅斯会议 1956年,美国达特茅斯学院举办了一次会议,邀请了 ...

最新文章

  1. Best Time to Buy and Sell Stock II
  2. nyoj 925 国王的烦恼(最小生成树)
  3. vbs脚本读写INI文件
  4. linux命令:groupdel
  5. 使用Advanced Installer进行二次打包
  6. Docker容器技术
  7. iOS中assign、copy 、retain等关键字的含义
  8. java学习(41):成员实例的定义和访问续
  9. asp.net程序涉及案例_定制小程序 | 企业在开发小程序前需要满足哪些条件?
  10. matlab-线性代数 判断 det 矩阵是否可逆
  11. Zookeeper开源客户端curator
  12. word保存为高分辨率图片(word2016)
  13. 使用SourceOffSite时出现的问题及解决办法
  14. c语言程序设计伴随矩阵,c语言求方阵的行列式、伴随矩阵算法
  15. idr寄存器、_STM32 GPIO寄存器 IDR ODR BSRR BRR
  16. Neural Approaches to Conversational AI
  17. 输入一个自然数N,要求输出如下的魔方阵,即边长为N*N,元素取值为1至N*N,1在左上角,呈顺时针方向依次放置各元素。
  18. Qt之使用GraphicsView框架实现思维导图功能
  19. gerrit安装配置(http反向代理)
  20. 仿滴滴打车地图选点(包含地图选点,离线地图,导航路线)

热门文章

  1. html5最新滚动效果,jQuery和CSS3炫酷滚动页面内容元素动画特效插件
  2. @所有人 尊贵的所有微信用户,现邀您开通VIP会员等级功能!
  3. Hello Juejin
  4. mac怎么修改hosts文件
  5. 中通快递宣布全球发售定价
  6. 原来收汇宝真的是很烂
  7. 编写数码管c语言程序,跪求单片机0~99数码管显示用C语言编写的程序
  8. 可决系数、相关系数、均方误差
  9. android通过辅助功能收集数据
  10. 打印小册子中断了怎么办