stamina-core 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. data/CHANGELOG.md +78 -0
  2. data/LICENCE.md +22 -0
  3. data/lib/stamina-core/stamina-core.rb +1 -0
  4. data/lib/stamina-core/stamina/adl.rb +298 -0
  5. data/lib/stamina-core/stamina/automaton.rb +1300 -0
  6. data/lib/stamina-core/stamina/automaton/complement.rb +26 -0
  7. data/lib/stamina-core/stamina/automaton/complete.rb +36 -0
  8. data/lib/stamina-core/stamina/automaton/compose.rb +111 -0
  9. data/lib/stamina-core/stamina/automaton/determinize.rb +104 -0
  10. data/lib/stamina-core/stamina/automaton/equivalence.rb +57 -0
  11. data/lib/stamina-core/stamina/automaton/hide.rb +41 -0
  12. data/lib/stamina-core/stamina/automaton/metrics.rb +77 -0
  13. data/lib/stamina-core/stamina/automaton/minimize.rb +23 -0
  14. data/lib/stamina-core/stamina/automaton/minimize/hopcroft.rb +118 -0
  15. data/lib/stamina-core/stamina/automaton/minimize/pitchies.rb +130 -0
  16. data/lib/stamina-core/stamina/automaton/strip.rb +16 -0
  17. data/lib/stamina-core/stamina/automaton/walking.rb +361 -0
  18. data/lib/stamina-core/stamina/command.rb +38 -0
  19. data/lib/stamina-core/stamina/command/adl2dot.rb +82 -0
  20. data/lib/stamina-core/stamina/command/help.rb +23 -0
  21. data/lib/stamina-core/stamina/command/robustness.rb +21 -0
  22. data/lib/stamina-core/stamina/command/run.rb +84 -0
  23. data/lib/stamina-core/stamina/core.rb +11 -0
  24. data/lib/stamina-core/stamina/dsl.rb +6 -0
  25. data/lib/stamina-core/stamina/dsl/automata.rb +23 -0
  26. data/lib/stamina-core/stamina/dsl/core.rb +14 -0
  27. data/lib/stamina-core/stamina/engine.rb +32 -0
  28. data/lib/stamina-core/stamina/engine/context.rb +35 -0
  29. data/lib/stamina-core/stamina/errors.rb +26 -0
  30. data/lib/stamina-core/stamina/ext/math.rb +19 -0
  31. data/lib/stamina-core/stamina/loader.rb +3 -0
  32. data/lib/stamina-core/stamina/markable.rb +42 -0
  33. data/lib/stamina-core/stamina/utils.rb +1 -0
  34. data/lib/stamina-core/stamina/utils/decorate.rb +81 -0
  35. data/lib/stamina-core/stamina/version.rb +14 -0
  36. metadata +93 -0
