Critical Thinking for Language Models