hilbert 0.0.2700001 → 0.0.2700100
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.coveralls.yml +1 -1
- data/README.md +2 -2
- data/bin/hilbert +3 -3
- data/core/Q/Lexer.hs +2 -2
- data/core/Q/Parser.hs +2 -2
- data/core/Q.hs +6 -6
- data/ext/hilbert/hilbert.c +5 -5
- data/ext/hilbert/hilbert.h +3 -3
- data/hilbert.gemspec +1 -1
- data/legacy_rspec/objects/list_spec.rb +4 -4
- data/legacy_rspec/objects/matrix_spec.rb +7 -7
- data/legacy_rspec/objects/vector_spec.rb +5 -5
- data/lib/hilbert/api/limit_api.rb +3 -0
- data/lib/hilbert/exec.rb +2 -2
- data/lib/hilbert/iq.rb +1 -1
- data/lib/hilbert/lexer/base.rb +8 -0
- data/lib/hilbert/lexer/main_lexer.rb +33 -23
- data/lib/hilbert/lexer/tokens.rb +23 -3
- data/lib/hilbert/lexer/world_lexer.rb +15 -0
- data/lib/hilbert/parser/world_parser.rb +43 -0
- data/lib/hilbert/parser.rb +30 -9
- data/lib/hilbert/version.rb +1 -1
- data/lib/hilbert/world/base.rb +6 -0
- data/lib/hilbert/world/propositional_logic.rb +174 -0
- data/lib/hilbert/world.rb +44 -0
- data/lib/hilbert.rb +3 -6
- data/test/interpreter/test_propositional_logic.rb +54 -0
- data/test/langs/test_r.rb +1 -1
- data/test/minitest_helper.rb +4 -0
- data/test/q_matrix/test_q_matrix.rb +3 -3
- data/test/{test_qlang.rb → test_hilbert.rb} +1 -3
- data/test/world/test_lexer.rb +21 -0
- data/test/world/test_prop_logic.rb +67 -0
- metadata +34 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9a0a3fec8ea8685b98cb92d396c58fb3467b85cf
|
4
|
+
data.tar.gz: 521413e76c6b6512e462695a6603d697da6b1a60
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 490d8872bf5cc5c9efea975fe3d596981080844229024916adaf35bbe607831a2f431b331490a91fd4dff83582ca836ff4ac19870b57713b9392bea46a70b4ee
|
7
|
+
data.tar.gz: 154c250c7a531e80b939bcc1ed8e382489ff1a9068240ea4118e5da29e7f7c01a071c7228157472e262d63bafc6bd72fac4b83eb29e0bff386b81950f1abd224
|
data/.coveralls.yml
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
repo_token:
|
1
|
+
repo_token: vkYcufANxPOOehtDBT4iHTX1xcWieP3px
|
2
2
|
service_name: travis-ci
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Hilbert
|
2
2
|
|
3
|
-
[![Gem Version](https://badge.fury.io/rb/hilbert.svg)](http://badge.fury.io/rb/hilbert) [![Build Status](https://travis-ci.org/gogotanaka/
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/hilbert.svg)](http://badge.fury.io/rb/hilbert) [![Build Status](https://travis-ci.org/gogotanaka/Hilbert.svg?branch=master)](https://travis-ci.org/gogotanaka/Hilbert) [![Coverage Status](https://coveralls.io/repos/gogotanaka/Hilbert/badge.png?branch=master)](https://coveralls.io/r/gogotanaka/Hilbert?branch=master) [![Code Climate](https://codeclimate.com/github/gogotanaka/Hilbert/badges/gpa.svg)](https://codeclimate.com/github/gogotanaka/Hilbert) [![Dependency Status](https://gemnasium.com/gogotanaka/Hilbert.svg)](https://gemnasium.com/gogotanaka/Hilbert)
|
4
4
|
|
5
5
|
## Do you know the one best language in this world?
|
6
6
|
|
@@ -103,7 +103,7 @@ Install hilbert gem.
|
|
103
103
|
## Interpreter
|
104
104
|
|
105
105
|
$ hilbert -i
|
106
|
-
|
106
|
+
Enjoy! ->
|
107
107
|
|
108
108
|
## Use as native language
|
109
109
|
|
data/bin/hilbert
CHANGED
@@ -2,17 +2,17 @@
|
|
2
2
|
|
3
3
|
require 'hilbert'
|
4
4
|
|
5
|
-
#
|
5
|
+
# Hilbert command line
|
6
6
|
require 'hilbert/exec'
|
7
7
|
|
8
|
-
#
|
8
|
+
# Hilbert interpreter
|
9
9
|
require 'hilbert/iq'
|
10
10
|
|
11
11
|
# TODO: There are vanch of todo ..
|
12
12
|
case ARGV.first
|
13
13
|
when '-i'
|
14
14
|
loop do
|
15
|
-
print '
|
15
|
+
print 'Enjoy! -> '
|
16
16
|
begin
|
17
17
|
input = $stdin.gets
|
18
18
|
output = Hilbert::Iq.execute(input)
|
data/core/Q/Lexer.hs
CHANGED
data/core/Q/Parser.hs
CHANGED
data/core/Q.hs
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
{- |
|
2
|
-
Module : Language.
|
2
|
+
Module : Language.Hilbert
|
3
3
|
Copyright : Kazuki Tanaka (a.k.a gogotanaka)
|
4
4
|
Licence : MIT
|
5
5
|
|
6
6
|
q-language.org.
|
7
7
|
-}
|
8
8
|
|
9
|
-
module
|
10
|
-
( module
|
11
|
-
, module
|
9
|
+
module Hilbert
|
10
|
+
( module Hilbert.Lexer
|
11
|
+
, module Hilbert.Parser
|
12
12
|
, version
|
13
13
|
) where
|
14
14
|
|
15
15
|
|
16
|
-
import
|
17
|
-
import
|
16
|
+
import Hilbert.Lexer
|
17
|
+
import Hilbert.Parser
|
18
18
|
|
19
19
|
import Data.Version
|
data/ext/hilbert/hilbert.c
CHANGED
@@ -51,15 +51,15 @@ execute(VALUE self, VALUE a, VALUE b, VALUE n)
|
|
51
51
|
void
|
52
52
|
Init_hilbert(void)
|
53
53
|
{
|
54
|
-
VALUE
|
55
|
-
rb_define_method(
|
56
|
-
rb_define_method(
|
54
|
+
VALUE rb_mHilbertMatrix = rb_define_class("HilbertMatrix", rb_cObject);
|
55
|
+
rb_define_method(rb_mHilbertMatrix, "execute", execute, 3);
|
56
|
+
rb_define_method(rb_mHilbertMatrix, "func", rb_func, 1);
|
57
57
|
}
|
58
58
|
|
59
|
-
// VALUE
|
59
|
+
// VALUE rb_mHilbertMatrix;
|
60
60
|
|
61
61
|
// void
|
62
62
|
// Init_q_matrix(void)
|
63
63
|
// {
|
64
|
-
//
|
64
|
+
// rb_mHilbertMatrix = rb_define_module("HilbertMatrix");
|
65
65
|
// }
|
data/ext/hilbert/hilbert.h
CHANGED
data/hilbert.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
20
|
spec.require_paths = ['lib']
|
21
21
|
|
22
|
-
spec.add_dependency 'dydx', '~> 0.
|
22
|
+
spec.add_dependency 'dydx', '~> 0.2.7000000'
|
23
23
|
|
24
24
|
spec.add_development_dependency 'bundler'
|
25
25
|
spec.add_development_dependency 'rake'
|
@@ -4,25 +4,25 @@ describe Hilbert do
|
|
4
4
|
describe 'List' do
|
5
5
|
it do
|
6
6
|
# expect(
|
7
|
-
#
|
7
|
+
# Hilbert.to_r.compile('{name: "Gogotanaka", age: 21, birth: (1992 8 10) }')
|
8
8
|
# ).to eq(
|
9
9
|
# "list(name=\"Gogotanaka\", age=21, birth=c(1992, 8, 10))"
|
10
10
|
# )
|
11
11
|
|
12
12
|
expect(
|
13
|
-
|
13
|
+
Hilbert.to_r.compile('{key1: 234234, key2: 387342 }')
|
14
14
|
).to eq(
|
15
15
|
'list(key1=234234, key2=387342)'
|
16
16
|
)
|
17
17
|
|
18
18
|
expect(
|
19
|
-
|
19
|
+
Hilbert.to_r.compile('{key1:234234,key2:387342,key3:38733242}')
|
20
20
|
).to eq(
|
21
21
|
'list(key1=234234, key2=387342, key3=38733242)'
|
22
22
|
)
|
23
23
|
|
24
24
|
# expect(
|
25
|
-
#
|
25
|
+
# Hilbert.to_r.compile('{key1:(1 3 2; 8 2 3),key2:387342,key3:38733242}')
|
26
26
|
# ).to eq(
|
27
27
|
# "list(key1=matrix(c(1, 3, 2, 8, 2, 3), 2, 3, byrow = TRUE), key2=387342, key3=38733242)"
|
28
28
|
# )
|
@@ -5,25 +5,25 @@ describe Hilbert do
|
|
5
5
|
context 'into R' do
|
6
6
|
it do
|
7
7
|
expect(
|
8
|
-
|
8
|
+
Hilbert.to_r.compile('(1 2 3; 4 5 6)')
|
9
9
|
).to eq(
|
10
10
|
'matrix(c(1, 2, 3, 4, 5, 6), 2, 3, byrow = TRUE)'
|
11
11
|
)
|
12
12
|
|
13
13
|
expect(
|
14
|
-
|
14
|
+
Hilbert.to_r.compile('(1 2 3 ; 4 5 6)')
|
15
15
|
).to eq(
|
16
16
|
'matrix(c(1, 2, 3, 4, 5, 6), 2, 3, byrow = TRUE)'
|
17
17
|
)
|
18
18
|
|
19
19
|
expect(
|
20
|
-
|
20
|
+
Hilbert.to_r.compile('(1 2 3 ; 4 5 6; 7 8 9)')
|
21
21
|
).to eq(
|
22
22
|
'matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9), 3, 3, byrow = TRUE)'
|
23
23
|
)
|
24
24
|
|
25
25
|
expect(
|
26
|
-
|
26
|
+
Hilbert.to_r.compile('(1;2;3)')
|
27
27
|
).to eq(
|
28
28
|
'matrix(c(1, 2, 3), 3, 1, byrow = TRUE)'
|
29
29
|
)
|
@@ -33,19 +33,19 @@ describe Hilbert do
|
|
33
33
|
context 'into Ruby' do
|
34
34
|
it do
|
35
35
|
expect(
|
36
|
-
|
36
|
+
Hilbert.to_ruby.compile('(1 2 3; 4 5 6)')
|
37
37
|
).to eq(
|
38
38
|
'Matrix[[1, 2, 3], [4, 5, 6]]'
|
39
39
|
)
|
40
40
|
|
41
41
|
expect(
|
42
|
-
|
42
|
+
Hilbert.to_ruby.compile('(1 2 3 ; 4 5 6; 7 8 9)')
|
43
43
|
).to eq(
|
44
44
|
'Matrix[[1, 2, 3], [4, 5, 6], [7, 8, 9]]'
|
45
45
|
)
|
46
46
|
|
47
47
|
expect(
|
48
|
-
|
48
|
+
Hilbert.to_ruby.compile('(1;2;3)')
|
49
49
|
).to eq(
|
50
50
|
'Matrix[[1], [2], [3]]'
|
51
51
|
)
|
@@ -5,19 +5,19 @@ describe Hilbert do
|
|
5
5
|
context 'into R' do
|
6
6
|
it do
|
7
7
|
expect(
|
8
|
-
|
8
|
+
Hilbert.to_r.compile('(1 2 3)')
|
9
9
|
).to eq(
|
10
10
|
'c(1, 2, 3)'
|
11
11
|
)
|
12
12
|
|
13
13
|
expect(
|
14
|
-
|
14
|
+
Hilbert.to_r.compile('(1 2 3 4 5 6)')
|
15
15
|
).to eq(
|
16
16
|
'c(1, 2, 3, 4, 5, 6)'
|
17
17
|
)
|
18
18
|
|
19
19
|
expect(
|
20
|
-
|
20
|
+
Hilbert.to_r.compile('(1 2 3 4 5 6)')
|
21
21
|
).to eq(
|
22
22
|
'c(1, 2, 3, 4, 5, 6)'
|
23
23
|
)
|
@@ -27,7 +27,7 @@ describe Hilbert do
|
|
27
27
|
context 'into Ruby' do
|
28
28
|
it do
|
29
29
|
expect(
|
30
|
-
|
30
|
+
Hilbert.to_ruby.compile('(1 2 3)')
|
31
31
|
).to eq(
|
32
32
|
'Vector[1, 2, 3]'
|
33
33
|
)
|
@@ -37,7 +37,7 @@ describe Hilbert do
|
|
37
37
|
context 'into Python' do
|
38
38
|
it do
|
39
39
|
expect(
|
40
|
-
|
40
|
+
Hilbert.to_python.compile('(1 2 3)')
|
41
41
|
).to eq(
|
42
42
|
'array([1, 2, 3])'
|
43
43
|
)
|
@@ -13,6 +13,9 @@ module Hilbert
|
|
13
13
|
"temp_cal_f(#{var}) <= #{formula};
|
14
14
|
temp_cal_f(#{close_to} + Float::EPSILON ** 20)"
|
15
15
|
end
|
16
|
+
when :inter
|
17
|
+
Dydx::API.store_func(eval(var), eval(formula), :tmp)
|
18
|
+
Dydx::API.eval_func(eval(close_to) + Float::EPSILON ** 20, :tmp)
|
16
19
|
else
|
17
20
|
fail "List is not implemented for #{$meta_info.lang_str}"
|
18
21
|
end
|
data/lib/hilbert/exec.rb
CHANGED
@@ -32,7 +32,7 @@ module Hilbert
|
|
32
32
|
when '-py'
|
33
33
|
Hilbert.to_python
|
34
34
|
else
|
35
|
-
print '
|
35
|
+
print 'Hilbert support only Ruby and R now.'
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
@@ -40,7 +40,7 @@ module Hilbert
|
|
40
40
|
file = open_file(file_path)
|
41
41
|
input_string = read_file(file)
|
42
42
|
file.close
|
43
|
-
input_string.gsub(/(.*)I love mathematics\.(.*)
|
43
|
+
input_string.gsub(/(.*)I love mathematics\.(.*)Hilbert\.E\.D(.*)/m) {
|
44
44
|
"#{$1}#{Kconv.tosjis(Hilbert.compile($2))}#{$3}"
|
45
45
|
}
|
46
46
|
end
|
data/lib/hilbert/iq.rb
CHANGED
data/lib/hilbert/lexer/base.rb
CHANGED
@@ -1,34 +1,44 @@
|
|
1
|
-
#!/bin/env ruby
|
2
|
-
# encoding: utf-8
|
3
|
-
|
4
1
|
module Hilbert
|
5
2
|
module Lexer
|
6
3
|
class MainLexer < Base
|
7
|
-
|
8
|
-
rule(
|
9
|
-
rule(
|
10
|
-
|
11
|
-
rule(/lim#{LBRCT}(#{VAR})#{RSARW}(#{VARNUM})#{RBRCT} (#{FORMULA})/) { :limit }
|
12
|
-
|
13
|
-
rule(/#{LPRN}(#{NUMS_BY_SP})#{RPRN}/) { :vector }
|
14
|
-
rule(/#{LPRN}(#{NUMS_BY_SP_BY_SCLN_OR_NELN})#{RPRN}t/m) { :tmatrix }
|
15
|
-
rule(/#{LPRN}(#{NUMS_BY_SP_BY_SCLN_OR_NELN})#{RPRN}/m) { :matrix }
|
16
|
-
|
17
|
-
rule(/∑#{LBRCT}(#{VAR})=(#{INT}),#{ANYSP}(#{INT})#{RBRCT} (#{FORMULA})/) { :sigma }
|
18
|
-
rule(/sigma#{LBRCT}(#{VAR})=(#{INT}),#{ANYSP}(#{INT})#{RBRCT} (#{FORMULA})/) { :sigma }
|
19
|
-
|
20
|
-
rule(/#{FUNCCN}/) { :FUNCCN }
|
21
|
-
|
22
|
-
rule(/#{LPRN}/) { :LPRN }
|
23
|
-
rule(/#{RPRN}/) { :RPRN }
|
24
|
-
rule(/#{LBRCS}/) { :LBRCS }
|
25
|
-
rule(/#{RBRCS}/) { :RBRCS }
|
26
|
-
|
4
|
+
# TODO: So far so good, but...
|
5
|
+
rule(/postulate zfc_analysis/) { :POST_ZFC }
|
6
|
+
rule(/#{EVALOGIC}/) { :EVALOGIC }
|
7
|
+
rule(/#{DEFLOGIC}/) { :DEFLOGIC }
|
27
8
|
rule(/[ \t\f]/)
|
28
9
|
|
29
10
|
rule(/(\r|\n)+/) { :NULL }
|
30
11
|
|
31
12
|
rule(/[^\(\)\{\}(\n\n)]+/) { :CONT }
|
13
|
+
class << self
|
14
|
+
include Tokens
|
15
|
+
def zfc_analysis!
|
16
|
+
clear!
|
17
|
+
rule(/postulate zfc_analysis/) { :POST_ZFC }
|
18
|
+
rule(/#{EVALOGIC}/) { :EVALOGIC }
|
19
|
+
rule(/#{DEFLOGIC}/) { :DEFLOGIC }
|
20
|
+
rule(/(#{FUNCCV})#{ANYSP}#{EQL}#{ANYSP}(#{FORMULA})/) { :DEF_FUNC }
|
21
|
+
rule(/#{INTE_SYM}#{ANYSP}#{LPRN}(#{ANYSTR})#{RPRN}#{LBRCT}(#{ANYSTR})#{RBRCT}/) { :INTEGRAL }
|
22
|
+
rule(/#{DIFF_SYM}(#{VAR}) (#{FORMULA})/) { :DIFFERENTIAL }
|
23
|
+
rule(/#{LIM_SYM}#{LBRCT}(#{VAR})#{RSARW}(#{VARNUM})#{RBRCT} (#{FORMULA})/) { :LIMIT }
|
24
|
+
rule(/#{SGM_SYM}#{LBRCT}(#{VAR})#{EQL}(#{INT})#{CMA}#{ANYSP}(#{INT})#{RBRCT} (#{FORMULA})/) { :SIGMA }
|
25
|
+
|
26
|
+
rule(/#{LPRN}(#{NUMS_BY_SP})#{RPRN}/) { :VECTOR }
|
27
|
+
rule(/#{LPRN}(#{NUMS_BY_SP_BY_SCLN_OR_NELN})#{RPRN}t/m) { :TMATRIX }
|
28
|
+
rule(/#{LPRN}(#{NUMS_BY_SP_BY_SCLN_OR_NELN})#{RPRN}/m) { :MATRIX }
|
29
|
+
|
30
|
+
rule(/#{FUNCCN}/) { :FUNCCN }
|
31
|
+
rule(/#{LPRN}/) { :LPRN }
|
32
|
+
rule(/#{RPRN}/) { :RPRN }
|
33
|
+
rule(/#{LBRCS}/) { :LBRCS }
|
34
|
+
rule(/#{RBRCS}/) { :RBRCS }
|
35
|
+
rule(/[ \t\f]/)
|
36
|
+
|
37
|
+
rule(/(\r|\n)+/) { :NULL }
|
38
|
+
|
39
|
+
rule(/[^\(\)\{\}(\n\n)]+/) { :CONT }
|
40
|
+
end
|
41
|
+
end
|
32
42
|
end
|
33
43
|
end
|
34
44
|
end
|
data/lib/hilbert/lexer/tokens.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
#!/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
1
4
|
module Hilbert
|
2
5
|
module Lexer
|
3
6
|
module Tokens
|
@@ -27,6 +30,12 @@ module Hilbert
|
|
27
30
|
# # TERM
|
28
31
|
# TERM = /(#{NUM}|#{VAR_MUL}|#{VAR_MUL})/
|
29
32
|
|
33
|
+
# SYM
|
34
|
+
LIM_SYM = /lim/
|
35
|
+
INTE_SYM = /S/
|
36
|
+
DIFF_SYM = /d\/d/
|
37
|
+
SGM_SYM = /(?:∑|sigma)/
|
38
|
+
|
30
39
|
# OPE
|
31
40
|
PLS = /\+/
|
32
41
|
SUB = /-/
|
@@ -59,10 +68,21 @@ module Hilbert
|
|
59
68
|
LSARW = '<-'
|
60
69
|
RDARW = '=>'
|
61
70
|
LDARW = '<='
|
62
|
-
|
71
|
+
SPC = / /
|
72
|
+
SPCS = / +/
|
63
73
|
NLIN = /(\r|\n)/
|
64
74
|
|
65
|
-
|
75
|
+
# World
|
76
|
+
## FIXIT
|
77
|
+
DEFLOGIC = /\A.*[A-RT-Z].*\z/
|
78
|
+
EVALOGIC = /\A.*[A-RT-Z].*\?\z/
|
79
|
+
PROVAR = /[A-RT-Z]/
|
80
|
+
CONJ = /\&/
|
81
|
+
DISJ = /\|/
|
82
|
+
NEGA = /\~/
|
83
|
+
COND = /\->/
|
84
|
+
BICO = /<\->/
|
85
|
+
|
66
86
|
# FIXIT
|
67
87
|
SCLN_OR_NELN = /(?:#{SCLN}|#{NLIN})/
|
68
88
|
|
@@ -80,7 +100,7 @@ module Hilbert
|
|
80
100
|
NUMS_BY_CMA = Util.string_out(NUM, CMA)
|
81
101
|
VARS_BY_CMA = Util.string_out(VAR, CMA)
|
82
102
|
VARNUMS_BY_CMA = Util.string_out(VARNUM, CMA)
|
83
|
-
NUMS_BY_SP = Util.string_out(NUM,
|
103
|
+
NUMS_BY_SP = Util.string_out(NUM, SPC)
|
84
104
|
|
85
105
|
FUNCCN = Util.func_call(NUMS_BY_CMA)
|
86
106
|
FUNCCV = Util.func_call(VARS_BY_CMA)
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Hilbert
|
2
|
+
module Lexer
|
3
|
+
class WorldLexer < Base
|
4
|
+
rule(/#{PROVAR}/) { :PROVAR }
|
5
|
+
rule(/#{CONJ}/) { :CONJ }
|
6
|
+
rule(/#{DISJ}/) { :DISJ }
|
7
|
+
rule(/#{NEGA}/) { :NEGA }
|
8
|
+
rule(/#{COND}/) { :COND }
|
9
|
+
rule(/#{BICO}/) { :BICO }
|
10
|
+
rule(/#{LPRN}/) { :LPRN }
|
11
|
+
rule(/#{RPRN}/) { :RPRN }
|
12
|
+
rule(/#{SPCS}/) { :SPCS }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Hilbert
|
2
|
+
module Parser
|
3
|
+
class WorldParser
|
4
|
+
@@parsed_ary = []
|
5
|
+
@@stage
|
6
|
+
class << self
|
7
|
+
def execute(lexeds)
|
8
|
+
clear!
|
9
|
+
|
10
|
+
lexeds.each do |lexed|
|
11
|
+
parsed = case lexed[:token]
|
12
|
+
when :DISJ then ' + '
|
13
|
+
when :CONJ then ' * '
|
14
|
+
when :COND then ' >= '
|
15
|
+
when :BICO then ' <=> '
|
16
|
+
when :PROVAR then "$world.atom(:#{lexed[:value]})"
|
17
|
+
when :NEGA then " ~"
|
18
|
+
else lexed[:value]
|
19
|
+
end
|
20
|
+
|
21
|
+
push(parsed)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def push(parsed)
|
26
|
+
if parsed
|
27
|
+
@@parsed_ary << parsed
|
28
|
+
else
|
29
|
+
@@stage << lexed
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def parsed_srt
|
34
|
+
@@parsed_ary.join
|
35
|
+
end
|
36
|
+
|
37
|
+
def clear!
|
38
|
+
@@parsed_ary = []
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/hilbert/parser.rb
CHANGED
@@ -8,13 +8,16 @@ require 'hilbert/parser/func_parser'
|
|
8
8
|
require 'hilbert/parser/integral_parser'
|
9
9
|
require 'hilbert/parser/limit_parser'
|
10
10
|
require 'hilbert/parser/sigma_parser'
|
11
|
+
require 'hilbert/parser/world_parser'
|
11
12
|
|
12
13
|
require 'hilbert/parser/formula_parser'
|
14
|
+
require 'hilbert/lexer/world_lexer'
|
13
15
|
|
14
16
|
module Hilbert
|
15
17
|
module Parser
|
16
18
|
include Lexer::Tokens
|
17
19
|
SYM = '\w+'
|
20
|
+
|
18
21
|
ONEHASH = "#{ANYSP}#{SYM}#{CLN}#{ANYSP}#{VARNUM}#{ANYSP}" # sdf: 234
|
19
22
|
def execute(lexed)
|
20
23
|
time = Time.now
|
@@ -22,18 +25,36 @@ module Hilbert
|
|
22
25
|
fail "I'm so sorry, something wrong. Please feel free to report this." if Time.now > time + 10
|
23
26
|
|
24
27
|
case lexed.token_str
|
25
|
-
when /:(
|
28
|
+
when /:(POST_ZFC)(\d+)/
|
29
|
+
Hilbert::Lexer::MainLexer.zfc_analysis!
|
30
|
+
lexed.parsed!('', $2)
|
31
|
+
when /:(DEFLOGIC)(\d+)/
|
32
|
+
value = lexed.get_value($1)
|
33
|
+
lexeds = Lexer::WorldLexer.execute(value)
|
34
|
+
Parser::WorldParser.execute(lexeds)
|
35
|
+
$world << eval(Parser::WorldParser.parsed_srt)
|
36
|
+
rslt = %|"Defined: #{value} is TRUE"|
|
37
|
+
lexed.parsed!(rslt, $2)
|
38
|
+
|
39
|
+
when /:(EVALOGIC)(\d+)/
|
40
|
+
value = lexed.get_value($1).delete('?')
|
41
|
+
lexeds = Lexer::WorldLexer.execute(value)
|
42
|
+
Parser::WorldParser.execute(lexeds)
|
43
|
+
rslt = $world.impl eval(Parser::WorldParser.parsed_srt), value
|
44
|
+
lexed.parsed!(rslt, $2)
|
45
|
+
|
46
|
+
when /:(VECTOR)(\d+)/, /:(MATRIX)(\d+)/, /:(TMATRIX)(\d+)/, /:(INTEGRAL)(\d+)/, /:(DEF_FUNC)(\d+)/, /:(DIFFERENTIAL)(\d+)/, /:(LIMIT)(\d+)/, /:(SIGMA)(\d+)/
|
26
47
|
token_els = lexed.get_els($2)
|
27
48
|
|
28
49
|
parsed = case $1
|
29
|
-
when '
|
30
|
-
when '
|
31
|
-
when '
|
32
|
-
when '
|
33
|
-
when '
|
34
|
-
when '
|
35
|
-
when '
|
36
|
-
when '
|
50
|
+
when 'VECTOR' then VectorParser.execute(token_els)
|
51
|
+
when 'MATRIX' then MatrixParser.execute(token_els)
|
52
|
+
when 'TMATRIX' then MatrixParser.execute(token_els, trans: true)
|
53
|
+
when 'LIMIT' then LimitParser.execute(token_els)
|
54
|
+
when 'INTEGRAL' then IntegralParser.execute(token_els)
|
55
|
+
when 'DEF_FUNC' then FuncParser.execute(token_els)
|
56
|
+
when 'SIGMA' then SigmaParser.execute(token_els)
|
57
|
+
when 'DIFFERENTIAL'
|
37
58
|
del_var, formula = token_els
|
38
59
|
"d/d#{del_var}(#{FormulaParser.execute(formula)})"
|
39
60
|
end
|
data/lib/hilbert/version.rb
CHANGED
@@ -0,0 +1,174 @@
|
|
1
|
+
#!/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
module Hilbert
|
5
|
+
module World
|
6
|
+
module PropositionalLogic
|
7
|
+
module Operator
|
8
|
+
def ~@
|
9
|
+
if is_neg? then p
|
10
|
+
elsif is_form? then vars.map { |a|~a }.inject(reope)
|
11
|
+
else NEG.new(self)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def *(q)
|
16
|
+
case q
|
17
|
+
when Taut then self
|
18
|
+
when UTaut then $utout
|
19
|
+
when self then self
|
20
|
+
else
|
21
|
+
if neg?(q) then $utout
|
22
|
+
else FORM.new([self, q], :*)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def +(q)
|
28
|
+
case q
|
29
|
+
when Taut then $tout
|
30
|
+
when UTaut then self
|
31
|
+
when self then self
|
32
|
+
else
|
33
|
+
if neg?(q) then $tout
|
34
|
+
else FORM.new([self, q], :+)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def >=(q)
|
40
|
+
(~self + q)
|
41
|
+
end
|
42
|
+
|
43
|
+
def <=>(q)
|
44
|
+
(self >= q) * (q >= self)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
module Utils
|
49
|
+
def neg?(p)
|
50
|
+
(is_a?(NEG) && self.p == p) ||
|
51
|
+
(p.is_a?(NEG) && p.p == self)
|
52
|
+
end
|
53
|
+
|
54
|
+
def is_neg?
|
55
|
+
is_a?(NEG)
|
56
|
+
end
|
57
|
+
|
58
|
+
def is_form?(ope=true)
|
59
|
+
return is_a?(FORM) if ope === true
|
60
|
+
is_a?(FORM) && @ope == ope
|
61
|
+
end
|
62
|
+
|
63
|
+
def is_or?
|
64
|
+
is_form?(:+)
|
65
|
+
end
|
66
|
+
|
67
|
+
def is_and?
|
68
|
+
is_form?(:*)
|
69
|
+
end
|
70
|
+
|
71
|
+
def include?(p)
|
72
|
+
false
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
module Base; include Operator; include Utils end
|
77
|
+
|
78
|
+
# Tautology
|
79
|
+
class Taut
|
80
|
+
include Base
|
81
|
+
def ~@; $utout end
|
82
|
+
def +(q); $tout end
|
83
|
+
def *(q); q end
|
84
|
+
def !@; $tout end
|
85
|
+
def to_s; 'TRUE' end
|
86
|
+
end
|
87
|
+
$tout = Taut.new
|
88
|
+
|
89
|
+
# Non Tautology
|
90
|
+
class UTaut
|
91
|
+
include Base
|
92
|
+
def ~@; $tout end
|
93
|
+
def +(q); q end
|
94
|
+
def *(q); $utout end
|
95
|
+
def !@; $utout end
|
96
|
+
def to_s; 'FALSE' end
|
97
|
+
end
|
98
|
+
$utout = UTaut.new
|
99
|
+
|
100
|
+
class Atom
|
101
|
+
include Base
|
102
|
+
attr_accessor :p
|
103
|
+
def initialize(p); @p = p end
|
104
|
+
def to_s; @p.to_s end
|
105
|
+
def !@; self end
|
106
|
+
def deep; 1 end
|
107
|
+
end
|
108
|
+
$atoms = []
|
109
|
+
|
110
|
+
class NEG
|
111
|
+
include Base
|
112
|
+
attr_accessor :p
|
113
|
+
def initialize(p); @p = p end
|
114
|
+
def to_s; "~#{@p}" end
|
115
|
+
def !@; ~(!p) end
|
116
|
+
def deep; p.deep+1 end
|
117
|
+
end
|
118
|
+
|
119
|
+
|
120
|
+
class FORM
|
121
|
+
include Base
|
122
|
+
attr_accessor :vars, :ope
|
123
|
+
def initialize(vars, ope)
|
124
|
+
vars = vars.map { |var| var.is_form?(ope) ? var.vars : var }.flatten
|
125
|
+
@vars, @ope = vars, ope
|
126
|
+
end
|
127
|
+
|
128
|
+
def include?(p)
|
129
|
+
vars.include?(p)
|
130
|
+
end
|
131
|
+
|
132
|
+
def to_s
|
133
|
+
str = vars.each.with_index.inject('(') do |str, (p, i)|
|
134
|
+
str = str + "#{p}#{i < vars.count-1 ? loope : ')'}"
|
135
|
+
str
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def loope
|
140
|
+
@ope == :* ? '&' : '|'
|
141
|
+
end
|
142
|
+
|
143
|
+
def reope
|
144
|
+
is_and? ? :+ : :*
|
145
|
+
end
|
146
|
+
|
147
|
+
def are_there_neg?
|
148
|
+
pvars = vars.reject { |var| var.is_neg? }
|
149
|
+
nvars = vars.select { |var| var.is_neg? }
|
150
|
+
pvars.any? { |pvar|
|
151
|
+
nvars.any? { |nvar| nvar.neg?(pvar) }
|
152
|
+
}
|
153
|
+
end
|
154
|
+
|
155
|
+
def !@
|
156
|
+
if is_or?
|
157
|
+
if and_form = vars.find { |var| var.is_and? }
|
158
|
+
and_form.vars.map { |a| a + FORM.new((vars - [and_form]), :+) }.inject(:*)
|
159
|
+
elsif are_there_neg?
|
160
|
+
$tout
|
161
|
+
else
|
162
|
+
vars.map{|a|!a}.inject(@ope)
|
163
|
+
end
|
164
|
+
elsif is_and? && are_there_neg?
|
165
|
+
$utout
|
166
|
+
else
|
167
|
+
vars.map{|a|!a}.inject(@ope)
|
168
|
+
end
|
169
|
+
end
|
170
|
+
def deep; [p.deep, q.deep].max+1; end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'hilbert/world/base'
|
2
|
+
require 'hilbert/world/propositional_logic'
|
3
|
+
|
4
|
+
module Hilbert
|
5
|
+
module World
|
6
|
+
class Entity
|
7
|
+
@@propositions = []
|
8
|
+
class << self
|
9
|
+
def tautology
|
10
|
+
@@propositions
|
11
|
+
end
|
12
|
+
|
13
|
+
def <<(logic_form)
|
14
|
+
@@propositions << logic_form
|
15
|
+
end
|
16
|
+
|
17
|
+
def impl(logic_form, logic_str)
|
18
|
+
# HOTFIX:
|
19
|
+
return %|"Evaluate: #{logic_str} is UNDEFINED"| if @@propositions.empty?
|
20
|
+
str = (!!!!!!!(@@propositions.inject(:*) >= logic_form)).to_s
|
21
|
+
case str
|
22
|
+
when 'TRUE'
|
23
|
+
%|"Evaluate: #{logic_str} is TRUE"|
|
24
|
+
when 'FALSE'
|
25
|
+
%|"Evaluate: #{logic_str} is FALSE"|
|
26
|
+
else
|
27
|
+
%|"Evaluate: #{logic_str} is UNDEFINED"|
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def atom(sym)
|
32
|
+
unless sym.to_s == sym.to_s.upcase && sym.to_s.length == 1
|
33
|
+
raise 'Proposltionla variable should be capital character'
|
34
|
+
end
|
35
|
+
eval "$#{sym} ||= PropositionalLogic::Atom.new(:#{sym})"
|
36
|
+
end
|
37
|
+
|
38
|
+
def clear!
|
39
|
+
@@propositions = []
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/hilbert.rb
CHANGED
@@ -5,17 +5,18 @@ require 'singleton'
|
|
5
5
|
require 'yaml'
|
6
6
|
|
7
7
|
$:.unshift(File.dirname(__FILE__))
|
8
|
-
#
|
8
|
+
# Hilbert core
|
9
9
|
require 'hilbert/meta_info'
|
10
10
|
require 'hilbert/utils/ruby_ext'
|
11
11
|
require 'hilbert/lexer'
|
12
12
|
require 'hilbert/parser'
|
13
|
+
require 'hilbert/world'
|
13
14
|
|
14
15
|
module Hilbert
|
15
16
|
$meta_info = MetaInfo.instance
|
17
|
+
$world = World::Entity
|
16
18
|
|
17
19
|
class << self
|
18
|
-
|
19
20
|
def compile(str)
|
20
21
|
lexed = Lexer.execute(str)
|
21
22
|
Kconv.tosjis(Parser.execute(lexed))
|
@@ -28,10 +29,6 @@ module Hilbert
|
|
28
29
|
Hilbert
|
29
30
|
end
|
30
31
|
end
|
31
|
-
|
32
32
|
end
|
33
33
|
|
34
34
|
end
|
35
|
-
|
36
|
-
# Make alias as Q
|
37
|
-
Q = Hilbert
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'minitest_helper'
|
2
|
+
|
3
|
+
class TestPropositionalLogic < TestInterpreterBase
|
4
|
+
def setup
|
5
|
+
$world.clear!
|
6
|
+
end
|
7
|
+
|
8
|
+
# TODO: opposite
|
9
|
+
def assert_iq_equal(output, input)
|
10
|
+
assert_equal(output, Hilbert::Iq.execute(input))
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_general
|
14
|
+
assert_iq_equal('Defined: A is TRUE', 'A')
|
15
|
+
assert_iq_equal('Evaluate: A is TRUE', 'A?')
|
16
|
+
assert_iq_equal('Evaluate: B is UNDEFINED', 'B?')
|
17
|
+
assert_iq_equal('Defined: A->B is TRUE', "A->B")
|
18
|
+
assert_iq_equal('Evaluate: B is TRUE', 'B?')
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_syllogisms
|
22
|
+
assert_iq_equal('Evaluate: A is UNDEFINED', 'A?')
|
23
|
+
assert_iq_equal('Evaluate: A -> C is UNDEFINED', 'A -> C ?')
|
24
|
+
assert_iq_equal('Defined: A -> B is TRUE', 'A -> B')
|
25
|
+
assert_iq_equal('Defined: B -> C is TRUE', 'B -> C')
|
26
|
+
assert_iq_equal('Evaluate: A -> C is TRUE', 'A -> C ?')
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_paradox?
|
30
|
+
assert_iq_equal('Defined: A is TRUE', 'A')
|
31
|
+
assert_iq_equal('Defined: ~A is TRUE', '~A')
|
32
|
+
end
|
33
|
+
# assert_iq_equal('Defined: P(1) is true', "P(1)")
|
34
|
+
# assert_iq_equal('Evaluate: P(1) is true', 'P?(1)')
|
35
|
+
# assert_iq_equal('Evaluate: P(2) is undefined', 'P?(2)')
|
36
|
+
# assert_iq_equal('Evaluate: Q(1) is undefined', 'Q?(1)')
|
37
|
+
# assert_equal(
|
38
|
+
# "Defined: A[x] P(x) -> A[x] Q(x) is true",
|
39
|
+
# $world.truth.def_impli(['P', :all, true], ['Q', :all, true])
|
40
|
+
# )
|
41
|
+
# assert_iq_equal('Evaluate: Q(1) is true', 'Q?(1)')
|
42
|
+
#
|
43
|
+
# assert_iq_equal('Evaluate: Q(2) is undefined', 'Q?(2)')
|
44
|
+
#
|
45
|
+
# $world.truth.reset!
|
46
|
+
# assert_iq_equal("Defined: Human('gogo1') is true", "Human('gogo1')")
|
47
|
+
# assert_equal(
|
48
|
+
# "\"Defined: Human(\\'gogo1\\') -> WillDie(\\'gogo1\\') is true\"",
|
49
|
+
# $world.truth.def_impli(['Human', 'gogo1', true], ['WillDie', 'gogo1', true])
|
50
|
+
# )
|
51
|
+
# assert_iq_equal("Evaluate: WillDie('gogo1') is true", "WillDie?('gogo1')")
|
52
|
+
# assert_iq_equal("Evaluate: WillDie('gogo2') is undefined", "WillDie?('gogo2')")
|
53
|
+
# assert_iq_equal('Evaluate: Q(x) is true', 'Q?(x)')
|
54
|
+
end
|
data/test/langs/test_r.rb
CHANGED
data/test/minitest_helper.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
require 'minitest_helper'
|
2
2
|
# require 'hilbert/hilbert'
|
3
3
|
|
4
|
-
class
|
4
|
+
class TestHilbertMatrix < TestInterpreterBase
|
5
5
|
def setup
|
6
6
|
end
|
7
7
|
|
8
8
|
def test_main
|
9
|
-
# assert_equal(50.0,
|
9
|
+
# assert_equal(50.0, HilbertMatrix.new.func(10))
|
10
10
|
|
11
|
-
# assert_equal(8.0,
|
11
|
+
# assert_equal(8.0, HilbertMatrix.new.execute(0, 2, 100))
|
12
12
|
end
|
13
13
|
end
|
@@ -5,12 +5,11 @@ class TestHilbert < MiniTest::Unit::TestCase
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def assert_to_ruby(input, output)
|
8
|
-
assert_equal(
|
8
|
+
assert_equal(Hilbert.to_ruby.compile(input), output)
|
9
9
|
end
|
10
10
|
|
11
11
|
def test_basis
|
12
12
|
refute_nil ::Hilbert::VERSION
|
13
|
-
assert_equal(Hilbert, Q)
|
14
13
|
end
|
15
14
|
|
16
15
|
def test_demo_code
|
@@ -21,4 +20,3 @@ class TestHilbert < MiniTest::Unit::TestCase
|
|
21
20
|
assert_equal(Vector[1, 2, 3].to_q, '(1 2 3)')
|
22
21
|
end
|
23
22
|
end
|
24
|
-
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'minitest_helper'
|
2
|
+
|
3
|
+
class TestLexer < MiniTest::Unit::TestCase
|
4
|
+
def test_general
|
5
|
+
lexeds = Hilbert::Lexer::WorldLexer.execute('(A -> B) <-> (C|D)&(E&~R)')
|
6
|
+
assert_equal(22, lexeds.count)
|
7
|
+
Hilbert::Parser::WorldParser.execute(lexeds)
|
8
|
+
assert_equal(
|
9
|
+
"($world.atom(:A) >= $world.atom(:B)) <=> ($world.atom(:C) + $world.atom(:D)) * ($world.atom(:E) * ~$world.atom(:R))",
|
10
|
+
Hilbert::Parser::WorldParser.parsed_srt
|
11
|
+
)
|
12
|
+
|
13
|
+
|
14
|
+
lexeds = Hilbert::Lexer::WorldLexer.execute('(A & (A -> B)) -> B')
|
15
|
+
Hilbert::Parser::WorldParser.execute(lexeds)
|
16
|
+
assert_equal(
|
17
|
+
"($world.atom(:A) * ($world.atom(:A) >= $world.atom(:B))) >= $world.atom(:B)",
|
18
|
+
Hilbert::Parser::WorldParser.parsed_srt
|
19
|
+
)
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
class TestPropLogic < MiniTest::Unit::TestCase
|
2
|
+
# Fixit:
|
3
|
+
$p = $world.atom(:P)
|
4
|
+
$q = $world.atom(:Q)
|
5
|
+
$r = $world.atom(:R)
|
6
|
+
def setup
|
7
|
+
|
8
|
+
end
|
9
|
+
def assert_to_s(exp, obj)
|
10
|
+
assert_equal(exp, ((!!!!!!!obj).to_s))
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_utils
|
14
|
+
assert_equal(true, $p.neg?(~$p))
|
15
|
+
assert_equal(true, (~$p).neg?($p))
|
16
|
+
assert_equal(false, ($p).neg?($p))
|
17
|
+
assert_equal(false, ($p).neg?($p))
|
18
|
+
assert_equal(true, ($p + $q).include?($p))
|
19
|
+
assert_equal(true, ($p + $q).include?($q))
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_0_1
|
23
|
+
assert_to_s("TRUE", $p + $tout)
|
24
|
+
assert_to_s("TRUE", $tout + $p)
|
25
|
+
assert_to_s("P", $p + $utout)
|
26
|
+
assert_to_s("P", $utout + $p)
|
27
|
+
assert_to_s("TRUE", $p + ~$p)
|
28
|
+
assert_to_s("TRUE", ~$p + $p)
|
29
|
+
|
30
|
+
assert_to_s("P", $p * $tout)
|
31
|
+
assert_to_s("P", $tout * $p)
|
32
|
+
assert_to_s("FALSE", $p * $utout)
|
33
|
+
assert_to_s("FALSE", $utout * $p)
|
34
|
+
assert_to_s("FALSE", $p * ~$p)
|
35
|
+
assert_to_s("FALSE", ~$p * $p)
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_basis
|
39
|
+
assert_to_s("P", $p)
|
40
|
+
assert_to_s("(P|Q)", $p + $q)
|
41
|
+
assert_to_s("(P&Q)", $p * $q)
|
42
|
+
assert_to_s("~P", ~$p)
|
43
|
+
assert_to_s("(~P|Q)", $p >= $q)
|
44
|
+
assert_to_s("((~P|Q)&(~Q|P))", $p <=> $q)
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_main
|
48
|
+
assert_to_s("(~P&~Q)", ~($p + $q))
|
49
|
+
assert_to_s("(~P|~Q)", ~($p * $q))
|
50
|
+
assert_to_s("P", ~(~$p))
|
51
|
+
assert_to_s("((Q|P)&(R|P))", $p + ($q * $r))
|
52
|
+
assert_to_s("(P&Q&R)", $p * ($q * $r))
|
53
|
+
assert_to_s("(P&(~P|Q))", $p * ($p >= $q))
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_tautology
|
57
|
+
assert_to_s("TRUE", ~(~$p) >= $p)
|
58
|
+
assert_to_s("TRUE", ($p * ($p >= $q)) >= $q)
|
59
|
+
assert_to_s("TRUE", (($p >= $q) * ($q >= $r)) >= ($p >= $r))
|
60
|
+
assert_to_s("TRUE", (~$p * ($p + $q)) >= ($q))
|
61
|
+
assert_to_s("TRUE", (($p >= $q) * ($q >= $r) * $p) >= ($r))
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_no_tautology
|
65
|
+
assert_to_s("FALSE", $p * $q * ~$p)
|
66
|
+
end
|
67
|
+
end
|
metadata
CHANGED
@@ -1,83 +1,83 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hilbert
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2700100
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- gogotanaka
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11-
|
11
|
+
date: 2014-11-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dydx
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.2.7000000
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.2.7000000
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
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: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
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: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake-compiler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
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: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: minitest
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
description: Enjoy MATH!
|
@@ -89,10 +89,10 @@ extensions:
|
|
89
89
|
- ext/hilbert/extconf.rb
|
90
90
|
extra_rdoc_files: []
|
91
91
|
files:
|
92
|
-
- .coveralls.yml
|
93
|
-
- .gitignore
|
94
|
-
- .rubocop.yml
|
95
|
-
- .travis.yml
|
92
|
+
- ".coveralls.yml"
|
93
|
+
- ".gitignore"
|
94
|
+
- ".rubocop.yml"
|
95
|
+
- ".travis.yml"
|
96
96
|
- Gemfile
|
97
97
|
- Guardfile
|
98
98
|
- LICENSE.txt
|
@@ -132,6 +132,7 @@ files:
|
|
132
132
|
- lib/hilbert/lexer/formula_lexer.rb
|
133
133
|
- lib/hilbert/lexer/main_lexer.rb
|
134
134
|
- lib/hilbert/lexer/tokens.rb
|
135
|
+
- lib/hilbert/lexer/world_lexer.rb
|
135
136
|
- lib/hilbert/meta_info.rb
|
136
137
|
- lib/hilbert/parser.rb
|
137
138
|
- lib/hilbert/parser/base.rb
|
@@ -143,9 +144,13 @@ files:
|
|
143
144
|
- lib/hilbert/parser/matrix_parser.rb
|
144
145
|
- lib/hilbert/parser/sigma_parser.rb
|
145
146
|
- lib/hilbert/parser/vector_parser.rb
|
147
|
+
- lib/hilbert/parser/world_parser.rb
|
146
148
|
- lib/hilbert/utils/langs.yml
|
147
149
|
- lib/hilbert/utils/ruby_ext.rb
|
148
150
|
- lib/hilbert/version.rb
|
151
|
+
- lib/hilbert/world.rb
|
152
|
+
- lib/hilbert/world/base.rb
|
153
|
+
- lib/hilbert/world/propositional_logic.rb
|
149
154
|
- test/internal/test_tokens.rb
|
150
155
|
- test/interpreter/base.rb
|
151
156
|
- test/interpreter/test_differential.rb
|
@@ -154,13 +159,16 @@ files:
|
|
154
159
|
- test/interpreter/test_integral.rb
|
155
160
|
- test/interpreter/test_limit.rb
|
156
161
|
- test/interpreter/test_matrix.rb
|
162
|
+
- test/interpreter/test_propositional_logic.rb
|
157
163
|
- test/interpreter/test_sigma.rb
|
158
164
|
- test/interpreter/test_vector.rb
|
159
165
|
- test/langs/test_r.rb
|
160
166
|
- test/langs/test_ruby.rb
|
161
167
|
- test/minitest_helper.rb
|
162
168
|
- test/q_matrix/test_q_matrix.rb
|
163
|
-
- test/
|
169
|
+
- test/test_hilbert.rb
|
170
|
+
- test/world/test_lexer.rb
|
171
|
+
- test/world/test_prop_logic.rb
|
164
172
|
homepage: http://q-language.org/
|
165
173
|
licenses:
|
166
174
|
- MIT
|
@@ -171,17 +179,17 @@ require_paths:
|
|
171
179
|
- lib
|
172
180
|
required_ruby_version: !ruby/object:Gem::Requirement
|
173
181
|
requirements:
|
174
|
-
- -
|
182
|
+
- - ">="
|
175
183
|
- !ruby/object:Gem::Version
|
176
184
|
version: '0'
|
177
185
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
178
186
|
requirements:
|
179
|
-
- -
|
187
|
+
- - ">="
|
180
188
|
- !ruby/object:Gem::Version
|
181
189
|
version: '0'
|
182
190
|
requirements: []
|
183
191
|
rubyforge_project:
|
184
|
-
rubygems_version: 2.
|
192
|
+
rubygems_version: 2.2.2
|
185
193
|
signing_key:
|
186
194
|
specification_version: 4
|
187
195
|
summary: Enjoy MATH!
|
@@ -194,10 +202,13 @@ test_files:
|
|
194
202
|
- test/interpreter/test_integral.rb
|
195
203
|
- test/interpreter/test_limit.rb
|
196
204
|
- test/interpreter/test_matrix.rb
|
205
|
+
- test/interpreter/test_propositional_logic.rb
|
197
206
|
- test/interpreter/test_sigma.rb
|
198
207
|
- test/interpreter/test_vector.rb
|
199
208
|
- test/langs/test_r.rb
|
200
209
|
- test/langs/test_ruby.rb
|
201
210
|
- test/minitest_helper.rb
|
202
211
|
- test/q_matrix/test_q_matrix.rb
|
203
|
-
- test/
|
212
|
+
- test/test_hilbert.rb
|
213
|
+
- test/world/test_lexer.rb
|
214
|
+
- test/world/test_prop_logic.rb
|