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
Also aliased as: phi, null
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
null(t = nil)
Alias for: empty_set
phi(t = nil)
Alias for: empty_set
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

*(other)
Alias for: compose
[](x)
Alias for: call
[]=(x, y)
Alias for: append!
act(x)
Alias for: call
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
Also aliased as: act, []
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
Also aliased as: phi, null
has?(a)
Alias for: member?
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?
null(s = nil)
Alias for: empty_set
phi(s = nil)
Alias for: empty_set
source()
Alias for: domain
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