public boolean build(final Role s) { return build(s, new HashSet<Role>()) != null; }
private TransitionGraph<Role> mirror(final TransitionGraph<Role> tg) { final Map<State<Role>, State<Role>> newStates = new HashMap<>(); final TransitionGraph<Role> mirror = new TransitionGraph<>(); final State<Role> oldInitialState = tg.getInitialState(); final State<Role> newFinalState = copyState(oldInitialState, mirror, newStates); mirror.addFinalState(newFinalState); final Set<State<Role>> oldFinalStates = tg.getFinalStates(); State<Role> newInitialState = null; if (oldFinalStates.size() == 1) { final State<Role> oldFinalState = oldFinalStates.iterator().next(); newInitialState = newStates.get(oldFinalState); } else { newInitialState = mirror.newState(); for (final State<Role> oldFinalState : oldFinalStates) mirror.addTransition(newInitialState, newStates.get(oldFinalState)); } mirror.setInitialState(newInitialState); return mirror; }
tg = buildNondeterministicFSM(s, visited); setFSM(s, tg); setFSM(s.getInverse(), mirror(tg).determinize().renumber());
if (!addRoleChainTransition(tg, s, subChain)) return null; return null; final TransitionGraph<Role> newGraph = build(r, visited);
public RBoxImpl() { _fsmBuilder = new FSMBuilder(this); addDatatypeRole(ATermUtils.TOP_DATA_PROPERTY); addDatatypeRole(ATermUtils.BOTTOM_DATA_PROPERTY); final Role topObjProp = addObjectRole(ATermUtils.TOP_OBJECT_PROPERTY); final Role bottomObjProp = addObjectRole(ATermUtils.BOTTOM_OBJECT_PROPERTY); topObjProp.setTransitive(true, DependencySet.INDEPENDENT); topObjProp.setReflexive(true, DependencySet.INDEPENDENT); bottomObjProp.setIrreflexive(true, DependencySet.INDEPENDENT); bottomObjProp.setAsymmetric(true, DependencySet.INDEPENDENT); addEquivalentRole(topObjProp.getName(), topObjProp.getInverse().getName(), DependencySet.INDEPENDENT); addEquivalentRole(bottomObjProp.getName(), bottomObjProp.getInverse().getName(), DependencySet.INDEPENDENT); }
private boolean addRoleChainTransition(final TransitionGraph<Role> tg, final Role s, final ATermList chain) { final Role firstRole = _rbox.getRole(chain.getFirst()); final Role lastRole = _rbox.getRole(chain.getLast()); final boolean firstRoleSame = s.isEquivalent(firstRole); final boolean lastRoleSame = s.isEquivalent(lastRole); final int length = chain.getLength(); if (firstRoleSame) { if (lastRoleSame && length != 2) return false; addRoleChainTransition(tg, tg.getFinalState(), tg.getFinalState(), chain.getNext(), length - 1); } else if (lastRoleSame) addRoleChainTransition(tg, tg.getInitialState(), tg.getInitialState(), chain, length - 1); else addRoleChainTransition(tg, tg.getInitialState(), tg.getFinalState(), chain, length); return true; }
tg = buildNondeterministicFSM(s, visited); setFSM(s, tg); setFSM(s.getInverse(), mirror(tg).determinize().renumber());
if (!addRoleChainTransition(tg, s, subChain)) return null; return null; final TransitionGraph<Role> newGraph = build(r, visited);
public RBoxImpl() { _fsmBuilder = new FSMBuilder(this); addDatatypeRole(ATermUtils.TOP_DATA_PROPERTY); addDatatypeRole(ATermUtils.BOTTOM_DATA_PROPERTY); final Role topObjProp = addObjectRole(ATermUtils.TOP_OBJECT_PROPERTY); final Role bottomObjProp = addObjectRole(ATermUtils.BOTTOM_OBJECT_PROPERTY); topObjProp.setTransitive(true, DependencySet.INDEPENDENT); topObjProp.setReflexive(true, DependencySet.INDEPENDENT); bottomObjProp.setIrreflexive(true, DependencySet.INDEPENDENT); bottomObjProp.setAsymmetric(true, DependencySet.INDEPENDENT); addEquivalentRole(topObjProp.getName(), topObjProp.getInverse().getName(), DependencySet.INDEPENDENT); addEquivalentRole(bottomObjProp.getName(), bottomObjProp.getInverse().getName(), DependencySet.INDEPENDENT); }
private boolean addRoleChainTransition(final TransitionGraph<Role> tg, final Role s, final ATermList chain) { final Role firstRole = _rbox.getRole(chain.getFirst()); final Role lastRole = _rbox.getRole(chain.getLast()); final boolean firstRoleSame = s.isEquivalent(firstRole); final boolean lastRoleSame = s.isEquivalent(lastRole); final int length = chain.getLength(); if (firstRoleSame) { if (lastRoleSame && length != 2) return false; addRoleChainTransition(tg, tg.getFinalState(), tg.getFinalState(), chain.getNext(), length - 1); } else if (lastRoleSame) addRoleChainTransition(tg, tg.getInitialState(), tg.getInitialState(), chain, length - 1); else addRoleChainTransition(tg, tg.getInitialState(), tg.getFinalState(), chain, length); return true; }
public boolean build(final Role s) { return build(s, new HashSet<Role>()) != null; }
private TransitionGraph<Role> mirror(final TransitionGraph<Role> tg) { final Map<State<Role>, State<Role>> newStates = new HashMap<>(); final TransitionGraph<Role> mirror = new TransitionGraph<>(); final State<Role> oldInitialState = tg.getInitialState(); final State<Role> newFinalState = copyState(oldInitialState, mirror, newStates); mirror.addFinalState(newFinalState); final Set<State<Role>> oldFinalStates = tg.getFinalStates(); State<Role> newInitialState = null; if (oldFinalStates.size() == 1) { final State<Role> oldFinalState = oldFinalStates.iterator().next(); newInitialState = newStates.get(oldFinalState); } else { newInitialState = mirror.newState(); for (final State<Role> oldFinalState : oldFinalStates) mirror.addTransition(newInitialState, newStates.get(oldFinalState)); } mirror.setInitialState(newInitialState); return mirror; }
getFsmBuilder().build(s);
private State<Role> copyState(final State<Role> oldState, final TransitionGraph<Role> newTG, final Map<State<Role>, State<Role>> newStates) { State<Role> newState = newStates.get(oldState); if (newState == null) { newState = newTG.newState(); newStates.put(oldState, newState); for (final Transition<Role> t : oldState.getTransitions()) { final State<Role> oldTo = t.getTo(); final State<Role> newFrom = copyState(oldTo, newTG, newStates); if (t.isEpsilon()) newTG.addTransition(newFrom, newState); else newTG.addTransition(newFrom, t.getName().getInverse(), newState); } } return newState; } }
getFsmBuilder().build(s);
private State<Role> copyState(final State<Role> oldState, final TransitionGraph<Role> newTG, final Map<State<Role>, State<Role>> newStates) { State<Role> newState = newStates.get(oldState); if (newState == null) { newState = newTG.newState(); newStates.put(oldState, newState); for (final Transition<Role> t : oldState.getTransitions()) { final State<Role> oldTo = t.getTo(); final State<Role> newFrom = copyState(oldTo, newTG, newStates); if (t.isEpsilon()) newTG.addTransition(newFrom, newState); else newTG.addTransition(newFrom, t.getName().getInverse(), newState); } } return newState; } }