천사와 악마(논리)

1 개요

유명한 논리 문제 중 하나로 여러가지 베리에이션이 존재한다.

천국으로 가는 문과 지옥으로 가는 문이있다.
하지만 두 문이 똑같이 생겨서 구분할수가없다.
그리고 두 문 앞에 각각 천사와 악마가 서있는데
역시 천사와 악마도 똑같이 생겨서 구분할수가없다.
그리고 천사가 지옥의 문앞에 있을수도 있고 악마가 천국의 문 앞에 있을수도 있다.
이 상황에서 한가지 질문을 해서 천국의 문을 찾아야 한다.
단, 천사는 진실만을, 악마는 거짓만을 말한다.
여기서 질문은 부탁도 포함한다.

2

우선 천사는 천국에(긍정) 악마는 지옥에(부정) 살고 천사는 진실을 말하며(긍정) 악마는 거짓을 말하고(부정) 이중 부정은 긍정이라는데에 주목.

답은 "네가 사는 곳으로 데려다 줘."

풀이는 대충 이렇다.

천사인지 악마인지 모를 A에게 우선 물어본다.

  • 알고보니 천사
그러면 천사는 진실을 말할테고 천사는 천국에 살테니 천국을 가리킬 것이다.
  • 알고보니 악마
그러면 악마는 거짓을 말할테니 악마가 살고있는 지옥이 아닌 천국을 가리킬 것이다.

중요한 것은 누구에게 물어도 답이 같아야 한다는 것. 누가 누구인지 모르는 상황에서 아무에게나 질문을 하고 질문은 한번밖에 할 수 없기 때문에. 결국 천사는 천국을 가리키고, 악마는 거짓을 말해야 하니 역시 천국을 가리킬 것이라는 소리다.
때린 다음 아프냐고 물어봐도 된다 카더라

3 베리에이션

이 문제와 비슷한 문제로 다음과 같은 문제가 있다.

Y자로 갈라진 길이 있다.
둘 중 한 곳은 진실만을 말하는 사람들이 사는 곳이고,
다른 한 곳은 거짓말만을 말하는 사람들이 사는 곳이다.
길이 갈라지는 길목에 사람이 서 있다.
그 사람은 진실마을에서 온 사람일 수도 있고 거짓마을에서 온 사람일 수도 있다.
그 사람에게 질문을 단 한 번만 해서 진실마을과 거짓마을 중 골라서 가는 방법은?
여기서 질문은 부탁도 포함한다.

이 문제의 답은 이렇다.

둘 중 A마을을 가리키며 "이 마을이 당신이 사는 마을입니까?"라고 물었을 때 그 사람이 "예"라고 답한다면 A마을이 진실마을이고 "아니오"라고 답한다면 B마을이 진실마을이다.

  • 만약 A가 진실마을이라고 했을 때 길목에 서 있는 사람이 진실마을 사람이라면 그 사람이 진짜로 A마을에 살고 있으므로 "예"라고 답하고, 거짓마을 사람이라면 그 사람은 A마을에 살고 있지 않음에도 거짓말로 "예"라고 답할 것이다.
  • 만약 B가 진실마을이라고 했을 때 길목에 서 있는 사람이 진실마을 사람이라면 그 사람은 A마을에 살고 있지 않으므로 "아니오"라고 답하고, 거짓마을 사람이라면 그 사람이 A마을에 살고 있음에도 거짓말로 "아니오"라고 답할 것이다.
  • 따라서, 길목에 서 있는 사람이 진실마을 사람이든 거짓마을 사람이든 둘 중 한 마을을 가리키며 "이 마을이 당신이 사는 마을입니까?"라고 물었을 때 "예"라고 답하면 진실마을이고 "아니오"라고 답하면 거짓마을이 된다.

같은 결과를 내는 답으로 이런 것도 있다.

둘 중 A에게 "당신 옆의 사람에게 진실 마을을 물어본다면 어느쪽이라고 대답할 것인가?" 라고 물어본 뒤 다른 마을로 가면 된다.

  • A가 진실마을의 사람이라면, B는 거짓마을 사람이므로 B는 거짓마을을 가리킬 것이고 A는 당연히 그대로(거짓마을 쪽을) 알려줄 것이다. 그러면 반대쪽으로 가면 된다.
  • A가 거짓마을의 사람이라면, B는 진실마을 사람이므로 진실마을을 알려주겠지만 A는 거짓말을 하므로 거짓마을을 알려줄 것이다. 역시 반대로 가면 된다.
  • 이렇게 A와 B가 모두 거치는 질문을 하면 논리 법칙에 따라 진실*거짓 은 거짓이므로 그 반대편으로 가면 된다.