prop_logic 0.2.3 → 0.2.4
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 +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +2 -0
- data/lib/prop_logic/and_term.rb +2 -24
- data/lib/prop_logic/not_term.rb +4 -2
- data/lib/prop_logic/or_term.rb +1 -22
- data/lib/prop_logic/term.rb +29 -0
- data/lib/prop_logic/version.rb +1 -1
- data/prop_logic.gemspec +2 -2
- metadata +29 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a458a1f8cc633e600ce0b2e39d591dcae2455932
|
4
|
+
data.tar.gz: a83d16bf8e6cbc6025b4f940e1ef3b7dab93e308
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e71e1608080cad1e400d6a278153544b6619c62694e1de5efc66946277f8452bf84e4879b69996d1098bee792eef5294a31ff0712b23e9424c3cb9e295d130f5
|
7
|
+
data.tar.gz: 6b3689179f39190f23787936f05e86cddead26c3f96a62738b0c7072464ed52ad7bdbacb32f793e15a477d4dc842f46f20c33ff558d2a9189af3288ab96247b8
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# PropLogic
|
2
2
|
|
3
3
|
[](https://travis-ci.org/jkr2255/prop_logic)
|
4
|
+
[](https://scrutinizer-ci.com/g/jkr2255/prop_logic/?branch=master)
|
5
|
+
[](https://scrutinizer-ci.com/g/jkr2255/prop_logic/?branch=master)
|
4
6
|
[](https://badge.fury.io/rb/prop_logic)
|
5
7
|
|
6
8
|
PropLogic implements propositional logic in Ruby, usable like normal variables.
|
data/lib/prop_logic/and_term.rb
CHANGED
@@ -1,30 +1,8 @@
|
|
1
1
|
module PropLogic
|
2
2
|
class AndTerm < Term
|
3
3
|
def initialize(*terms)
|
4
|
-
@terms = terms.map{|t| t.is_a?(AndTerm) ? t.terms : t}.flatten.freeze
|
5
|
-
|
6
|
-
# term with negative terms are no longer terated as reduced
|
7
|
-
@is_reduced = @is_nnf && @terms.all? do |term|
|
8
|
-
if term.is_a?(Constant) || !term.reduced?
|
9
|
-
false
|
10
|
-
elsif !(term.is_a?(NotTerm))
|
11
|
-
true
|
12
|
-
else
|
13
|
-
# NotTerm
|
14
|
-
term.terms[0].is_a?(Variable)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
return unless @is_reduced
|
18
|
-
# check duplication of terms
|
19
|
-
if @terms.length != @terms.uniq.length
|
20
|
-
@is_reduced = false
|
21
|
-
return
|
22
|
-
end
|
23
|
-
# check contradicted variables (mark as unreduced)
|
24
|
-
# Negated terms (except variables) doesn't come here
|
25
|
-
not_terms = @terms.select{ |t| t.is_a?(NotTerm) }
|
26
|
-
negated_variales = not_terms.map{|t| t.terms[0]}
|
27
|
-
@is_reduced = false unless (negated_variales & @terms).empty?
|
4
|
+
@terms = terms.map { |t| t.is_a?(AndTerm) ? t.terms : t }.flatten.freeze
|
5
|
+
check_nnf_reduced
|
28
6
|
end
|
29
7
|
|
30
8
|
def to_s(in_term = false)
|
data/lib/prop_logic/not_term.rb
CHANGED
@@ -2,6 +2,8 @@ module PropLogic
|
|
2
2
|
class NotTerm < Term
|
3
3
|
def initialize(term)
|
4
4
|
@terms = [term].freeze
|
5
|
+
@is_nnf = @terms[0].is_a?(Variable)
|
6
|
+
@is_reduced = @is_nnf && ! (@terms[0].is_a?(Constant))
|
5
7
|
end
|
6
8
|
|
7
9
|
def to_s(*)
|
@@ -9,7 +11,7 @@ module PropLogic
|
|
9
11
|
end
|
10
12
|
|
11
13
|
def nnf?
|
12
|
-
@
|
14
|
+
@is_nnf
|
13
15
|
end
|
14
16
|
|
15
17
|
def to_nnf
|
@@ -29,7 +31,7 @@ module PropLogic
|
|
29
31
|
end
|
30
32
|
|
31
33
|
def reduced?
|
32
|
-
|
34
|
+
@is_reduced
|
33
35
|
end
|
34
36
|
|
35
37
|
def reduce
|
data/lib/prop_logic/or_term.rb
CHANGED
@@ -2,28 +2,7 @@ module PropLogic
|
|
2
2
|
class OrTerm < Term
|
3
3
|
def initialize(*terms)
|
4
4
|
@terms = terms.map{|t| t.is_a?(OrTerm) ? t.terms : t}.flatten.freeze
|
5
|
-
|
6
|
-
@is_reduced = @is_nnf && @terms.all? do |term|
|
7
|
-
if term.is_a?(Constant) || !(term.reduced?)
|
8
|
-
false
|
9
|
-
elsif !(term.is_a?(NotTerm))
|
10
|
-
true
|
11
|
-
else
|
12
|
-
# NotTerm
|
13
|
-
term.terms[0].is_a?(Variable)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
return unless @is_reduced
|
17
|
-
# check duplication of terms
|
18
|
-
if @terms.length != @terms.uniq.length
|
19
|
-
@is_reduced = false
|
20
|
-
return
|
21
|
-
end
|
22
|
-
# check obvious variables (mark as unreduced)
|
23
|
-
# Negated terms (except variables) doesn't come here
|
24
|
-
not_terms = @terms.select{ |t| t.is_a?(NotTerm) }
|
25
|
-
negated_variales = not_terms.map{|t| t.terms[0]}
|
26
|
-
@is_reduced = false unless (negated_variales & @terms).empty?
|
5
|
+
check_nnf_reduced
|
27
6
|
end
|
28
7
|
|
29
8
|
def to_s(in_term = false)
|
data/lib/prop_logic/term.rb
CHANGED
@@ -189,5 +189,34 @@ module PropLogic
|
|
189
189
|
((self | other) & (~self | ~other)).unsat?
|
190
190
|
end
|
191
191
|
|
192
|
+
private
|
193
|
+
|
194
|
+
# checking methods
|
195
|
+
|
196
|
+
def check_term_uniqueness
|
197
|
+
@is_reduced &&= (@terms.length == @terms.uniq.length)
|
198
|
+
end
|
199
|
+
|
200
|
+
def check_ambivalent_vars
|
201
|
+
return unless @is_reduced
|
202
|
+
term_by_class = @terms.group_by(&:class)
|
203
|
+
return if term_by_class[NotTerm].nil? || term_by_class[Variable].nil?
|
204
|
+
negated_variales = term_by_class[NotTerm].map { |t| t.terms[0] }
|
205
|
+
@is_reduced = false unless (negated_variales & term_by_class[Variable]).empty?
|
206
|
+
end
|
207
|
+
|
208
|
+
def check_nnf_reduced
|
209
|
+
@is_reduced = true
|
210
|
+
@is_nnf = @terms.all? do |term|
|
211
|
+
@is_reduced &&= !term.is_a?(Constant) && term.reduced?
|
212
|
+
@is_reduced &&= !term.is_a?(NotTerm) || term.terms[0].is_a?(Variable)
|
213
|
+
next true if @is_reduced
|
214
|
+
term.nnf?
|
215
|
+
end
|
216
|
+
return unless @is_reduced
|
217
|
+
check_term_uniqueness
|
218
|
+
check_ambivalent_vars
|
219
|
+
end
|
220
|
+
|
192
221
|
end
|
193
222
|
end
|
data/lib/prop_logic/version.rb
CHANGED
data/prop_logic.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.bindir = "exe"
|
20
20
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
21
|
spec.require_paths = ["lib"]
|
22
|
-
|
22
|
+
|
23
23
|
spec.add_dependency "ref", '~> 2.0'
|
24
24
|
spec.required_ruby_version = '>= 2.0.0'
|
25
25
|
|
@@ -27,5 +27,5 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_development_dependency "bundler", "~> 1.7"
|
28
28
|
spec.add_development_dependency "rake", "~> 10.0"
|
29
29
|
spec.add_development_dependency "rspec", '~> 3.0'
|
30
|
-
|
30
|
+
spec.add_development_dependency "scrutinizer-ocular", '~> 1.0'
|
31
31
|
end
|
metadata
CHANGED
@@ -1,71 +1,85 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prop_logic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jkr2255
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
11
|
+
date: 2016-04-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
+
name: ref
|
14
15
|
requirement: !ruby/object:Gem::Requirement
|
15
16
|
requirements:
|
16
17
|
- - "~>"
|
17
18
|
- !ruby/object:Gem::Version
|
18
19
|
version: '2.0'
|
19
|
-
name: ref
|
20
|
-
prerelease: false
|
21
20
|
type: :runtime
|
21
|
+
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '2.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
28
29
|
requirement: !ruby/object:Gem::Requirement
|
29
30
|
requirements:
|
30
31
|
- - "~>"
|
31
32
|
- !ruby/object:Gem::Version
|
32
33
|
version: '1.7'
|
33
|
-
name: bundler
|
34
|
-
prerelease: false
|
35
34
|
type: :development
|
35
|
+
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.7'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
42
43
|
requirement: !ruby/object:Gem::Requirement
|
43
44
|
requirements:
|
44
45
|
- - "~>"
|
45
46
|
- !ruby/object:Gem::Version
|
46
47
|
version: '10.0'
|
47
|
-
name: rake
|
48
|
-
prerelease: false
|
49
48
|
type: :development
|
49
|
+
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '10.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
56
57
|
requirement: !ruby/object:Gem::Requirement
|
57
58
|
requirements:
|
58
59
|
- - "~>"
|
59
60
|
- !ruby/object:Gem::Version
|
60
61
|
version: '3.0'
|
61
|
-
name: rspec
|
62
|
-
prerelease: false
|
63
62
|
type: :development
|
63
|
+
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '3.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: scrutinizer-ocular
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.0'
|
69
83
|
description: Write propositional logic formulae using Ruby DSL.
|
70
84
|
email:
|
71
85
|
- magnesium.oxide.play@gmail.com
|
@@ -102,7 +116,7 @@ homepage: https://github.com/jkr2255/prop_logic
|
|
102
116
|
licenses:
|
103
117
|
- MIT
|
104
118
|
metadata: {}
|
105
|
-
post_install_message:
|
119
|
+
post_install_message:
|
106
120
|
rdoc_options: []
|
107
121
|
require_paths:
|
108
122
|
- lib
|
@@ -117,9 +131,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
117
131
|
- !ruby/object:Gem::Version
|
118
132
|
version: '0'
|
119
133
|
requirements: []
|
120
|
-
rubyforge_project:
|
121
|
-
rubygems_version: 2.4.
|
122
|
-
signing_key:
|
134
|
+
rubyforge_project:
|
135
|
+
rubygems_version: 2.4.5.1
|
136
|
+
signing_key:
|
123
137
|
specification_version: 4
|
124
138
|
summary: Propositional logic for Ruby
|
125
139
|
test_files: []
|