digraph solver_states {

  size="8,5";

  graph [fontsize=14];
  edge [fontsize=12];
  node [fontsize=12];
  node [shape=doublecircle]; Installed Uninstalled;
  node [shape=circle]; Satisfied Incomplete;
  node [shape=box];
//  ranksep = 1.5;
//  rankdir = LR;
//  nodesep = 0.5;
  edge [style="setlinewidth(1)"];

  Installed [label="Installed"];
  Uninstalled [label="Uninstalled"];
  Satisfied [label="Satisfied"];
  Incomplete [label="Incomplete"];

  Uninstalled -> To_be_installed [ label ="install,explicit"];
  Uninstalled -> To_be_installed [ label ="install,implicit"];
  Installed -> To_be_removed [ label ="remove,explicit"];
  Installed -> To_be_removed [ label ="remove,implicit"];
  To_be_installed -> Installed [ label ="commit"];
  To_be_removed -> Uninstalled [ label ="commit"];

  Uninstalled -> Satisfied [ label="establish,good" ];
  Uninstalled -> Incomplete [ label="establish,bad" ];

  Installed -> Incomplete [ label="establish,bad" ];

  Incomplete -> To_be_installed [ label="resolve" ];
  Incomplete -> To_be_removed [ label="remove" ];

  Satisfied -> Installed [ label="install" ];
}
