-
Notifications
You must be signed in to change notification settings - Fork 0
/
fofTypes.py
129 lines (88 loc) · 2.93 KB
/
fofTypes.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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
from pyparsing import *
class Formula(object):
def negate(self):
return UnaryOperator("~", self)
def __eq__(self,other):
return repr(self) == repr(other)
class Term(Formula):
pass
class UnaryOperator(Formula):
# Since we only have 1 unary operation we can safely assume it is a negation
def __init__(self, op, term):
# if len(terms) > 1 something went wrong
self.term = term
self.op = op
def __repr__(self):
return self.op + repr(self.term)
def __eq__(self,other):
return repr(self) == repr(other)
def __hash__(self):
return hash(self.op) ^ hash(self.term)
def negate(self):
return self.term
def __iter__(self):
return iter([self.term])
class BinaryOperator(Formula):
def __init__(self, op, left_term, right_term):
self.terms = (left_term, right_term)
self.op = op
def __repr__(self):
return "(" + repr(self.terms[0]) + " " + self.op + " " + repr(self.terms[1]) + ")"
def __eq__(self,other):
return repr(self) == repr(other)
def __hash__(self):
return hash(self.op) ^ hash(self.terms)
def __iter__(self):
return iter(self.terms)
class Quantor(Formula):
def __init__(self, op, list_of_vars, term):
self.op = op
self.variables = frozenset(list_of_vars)
self.term = term
def __repr__(self):
return self.op + repr(list(self.variables)) + ":" + repr(self.term)
def __iter__(self):
return iter([self.term])
def __hash__(self):
return hash(self.op) ^ hash(self.term) ^ hash(self.variables)
class Relation(Formula):
def __init__(self,name,terms=[]):
""" terms is a list of terms.
Like in lecture, containing constants,
variables and other terms """
self.name = name
self.terms = terms
def __repr__(self):
if len(self.terms) == 0:
return self.name
else:
return self.name + "(" + ",".join(map(repr,self.terms)) + ")"
def __eq__(self,other):
return repr(self) == repr(other)
def __iter__(self):
return iter(self.terms)
class Function(Term):
def __init__(self,name,terms=[]):
""" terms is a list of terms.
Like in lecture, containing constants,
variables and other terms """
self.name = name
self.terms = terms
def __repr__(self):
if len(self.terms) == 0:
return self.name
else:
return self.name + "(" + ",".join(map(repr,self.terms)) + ")"
def __eq__(self,other):
return repr(self) == repr(other)
def __iter__(self):
return iter(self.terms)
class Variable(Term):
def __init__(self, string):
self.name = string
def __repr__(self):
return self.name
def __hash__(self):
return hash(self.name)
def __eq__(self,other):
return repr(self) == repr(other)