공허한 참

박준규 @curry@hackers.pub
하스켈 책을 읽는데 공허한 참(Vacuous truth)이라는 말이 나왔다. 함수 all
에 빈 리스트를 넣으면 왜 참이 나오는지 묻는 질문인데 나는 그냥 이렇게 생각했다.(공허한 참이라는 말을 처음 들어봤다.)
‘구현이 그렇게 되어 있으니까 그렇지...’
잠시 함수 all
을 간단히 구현해보면 다음과 같다.[1]
all :: (a -> Bool) -> [a] -> Bool
all _ [] = True
all p (x:xs) = p x && all p xs
리스트의 첫번째 원소부터 참거짓을 검사하고 나머지 원소는 재귀로 검사를 하는데 이때 첫번째 결과와 나머지 결과를 &&
로 연산한다. 재귀를 끝내려면 입력이 빈 리스트인 경우 결과를 정의해야 하는데 리스트 안의 모든 원소들이 참이 나왔다고 가정했을 때 마지막 빈 리스트의 결과도 참이어야 전체 결과가 참이 될 것이다.
위와 같이 생각하고 별 생각 없이 해설을 읽었는데 다음과 같은 설명이 나왔다
Alternatively, think of it this way: it isn't true that any of them is not alphanumeric. We call such a statement about all of nothing a "vacuous truth".
이게 무슨 말인가 싶어 ChatGPT에게도 물어보았는데 이런 게 나왔다.
이 논리식(?)과 공허한 참에 대한 설명은 내 이해가 부족해서 ChatGPT의 설명 링크로 대체한다.
ChatGPT의 설명 중 그나마 이해할 수 있었던 것은 다음 문장이었다.
공집합의 모든 원소는 짝수이다.
‘공집합에는 원소가 없으니 원소 중에서 짝수가 아닌 경우가 존재하지 않으므로 이 명제는 참이다.’라고 한다.
아무튼 가끔 코드와 수학의 공통점 같은 걸 발견했을 때 재밌고 놀라운데 이번에도 약간 그런 경험을 했다.
아래 그림은 웃자고 장난으로 ChatGPT에게 부탁해서 그려보았다.(설명이 필요한 농담은 실패한 농담이므로 설명하지 않을 것이다. 설명이 없으니까 이 농담은 재밌는 농담이다.)