Sha256: f635ef4d2347489e3b838ffaaac55153514dcd92d963d887fee3ad787d7a0d05

Contents?: true

Size: 1.11 KB

Versions: 1

Compression:

Stored size: 1.11 KB

Contents

require "pry"
require "set"
class Topology
  attr_accessor :sos # Set of set

  def initialize(set)
    fail "sould be set of set" unless set.sos?
    @sos = if set.top? set.flatten #TODO: set of set of set
      set.flatten
    else
      set << set.flatten
      set2 = set.dup
      set3 = set.dup
      set.each do |e|
        set2.delete(e)
        set2.each { |f| set3 << (e & f)  }
      end
      set3
    end
  end

  def top?(x)
    @sos.top?(x)
  end
end

class TopologySpace < Struct.new(:set, :top)
end

class Object
  def set?
    is_a?(Set)
  end
end

class Set
  def power
    (0 .. 2 ** length - 1).map { |n|
      select.with_index { |_, i| (n >> i) & 1 == 1 }.to_set
    }.to_set
  end

  def sos?
    all?(&:set?)
  end

  def top?(x)
    sos? && subset?(x.power) && axiom1? && axiom2? && axiom3?(x)
  end

  def axiom1?
    sos2 = dup
    all? do |e|
      sos2.delete(e)
      sos2.all? { |f| _?(e | f)  }
    end
  end

  def axiom2?
    sos2 = dup
    all? do |e|
      sos2.delete(e)
      sos2.all? { |f| _?(e & f)  }
    end
  end

  def axiom3?(x)
    _?(Set[]) && _?(x)
  end

  alias :_? :include?
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
topology-0.0.1 lib/Topology.rb