@@ -0,0 +1 @@
1
+ require_relative 'utils/decorate'
@@ -0,0 +1,81 @@
1
+ module Stamina
2
+ module Utils
3
+ #
4
+ # Decorates states of an automaton by applying a propagation rule
5
+ # until a fix point is reached.
6
+ #
7
+ class Decorate
8
+
9
+ # The key to use to maintain the decoration on states (:invariant
10
+ # is used by default)
11
+ attr_writer :decoration_key
12
+
13
+ # Creates a decoration algorithm instance
14
+ def initialize(decoration_key = :invariant)
15
+ @decoration_key = decoration_key
16
+ @suppremum = nil
17
+ @propagate = nil
18
+ end
19
+
20
+ # Installs a suppremum function through a block.
21
+ def set_suppremum(&block)
22
+ raise ArgumentError, 'Suppremum expected through a block' if block.nil?
23
+ raise ArgumentError, 'Block of arity 2 expected' unless block.arity==2
24
+ @suppremum = block
25
+ end
26
+
27
+ # Installs a propagate function through a block.
28
+ def set_propagate(&block)
29
+ raise ArgumentError, 'Propagate expected through a block' if block.nil?
30
+ raise ArgumentError, 'Block of arity 2 expected' unless block.arity==2
31
+ @propagate = block
32
+ end
33
+
34
+ # Computes the suppremum between two decorations. By default, this method
35
+ # looks for a suppremum function installed with set_suppremum. If not found,
36
+ # it tries calling a suppremum method on d0. If not found it raises an error.
37
+ # This method may be overriden.
38
+ def suppremum(d0, d1)
39
+ return @suppremum.call(d0, d1) if @suppremum
40
+ return d0.suppremum(d1) if d0.respond_to?(:suppremum)
41
+ raise "No suppremum function installed or implemented by decorations"
42
+ end
43
+
44
+ # Computes the propagation rule. By default, this method looks for a propagate
45
+ # function installed with set_propagate. If not found, it tries calling a +
46
+ # method on deco. If not found it raises an error.
47
+ # This method may be overriden.
48
+ def propagate(deco, edge)
49
+ return @propagate.call(deco, edge) if @propagate
50
+ return deco.+(edge) if deco.respond_to?(:+)
51
+ raise "No propagate function installed or implemented by decorations"
52
+ end
53
+
54
+ # Executes the propagation algorithm on a given automaton.
55
+ def execute(fa, bottom, d0)
56
+ # install initial decoration
57
+ fa.states.each do |s|
58
+ s[@decoration_key] = (s.initial? ? d0 : bottom)
59
+ end
60
+
61
+ # fix-point loop starting with initial states
62
+ to_explore = fa.initial_states
63
+ until to_explore.empty?
64
+ source = to_explore.pop
65
+ source.out_edges.each do |edge|
66
+ target = edge.target
67
+ p_decor = propagate(source[@decoration_key], edge)
68
+ p_decor = suppremum(target[@decoration_key], p_decor)
69
+ unless p_decor == target[@decoration_key]
70
+ target[@decoration_key] = p_decor
71
+ to_explore << target unless to_explore.include?(target)
72
+ end
73
+ end
74
+ end
75
+
76
+ fa
77
+ end
78
+
79
+ end # class Decorate
80
+ end # module Utils
81
+ end # module Stamina
@@ -0,0 +1,14 @@
1
+ module Stamina
2
+ module Version
3
+
4
+ MAJOR = 0
5
+ MINOR = 5
6
+ TINY = 0
7
+
8
+ def self.to_s
9
+ [ MAJOR, MINOR, TINY ].join('.')
10
+ end
11
+
12
+ end
13
+ VERSION = Version.to_s
14
+ end
metadata ADDED
@@ -0,0 +1,93 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: stamina-core
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Bernard Lambeau
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-02-24 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: quickl
16
+ requirement: &70173945608140 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.4.3
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70173945608140
25
+ description: ! "Stamina is an automaton and regular inference toolkit initially developped
26
+ for the \nbaseline of the Stamina Competition (stamina.chefbe.net)."
27
+ email:
28
+ - blambeau@gmail.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - LICENCE.md
34
+ - CHANGELOG.md
35
+ - lib/stamina-core/stamina/adl.rb
36
+ - lib/stamina-core/stamina/automaton/complement.rb
37
+ - lib/stamina-core/stamina/automaton/complete.rb
38
+ - lib/stamina-core/stamina/automaton/compose.rb
39
+ - lib/stamina-core/stamina/automaton/determinize.rb
40
+ - lib/stamina-core/stamina/automaton/equivalence.rb
41
+ - lib/stamina-core/stamina/automaton/hide.rb
42
+ - lib/stamina-core/stamina/automaton/metrics.rb
43
+ - lib/stamina-core/stamina/automaton/minimize/hopcroft.rb
44
+ - lib/stamina-core/stamina/automaton/minimize/pitchies.rb
45
+ - lib/stamina-core/stamina/automaton/minimize.rb
46
+ - lib/stamina-core/stamina/automaton/strip.rb
47
+ - lib/stamina-core/stamina/automaton/walking.rb
48
+ - lib/stamina-core/stamina/automaton.rb
49
+ - lib/stamina-core/stamina/command/adl2dot.rb
50
+ - lib/stamina-core/stamina/command/help.rb
51
+ - lib/stamina-core/stamina/command/robustness.rb
52
+ - lib/stamina-core/stamina/command/run.rb
53
+ - lib/stamina-core/stamina/command.rb
54
+ - lib/stamina-core/stamina/core.rb
55
+ - lib/stamina-core/stamina/dsl/automata.rb
56
+ - lib/stamina-core/stamina/dsl/core.rb
57
+ - lib/stamina-core/stamina/dsl.rb
58
+ - lib/stamina-core/stamina/engine/context.rb
59
+ - lib/stamina-core/stamina/engine.rb
60
+ - lib/stamina-core/stamina/errors.rb
61
+ - lib/stamina-core/stamina/ext/math.rb
62
+ - lib/stamina-core/stamina/loader.rb
63
+ - lib/stamina-core/stamina/markable.rb
64
+ - lib/stamina-core/stamina/utils/decorate.rb
65
+ - lib/stamina-core/stamina/utils.rb
66
+ - lib/stamina-core/stamina/version.rb
67
+ - lib/stamina-core/stamina-core.rb
68
+ homepage: https://github.com/blambeau/stamina
69
+ licenses: []
70
+ post_install_message:
71
+ rdoc_options: []
72
+ require_paths:
73
+ - lib/stamina-core
74
+ required_ruby_version: !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ! '>='
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ requirements: []
87
+ rubyforge_project:
88
+ rubygems_version: 1.8.10
89
+ signing_key:
90
+ specification_version: 3
91
+ summary: Automaton and Regular Inference Toolkit
92
+ test_files: []
93
+ has_rdoc: