finished (recommended) Logic.v