BruteForceSatSolver.call()   A
last analyzed

Complexity

Conditions 2

Size

Total Lines 14

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 2
dl 0
loc 14
rs 9.4285
1
module PropLogic
2
  module BruteForceSatSolver
3
    class << self
4
      def call(term)
5
        # obvious value
6
        return True if term == True
7
        variables = term.variables
8
        PropLogic.all_combination(variables) do |trues|
9
          falses = variables - trues
10
          next unless term.assign(trues, falses).reduce == True
11
          # SAT
12
          negated_falses = falses.map(&:not)
13
          return PropLogic.all_and(*trues, *negated_falses)
14
        end
15
        # UNSAT
16
        false
17
      end
18
    end
19
  end
20
end
21