@@ -4,7 +4,6 @@ function get_most_general_unifier(unifiables::Set{<:Unifiable})
44 unifier = Substitution ()
55 unified = first (unifiables)
66 for unifiable in collect (unifiables)[2 : end ]
7- # @debug unifier
87 most_general_unifier! (unifier, unified, unifiable)
98 substitute (unified, unifier)
109 end
1413function most_general_unifier! (unifier!:: Substitution , unifiable1:: Unifiable , unifiable2:: Unifiable )
1514 substituted_unifiable1 = substitute (unifiable1, unifier!)
1615 substituted_unifiable2 = substitute (unifiable2, unifier!)
17- # @debug String(substituted_unifiable1)
18- # @debug String(substituted_unifiable2)
1916 @match substituted_unifiable1 begin
2017 u1:: Literal => begin
2118 # Two clauses A and B can only be unified if the
7067
7168# Apply substitution in order.
7269function substitute (formula:: Union{Term, Formula, Literal, Clause} , substitution:: Substitution )
73- # @debug substitution
7470 substituted_formula = formula
7571 for (substitutee, substituter) in substitution
7672 substituted_formula = substitute (substituted_formula, substitutee, substituter)
@@ -79,8 +75,6 @@ function substitute(formula::Union{Term, Formula, Literal, Clause}, substitution
7975end
8076
8177function substitute (formula:: Union{Term, Formula, Literal, Clause} , substitutee, substituter)
82- # println("substitute")
83- # @debug formula
8478 @match formula begin
8579 f:: CNF => @applyrecursively substitute (:_ , substitutee, substituter) f CNF
8680 f:: Clause => @applyrecursively substitute (:_ , substitutee, substituter) f Clause
@@ -141,27 +135,17 @@ function rename_all_variables(formula, replacements=Dict{Variable, Variable}())
141135end
142136
143137function get_maybe_unifiable_literals (clause1:: Clause , clause2:: Clause )
144- # println("get_mabye_unifiable_literals")
145- # println(clause1)
146- # println(clause2)
147138 maybe_unifiable_literals = Set {Set{Literal}} ()
148139 all_literals = union (clause1, clause2)
149140 literal_names = Set (map (l -> l. formula. name, all_literals))
150141 for literal_name in literal_names
151- # println("literal_name ", literal_name)
152142 for (c1, c2) in ((clause1, clause2), (clause2, clause1))
153- # println("c1 ", string(c1))
154- # println("c2 ", string(c2))
155143 positive_literals_in_c1 =
156144 filter (l -> l. formula. name == literal_name && ! l. negative, c1)
157145 negative_literals_in_c2 =
158146 filter (l -> l. formula. name == literal_name && l. negative, c2)
159147 positive_literals_combinations = powerset (positive_literals_in_c1)
160148 negative_literals_combinations = powerset (negative_literals_in_c2)
161- # println("positive_literals_in_c1 ", positive_literals_in_c1)
162- # println("positive_literals_combinations ", positive_literals_combinations)
163- # println("negative_literals_in_c2 ", negative_literals_in_c2)
164- # println("negative_literals_combinations ", negative_literals_combinations)
165149 for positive_literals in positive_literals_combinations
166150 for negative_literals in negative_literals_combinations
167151 if length (positive_literals) > 0 && length (negative_literals) > 0
@@ -172,37 +156,24 @@ function get_maybe_unifiable_literals(clause1::Clause, clause2::Clause)
172156 end
173157 end
174158 end
175- # println("maybe_unifiable_literals ", maybe_unifiable_literals)
176159 maybe_unifiable_literals
177160end
178161
179162function is_satisfiable (clauses:: CNF ; maxsearchdepth= Inf )
180- # @debug maxsearchdepth
181- # @debug length(clauses)
182163 if maxsearchdepth == 0
183164 throw (OverMaxSearchDepthError ())
184165 end
185166 renamed = rename_all_variables .(collect (clauses))
186167 clauses = CNF (renamed)
187- # @debug String(clauses)
188168 newclauses = CNF ()
189169 for clause1 in clauses
190- # @debug clause1
191170 for clause2 in clauses
192- # @debug String(clause1)
193- # @debug String(clause2)
194171 groups_of_maybe_unifiable_literals = get_maybe_unifiable_literals (clause1, clause2)
195- # @debug String(groups_of_maybe_unifiable_literals)
196172 for maybe_unifiable_literals in groups_of_maybe_unifiable_literals
197- # @debug String(maybe_unifiable_literals)
198173 try
199174 unifier = get_most_general_unifier (maybe_unifiable_literals)
200175 newclause = setdiff (union (clause1, clause2), maybe_unifiable_literals)
201- # @debug unifier
202- # @debug String(newclause)
203176 substituted_newclause = substitute (newclause, unifier)
204- # @debug unifier
205- # @debug String(substituted_newclause)
206177 push! (newclauses, substituted_newclause)
207178 catch
208179 continue
@@ -211,7 +182,6 @@ function is_satisfiable(clauses::CNF; maxsearchdepth=Inf)
211182 end
212183 end
213184 union! (clauses, newclauses)
214- # @debug String(clauses)
215185 if Clause ([]) in clauses
216186 false
217187 else
0 commit comments