-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathChainageAvant.py
81 lines (70 loc) · 2.2 KB
/
ChainageAvant.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# Travaille TP1 AI
# Gastli Oussama
# Hanana Nour
# GL4
from expression import Expression
import unification as Unif
from Rule import Rule
import sys
class ChainageAvant:
Ok=False
newFaits=[]
def __init__(self):
myBfFile=open("BF.txt",'r')
lines=myBfFile.readlines()
treatedLines=[]
for line in lines:
newLine=line.strip().replace("\n","")
treatedLines.append(newLine)
self.BF=treatedLines
myBrFile=open("BR.txt","r")
lines=myBrFile.readlines()
treatedLines=[]
for line in lines:
newLine=line.strip().replace("\n","")
treatedLines.append(newLine)
self.BR=treatedLines
self.BrExp=self.getRulesFromStringArray()
self.BfExp=self.getFactsFromStringArray()
def getRulesFromStringArray(self):
rulesExp=[]
for s in self.BR:
rulesExp.append(Rule(s))
return rulesExp
def getFactsFromStringArray(self):
faitExp=[]
for s in self.BF:
faitExp.append(Expression(s))
return faitExp
# Bf is a list of Expression
def chainageUtil(self,rule:Rule):
if(rule.has_premisses()):
p1=rule.get_first_premiss()
# print(p1)
for fait in self.BfExp:
x=Unif.unifier(fait,p1)
# print("\t",fait," ",x)
if(x is not None):
Unif.beautifulResult(x)
ruleS=rule.spread(x)
p=ruleS.get_first_premiss()
ruleSP=ruleS.pop_premisse()
self.chainageUtil(ruleSP)
elif(not rule.has_premisses()):
if(rule.checkExtra()):
c=rule.conclusion_to_string()
if(c not in self.BF):
self.newFaits.append(c)
self.BF.append(c)
self.BfExp.append(rule.conclusion)
self.Ok=True
def chainage_avant(self):
self.newFaits=[]
self.Ok=True
i=0
while(self.Ok):
i+=1
self.Ok=False
for r in self.BrExp:
self.chainageUtil(r)
sys.setrecursionlimit(1000)