(* 
 File: Pepa.sig

 Interface to the internals of the PEPA Workbench.
*)

signature Pepa =
sig
  type Identifier = HashTable.hashedstring 

  type Name = int

  datatype Component =  
	  PREFIX of (Identifier * Expressions.Aexp) * Component
(* 	  PREFIX of (Identifier * Identifier) * Component *)
	| CHOICE of Component * Component
	(* gcla - remove later *)
	(* | COOP   of Component * Component * Identifier list *)
	| COOP   of Component list * Identifier list
	| HIDING of Component * Identifier list
	| VAR    of Identifier
	| CONSTS of Identifier * Component * Component

  (* States and components are isomorphic.  The difference
     is that components are specified by the modeller and
      states are found by the Workbench.
  *)
  val pequals : Component * Component -> bool

  type State = Component

  type Environment = (Identifier * Component) list

  type Transition = Component * 
       ((Identifier * Expressions.Aexp) * Name) option * Component

  type MultiTransition = Component * 
       ((Identifier * Expressions.Aexp) * Name) option * Component

(*   type Transition = Component *  *)
(*        ((Identifier * Identifier) * Name) option * Component *)

(*   type MultiTransition = Component *  *)
(*        ((Identifier * string) * Name) option * Component *)

end;
