class Unifier
Public Instance Methods
unify_all(pairs_list)
click to toggle source
# File lib/rover_prover/prover/unifier.rb, line 4 def unify_all(pairs_list) lengths = pairs_list.map { |pair| (0..(pair.length - 1)).to_a } first = lengths.shift indexes = first.product(*lengths) indexes.each do |index| possible_pairs = pairs_list.map.with_index { |pairs, i| pairs[index[i]] } subst = unify_list(possible_pairs) return subst unless subst.nil? end nil end
unify_list(pairs)
click to toggle source
# File lib/rover_prover/prover/unifier.rb, line 16 def unify_list(pairs) substitution = {} pairs.each do |a, b| substitution.each do |k, v| a = a.replace(k, v) b = b.replace(k, v) end sub = a.unify(b) return nil if sub.nil? substitution.merge!(sub) end substitution end