공허한 참

박준규 @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에게도 물어보았는데 이런 게 나왔다.

PQ P \Longrightarrow Q

이 논리식(?)과 공허한 참에 대한 설명은 내 이해가 부족해서 ChatGPT의 설명 링크로 대체한다.

ChatGPT의 설명 중 그나마 이해할 수 있었던 것은 다음 문장이었다.

공집합의 모든 원소는 짝수이다.

‘공집합에는 원소가 없으니 원소 중에서 짝수가 아닌 경우가 존재하지 않으므로 이 명제는 참이다.’라고 한다.

아무튼 가끔 코드와 수학의 공통점 같은 걸 발견했을 때 재밌고 놀라운데 이번에도 약간 그런 경험을 했다.

아래 그림은 웃자고 장난으로 ChatGPT에게 부탁해서 그려보았다.(설명이 필요한 농담은 실패한 농담이므로 설명하지 않을 것이다. 설명이 없으니까 이 농담은 재밌는 농담이다.)


  1. 실제 구현은 이렇다. ↩︎

4

2 comments

If you have a fediverse account, you can comment on this article from your own instance. Search https://hackers.pub/ap/articles/01994fbc-7471-7d65-baa7-c4a2690739e3 on your instance and reply to it.

자연스럽게 존재한다는 말이 이해 갔다 안갔다 하는데요. 그런 요소들은 체계system가 자연스런 동작을 하게 정의했다고 생각이 들더라고요. 0이나, 2의 0제곱 같은 것들이요. (수학적 철학적으로 심오한 뭔가가 있을 것 같긴 한데 모릅니다.)재귀를 돌며 끝을 보려면 []와 만날텐데, 이 것과 지금까지의 True&&해서 False가 나오면 안되니까 True구나 하는 엔지니어 눈만 있어서, 저는 공부가 더딘가 봅니다.

True && True = True
True && False = False

&&한테는 True가 항등원Identity니까, 재귀를 마무리 짓기에는 항등원이 딱이다 하고 휘리릭 넘어갑니다.

@curry박준규

1

@curry박준규 all을 다음과 같이 정의하면 문제가 무엇일까요?

all p [] = False
all p [x] = p x
all p (x:xs) = p x && all xs

이 질문에 대한 대답 중 all의 의미에 관한 것이 있을 겁니다. 논리적으로 "모든 ...에 대해"를 어떻게 이해해야 하는냐에 대한 것 말이지요.

공집합을 직접 사용하는 것이 가장 간단한 예시겠지만, 좀 더 논리학에서 자주 사용되는 예시로는 "20세기의 모든 프랑스 왕은 대머리다"가 있겠습니다. 이는 무의미하게 (Vacuously) 참인데요, 왜냐면 19세기를 마지막으로 프랑스에는 더 이상 왕이 없기 때문이지요. 즉, 일반적으로 "모든 ...에 대해"에서 "..." 부분이 (결과적으로) 공집합일 경우 "모든 ..."에 의해 수식된 본문이 어떤 문장인지와는 상관 없이 참이라고 이해한다는 것이지요.

2