catlogic 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +14 -0
- data/.rspec +2 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +36 -0
- data/Rakefile +7 -0
- data/bin2/.idea/.name +1 -0
- data/bin2/.idea/bin.iml +9 -0
- data/bin2/.idea/encodings.xml +5 -0
- data/bin2/.idea/misc.xml +5 -0
- data/bin2/.idea/modules.xml +9 -0
- data/bin2/.idea/scopes/scope_settings.xml +5 -0
- data/bin2/.idea/vcs.xml +7 -0
- data/bin2/.idea/workspace.xml +129 -0
- data/bin2/displayInferredTruths.rb +43 -0
- data/bin2/getAllValidPropositions.rb +24 -0
- data/bin2/testCombineSets.rb +27 -0
- data/bin2/testIfUnique.rb +14 -0
- data/bin2/testPremisePair.rb +10 -0
- data/bin2/testProposition.rb +47 -0
- data/bin2/testPropositionType.rb +40 -0
- data/bin2/testQuantity.rb +12 -0
- data/bin2/testReduceToUniqueSet.rb +18 -0
- data/bin2/testSyllogism.rb +45 -0
- data/bin2/testSyllogismForm.rb +51 -0
- data/catlogic.gemspec +25 -0
- data/lib/catlogic/distribution.rb +16 -0
- data/lib/catlogic/figure.rb +45 -0
- data/lib/catlogic/form.rb +22 -0
- data/lib/catlogic/mood.rb +14 -0
- data/lib/catlogic/premise_collection.rb +211 -0
- data/lib/catlogic/premise_pair.rb +61 -0
- data/lib/catlogic/proposition.rb +181 -0
- data/lib/catlogic/proposition_type.rb +47 -0
- data/lib/catlogic/quality.rb +16 -0
- data/lib/catlogic/quantity.rb +16 -0
- data/lib/catlogic/syllogism.rb +171 -0
- data/lib/catlogic/term.rb +32 -0
- data/lib/catlogic/version.rb +3 -0
- data/lib/catlogic.rb +17 -0
- data/spec/distribution_spec.rb +26 -0
- data/spec/figure_spec.rb +27 -0
- data/spec/form_spec.rb +22 -0
- data/spec/mood_spec.rb +17 -0
- data/spec/premise_pair_spec.rb +51 -0
- data/spec/proposition_spec.rb +215 -0
- data/spec/proposition_type_spec.rb +37 -0
- data/spec/quality_spec.rb +17 -0
- data/spec/quantity_spec.rb +19 -0
- data/spec/spec_helper.rb +89 -0
- data/spec/syllogism_spec.rb +121 -0
- data/spec/term_spec.rb +35 -0
- metadata +166 -0
@@ -0,0 +1,171 @@
|
|
1
|
+
# Class for any syllogism object.
|
2
|
+
class Syllogism
|
3
|
+
attr_reader :major, :minor, :conclusion
|
4
|
+
|
5
|
+
# Syllogism object initiation takes three Proposition objects
|
6
|
+
|
7
|
+
def initialize(major, minor, conclusion=nil)
|
8
|
+
@major = major
|
9
|
+
@minor = minor
|
10
|
+
if conclusion == nil
|
11
|
+
@conclusion = self.getComputedConclusion
|
12
|
+
else
|
13
|
+
@conclusion = conclusion
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# This method gets the middle term by looking for the term in the major and minor terms that are used twice.
|
18
|
+
def middle
|
19
|
+
termarray = [@major.subject.label, @major.predicate.label, @minor.subject.label, @minor.predicate.label]
|
20
|
+
middle = nil
|
21
|
+
if self.three_term?
|
22
|
+
termarray.detect do |term|
|
23
|
+
if termarray.count(term) == 2
|
24
|
+
middle = Term.new(term)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
else
|
28
|
+
middle = "Error: this is not a three term syllogism"
|
29
|
+
end
|
30
|
+
middle
|
31
|
+
end
|
32
|
+
|
33
|
+
def three_term?
|
34
|
+
termarray = [@major.subject.label, @major.predicate.label, @minor.subject.label, @minor.predicate.label]
|
35
|
+
if termarray.uniq.size == 3
|
36
|
+
answer = true
|
37
|
+
else
|
38
|
+
answer = false
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
|
44
|
+
# gets the major term as a String from the major premise by identifying the middle term
|
45
|
+
# and then identifying the term in the premise that is not the middle
|
46
|
+
|
47
|
+
def majorterm
|
48
|
+
if @major.subject.label == self.middle.label
|
49
|
+
majorterm = @major.predicate
|
50
|
+
else
|
51
|
+
majorterm = @major.subject
|
52
|
+
end
|
53
|
+
majorterm
|
54
|
+
end
|
55
|
+
def minorterm
|
56
|
+
if @minor.subject.label == self.middle.label
|
57
|
+
minorterm = @minor.predicate
|
58
|
+
else
|
59
|
+
minorterm = @minor.subject
|
60
|
+
end
|
61
|
+
minorterm
|
62
|
+
end
|
63
|
+
|
64
|
+
# returns the Mood object of Syllogism (e.g. AAA, EEE)
|
65
|
+
|
66
|
+
def mood
|
67
|
+
mood = Mood.new(@major.type, @minor.type, @conclusion.type)
|
68
|
+
return mood
|
69
|
+
end
|
70
|
+
|
71
|
+
# gets the Figure of Syllogism (e.g. 1, 2, 3, 4)
|
72
|
+
|
73
|
+
def figure
|
74
|
+
mjmp = @major.position_of_term(self.middle)
|
75
|
+
mnmp = @minor.position_of_term(self.middle)
|
76
|
+
|
77
|
+
if mjmp == 'subject' && mnmp == 'predicate'
|
78
|
+
figure = Figure.new(1)
|
79
|
+
elsif mjmp == 'predicate' && mnmp == 'predicate'
|
80
|
+
figure = Figure.new(2)
|
81
|
+
elsif mjmp == 'subject' && mnmp == 'subject'
|
82
|
+
figure = Figure.new(3)
|
83
|
+
elsif mjmp == 'predicate' && mnmp == 'subject'
|
84
|
+
figure = Figure.new(4)
|
85
|
+
end
|
86
|
+
return figure
|
87
|
+
end
|
88
|
+
|
89
|
+
# Retrieve Form object of the Syllogism (i.e. AAAI, EAI4)
|
90
|
+
def form
|
91
|
+
form = Form.new(self.mood, self.figure)
|
92
|
+
return form
|
93
|
+
end
|
94
|
+
|
95
|
+
def undistributed_middle_test
|
96
|
+
## Rule Number 1 - middle distributed
|
97
|
+
if @major.distribution(@major.position_of_term(self.middle)).label == 'undistributed' && @minor.distribution(@minor.position_of_term(self.middle)).label == 'undistributed'
|
98
|
+
validity = false
|
99
|
+
else
|
100
|
+
validity = true
|
101
|
+
end
|
102
|
+
return validity
|
103
|
+
end
|
104
|
+
|
105
|
+
def illicit_major_test
|
106
|
+
##Rule Number 2a distribution of major term
|
107
|
+
if @conclusion.distribution('predicate').label == 'distributed' && @major.distribution(@major.position_of_term(self.majorterm)).label != 'distributed'
|
108
|
+
validity = false
|
109
|
+
else
|
110
|
+
validity = true
|
111
|
+
end
|
112
|
+
end
|
113
|
+
def illicit_minor_test
|
114
|
+
##Rule Number 2b distribution of minor term - check fallacy of illicit minor
|
115
|
+
if @conclusion.distribution('subject').label == 'distributed' && @minor.distribution(@minor.position_of_term(self.minorterm)).label != 'distributed'
|
116
|
+
validity = false
|
117
|
+
else
|
118
|
+
validty = true
|
119
|
+
end
|
120
|
+
end
|
121
|
+
# exclusive premises
|
122
|
+
def exclusive_premises_test
|
123
|
+
if @major.quality.label == 'negative' && @minor.quality.label == 'negative'
|
124
|
+
validity = false
|
125
|
+
else
|
126
|
+
validity = true
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def affirm_from_neg_test
|
131
|
+
if (@major.quality.label == 'negative' || @minor.quality.label == 'negative') && @conclusion.quality.label != 'negative'
|
132
|
+
validity = false
|
133
|
+
else
|
134
|
+
validity = true
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def neg_from_affirms_test
|
139
|
+
if (@conclusion.quality.label == 'negative' && (@major.quality.label != 'negative' && @minor.quality.label != 'negative'))
|
140
|
+
|
141
|
+
validity = false
|
142
|
+
#validity = "pass"
|
143
|
+
else
|
144
|
+
validity = true
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
|
149
|
+
def validity
|
150
|
+
if (self.undistributed_middle_test != true || self.illicit_major_test != true || self.illicit_minor_test != true || self.exclusive_premises_test != true || self.affirm_from_neg_test != true || self.neg_from_affirms_test != true)
|
151
|
+
validity = false
|
152
|
+
else
|
153
|
+
validity = true
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
def label
|
158
|
+
return "#{@major.label}\n#{@minor.label}\n#{@conclusion.label}"
|
159
|
+
end
|
160
|
+
|
161
|
+
|
162
|
+
|
163
|
+
|
164
|
+
|
165
|
+
|
166
|
+
|
167
|
+
def displayPropositionalForm
|
168
|
+
form = Form.new(self.mood, self.figure)
|
169
|
+
form.displayPropositionalForm
|
170
|
+
end
|
171
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class Term
|
2
|
+
attr_reader :label
|
3
|
+
|
4
|
+
def initialize(termname)
|
5
|
+
@label = termname
|
6
|
+
end
|
7
|
+
|
8
|
+
def opposite
|
9
|
+
opposite = Term.new("non-#{@label}")
|
10
|
+
return opposite
|
11
|
+
end
|
12
|
+
|
13
|
+
def distribution_subject(quantity)
|
14
|
+
if quantity.label == 'universal'
|
15
|
+
@distribution = Distribution.new('distributed')
|
16
|
+
elsif quantity.label == 'particular'
|
17
|
+
@distribution = Distribution.new('undistributed')
|
18
|
+
end
|
19
|
+
return @distribution
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
def distribution_predicate(quality)
|
24
|
+
if quality.label == 'affirmative'
|
25
|
+
@distribution = Distribution.new('undistributed')
|
26
|
+
elsif quality.label == 'negative'
|
27
|
+
@distribution = Distribution.new('distributed')
|
28
|
+
end
|
29
|
+
return @distribution
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
data/lib/catlogic.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require "catlogic/version"
|
2
|
+
|
3
|
+
#module Catlogic
|
4
|
+
# Your code goes here...
|
5
|
+
require "catlogic/distribution"
|
6
|
+
require "catlogic/quality"
|
7
|
+
require "catlogic/quantity"
|
8
|
+
require "catlogic/term"
|
9
|
+
require "catlogic/proposition"
|
10
|
+
require "catlogic/proposition_type"
|
11
|
+
require "catlogic/syllogism"
|
12
|
+
require "catlogic/figure"
|
13
|
+
require "catlogic/mood"
|
14
|
+
require "catlogic/form"
|
15
|
+
require "catlogic/premise_pair"
|
16
|
+
require "catlogic/premise_collection"
|
17
|
+
#end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'catlogic'
|
3
|
+
require 'pry'
|
4
|
+
|
5
|
+
describe 'distribution object' do
|
6
|
+
it 'can return distribution label as string' do
|
7
|
+
term = Distribution.new('distributed')
|
8
|
+
result = term.label
|
9
|
+
result.should == 'distributed'
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'can return distribution opposite label as string' do
|
13
|
+
term = Distribution.new('distributed')
|
14
|
+
opposite = term.opposite
|
15
|
+
result = opposite.label
|
16
|
+
result.should == 'undistributed'
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'can return undistributed opposite label as string' do
|
20
|
+
term = Distribution.new('undistributed')
|
21
|
+
opposite = term.opposite
|
22
|
+
result = opposite.label
|
23
|
+
result.should == 'distributed'
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
data/spec/figure_spec.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "catlogic"
|
3
|
+
|
4
|
+
describe "figure object" do
|
5
|
+
$figure_1 = Figure.new(1)
|
6
|
+
|
7
|
+
it "should return the label of the figure type object" do
|
8
|
+
label = $figure_1.label
|
9
|
+
label.should == 1
|
10
|
+
end
|
11
|
+
it "should return the major type subject term object" do
|
12
|
+
subject = $figure_1.major_subject
|
13
|
+
subject.label.should == "M"
|
14
|
+
end
|
15
|
+
it "should return the major type predicate term object" do
|
16
|
+
subject = $figure_1.major_predicate
|
17
|
+
subject.label.should == "P"
|
18
|
+
end
|
19
|
+
it "should return the minor type subject term object" do
|
20
|
+
subject = $figure_1.minor_subject
|
21
|
+
subject.label.should == "S"
|
22
|
+
end
|
23
|
+
it "should return the minor type predicate term object" do
|
24
|
+
subject = $figure_1.minor_predicate
|
25
|
+
subject.label.should == "M"
|
26
|
+
end
|
27
|
+
end
|
data/spec/form_spec.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "catlogic"
|
3
|
+
|
4
|
+
describe "form object" do
|
5
|
+
mood_aaa = Mood.new(PropositionType.new('A'), PropositionType.new('A'), PropositionType.new('A'))
|
6
|
+
figure_1 = Figure.new(1)
|
7
|
+
$form = Form.new(mood_aaa, figure_1)
|
8
|
+
|
9
|
+
it "should return form label" do
|
10
|
+
label = $form.label
|
11
|
+
label.should == "AAA1"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should return a syllogism object for the given form" do
|
15
|
+
syllogism = $form.syllogism
|
16
|
+
major = syllogism.major
|
17
|
+
minor = syllogism.minor
|
18
|
+
conclusion = syllogism.conclusion
|
19
|
+
|
20
|
+
major.label == "All M are P" && minor.label == "All S are M" && conclusion.label == "All S are P"
|
21
|
+
end
|
22
|
+
end
|
data/spec/mood_spec.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "catlogic"
|
3
|
+
|
4
|
+
describe "mood object" do
|
5
|
+
|
6
|
+
$moodobject_aaa = Mood.new(PropositionType.new('A'), PropositionType.new('A'), PropositionType.new('A'))
|
7
|
+
|
8
|
+
it 'can display the label of the mood object' do
|
9
|
+
mood = $moodobject_aaa.label
|
10
|
+
mood.should == 'AAA'
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'can get the major type proposition' do
|
14
|
+
majortype = $moodobject_aaa.majortype
|
15
|
+
majortype.label.should === 'A'
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'catlogic'
|
3
|
+
|
4
|
+
describe "premise pair object" do
|
5
|
+
|
6
|
+
$major = Proposition.new(Quantity.new("universal"), Term.new("Mammals"), Quality.new("affirmative"), Term.new("Dogs"), true)
|
7
|
+
$minor = Proposition.new(Quantity.new("universal"), Term.new("Mammals"), Quality.new("affirmative"), Term.new("Mortal Things"), true)
|
8
|
+
$pair = PremisePair.new($major, $minor)
|
9
|
+
|
10
|
+
it 'can return the major proposition' do
|
11
|
+
result = $pair.major
|
12
|
+
result.should == $major
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'can return the minor proposition' do
|
16
|
+
result = $pair.minor
|
17
|
+
result.should == $minor
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'can provide true result when this pair has three and only three distinct terms' do
|
21
|
+
result = $pair.three_term_pair?
|
22
|
+
result.should == true
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'can return false result when this pair has only two distinct terms' do
|
26
|
+
major = Proposition.new(Quantity.new("universal"), Term.new("Mammals"), Quality.new("affirmative"), Term.new("Dogs"), true)
|
27
|
+
minor = Proposition.new(Quantity.new("universal"), Term.new("Dogs"), Quality.new("affirmative"), Term.new("Mammals"), true)
|
28
|
+
pair = PremisePair.new(major, minor)
|
29
|
+
|
30
|
+
result = pair.three_term_pair?
|
31
|
+
result.should == false
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'can return false result when this pair has only four distinct terms' do
|
35
|
+
major = Proposition.new(Quantity.new("universal"), Term.new("Mammals"), Quality.new("affirmative"), Term.new("Dogs"), true)
|
36
|
+
minor = Proposition.new(Quantity.new("universal"), Term.new("Cats"), Quality.new("affirmative"), Term.new("Wicked"), true)
|
37
|
+
pair = PremisePair.new(major, minor)
|
38
|
+
|
39
|
+
result = pair.three_term_pair?
|
40
|
+
result.should == false
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'can return middle term of pair' do
|
44
|
+
result = $pair.middle
|
45
|
+
result.label.should == "Mammals"
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,215 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'catlogic'
|
3
|
+
|
4
|
+
describe 'proposition object' do
|
5
|
+
$propositionAtrue = Proposition.new(Quantity.new("universal"), Term.new('dogs'), Quality.new("affirmative"), Term.new('mortal things'), true)
|
6
|
+
$propositionIfalse = Proposition.new(Quantity.new("particular"), Term.new('dogs'), Quality.new("affirmative"), Term.new('mortal things'), false)
|
7
|
+
$propositionItrue = Proposition.new(Quantity.new("particular"), Term.new('dogs'), Quality.new("affirmative"), Term.new('mortal things'), true)
|
8
|
+
it 'can return the quantity' do
|
9
|
+
result = $propositionAtrue.quantity
|
10
|
+
result.label.should == 'universal'
|
11
|
+
end
|
12
|
+
it 'can return the quality' do
|
13
|
+
result = $propositionAtrue.quality
|
14
|
+
result.label.should == 'affirmative'
|
15
|
+
end
|
16
|
+
it 'can return the subject' do
|
17
|
+
result = $propositionAtrue.subject
|
18
|
+
result.label.should == 'dogs'
|
19
|
+
end
|
20
|
+
it 'can return the predicate' do
|
21
|
+
result = $propositionAtrue.predicate
|
22
|
+
result.label.should == 'mortal things'
|
23
|
+
end
|
24
|
+
it 'can return the truth value' do
|
25
|
+
result = $propositionAtrue.truthvalue
|
26
|
+
result.should == true
|
27
|
+
end
|
28
|
+
it 'can return the type of proposition' do
|
29
|
+
type = $propositionAtrue.type
|
30
|
+
type.label.should == "A"
|
31
|
+
end
|
32
|
+
it 'can return the contradictory' do
|
33
|
+
quality = $propositionAtrue.contradictory.quality
|
34
|
+
quantity = $propositionAtrue.contradictory.quantity
|
35
|
+
# need a better test that can test the object rather than just string outputs
|
36
|
+
quality.label.should == "negative" && quantity.label.should == "particular"
|
37
|
+
end
|
38
|
+
it 'can return the correct subaltern of A proposition' do
|
39
|
+
# the sub altern of an A type proposition should be True I proposition
|
40
|
+
subaltern = $propositionAtrue.subaltern
|
41
|
+
quantity = subaltern.quantity
|
42
|
+
subject = subaltern.quality
|
43
|
+
quality = subaltern.quality
|
44
|
+
predicate = subaltern.quality
|
45
|
+
truthvalue = subaltern.truthvalue
|
46
|
+
|
47
|
+
quantity.label.should == "particular" &&
|
48
|
+
subject.label == "dogs" &&
|
49
|
+
quality.label.should == "affirmative" &&
|
50
|
+
predicate.label.should == "mortal things" &&
|
51
|
+
truthvalue.should == true
|
52
|
+
end
|
53
|
+
it 'can return the correct contra of a true A Proposition' do
|
54
|
+
contrary = $propositionAtrue.contrary
|
55
|
+
quantity = contrary.quantity
|
56
|
+
subject = contrary.quality
|
57
|
+
quality = contrary.quality
|
58
|
+
predicate = contrary.quality
|
59
|
+
truthvalue = contrary.truthvalue
|
60
|
+
|
61
|
+
quantity.label.should == "universal" &&
|
62
|
+
subject.label == "dogs" &&
|
63
|
+
quality.label.should == "negative" &&
|
64
|
+
predicate.label.should == "mortal things" &&
|
65
|
+
truthvalue.should == false
|
66
|
+
end
|
67
|
+
it 'can return the correct subcontrary response of a true I Proposition' do
|
68
|
+
subcontrary = $propositionIfalse.subcontrary
|
69
|
+
quantity = subcontrary.quantity
|
70
|
+
subject = subcontrary.quality
|
71
|
+
quality = subcontrary.quality
|
72
|
+
predicate = subcontrary.quality
|
73
|
+
truthvalue = subcontrary.truthvalue
|
74
|
+
|
75
|
+
quantity.label.should == "particular" &&
|
76
|
+
subject.label == "dogs" &&
|
77
|
+
quality.label.should == "negative" &&
|
78
|
+
predicate.label.should == "mortal things" &&
|
79
|
+
truthvalue.should == true
|
80
|
+
end
|
81
|
+
it 'can return the correct converse of an true I proposition' do
|
82
|
+
converse = $propositionItrue.converse
|
83
|
+
quantity = converse.quantity
|
84
|
+
subject = converse.quality
|
85
|
+
quality = converse.quality
|
86
|
+
predicate = converse.quality
|
87
|
+
truthvalue = converse.truthvalue
|
88
|
+
|
89
|
+
quantity.label.should == "particular" &&
|
90
|
+
subject.label == "mortal things" &&
|
91
|
+
quality.label.should == "negative" &&
|
92
|
+
predicate.label.should == "dogs" &&
|
93
|
+
truthvalue.should == true
|
94
|
+
|
95
|
+
end
|
96
|
+
it 'can return the obverse of an true A proposition' do
|
97
|
+
obverse = $propositionAtrue.converse
|
98
|
+
quantity = obverse.quantity
|
99
|
+
subject = obverse.quality
|
100
|
+
quality = obverse.quality
|
101
|
+
predicate = obverse.quality
|
102
|
+
truthvalue = obverse.truthvalue
|
103
|
+
|
104
|
+
quantity.label.should == "universal" &&
|
105
|
+
subject.label == "dogs" &&
|
106
|
+
quality.label.should == "negative" &&
|
107
|
+
predicate.label.should == "non-mortal things" &&
|
108
|
+
truthvalue.should == true
|
109
|
+
end
|
110
|
+
it 'can return the obverse of a true A proposition' do
|
111
|
+
obverse = $propositionAtrue.converse
|
112
|
+
quantity = obverse.quantity
|
113
|
+
subject = obverse.quality
|
114
|
+
quality = obverse.quality
|
115
|
+
predicate = obverse.quality
|
116
|
+
truthvalue = obverse.truthvalue
|
117
|
+
|
118
|
+
quantity.label.should == "universal" &&
|
119
|
+
subject.label == "dogs" &&
|
120
|
+
quality.label.should == "negative" &&
|
121
|
+
predicate.label.should == "non-mortal things" &&
|
122
|
+
truthvalue.should == true
|
123
|
+
end
|
124
|
+
it 'can return the correct contrapolated proposition of a true A proposition' do
|
125
|
+
contrapolated = $propositionAtrue.converse
|
126
|
+
quantity = contrapolated.quantity
|
127
|
+
subject = contrapolated.quality
|
128
|
+
quality = contrapolated.quality
|
129
|
+
predicate = contrapolated.quality
|
130
|
+
truthvalue = contrapolated.truthvalue
|
131
|
+
|
132
|
+
quantity.label.should == "universal" &&
|
133
|
+
subject.label == "non-mortal things" &&
|
134
|
+
quality.label.should == "affirmative" &&
|
135
|
+
predicate.label.should == "non-dogs" &&
|
136
|
+
truthvalue.should == true
|
137
|
+
end
|
138
|
+
it 'can return the correct position of a designated middle term -- in this case dogs' do
|
139
|
+
middleterm = Term.new('dogs')
|
140
|
+
position = $propositionAtrue.position_of_term(middleterm)
|
141
|
+
position.should == 'subject'
|
142
|
+
end
|
143
|
+
it 'can return a human readable version of an A proposition' do
|
144
|
+
label = $propositionAtrue.label
|
145
|
+
label.should == 'All dogs are mortal things'
|
146
|
+
end
|
147
|
+
it 'can return a human readable version of an I proposition' do
|
148
|
+
label = $propositionItrue.label
|
149
|
+
label.should == 'Some dogs are mortal things'
|
150
|
+
end
|
151
|
+
|
152
|
+
it 'can return distribution for a designated subject term position' do
|
153
|
+
distribution = $propositionAtrue.distribution('subject')
|
154
|
+
distribution.label.should == "distributed"
|
155
|
+
end
|
156
|
+
|
157
|
+
it 'can return distribution for a designated predicate term position' do
|
158
|
+
distribution = $propositionItrue.distribution('predicate')
|
159
|
+
distribution.label.should == "undistributed"
|
160
|
+
end
|
161
|
+
|
162
|
+
it 'can identify that a given proposition is repeated one time in given array' do
|
163
|
+
premisesArray = [
|
164
|
+
Proposition.new(Quantity.new("universal"), Term.new("Events"), Quality.new("affirmative"), Term.new("Caused Happenings"), true),
|
165
|
+
Proposition.new(Quantity.new("universal"), Term.new("Free Decisions"), Quality.new("negative"), Term.new("Caused Happenings"), true),
|
166
|
+
Proposition.new(Quantity.new("universal"), Term.new("Fun"), Quality.new("affirmative"), Term.new("Events"), true)
|
167
|
+
]
|
168
|
+
|
169
|
+
proposition = Proposition.new(Quantity.new("universal"), Term.new("Free Decisions"), Quality.new("negative"), Term.new("Caused Happenings"), true)
|
170
|
+
|
171
|
+
result = proposition.number_of_occurences(premisesArray)
|
172
|
+
result.should == 1
|
173
|
+
end
|
174
|
+
|
175
|
+
it 'can identify that a given proposition is repeated zero times in given array' do
|
176
|
+
premisesArray = [
|
177
|
+
Proposition.new(Quantity.new("universal"), Term.new("Events"), Quality.new("affirmative"), Term.new("Caused Happenings"), true),
|
178
|
+
Proposition.new(Quantity.new("universal"), Term.new("Free Decisions"), Quality.new("negative"), Term.new("Caused Happenings"), true),
|
179
|
+
Proposition.new(Quantity.new("universal"), Term.new("Fun"), Quality.new("affirmative"), Term.new("Events"), true)
|
180
|
+
]
|
181
|
+
|
182
|
+
proposition = Proposition.new(Quantity.new("universal"), Term.new("Free Decisions"), Quality.new("affirmative"), Term.new("Caused Happenings"), true)
|
183
|
+
|
184
|
+
result = proposition.number_of_occurences(premisesArray)
|
185
|
+
result.should == 0
|
186
|
+
end
|
187
|
+
it 'can return answer true when proposition is unique (not included) in a given set' do
|
188
|
+
|
189
|
+
premisesArray = [
|
190
|
+
Proposition.new(Quantity.new("universal"), Term.new("Events"), Quality.new("affirmative"), Term.new("Caused Happenings"), true),
|
191
|
+
Proposition.new(Quantity.new("universal"), Term.new("Free Decisions"), Quality.new("negative"), Term.new("Caused Happenings"), true),
|
192
|
+
Proposition.new(Quantity.new("universal"), Term.new("Fun"), Quality.new("affirmative"), Term.new("Events"), true)
|
193
|
+
]
|
194
|
+
|
195
|
+
proposition = Proposition.new(Quantity.new("universal"), Term.new("Free Decisions"), Quality.new("affirmative"), Term.new("Caused Happenings"), true)
|
196
|
+
|
197
|
+
result = proposition.unique?(premisesArray)
|
198
|
+
|
199
|
+
result.should == true
|
200
|
+
end
|
201
|
+
it 'can return answer false when proposition is not unique (i.e. is included) in a given set' do
|
202
|
+
|
203
|
+
premisesArray = [
|
204
|
+
Proposition.new(Quantity.new("universal"), Term.new("Events"), Quality.new("affirmative"), Term.new("Caused Happenings"), true),
|
205
|
+
Proposition.new(Quantity.new("universal"), Term.new("Free Decisions"), Quality.new("negative"), Term.new("Caused Happenings"), true),
|
206
|
+
Proposition.new(Quantity.new("universal"), Term.new("Fun"), Quality.new("affirmative"), Term.new("Events"), true)
|
207
|
+
]
|
208
|
+
|
209
|
+
proposition = Proposition.new(Quantity.new("universal"), Term.new("Free Decisions"), Quality.new("negative"), Term.new("Caused Happenings"), true)
|
210
|
+
|
211
|
+
result = proposition.unique?(premisesArray)
|
212
|
+
|
213
|
+
result.should == false
|
214
|
+
end
|
215
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'catlogic'
|
3
|
+
|
4
|
+
describe 'proposition_type object' do
|
5
|
+
$typeA = PropositionType.new("A")
|
6
|
+
$typeE = PropositionType.new("E")
|
7
|
+
$typeI = PropositionType.new("I")
|
8
|
+
$typeO = PropositionType.new("O")
|
9
|
+
|
10
|
+
it 'can return the correct label for a proposition type A' do
|
11
|
+
result = $typeA.label
|
12
|
+
result.should == "A"
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'can return the correct label for a proposition type O' do
|
16
|
+
result = $typeO.label
|
17
|
+
result.should == "O"
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'can return the correct quantity for proposition type E' do
|
21
|
+
result = $typeE.quantity.label
|
22
|
+
result.should == "universal"
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'can return the correct proposition for proposition type I' do
|
26
|
+
proposition = $typeI.proposition
|
27
|
+
|
28
|
+
# prefer a test on the object construction but I don't know how to do that
|
29
|
+
quantity = proposition.quantity.label
|
30
|
+
subject = proposition.subject.label
|
31
|
+
quality = proposition.quality.label
|
32
|
+
predicate = proposition.predicate.label
|
33
|
+
quantity.should == "particular" && subject.should == "S" && quality.should == "affirmative" && predicate.should == "P"
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'catlogic'
|
3
|
+
|
4
|
+
describe 'quality object' do
|
5
|
+
it 'can return quality as string' do
|
6
|
+
quality = Quality.new('affirmative')
|
7
|
+
result = quality.label
|
8
|
+
result.should == 'affirmative'
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'can return term opposite as string' do
|
12
|
+
quality = Quality.new('affirmative')
|
13
|
+
opposite = quality.opposite
|
14
|
+
result = opposite.label
|
15
|
+
result.should == 'negative'
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'catlogic'
|
3
|
+
require 'pry'
|
4
|
+
|
5
|
+
describe 'quantity object' do
|
6
|
+
it 'can return quantity as string' do
|
7
|
+
quantity = Quantity.new('universal')
|
8
|
+
result = quantity.label
|
9
|
+
result.should == 'universal'
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'can return term opposite as string' do
|
13
|
+
quantity = Quantity.new('particular')
|
14
|
+
opposite = quantity.opposite
|
15
|
+
result = opposite.label
|
16
|
+
|
17
|
+
result.should == 'universal'
|
18
|
+
end
|
19
|
+
end
|