class Algebra::Map
Attributes
codomain[RW]
module Map_common
codomain=[RW]
module Map_common
target[RW]
module Map_common
Public Class Methods
[](a = {})
click to toggle source
# File lib/algebra/finite-map.rb, line 14 def self.[](a = {}) new.instance_eval do @body = Hash[a] self end end
empty_set(t = nil)
click to toggle source
# File lib/algebra/finite-map.rb, line 29 def self.empty_set(t = nil) m = new m.target = t if t m end
new(h = {})
click to toggle source
# File lib/algebra/finite-map.rb, line 25 def initialize(h = {}) @body = h end
new_a(a)
click to toggle source
# File lib/algebra/finite-map.rb, line 21 def self.new_a(a) self[Hash[*a]] end
singleton(x, y)
click to toggle source
# File lib/algebra/finite-map.rb, line 40 def self.singleton(x, y) new(x => y) end
Public Instance Methods
append(x, y)
click to toggle source
# File lib/algebra/finite-map.rb, line 79 def append(x, y) dup.append!(x, y) end
append!(x, y)
click to toggle source
# File lib/algebra/finite-map.rb, line 72 def append!(x, y) @body.store(x, y) self end
Also aliased as: []=
base_class()
click to toggle source
# File lib/algebra/finite-map.rb, line 44 def base_class self.class.superclass end
bijective?()
click to toggle source
# File lib/algebra/finite-map.rb, line 158 def bijective? surjective? && injective? end
call(x)
click to toggle source
# File lib/algebra/finite-map.rb, line 65 def call(x) @body.fetch(x) end
compose(other)
click to toggle source
# File lib/algebra/finite-map.rb, line 130 def compose(other) # LEFT ACTION!!! m = other.map_m { |x, y| [x, call(y)] } m.target = target m end
Also aliased as: *
domain()
click to toggle source
# File lib/algebra/finite-map.rb, line 98 def domain base_class.new(*@body.keys) end
Also aliased as: source
dup()
click to toggle source
# File lib/algebra/finite-map.rb, line 59 def dup m = self.class.new(@body.dup) m.target = target if target m end
each(&b)
click to toggle source
# File lib/algebra/finite-map.rb, line 48 def each(&b) @body.each(&b) end
empty_set(s = nil)
click to toggle source
# File lib/algebra/finite-map.rb, line 52 def empty_set(s = nil) self.class.empty_set(s) end
hash()
click to toggle source
# File lib/algebra/finite-map.rb, line 83 def hash s = 0 @body.each_key do |k, v| s ^= k.hash ^ ~v.hash end s end
identity?()
click to toggle source
# File lib/algebra/finite-map.rb, line 145 def identity? all? { |x, y| x == y } end
image(set = nil)
click to toggle source
# File lib/algebra/finite-map.rb, line 102 def image(set = nil) if set set.map_s { |k| call(k) } else base_class.new(*@body.values) end end
injective?()
click to toggle source
# File lib/algebra/finite-map.rb, line 154 def injective? image.size == source.size end
inspect()
click to toggle source
# File lib/algebra/finite-map.rb, line 183 def inspect @body.inspect end
inv_coset()
click to toggle source
# File lib/algebra/finite-map.rb, line 166 def inv_coset s = phi if target target.each do |y| s.append!(y, base_class.phi) end end each do |x, y| if s.include? y s.call(y) << x else s.append!(y, base_class.singleton(x)) end end s end
inv_image(s)
click to toggle source
# File lib/algebra/finite-map.rb, line 162 def inv_image(s) source.separate { |x| s.member? act(x) } end
inverse()
click to toggle source
# File lib/algebra/finite-map.rb, line 126 def inverse self.class.new(@body.invert) end
map_m() { |x, y| ... }
click to toggle source
# File lib/algebra/finite-map.rb, line 118 def map_m s = phi each do |x, y| s.append!(* yield(x, y)) end s end
map_s() { |x, y| ... }
click to toggle source
# File lib/algebra/finite-map.rb, line 110 def map_s s = base_class.phi each do |x, y| s.append!(yield(x, y)) end s end
member?(a)
click to toggle source
# File lib/algebra/finite-map.rb, line 91 def member?(a) return nil unless a.is_a? Array @body[a.first] == a.last end
Also aliased as: has?
surjective?()
click to toggle source
# File lib/algebra/finite-map.rb, line 149 def surjective? raise 'target is not defined.' unless @target image.size == target.size end
to_s()
click to toggle source
# File lib/algebra/finite-map.rb, line 187 def to_s @body.inspect end