Delete Account
deleteAccount(ident uid, ident username) {
assume exists /account[uid]/admin;
assume uid != username; # or do we want to allow an admin to delete himself?
assume exists /account[username];
assume size(/account[username]/examiner) = 0;
assume size(/account[username]/assistant) = 0;
assume size(/account[username]/tutor) = 0;
# not yet a constraint of the implementation, but is seems practically relevant :-)
if exists /account[username]/admin then
assume size(/account/admin) > 1;
fi
if exists /account[username]/student then
assume size(/exercise/student[/account[username]/student/id]) = 0;
assume size(/exam/participant[/account[username]/student/id]) = 0;
fi
remove /account[username];
}