Non-deterministic programming