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) ⇒ 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)
  @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



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

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
# File 'lib/catlogic/proposition.rb', line 58

def contrary
  if @quantity.label  == "particular"
    abort("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



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

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



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

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

#labelObject



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

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



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

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

#obverseObject



100
101
102
103
104
105
# File 'lib/catlogic/proposition.rb', line 100

def obverse
  quality = @quality.opposite

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

#position_of_term(term) ⇒ Object



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

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)


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

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



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

def subcontrary
  if @quantity.label  == "universal"
    abort("There is no subcontrary for this type of propostion. Try contrary.")
  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)


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

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