Note that negation and logical and can basically be simulated: !bla -> version(bla) {} else ... bla && blub -> version(bla) version(blub) {...}