Browse Source
Add AcceptanceReach, AcceptanceReachDD (for DFA style acceptance). [Joachim Klein]
Add AcceptanceReach, AcceptanceReachDD (for DFA style acceptance). [Joachim Klein]
git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@9608 bbc10eb1-c90d-0410-af57-cb519fbb1720master
3 changed files with 249 additions and 1 deletions
-
122prism/src/acceptance/AcceptanceReach.java
-
125prism/src/acceptance/AcceptanceReachDD.java
-
3prism/src/acceptance/AcceptanceType.java
@ -0,0 +1,122 @@ |
|||
//============================================================================== |
|||
// |
|||
// Copyright (c) 2014- |
|||
// Authors: |
|||
// * Joachim Klein <klein@tcs.inf.tu-dresden.de> (TU Dresden) |
|||
// |
|||
//------------------------------------------------------------------------------ |
|||
// |
|||
// This file is part of PRISM. |
|||
// |
|||
// PRISM is free software; you can redistribute it and/or modify |
|||
// it under the terms of the GNU General Public License as published by |
|||
// the Free Software Foundation; either version 2 of the License, or |
|||
// (at your option) any later version. |
|||
// |
|||
// PRISM is distributed in the hope that it will be useful, |
|||
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
// GNU General Public License for more details. |
|||
// |
|||
// You should have received a copy of the GNU General Public License |
|||
// along with PRISM; if not, write to the Free Software Foundation, |
|||
// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|||
// |
|||
//============================================================================== |
|||
|
|||
package acceptance; |
|||
|
|||
import java.util.BitSet; |
|||
|
|||
import jdd.JDDVars; |
|||
|
|||
/** |
|||
* A reachability acceptance condition (based on BitSet state sets). |
|||
* The acceptance is defined via a set of goal states and |
|||
* has to be "upward-closed", i.e., once a goal state has been reached, |
|||
* all successor states are goal states as well. |
|||
*/ |
|||
public class AcceptanceReach implements AcceptanceOmega |
|||
{ |
|||
/** The set of goal states */ |
|||
private BitSet goalStates = new BitSet(); |
|||
|
|||
/** Constructor (no goal states) */ |
|||
public AcceptanceReach() |
|||
{ |
|||
} |
|||
|
|||
/** Constructor (set goal states) */ |
|||
public AcceptanceReach(BitSet goalStates) |
|||
{ |
|||
this.goalStates = goalStates; |
|||
} |
|||
|
|||
/** Get the goal state set */ |
|||
public BitSet getGoalStates() |
|||
{ |
|||
return goalStates; |
|||
} |
|||
|
|||
/** Set the goal state set */ |
|||
public void setGoalStates(BitSet goalStates) |
|||
{ |
|||
this.goalStates = goalStates; |
|||
} |
|||
|
|||
/** Make a copy of the acceptance condition. */ |
|||
public AcceptanceReach clone() |
|||
{ |
|||
return new AcceptanceReach((BitSet)goalStates.clone()); |
|||
} |
|||
|
|||
@Override |
|||
public boolean isBSCCAccepting(BitSet bscc_states) |
|||
{ |
|||
return bscc_states.intersects(goalStates); |
|||
} |
|||
|
|||
|
|||
@Override |
|||
public void lift(LiftBitSet lifter) |
|||
{ |
|||
goalStates=lifter.lift(goalStates); |
|||
} |
|||
|
|||
@Override |
|||
public AcceptanceReachDD toAcceptanceDD(JDDVars ddRowVars) |
|||
{ |
|||
return new AcceptanceReachDD(this, ddRowVars); |
|||
} |
|||
|
|||
@Override |
|||
public String getSignatureForState(int i) |
|||
{ |
|||
return goalStates.get(i) ? "!" : " "; |
|||
} |
|||
|
|||
@Override |
|||
public String getSizeStatistics() |
|||
{ |
|||
return goalStates.cardinality()+" goal states"; |
|||
} |
|||
|
|||
@Override |
|||
public AcceptanceType getType() |
|||
{ |
|||
return AcceptanceType.REACH; |
|||
} |
|||
|
|||
@Override |
|||
public String getTypeAbbreviated() |
|||
{ |
|||
return "F"; |
|||
} |
|||
|
|||
@Override |
|||
public String getTypeName() |
|||
{ |
|||
return "Finite"; |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,125 @@ |
|||
package acceptance; |
|||
//============================================================================== |
|||
// |
|||
//Copyright (c) 2014- |
|||
//Authors: |
|||
//* Joachim Klein <klein@tcs.inf.tu-dresden.de> (TU Dresden) |
|||
// |
|||
//------------------------------------------------------------------------------ |
|||
// |
|||
//This file is part of PRISM. |
|||
// |
|||
//PRISM is free software; you can redistribute it and/or modify |
|||
//it under the terms of the GNU General Public License as published by |
|||
//the Free Software Foundation; either version 2 of the License, or |
|||
//(at your option) any later version. |
|||
// |
|||
//PRISM is distributed in the hope that it will be useful, |
|||
//but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
//GNU General Public License for more details. |
|||
// |
|||
//You should have received a copy of the GNU General Public License |
|||
//along with PRISM; if not, write to the Free Software Foundation, |
|||
//Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|||
// |
|||
//============================================================================== |
|||
|
|||
import common.IterableBitSet; |
|||
import jdd.JDD; |
|||
import jdd.JDDNode; |
|||
import jdd.JDDVars; |
|||
|
|||
/** |
|||
* A reachability acceptance condition (based on JDD state sets). |
|||
* The acceptance is defined via a set of goal states and |
|||
* has to be "upward-closed", i.e., once a goal state has been reached, |
|||
* all successor states are goal states as well. |
|||
*/ |
|||
public class AcceptanceReachDD implements AcceptanceOmegaDD |
|||
{ |
|||
/** The goal states */ |
|||
private JDDNode goalStates; |
|||
|
|||
/** |
|||
* Constructor, set goalStates. |
|||
* Becomes owner of the references of goalStates. |
|||
*/ |
|||
public AcceptanceReachDD(JDDNode goalStates) |
|||
{ |
|||
this.goalStates = goalStates; |
|||
} |
|||
|
|||
/** |
|||
* Constructor, from a BitSet-based AcceptanceReach. |
|||
* |
|||
* @param acceptance the BitSet-based acceptance condition |
|||
* @param ddRowVars JDDVars of the row variables corresponding to the bits in the bit set |
|||
*/ |
|||
public AcceptanceReachDD(AcceptanceReach acceptance, JDDVars ddRowVars) |
|||
{ |
|||
goalStates = JDD.Constant(0); |
|||
// get BDD based on the goalState bit set |
|||
for (int i : IterableBitSet.getSetBits(acceptance.getGoalStates())) { |
|||
goalStates = JDD.SetVectorElement(goalStates, ddRowVars, i, 1.0); |
|||
} |
|||
} |
|||
|
|||
/** Get a referenced copy of the state set of the goal states. |
|||
* <br>[ REFS: <i>result</i>, DEREFS: <i>none</i> ] |
|||
*/ |
|||
public JDDNode getGoalStates() |
|||
{ |
|||
JDD.Ref(goalStates); |
|||
return goalStates; |
|||
} |
|||
|
|||
/** |
|||
* Set the goal states. |
|||
* Becomes owner of the reference to goalStates. |
|||
*/ |
|||
public void setGoalStates(JDDNode goalStates) |
|||
{ |
|||
clear(); |
|||
this.goalStates = goalStates; |
|||
} |
|||
|
|||
@Override |
|||
public boolean isBSCCAccepting(JDDNode bscc_states) |
|||
{ |
|||
return JDD.AreInterecting(goalStates, bscc_states); |
|||
} |
|||
|
|||
@Override |
|||
public String getSizeStatistics() |
|||
{ |
|||
return "one set of goal states"; |
|||
} |
|||
|
|||
@Override |
|||
public AcceptanceType getType() |
|||
{ |
|||
return AcceptanceType.REACH; |
|||
} |
|||
|
|||
@Override |
|||
public String getTypeAbbreviated() |
|||
{ |
|||
return "F"; |
|||
} |
|||
|
|||
@Override |
|||
public String getTypeName() |
|||
{ |
|||
return "Finite"; |
|||
} |
|||
|
|||
@Override |
|||
public void clear() |
|||
{ |
|||
if (goalStates != null) { |
|||
JDD.Deref(goalStates); |
|||
} |
|||
} |
|||
|
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue