module Pione::PNML::InvalidArcElimination

‘InvalidArcElimination` is a net rewriting rule. This rule removes invalid arcs from nets.

Public Class Methods

find_subjects(net, env) click to toggle source

Find subjects(an invalid arc) by following criteria.

  • There is a arc.

  • It should connect source place and target transition, or source transition and target place.

# File lib/pione/pnml/invalid-arc-elimination.rb, line 11
def self.find_subjects(net, env)
  net.arcs.each do |arc|
    source_transition = net.find_transition(arc.source_id)
    source_place = net.find_place(arc.source_id)
    target_transition = net.find_transition(arc.target_id)
    target_place = net.find_place(arc.target_id)

    # arc from transition to place
    cond1 = not(source_transition.nil?) && not(target_place.nil?)

    # arc from place to transition
    cond2 = not(source_place.nil?) && not(target_transition.nil?)

    unless cond1 or cond2
      return [arc]
    end
  end

  return nil
end
rewrite(net, subjects, env) click to toggle source

Rewrite the net by eliminating isolated node.

# File lib/pione/pnml/invalid-arc-elimination.rb, line 33
def self.rewrite(net, subjects, env)
  arc = subjects.first

  # eliminate
  net.arcs.delete(arc)
end