computer reasoning