syllogism 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.github/workflows/test.yml +47 -0
- data/.gitignore +11 -0
- data/.rspec +3 -0
- data/Gemfile +7 -0
- data/Gemfile.lock +34 -0
- data/LICENSE.txt +21 -0
- data/README.md +55 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/syllogism.rb +148 -0
- data/lib/syllogism/all.rb +9 -0
- data/lib/syllogism/atom.rb +13 -0
- data/lib/syllogism/general_term.rb +11 -0
- data/lib/syllogism/negation.rb +9 -0
- data/lib/syllogism/no.rb +9 -0
- data/lib/syllogism/quantity.rb +9 -0
- data/lib/syllogism/singular_term.rb +11 -0
- data/lib/syllogism/some.rb +9 -0
- data/lib/syllogism/statement.rb +92 -0
- data/lib/syllogism/term.rb +13 -0
- data/lib/syllogism/term_distributor.rb +52 -0
- data/lib/syllogism/unknown.rb +7 -0
- data/lib/syllogism/verb.rb +9 -0
- data/lib/syllogism/version.rb +3 -0
- data/lib/syllogism/wff_checker.rb +36 -0
- data/syllogism.gemspec +29 -0
- metadata +74 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 2a4c518dea8c0143286b978109c6b817f405594d7b0b5b6594d3a064ad939a02
|
4
|
+
data.tar.gz: c5de24d6472be0aa3266924734f52052ca8171fa36c8605bc44c302f0027298e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: abacbd989dcd3255bf90038ed25bc01362994610272067eff8f42cc5ac3ecbd4f8680c717d09232c079923c41b4e19286963b2249894565055e19f0681b920e3
|
7
|
+
data.tar.gz: 22d3ed160079a7ed1e96074fec616272dee0fb96516eb788bcc80830257407708ba41555ba65987095a4af57fdbd0c5d757325e3ab6f07abad3159962d789801
|
@@ -0,0 +1,47 @@
|
|
1
|
+
name: Tests
|
2
|
+
|
3
|
+
on:
|
4
|
+
pull_request:
|
5
|
+
branches:
|
6
|
+
- main
|
7
|
+
push:
|
8
|
+
branches:
|
9
|
+
- main
|
10
|
+
|
11
|
+
jobs:
|
12
|
+
unit_tests:
|
13
|
+
name: Unit Tests
|
14
|
+
if: "contains(github.event.commits[0].message, '[ci skip]') == false"
|
15
|
+
strategy:
|
16
|
+
fail-fast: false
|
17
|
+
matrix:
|
18
|
+
os:
|
19
|
+
- macos
|
20
|
+
- ubuntu
|
21
|
+
ruby:
|
22
|
+
- 2.4
|
23
|
+
- 2.5
|
24
|
+
- 2.6
|
25
|
+
- 2.7
|
26
|
+
- 3.0
|
27
|
+
allow_failures:
|
28
|
+
- false
|
29
|
+
include:
|
30
|
+
- os: ubuntu
|
31
|
+
ruby: ruby-head
|
32
|
+
allow_failures: true
|
33
|
+
env:
|
34
|
+
BUNDLE_GEMFILE: "${{ matrix.gemfile }}"
|
35
|
+
ALLOW_FAILURES: "${{ matrix.allow_failures }}"
|
36
|
+
runs-on: ${{ matrix.os }}-latest
|
37
|
+
continue-on-error: ${{ endsWith(matrix.ruby, 'head') || matrix.ruby == 'debug' }}
|
38
|
+
steps:
|
39
|
+
- name: Checkout
|
40
|
+
uses: actions/checkout@v2
|
41
|
+
- name: Setup Ruby
|
42
|
+
uses: ruby/setup-ruby@v1
|
43
|
+
with:
|
44
|
+
ruby-version: ${{ matrix.ruby }}
|
45
|
+
bundler-cache: true
|
46
|
+
- name: Test
|
47
|
+
run: bundle exec rake spec || $ALLOW_FAILURES
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
syllogism (0.1.0)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
diff-lcs (1.4.4)
|
10
|
+
rake (12.3.3)
|
11
|
+
rspec (3.10.0)
|
12
|
+
rspec-core (~> 3.10.0)
|
13
|
+
rspec-expectations (~> 3.10.0)
|
14
|
+
rspec-mocks (~> 3.10.0)
|
15
|
+
rspec-core (3.10.1)
|
16
|
+
rspec-support (~> 3.10.0)
|
17
|
+
rspec-expectations (3.10.1)
|
18
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
19
|
+
rspec-support (~> 3.10.0)
|
20
|
+
rspec-mocks (3.10.2)
|
21
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
22
|
+
rspec-support (~> 3.10.0)
|
23
|
+
rspec-support (3.10.2)
|
24
|
+
|
25
|
+
PLATFORMS
|
26
|
+
ruby
|
27
|
+
|
28
|
+
DEPENDENCIES
|
29
|
+
rake (~> 12.0)
|
30
|
+
rspec (~> 3.0)
|
31
|
+
syllogism!
|
32
|
+
|
33
|
+
BUNDLED WITH
|
34
|
+
2.1.2
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2021 Jayson Virissimo
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
# Syllogism
|
2
|
+
|
3
|
+
Check if individual statements are well-formed formulas and if whole arguments are valid in in Aristotelian logic.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'syllogism'
|
11
|
+
```
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
$ bundle install
|
16
|
+
|
17
|
+
Or install it yourself as:
|
18
|
+
|
19
|
+
$ gem install syllogism
|
20
|
+
|
21
|
+
## Usage
|
22
|
+
|
23
|
+
```ruby
|
24
|
+
# Individual statements:
|
25
|
+
Syllogism::Statement.parse('all 1s are numbers').tap do |invalid_statement|
|
26
|
+
invalid_statement.wff? # => false
|
27
|
+
invalid_statement.errors
|
28
|
+
# => ["'1s' is an unknown atom", "'numbers' is an unknown atom"]
|
29
|
+
end
|
30
|
+
|
31
|
+
Syllogism::Statement.parse('all X is Y').tap do |valid_statement|
|
32
|
+
valid_statement.wff? # => true
|
33
|
+
valid_statement.errors # => []
|
34
|
+
end
|
35
|
+
|
36
|
+
# Entire arguments:
|
37
|
+
Syllogism['all P is S', 'j is P', 'j is S'].valid? # => true
|
38
|
+
|
39
|
+
Syllogism['no A is B', 'no C is A', 'no C is B'].valid? # => false
|
40
|
+
```
|
41
|
+
|
42
|
+
## Development
|
43
|
+
|
44
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
45
|
+
|
46
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
47
|
+
|
48
|
+
## Contributing
|
49
|
+
|
50
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/jaysonvirissimo/syllogism.
|
51
|
+
|
52
|
+
|
53
|
+
## License
|
54
|
+
|
55
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "syllogism"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
data/lib/syllogism.rb
ADDED
@@ -0,0 +1,148 @@
|
|
1
|
+
require "syllogism/atom"
|
2
|
+
require "syllogism/quantity"
|
3
|
+
require "syllogism/all"
|
4
|
+
require "syllogism/term"
|
5
|
+
require "syllogism/general_term"
|
6
|
+
require "syllogism/negation"
|
7
|
+
require "syllogism/no"
|
8
|
+
require "syllogism/singular_term"
|
9
|
+
require "syllogism/some"
|
10
|
+
require "syllogism/unknown"
|
11
|
+
require "syllogism/verb"
|
12
|
+
require "syllogism/statement"
|
13
|
+
require "syllogism/term_distributor"
|
14
|
+
require "syllogism/version"
|
15
|
+
require "syllogism/wff_checker"
|
16
|
+
|
17
|
+
class Syllogism
|
18
|
+
attr_reader :errors, :statements
|
19
|
+
|
20
|
+
def self.[](*raw_statements)
|
21
|
+
parse(*raw_statements)
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.parse(*raw_statements)
|
25
|
+
new(raw_statements.map { |raw_statement| Statement.parse(raw_statement) })
|
26
|
+
end
|
27
|
+
|
28
|
+
def initialize(statements)
|
29
|
+
@errors = []
|
30
|
+
@statements = statements
|
31
|
+
end
|
32
|
+
|
33
|
+
def premises
|
34
|
+
@premises ||= statements.take(statements.length - 1)
|
35
|
+
end
|
36
|
+
|
37
|
+
def conclusion
|
38
|
+
@conclusion ||= statements.last
|
39
|
+
end
|
40
|
+
|
41
|
+
def valid?
|
42
|
+
statements_are_well_formed? &&
|
43
|
+
meets_definition_of_syllogism? &&
|
44
|
+
distribute_terms &&
|
45
|
+
star_premises &&
|
46
|
+
star_conclusion &&
|
47
|
+
passes_star_test?
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
attr_writer :errors
|
53
|
+
|
54
|
+
def contains_statements?
|
55
|
+
if statements.any?
|
56
|
+
true
|
57
|
+
else
|
58
|
+
errors.push("By definition, a syllogism must contain at least one statement")
|
59
|
+
false
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def distribute_terms
|
64
|
+
statements.each(&:distribute) && true
|
65
|
+
end
|
66
|
+
|
67
|
+
def exactly_two_of_each_term?
|
68
|
+
if term_histogram.values.all? { |count| count == 2 }
|
69
|
+
true
|
70
|
+
else
|
71
|
+
term_histogram.reject { |_term, count| count == 2 }.each do |term, count|
|
72
|
+
errors.push("The term '#{term}' occured #{count} time(s), but should occur exactly twice")
|
73
|
+
end
|
74
|
+
|
75
|
+
false
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def every_general_term_is_starred_exactly_once
|
80
|
+
statements.each_with_object(Hash.new(0)) do |statement, stars|
|
81
|
+
statement.general_terms.each do |general_term|
|
82
|
+
stars[general_term.value] += 1 if general_term.starred?
|
83
|
+
end
|
84
|
+
end.values.all? { |star_count| star_count == 1 }
|
85
|
+
end
|
86
|
+
|
87
|
+
def forms_a_chain?
|
88
|
+
(0...statements.count - 1).map do |index|
|
89
|
+
current_statement = statements[index]
|
90
|
+
next_statement = statements[index + 1]
|
91
|
+
current_terms = current_statement.terms.map(&:value)
|
92
|
+
next_terms = next_statement.terms.map(&:value)
|
93
|
+
|
94
|
+
if (current_terms - next_terms).length == 1
|
95
|
+
true
|
96
|
+
else
|
97
|
+
errors.push("'#{current_statement}'' should share exactly one term with '#{next_statement}'")
|
98
|
+
false
|
99
|
+
end
|
100
|
+
end.all?
|
101
|
+
end
|
102
|
+
|
103
|
+
def meets_definition_of_syllogism?
|
104
|
+
contains_statements? && exactly_two_of_each_term? && forms_a_chain?
|
105
|
+
end
|
106
|
+
|
107
|
+
# See Harry Gensler's paper, _A simplified decision procedure for categorical syllogisms._
|
108
|
+
# https://projecteuclid.org/journals/notre-dame-journal-of-formal-logic/volume-14/issue-4/A-simplified-decision-procedure-for-categorical-syllogisms/10.1305/ndjfl/1093891100.full
|
109
|
+
def passes_star_test?
|
110
|
+
every_general_term_is_starred_exactly_once &&
|
111
|
+
there_is_exactly_one_star_on_the_right_hand_side
|
112
|
+
end
|
113
|
+
|
114
|
+
def star_premises
|
115
|
+
premises.each do |premise|
|
116
|
+
premise.terms.each do |term|
|
117
|
+
term.starred = term.distributed?
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def star_conclusion
|
123
|
+
conclusion.terms.each do |term|
|
124
|
+
term.starred = !term.distributed?
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
def statements_are_well_formed?
|
129
|
+
statements.map do |statement|
|
130
|
+
if statement.wff?
|
131
|
+
true
|
132
|
+
else
|
133
|
+
statement.errors.each { |error| errors.push(error) }
|
134
|
+
false
|
135
|
+
end
|
136
|
+
end.all?
|
137
|
+
end
|
138
|
+
|
139
|
+
def term_histogram
|
140
|
+
statements.flat_map(&:terms).map(&:value).each_with_object(Hash.new(0)) do |value, hash|
|
141
|
+
hash[value] += 1
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def there_is_exactly_one_star_on_the_right_hand_side
|
146
|
+
statements.map(&:predicate).count(&:starred?) == 1
|
147
|
+
end
|
148
|
+
end
|
data/lib/syllogism/no.rb
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
class Syllogism
|
2
|
+
class Statement
|
3
|
+
attr_reader :atoms, :errors
|
4
|
+
|
5
|
+
def self.[](string)
|
6
|
+
parse(string)
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.atomize(word)
|
10
|
+
ATOMIC_TYPES.map do |type|
|
11
|
+
type.new(word)
|
12
|
+
end.detect { |atom| atom.match? }
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.parse(string)
|
16
|
+
new(string.split(" ").map { |word| atomize(word) })
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize(atoms)
|
20
|
+
@atoms = atoms
|
21
|
+
@errors = []
|
22
|
+
end
|
23
|
+
|
24
|
+
def distribute
|
25
|
+
TermDistributor.new(self).call
|
26
|
+
end
|
27
|
+
|
28
|
+
def general_terms
|
29
|
+
terms.select { |term| term.instance_of?(GeneralTerm) }
|
30
|
+
end
|
31
|
+
|
32
|
+
def predicate
|
33
|
+
terms.last
|
34
|
+
end
|
35
|
+
|
36
|
+
def subject
|
37
|
+
terms.first
|
38
|
+
end
|
39
|
+
|
40
|
+
def terms
|
41
|
+
@terms ||= atoms.select { |atom| TERM_TYPES.include?(atom.class) }
|
42
|
+
end
|
43
|
+
|
44
|
+
def to_s
|
45
|
+
atoms.map(&:value).join(" ")
|
46
|
+
end
|
47
|
+
|
48
|
+
def wff?
|
49
|
+
known_atoms? && verb? && known_formula?
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
ATOMIC_TYPES = [
|
55
|
+
All,
|
56
|
+
No,
|
57
|
+
Some,
|
58
|
+
GeneralTerm,
|
59
|
+
Verb,
|
60
|
+
Negation,
|
61
|
+
SingularTerm,
|
62
|
+
Unknown
|
63
|
+
].freeze
|
64
|
+
|
65
|
+
TERM_TYPES = [GeneralTerm, SingularTerm].freeze
|
66
|
+
|
67
|
+
def known_atoms?
|
68
|
+
unknown.none?
|
69
|
+
end
|
70
|
+
|
71
|
+
def known_formula?
|
72
|
+
WffChecker.new(self).any?
|
73
|
+
end
|
74
|
+
|
75
|
+
def unknown
|
76
|
+
@unknown ||= atoms.select do |atom|
|
77
|
+
atom.instance_of?(Unknown)
|
78
|
+
end.tap do |atoms|
|
79
|
+
atoms.each { |atom| errors.push("'#{atom.value}' is an unknown atom") }
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def verb?
|
84
|
+
if atoms.any? { |atom| atom.instance_of?(Verb) }
|
85
|
+
true
|
86
|
+
else
|
87
|
+
errors.push("'#{self}' does not contain the verb 'is' or 'are'")
|
88
|
+
false
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
class Syllogism
|
2
|
+
class TermDistributor
|
3
|
+
def initialize(statement)
|
4
|
+
@atoms = statement.atoms
|
5
|
+
@current = nil
|
6
|
+
@position = 0
|
7
|
+
@terms = statement.terms
|
8
|
+
end
|
9
|
+
|
10
|
+
def call
|
11
|
+
atoms.each_with_index do |atom, index|
|
12
|
+
self.current, self.position = atom, index
|
13
|
+
if term?
|
14
|
+
atom.distributed = should_distribute?
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
attr_accessor :current, :position
|
22
|
+
attr_reader :atoms, :terms
|
23
|
+
|
24
|
+
def anywhere_after_no?
|
25
|
+
preceeding_types.include?(No)
|
26
|
+
end
|
27
|
+
|
28
|
+
def immediately_after_all?
|
29
|
+
immediate_predecessor == All
|
30
|
+
end
|
31
|
+
|
32
|
+
def immediately_after_not?
|
33
|
+
immediate_predecessor == Negation
|
34
|
+
end
|
35
|
+
|
36
|
+
def immediate_predecessor
|
37
|
+
preceeding_types.last
|
38
|
+
end
|
39
|
+
|
40
|
+
def preceeding_types
|
41
|
+
atoms.take(position).map(&:class)
|
42
|
+
end
|
43
|
+
|
44
|
+
def should_distribute?
|
45
|
+
immediately_after_all? || immediately_after_not? || anywhere_after_no?
|
46
|
+
end
|
47
|
+
|
48
|
+
def term?
|
49
|
+
terms.include?(current)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
class Syllogism
|
2
|
+
class WffChecker
|
3
|
+
def initialize(statement)
|
4
|
+
@statement = statement
|
5
|
+
end
|
6
|
+
|
7
|
+
def any?
|
8
|
+
WELL_FORMED_FORMULAS.any? do |formula|
|
9
|
+
atom_types == formula
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
attr_reader :statement
|
16
|
+
|
17
|
+
WELL_FORMED_FORMULAS = [
|
18
|
+
[All, GeneralTerm, Verb, GeneralTerm],
|
19
|
+
[Some, GeneralTerm, Verb, GeneralTerm],
|
20
|
+
[SingularTerm, Verb, GeneralTerm],
|
21
|
+
[SingularTerm, Verb, SingularTerm],
|
22
|
+
[No, GeneralTerm, Verb, GeneralTerm],
|
23
|
+
[Some, GeneralTerm, Verb, Negation, GeneralTerm],
|
24
|
+
[SingularTerm, Verb, Negation, GeneralTerm],
|
25
|
+
[SingularTerm, Verb, Negation, SingularTerm]
|
26
|
+
].freeze
|
27
|
+
|
28
|
+
def atoms
|
29
|
+
statement.atoms
|
30
|
+
end
|
31
|
+
|
32
|
+
def atom_types
|
33
|
+
@atom_types ||= atoms.map { |atom| atom.class }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/syllogism.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative "lib/syllogism/version"
|
2
|
+
|
3
|
+
Gem::Specification.new do |spec|
|
4
|
+
spec.name = "syllogism"
|
5
|
+
spec.version = Syllogism::VERSION
|
6
|
+
spec.authors = ["Jayson Virissimo"]
|
7
|
+
spec.email = ["jayson.virissimo@asu.edu"]
|
8
|
+
|
9
|
+
spec.summary = "Proof checker for arguments in Aristotle's term logic"
|
10
|
+
spec.description = "Proof checker for arguments in Aristotle's term logic"
|
11
|
+
spec.homepage = "https://github.com/jaysonvirissimo/syllogism"
|
12
|
+
spec.license = "MIT"
|
13
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
|
14
|
+
|
15
|
+
spec.metadata["allowed_push_host"] = "https://rubygems.org/"
|
16
|
+
|
17
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
18
|
+
spec.metadata["source_code_uri"] = "https://github.com/jaysonvirissimo/syllogism"
|
19
|
+
spec.metadata["changelog_uri"] = "https://github.com/jaysonvirissimo/syllogism"
|
20
|
+
|
21
|
+
# Specify which files should be added to the gem when it is released.
|
22
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
23
|
+
spec.files = Dir.chdir(File.expand_path("..", __FILE__)) do
|
24
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
25
|
+
end
|
26
|
+
spec.bindir = "exe"
|
27
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
|
+
spec.require_paths = ["lib"]
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: syllogism
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jayson Virissimo
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-05-26 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Proof checker for arguments in Aristotle's term logic
|
14
|
+
email:
|
15
|
+
- jayson.virissimo@asu.edu
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- ".github/workflows/test.yml"
|
21
|
+
- ".gitignore"
|
22
|
+
- ".rspec"
|
23
|
+
- Gemfile
|
24
|
+
- Gemfile.lock
|
25
|
+
- LICENSE.txt
|
26
|
+
- README.md
|
27
|
+
- Rakefile
|
28
|
+
- bin/console
|
29
|
+
- bin/setup
|
30
|
+
- lib/syllogism.rb
|
31
|
+
- lib/syllogism/all.rb
|
32
|
+
- lib/syllogism/atom.rb
|
33
|
+
- lib/syllogism/general_term.rb
|
34
|
+
- lib/syllogism/negation.rb
|
35
|
+
- lib/syllogism/no.rb
|
36
|
+
- lib/syllogism/quantity.rb
|
37
|
+
- lib/syllogism/singular_term.rb
|
38
|
+
- lib/syllogism/some.rb
|
39
|
+
- lib/syllogism/statement.rb
|
40
|
+
- lib/syllogism/term.rb
|
41
|
+
- lib/syllogism/term_distributor.rb
|
42
|
+
- lib/syllogism/unknown.rb
|
43
|
+
- lib/syllogism/verb.rb
|
44
|
+
- lib/syllogism/version.rb
|
45
|
+
- lib/syllogism/wff_checker.rb
|
46
|
+
- syllogism.gemspec
|
47
|
+
homepage: https://github.com/jaysonvirissimo/syllogism
|
48
|
+
licenses:
|
49
|
+
- MIT
|
50
|
+
metadata:
|
51
|
+
allowed_push_host: https://rubygems.org/
|
52
|
+
homepage_uri: https://github.com/jaysonvirissimo/syllogism
|
53
|
+
source_code_uri: https://github.com/jaysonvirissimo/syllogism
|
54
|
+
changelog_uri: https://github.com/jaysonvirissimo/syllogism
|
55
|
+
post_install_message:
|
56
|
+
rdoc_options: []
|
57
|
+
require_paths:
|
58
|
+
- lib
|
59
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: 2.3.0
|
64
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
requirements: []
|
70
|
+
rubygems_version: 3.0.3
|
71
|
+
signing_key:
|
72
|
+
specification_version: 4
|
73
|
+
summary: Proof checker for arguments in Aristotle's term logic
|
74
|
+
test_files: []
|