Spanning tree

relation pending(X,Y)
relation link(X,Y)
relation tree(X,Y)
relation treestar(X,Y)
relation marked(X)
individual root

axiom ~link(X,X)
axiom ~link(X,Y) | link(Y,X)


init ((X = root | ~pending(X,Y))
      & (~link(root,X) | pending(root,X))
      & (link(X,Y) | ~pending(X,Y))
      & marked(root) & (X = root | ~marked(X))
      & ~tree(X,Y)
      & (~treestar(X,Y) | X = Y)
      & (treestar(X,Y) | X ~= Y))

individual a,b,u,v,w,x

action act1 = {
  assume pending(a,b);
  marked(b) := true;
  tree(a,b) := true;
  treestar(X,Y) := treestar(X,Y) | treestar(X,a) & treestar(b,Y);
  pending(X,b) := false;
  pending(b,Y) := pending(b,Y) | link(b,Y) & ~marked(Y);
  a := *;
  b := *
}

action error = {
assume (treestar(u,v) & treestar(v,w) & ~treestar(u,w) | tree(u,v) & ~treestar(u,v)) assume tree(u,v) & ~treestar(u,v)

  assume (tree(u,v) & tree(u,w) & v ~= w & treestar(v,x) & treestar(w,x) |
         tree(u,v) & ~treestar(u,v)
         | treestar(u,v) & treestar(v,w) & ~treestar(u,w)
     | treestar(u,v) & treestar(v,u) & u ~= v)
}