一阶谓词归结逻辑

本文深入探讨了一阶谓词逻辑的归结原理,结合实例解析了如何运用归结法解决逻辑推理问题。通过理解源码,读者可以更好地掌握这一核心概念。
摘要由CSDN通过智能技术生成
import copy
import os
import sys
S = []
P=[]
V={}
M={}
M[0]='a'
M[1]='b'
M[2]='c'
M[3]='d'
M[4]='e'
cot=1
def readFile(filePath):
    global S
    global cot
    for line in open(filePath,encoding = 'utf-8'):
        line = line.replace(' ', '').strip()
        if line[0]=='(':
           line=list(line)
           line[0]=''
           line[len(line)-1]=''
           line=''.join(line)
        for i in range(len(line)-2):
            if line[i+1]==','and line[i]==')':
                line=list(line)
                line[i+1]=';'
                line=''.join(line)
        line = line.split(';')
        for i in range(len(line)):
            newele={}
            str1=line[i]
            for j in range(len(str1)-1):
                str2=str1
                if str1[j]=='(':
                   elename=str2[0:j]
                   elemem=str2[j+1:len(str1)-1]
                   elemem=elemem.split(',')
                   if elename in newele.keys():
                       str3=elename+'2'
                       newele[str3]=elemem
                   else:    
                       newele[elename]=elemem
                   line[i]=newele
                   break   
        line.append(cot)
        cot+=1
        S.append(line)

def fanyi(str1):
    if '!' in str1:
        return str1.replace('!', '')
    else:
        return '!' + str1


def guijie():
    global S
    end=False
    global cot
    global index
    index=0
    while True:
        if end:break
        W=[]
        for m in range(len(S)):
            if len(S[m])==2:
                W.append(S[m])
        for m in range(len(W)):
            for n in range(m+1,len(W)):
                key1=list(W[m][0].keys())
                key2=list(W[n][0].keys())
                value1=list(W[m][0].values())
                value2=list(W[n][0].values())
                if key1[0]==fanyi(key2[0]) and value1[0]==value2[0]:
                    end=True
                    print('R[',end='')
                    print(W[m][len(W[m])-1],W[n][len(W[n])-1],end='] = []')
                    break
            if end:
         
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值