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]; }