Class: Catlogic::Proposition

Inherits:
Object
  • Object
show all
Defined in:
lib/catlogic/proposition.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(quantity, subject, quality, predicate, truthvalue = true) ⇒ Proposition

Returns a new instance of Proposition.



6
7
8
9
10
11
12
# File 'lib/catlogic/proposition.rb', line 6

def initialize(quantity, subject, quality, predicate, truthvalue=true)
  @quantity=quantity.to_quantity
  @subject=subject.to_term
  @quality=quality.to_quality
  @predicate=predicate.to_term
  @truthvalue=truthvalue
end

Instance Attribute Details

#predicateObject (readonly)

Returns the value of attribute predicate.



4
5
6
# File 'lib/catlogic/proposition.rb', line 4

def predicate
  @predicate
end

#qualityObject (readonly)

Returns the value of attribute quality.



4
5
6
# File 'lib/catlogic/proposition.rb', line 4

def quality
  @quality
end

#quantityObject (readonly)

Returns the value of attribute quantity.



4
5
6
# File 'lib/catlogic/proposition.rb', line 4

def quantity
  @quantity
end

#subjectObject (readonly)

Returns the value of attribute subject.



4
5
6
# File 'lib/catlogic/proposition.rb', line 4

def subject
  @subject
end

#truthvalueObject (readonly)

Returns the value of attribute truthvalue.



4
5
6
# File 'lib/catlogic/proposition.rb', line 4

def truthvalue
  @truthvalue
end

Instance Method Details

#contradictoryObject



27
28
29
30
31
32
33
34
# File 'lib/catlogic/proposition.rb', line 27

def contradictory

  quantity = @quantity.opposite
  quality = @quality.opposite

  @contradictory = Proposition.new(quantity, @subject, quality, @predicate, !@truthvalue)
  return @contradictory
end

#contrapolatedObject



109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/catlogic/proposition.rb', line 109

def contrapolated
  if self.type.label == "E" || self.type.label == "I"
    truthvalue = "unknown"
  else
    truthvalue = @truthvalue
  end
  subject = @subject.opposite
  predicate = @predicate.opposite

  @contrapolated = Proposition.new(@quantity, predicate, @quality, subject, truthvalue)

end

#contraryObject



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/catlogic/proposition.rb', line 58

def contrary
  if @quantity.label  == "particular"
    puts
    return "There is no contrary for this type of propostion. Try subcontrary"
  end
  quality = @quality.opposite

  if @truthvalue
    truthvalue = !@truthvalue
  elsif !@truthvalue
    truthvalue = "unknown"
  end

  contrary = Proposition.new(@quantity, @subject, quality, @predicate, truthvalue)
  return contrary
end

#converseObject



93
94
95
96
97
98
99
100
# File 'lib/catlogic/proposition.rb', line 93

def converse
  if self.type.label == "A" || self.type.label == "O"
    truthvalue = "unknown"
  else
    truthvalue = @truthvalue
  end
  @converse = Proposition.new(@quantity, @predicate, @quality, @subject, truthvalue)
end

#distribution(position) ⇒ Object



152
153
154
155
156
157
158
159
# File 'lib/catlogic/proposition.rb', line 152

def distribution(position)
  if position == 'subject'
    distribution = @subject.distribution_subject(@quantity)
  elsif position == 'predicate'
    distribution = @predicate.distribution_predicate(@quality)
  end
  return distribution
end

#labelObject



131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# File 'lib/catlogic/proposition.rb', line 131

def label
  if @quantity.label == "universal"
    if @quality.label == "affirmative"
      display_quantity = "All"
      display_quality = "are"
    elsif @quality.label == "negative"
      display_quantity = "No"
      display_quality = "are"
    end
  elsif @quantity.label == "particular"
    if @quality.label == "affirmative"
      display_quantity = "Some"
      display_quality = "are"
    elsif @quality.label == "negative"
      display_quantity = "Some"
      display_quality = "are not"
    end
  end
  "#{display_quantity} #{@subject.label} #{display_quality} #{@predicate.label}"
end

#number_of_occurences(set) ⇒ Object



182
183
184
185
186
187
188
189
190
# File 'lib/catlogic/proposition.rb', line 182

def number_of_occurences(set)
  @occurences = 0
  set.each do |proposition|
    if self.same_as?(proposition)
      @occurences += 1
    end
  end
  @occurences
end

#obverseObject



102
103
104
105
106
107
# File 'lib/catlogic/proposition.rb', line 102

def obverse
  quality = @quality.opposite

  predicate = @predicate.opposite
  @obverse = Proposition.new(@quantity, @subject, quality, predicate, @truthvalue)
end

#position_of_term(term) ⇒ Object



122
123
124
125
126
127
128
129
# File 'lib/catlogic/proposition.rb', line 122

def position_of_term(term)
  if self.subject.label == term.label
    @positionofmiddle = 'subject'
  elsif self.predicate.label == term.label
    @positionofmiddle = 'predicate'
  end
  return @positionofmiddle
end

#same_as?(proposition) ⇒ Boolean

Returns:

  • (Boolean)


161
162
163
164
165
166
167
168
169
170
171
# File 'lib/catlogic/proposition.rb', line 161

def same_as?(proposition)
  if (proposition.quantity.label == self.quantity.label &&
      proposition.subject.label == self.subject.label &&
      proposition.quality.label == self.quality.label &&
      proposition.predicate.label == self.predicate.label &&
      proposition.truthvalue == self.truthvalue)
    true
  else
    false
  end
end

#subalternObject



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/catlogic/proposition.rb', line 36

def subaltern

  quantity = @quantity.opposite

  if @quantity.label == "universal"
    if @truthvalue
      truthvalue = @truthvalue
    elsif !@truthvalue
      truthvalue = "unknown"
    end
  elsif @quantity.label == "particular"
    if !@truthvalue
      truthvalue = !@truthvalue
    elsif @truthvalue
      truthvalue = "unknown"
    end
  end

  @subaltern = Proposition.new(quantity, @subject, @quality, @predicate, truthvalue)
  return @subaltern
end

#subcontraryObject



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/catlogic/proposition.rb', line 75

def subcontrary
  if @quantity.label  == "universal"
    puts "There is no subcontrary for this type of propostion. Try contrary."
    return
  end

  quality = @quality.opposite

  if !@truthvalue
    truthvalue = !@truthvalue
  elsif @truthvalue
    truthvalue = "unknown"
  end

  subcontrary = Proposition.new(@quantity, @subject, quality, @predicate, truthvalue)
  return subcontrary
end

#typeObject



14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/catlogic/proposition.rb', line 14

def type
  if @quantity.label == 'universal' && @quality.label == 'affirmative'
    @type=PropositionType.new("A")
  elsif @quantity.label == 'universal' && @quality.label == 'negative'
    @type=PropositionType.new("E")
  elsif @quantity.label == 'particular' && @quality.label == 'affirmative'
    @type=PropositionType.new("I")
  elsif @quantity.label == 'particular' && @quality.label == 'negative'
    @type=PropositionType.new("O")
  end
  return @type
end

#unique?(set) ⇒ Boolean

Returns:

  • (Boolean)


173
174
175
176
177
178
179
180
# File 'lib/catlogic/proposition.rb', line 173

def unique?(set)
  numerofoccurences = self.number_of_occurences(set)
  if numerofoccurences == 0
    true
  else
    false
  end
end