Conditions | 6 |
Total Lines | 16 |
Lines | 0 |
Ratio | 0 % |
1 | module PropLogic |
||
20 | |||
21 | def reduce |
||
22 | return self if reduced? |
||
23 | reduced_terms = @terms.map(&:reduce).uniq |
||
24 | reduced_terms.reject!{|term| term.equal?(False)} |
||
25 | return False if reduced_terms.empty? |
||
26 | if reduced_terms.any?{|term| term.equal?(True)} |
||
27 | True |
||
28 | elsif reduced_terms.length == 1 |
||
29 | reduced_terms[0] |
||
30 | else |
||
31 | not_terms = reduced_terms.select{|term| term.is_a?(NotTerm)} |
||
32 | negated_terms = not_terms.map{|term| term.terms[0]} |
||
33 | return True unless (negated_terms & reduced_terms).empty? |
||
34 | Term.get self.class, *reduced_terms |
||
35 | end |
||
36 | end |
||
60 |