Class: Logica::PredicateFactory

Inherits:
Object
  • Object
show all
Defined in:
lib/logica/predicate_factory.rb

Instance Method Summary collapse

Instance Method Details

#ad_hoc(name = 'anonymous', &definition) ⇒ Object Also known as: from_block



60
61
62
# File 'lib/logica/predicate_factory.rb', line 60

def ad_hoc(name = 'anonymous', &definition)
  ad_hoc_class.new(name, &definition)
end

#at_least(minimum, predicates) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/logica/predicate_factory.rb', line 23

def at_least(minimum, predicates)
  if minimum <= 0
    tautology
  elsif minimum == 1
    disjunction(predicates)
  elsif minimum == predicates.size
    conjunction(predicates)
  elsif minimum >= predicates.size
    contradiction
  else
    at_least_class.new(minimum, predicates)
  end
end

#at_most(maximum, predicates) ⇒ Object



37
38
39
40
41
42
# File 'lib/logica/predicate_factory.rb', line 37

def at_most(maximum, predicates)
  minimum   = predicates.size - maximum
  negations = predicates.map(&:negated)

  at_least(minimum, negations)
end

#between(minimum, maximum, predicates) ⇒ Object



44
45
46
# File 'lib/logica/predicate_factory.rb', line 44

def between(minimum, maximum, predicates)
  at_least(minimum, predicates).and(at_most(maximum, predicates))
end

#conjunction(predicates) ⇒ Object



3
4
5
# File 'lib/logica/predicate_factory.rb', line 3

def conjunction(predicates)
  compound_from_list(predicates, conjunction_class)
end

#conjunction_from_pair(first_predicate, second_predicate) ⇒ Object



7
8
9
# File 'lib/logica/predicate_factory.rb', line 7

def conjunction_from_pair(first_predicate, second_predicate)
  compound_from_pair(first_predicate, second_predicate, conjunction_class)
end

#contradictionObject



56
57
58
# File 'lib/logica/predicate_factory.rb', line 56

def contradiction
  contradiction_class.new
end

#disjunction(predicates) ⇒ Object



11
12
13
# File 'lib/logica/predicate_factory.rb', line 11

def disjunction(predicates)
  compound_from_list(predicates, disjunction_class)
end

#disjunction_from_pair(first_predicate, second_predicate) ⇒ Object



15
16
17
# File 'lib/logica/predicate_factory.rb', line 15

def disjunction_from_pair(first_predicate, second_predicate)
  compound_from_pair(first_predicate, second_predicate, disjunction_class)
end

#exactly(amount, predicates) ⇒ Object



48
49
50
# File 'lib/logica/predicate_factory.rb', line 48

def exactly(amount, predicates)
  between(amount, amount, predicates)
end

#negation(predicate) ⇒ Object



19
20
21
# File 'lib/logica/predicate_factory.rb', line 19

def negation(predicate)
  negation_class.new(predicate)
end

#partial_application(predicate, *first_arguments) ⇒ Object



65
66
67
# File 'lib/logica/predicate_factory.rb', line 65

def partial_application(predicate, *first_arguments)
  partial_application_class.new(predicate, *first_arguments)
end

#tautologyObject



52
53
54
# File 'lib/logica/predicate_factory.rb', line 52

def tautology
  tautology_class.new
end