hilbert 0.0.2700100 → 0.0.2700110
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +16 -2
- data/bin/hilbert +7 -0
- data/hilbert.gemspec +1 -1
- data/lib/hilbert/api/limit_api.rb +1 -0
- data/lib/hilbert/api/sigma_api.rb +1 -0
- data/lib/hilbert/iq.rb +2 -2
- data/lib/hilbert/lexer/main_lexer.rb +6 -4
- data/lib/hilbert/parser.rb +8 -10
- data/lib/hilbert/version.rb +1 -1
- data/lib/hilbert/world.rb +32 -12
- data/test/interpreter/test_differential.rb +30 -14
- data/test/interpreter/test_function.rb +3 -0
- data/test/interpreter/test_general.rb +10 -2
- data/test/interpreter/test_limit.rb +6 -1
- data/test/interpreter/test_propositional_logic.rb +3 -0
- data/test/interpreter/test_sigma.rb +6 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8b6c55b9859234a6710c7d633a13a06112ab0a4f
|
4
|
+
data.tar.gz: 2c336de0d9940bb01e151f8fe235d107248540b9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b567ae6c9b84b1ff938035dccf82fa3fae2473264c030ba5691deef2ab004c8c85991f33159da43d0cd6e5301bb89afe43e344262ddc3bfa3b5167a561bda8d
|
7
|
+
data.tar.gz: 7eb3fda6ec81613dbdd59dafe0b558ad8deef8fcac1b00dbe3a828e81d3f7ceb574aaba62a5749bc877dabe09a30294529446e79c62b52c5ac2d8d137fbaa56e
|
data/README.md
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
## Do you know the one best language in this world?
|
6
6
|
|
7
|
-
#### I believe mathematics is absolutely that one.
|
7
|
+
#### I believe mathematics(logic) is absolutely that one.
|
8
8
|
|
9
9
|
## How can we deal something as great as mathematics in a discrete world?
|
10
10
|
|
@@ -26,6 +26,19 @@ The code below is input and output for the Hilbert interpreter
|
|
26
26
|
|
27
27
|
(you can try it by `hilbert -i`)
|
28
28
|
|
29
|
+
### Logic
|
30
|
+
```coffeescript
|
31
|
+
P -> Q
|
32
|
+
Q -> R
|
33
|
+
(P -> R)?
|
34
|
+
=> TRUE
|
35
|
+
|
36
|
+
P | Q # P or Q
|
37
|
+
~P # not P
|
38
|
+
Q? # Q is TURE?
|
39
|
+
=> TURE
|
40
|
+
```
|
41
|
+
|
29
42
|
### Differentiate
|
30
43
|
|
31
44
|
```
|
@@ -155,5 +168,6 @@ end
|
|
155
168
|
|
156
169
|
## Contributing
|
157
170
|
|
158
|
-
Any PRs or issues are welcome.
|
171
|
+
Any PRs or issues are welcome. (Please make to `develop` branch)
|
172
|
+
|
159
173
|
You can become a commiter, even if you only commit once.
|
data/bin/hilbert
CHANGED
@@ -11,6 +11,13 @@ require 'hilbert/iq'
|
|
11
11
|
# TODO: There are vanch of todo ..
|
12
12
|
case ARGV.first
|
13
13
|
when '-i'
|
14
|
+
if ARGV[1] == '-zfc'
|
15
|
+
Hilbert::Iq.execute('postulate zfc_analysis')
|
16
|
+
print %|Hi guys, your postulating zfc_analysis is success. :) \n\n|
|
17
|
+
else
|
18
|
+
print %|Hi guys,thank you for using Hilbert.\nYou need to execute "postulate zfc_analysis" if you wanna do real analysis.\n\n|
|
19
|
+
end
|
20
|
+
|
14
21
|
loop do
|
15
22
|
print 'Enjoy! -> '
|
16
23
|
begin
|
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.2.
|
22
|
+
spec.add_dependency 'dydx', '~> 0.2.7000001'
|
23
23
|
|
24
24
|
spec.add_development_dependency 'bundler'
|
25
25
|
spec.add_development_dependency 'rake'
|
data/lib/hilbert/iq.rb
CHANGED
@@ -30,10 +30,10 @@ module Hilbert
|
|
30
30
|
when Matrix, Vector, Dydx::Algebra::Formula
|
31
31
|
ruby_obj.to_q
|
32
32
|
when Numeric
|
33
|
-
# TODO: I know you wanna
|
33
|
+
# TODO: I know what you wanna say..
|
34
34
|
if ruby_obj > 10000.0 then 'oo'
|
35
35
|
elsif ruby_obj < -10000.0 then '-oo'
|
36
|
-
elsif ruby_obj.abs <
|
36
|
+
elsif ruby_obj.abs < 1.0/10**4 then '0.0'
|
37
37
|
else ruby_obj.to_s.equalize!
|
38
38
|
end
|
39
39
|
else
|
@@ -3,8 +3,9 @@ module Hilbert
|
|
3
3
|
class MainLexer < Base
|
4
4
|
# TODO: So far so good, but...
|
5
5
|
rule(/postulate zfc_analysis/) { :POST_ZFC }
|
6
|
-
rule(
|
7
|
-
rule(
|
6
|
+
rule(/paradox\?/) { :P_PARAD }
|
7
|
+
rule(/\A.*[A-RT-Z].*\?.*\z/m) { :EVALOGIC }
|
8
|
+
rule(/\A.*[A-RT-Z].*\z/m) { :DEFLOGIC }
|
8
9
|
rule(/[ \t\f]/)
|
9
10
|
|
10
11
|
rule(/(\r|\n)+/) { :NULL }
|
@@ -15,8 +16,9 @@ module Hilbert
|
|
15
16
|
def zfc_analysis!
|
16
17
|
clear!
|
17
18
|
rule(/postulate zfc_analysis/) { :POST_ZFC }
|
18
|
-
rule(
|
19
|
-
rule(
|
19
|
+
rule(/paradox\?/) { :P_PARAD }
|
20
|
+
rule(/\A.*[A-RT-Z].*\?.*\z/m) { :EVALOGIC }
|
21
|
+
rule(/\A.*[A-RT-Z].*\z/m) { :DEFLOGIC }
|
20
22
|
rule(/(#{FUNCCV})#{ANYSP}#{EQL}#{ANYSP}(#{FORMULA})/) { :DEF_FUNC }
|
21
23
|
rule(/#{INTE_SYM}#{ANYSP}#{LPRN}(#{ANYSTR})#{RPRN}#{LBRCT}(#{ANYSTR})#{RBRCT}/) { :INTEGRAL }
|
22
24
|
rule(/#{DIFF_SYM}(#{VAR}) (#{FORMULA})/) { :DIFFERENTIAL }
|
data/lib/hilbert/parser.rb
CHANGED
@@ -27,20 +27,18 @@ module Hilbert
|
|
27
27
|
case lexed.token_str
|
28
28
|
when /:(POST_ZFC)(\d+)/
|
29
29
|
Hilbert::Lexer::MainLexer.zfc_analysis!
|
30
|
-
lexed.parsed!('', $2)
|
30
|
+
lexed.parsed!('"success! :)"', $2)
|
31
|
+
when /:(P_PARAD)(\d+)/
|
32
|
+
lexed.parsed!($world.paradox?, $2)
|
33
|
+
|
31
34
|
when /:(DEFLOGIC)(\d+)/
|
32
|
-
value = lexed.get_value($1)
|
33
|
-
|
34
|
-
Parser::WorldParser.execute(lexeds)
|
35
|
-
$world << eval(Parser::WorldParser.parsed_srt)
|
36
|
-
rslt = %|"Defined: #{value} is TRUE"|
|
35
|
+
value = lexed.get_value($1).delete("\n")
|
36
|
+
rslt = $world << value
|
37
37
|
lexed.parsed!(rslt, $2)
|
38
38
|
|
39
39
|
when /:(EVALOGIC)(\d+)/
|
40
|
-
value = lexed.get_value($1).delete(
|
41
|
-
|
42
|
-
Parser::WorldParser.execute(lexeds)
|
43
|
-
rslt = $world.impl eval(Parser::WorldParser.parsed_srt), value
|
40
|
+
value = lexed.get_value($1).delete("?\n")
|
41
|
+
rslt = $world.impl value
|
44
42
|
lexed.parsed!(rslt, $2)
|
45
43
|
|
46
44
|
when /:(VECTOR)(\d+)/, /:(MATRIX)(\d+)/, /:(TMATRIX)(\d+)/, /:(INTEGRAL)(\d+)/, /:(DEF_FUNC)(\d+)/, /:(DIFFERENTIAL)(\d+)/, /:(LIMIT)(\d+)/, /:(SIGMA)(\d+)/
|
data/lib/hilbert/version.rb
CHANGED
data/lib/hilbert/world.rb
CHANGED
@@ -6,25 +6,22 @@ module Hilbert
|
|
6
6
|
class Entity
|
7
7
|
@@propositions = []
|
8
8
|
class << self
|
9
|
-
def
|
10
|
-
@@propositions
|
9
|
+
def <<(logic_str)
|
10
|
+
@@propositions << to_rb_obj(logic_str)
|
11
|
+
%|"Defined: #{logic_str} is TRUE"|
|
11
12
|
end
|
12
13
|
|
13
|
-
def
|
14
|
-
@@propositions << logic_form
|
15
|
-
end
|
16
|
-
|
17
|
-
def impl(logic_form, logic_str)
|
14
|
+
def impl(logic_str)
|
18
15
|
# HOTFIX:
|
19
|
-
return
|
20
|
-
str = (!!!!!!!(@@propositions.inject(:*) >=
|
16
|
+
return eval_rslt(logic_str, 'UNDEFINED') if @@propositions.empty?
|
17
|
+
str = (!!!!!!!(@@propositions.inject(:*) >= to_rb_obj(logic_str))).to_s
|
21
18
|
case str
|
22
19
|
when 'TRUE'
|
23
|
-
|
20
|
+
eval_rslt(logic_str, 'TRUE')
|
24
21
|
when 'FALSE'
|
25
|
-
|
22
|
+
eval_rslt(logic_str, 'FALSE')
|
26
23
|
else
|
27
|
-
|
24
|
+
eval_rslt(logic_str, 'UNDEFINED')
|
28
25
|
end
|
29
26
|
end
|
30
27
|
|
@@ -38,6 +35,29 @@ module Hilbert
|
|
38
35
|
def clear!
|
39
36
|
@@propositions = []
|
40
37
|
end
|
38
|
+
|
39
|
+
def paradox?
|
40
|
+
return %|"FALSE"| if @@propositions.empty?
|
41
|
+
str = (!!!!!!!(@@propositions.inject(:*) >= (atom(:P) * ~atom(:P)))).to_s
|
42
|
+
case str
|
43
|
+
when 'TRUE'
|
44
|
+
%|"TRUE"|
|
45
|
+
else
|
46
|
+
%|"FALSE"|
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Internal Utils
|
51
|
+
def to_rb_obj(logic_str)
|
52
|
+
lexeds = Lexer::WorldLexer.execute(logic_str)
|
53
|
+
Parser::WorldParser.execute(lexeds)
|
54
|
+
eval Parser::WorldParser.parsed_srt
|
55
|
+
end
|
56
|
+
|
57
|
+
def eval_rslt(logic_str, rslt)
|
58
|
+
%|"Evaluate: #{logic_str} is #{rslt}"|
|
59
|
+
end
|
60
|
+
|
41
61
|
end
|
42
62
|
end
|
43
63
|
end
|
@@ -1,43 +1,59 @@
|
|
1
1
|
require 'minitest_helper'
|
2
2
|
|
3
3
|
class TestDifferential < TestInterpreterBase
|
4
|
+
|
5
|
+
# TODO: opposite
|
6
|
+
def assert_iq_equal(output, input)
|
7
|
+
assert_equal(output, Hilbert::Iq.execute(input))
|
8
|
+
end
|
9
|
+
|
4
10
|
def setup
|
5
11
|
end
|
6
12
|
|
7
13
|
def test_general
|
8
14
|
assert_iq_equal(
|
9
|
-
'
|
10
|
-
'e
|
15
|
+
'e ^ x',
|
16
|
+
'd/dx(e ** x)'
|
17
|
+
)
|
18
|
+
|
19
|
+
assert_iq_equal(
|
20
|
+
'2x',
|
21
|
+
'd/dx(x ** 2)'
|
22
|
+
)
|
23
|
+
|
24
|
+
assert_iq_equal(
|
25
|
+
'2',
|
26
|
+
'd/dx(x * 2)'
|
11
27
|
)
|
12
28
|
|
13
29
|
assert_iq_equal(
|
14
|
-
'
|
15
|
-
'
|
30
|
+
'cos( x )',
|
31
|
+
'd/dx( sin(x) )'
|
16
32
|
)
|
17
33
|
|
18
34
|
assert_iq_equal(
|
19
|
-
'
|
20
|
-
'
|
35
|
+
'1 / x',
|
36
|
+
'd/dx(log(x))'
|
21
37
|
)
|
22
38
|
|
23
39
|
assert_iq_equal(
|
24
|
-
'
|
25
|
-
'cos(
|
40
|
+
'- sin( x )',
|
41
|
+
'd/dx cos(x)'
|
26
42
|
)
|
27
43
|
|
28
44
|
assert_iq_equal(
|
29
|
-
'
|
30
|
-
'
|
45
|
+
'2x',
|
46
|
+
'd/dx xx'
|
31
47
|
)
|
32
48
|
|
33
49
|
assert_iq_equal(
|
34
|
-
'
|
35
|
-
'
|
50
|
+
'1 / x',
|
51
|
+
'd/dx log(x)'
|
36
52
|
)
|
37
53
|
|
38
54
|
assert_iq_equal(
|
39
|
-
'
|
40
|
-
'
|
55
|
+
'( cos( x ) / x ) + ( log( x )( - sin( x ) ) )',
|
56
|
+
'd/dx log(x) * cos(x)'
|
41
57
|
)
|
42
58
|
end
|
43
59
|
end
|
@@ -4,9 +4,17 @@ class TestGeneral < TestInterpreterBase
|
|
4
4
|
def setup
|
5
5
|
end
|
6
6
|
|
7
|
+
# TODO: opposite
|
8
|
+
def assert_iq_equal(output, input)
|
9
|
+
assert_equal(output, Hilbert::Iq.execute(input))
|
10
|
+
end
|
11
|
+
|
7
12
|
def test_general
|
8
13
|
assert_iq_equal('2x', '2x')
|
9
|
-
assert_iq_equal('x + x'
|
10
|
-
assert_iq_equal('
|
14
|
+
assert_iq_equal('2x', 'x + x')
|
15
|
+
# assert_iq_equal('xy', 'xy')
|
16
|
+
assert_iq_equal('x ^ y', 'x ^ y')
|
17
|
+
assert_iq_equal('2sin( x )', 'sin(x) + sin(x)')
|
18
|
+
assert_iq_equal('log( x ) ^ 2', 'log(x) * log(x)')
|
11
19
|
end
|
12
20
|
end
|
@@ -5,7 +5,7 @@ class TestLimit < TestInterpreterBase
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def assert_iq_equal(output, input)
|
8
|
-
assert_equal(Hilbert::Iq.execute(input)
|
8
|
+
assert_equal(output, Hilbert::Iq.execute(input))
|
9
9
|
end
|
10
10
|
|
11
11
|
def test_general
|
@@ -33,5 +33,10 @@ class TestLimit < TestInterpreterBase
|
|
33
33
|
'0.0',
|
34
34
|
'lim[x->0] x'
|
35
35
|
)
|
36
|
+
|
37
|
+
assert_iq_equal(
|
38
|
+
'oo',
|
39
|
+
'lim[x->0] 1/x'
|
40
|
+
)
|
36
41
|
end
|
37
42
|
end
|
@@ -27,8 +27,11 @@ class TestPropositionalLogic < TestInterpreterBase
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def test_paradox?
|
30
|
+
assert_iq_equal('FALSE', 'paradox?')
|
30
31
|
assert_iq_equal('Defined: A is TRUE', 'A')
|
32
|
+
assert_iq_equal('FALSE', 'paradox?')
|
31
33
|
assert_iq_equal('Defined: ~A is TRUE', '~A')
|
34
|
+
assert_iq_equal('TRUE', 'paradox?')
|
32
35
|
end
|
33
36
|
# assert_iq_equal('Defined: P(1) is true', "P(1)")
|
34
37
|
# assert_iq_equal('Evaluate: P(1) is true', 'P?(1)')
|
@@ -12,6 +12,11 @@ class TestSigma < TestInterpreterBase
|
|
12
12
|
'55.0'
|
13
13
|
)
|
14
14
|
|
15
|
+
assert_iq_equal(
|
16
|
+
'∑[i=1, 10] i',
|
17
|
+
'55.0'
|
18
|
+
)
|
19
|
+
|
15
20
|
assert_iq_equal(
|
16
21
|
'∑[x=0, 10] x^2',
|
17
22
|
'385.0'
|
@@ -21,5 +26,6 @@ class TestSigma < TestInterpreterBase
|
|
21
26
|
'∑[x=0, 10] x^3',
|
22
27
|
'3025.0'
|
23
28
|
)
|
29
|
+
|
24
30
|
end
|
25
31
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
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.2700110
|
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-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dydx
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.2.
|
19
|
+
version: 0.2.7000001
|
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.2.
|
26
|
+
version: 0.2.7000001
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|