0. 심볼

심볼은 단순히 어떤 대상을 이렇게 쓰겠다고 약속한 것입니다. 예를 들어, 사과 하나를 !, 사과 둘을 @, 사과 셋을 #, ... 하고 쓰겠다고 약속한다면, 그 약속을 아는 사람들끼리는 ! 하면 사과 하나를, @ 하면 사과 둘을, # 하면 사과 셋을 떠올릴 수 있다는 것입니다. 그러나 !, @, #, ...과 같이 쓰지 않고, 사과 하나, 사과 둘, 사과 셋, ... 과 같이 쓰는 이유는 모두 동일하게 사과를 나타내고 개수가 다르다는 점을 강조하기 위함입니다. 표기 방식에 따라 표기 자체에 드러나 있는 속성과 숨어 있는 속성이 나타나기도 합니다.


1. 진리값과 연산

진리값은 개인적으로 수학의 근본적인 원소라고 생각합니다. 진리값 정도만 무정의용어로 사용한다면 대부분의 수학적인 개념을 정의할 수 있다고 생각하는데, 그렇기 때문에 이번 글 부터 수학적인 요소들을 정의해 보겠습니다. 

진리값은 True, False의 두 가지가 있습니다. True, False라고 기록하는 것 역시 하나의 심볼인데, 줄여서 T,F라고 자주 사용합니다. 다른 심볼로는 참,거짓, 1,0 등의 방법이 존재합니다. 앞으로 T, F라는 심볼을 자주 사용할겁니다.

진리값은 서로 연산할 수 있습니다. 진리값을 연산하는 연산자는 크게 AND, OR, NOT이 있습니다. 연산자로 쓸 때에는 순서대로 &&, ||, ~으로 쓰겠습니다. AND, OR연산자는 프로그래밍에서, NOT 연산자는 고등학교 수학의 명제에서 가져왔습니다.

AND 연산으로 가능한 계산식은 T&&T, T&&F, F&&T, F&&F가 있고, 각각의 계산 결과는 T, F, F, F입니다. OR 연산으로 가능한 계산식을 T||T, T||F, F||T, F||F가 있고, 각각의 계산 결과는 T, T, T, F입니다. 

NOT 연산으로 가능한 계산식은 T~T, T~F, F~T, F~F가 있고, 각각의 계산 결과는 F, T, F, T입니다. NOT 연산의 계산 결과는 앞에 어떤 것이 와도 오로지 뒤의 값에만 반응한다는 특징이 있습니다. 그래서 대부분의 경우는 앞의 값을 생략하고, ~F, ~T와 같이 씁니다. 


2. 명제

명제는 진리값의 새로운 심볼이라고 할 수 있습니다. 예를 들어 "이 글의 주제는 국어국문학이다" 라는 문자열을 F의 다른 심볼로 사용하겠다는 의미입니다. 단, 심볼로 사용할 때 사용하는 문자열의 각 문자는 중복될 수 없다는 뜻입니다. 예를 들어, 이미 우리는 진리값의 연산자 "&&", "||", "~"를 어떤 심볼의 일부로 사용 했습니다. 예를 들어, F의 심볼로 우리는 "T&&F"로 사용했습니다. 따라서 우리는 이후에 "&&"라는 단일 문자를 다른 진리값의 심볼로 사용하겠다고 약속할 수 없다는 뜻입니다.

("&&"이 단일 문자라는 것은 하나의 정의된 개념이기 때문입니다. 컴퓨터 텍스트 상에서는 두 개의 문자로 이루어 져 있지만, 수학적으로 하나의 문자라고 생각해도 무방합니다. 추가적인 설명이 필요하다면 추가하겠습니다. 댓글로 남겨주세요.)

앞으로 우리는 하나의 표현으로 A를 B의 심볼로 정의한다는 표현을 A:B라고 하겠습니다. 


명제는 변항을 가질 수 있습니다. 변항은 어떤 변항에 구체적인 대상을 집어 넣어서 구체적인 명제로 만들어낼 수 있다는 뜻입니다. 예를 들어, 변항 x를 가지는 어떤 연산자 %에 대해서, x%3:7이라고 합시다. 그러면 1%3:7이고, 2%3:7이고, 3%3:7이고, ... 하는 식으로 변항에 구체적인 대상을 집어넣을 수 있다는 뜻입니다. 이렇게 정의된 변항을 가지고, 변항에 대상이 대입되면 명제가 되는 문자열을 우리는 명제함수라고 합니다. 

우리가 이미 살펴본 명제함수는 x&&y, x||y, ~x(또는 x~y)가 있습니다. T의 심볼에는 T&&T, T||T, T||F, F||T, ~F가 있고, F의 심볼에는 T&&F, F&&T, F&&F, F||F, ~T가 있습니다. 즉, 진리값을 결과로 하는 연산자는 일종의 명제함수라고 할 수도 있습니다.


3. 진리표, 조건문과 쌍조건문

진리표는 어떤 명제함수에 대해 모든 변항에 모든 경우의 수를 다 대입해 보면서 전체 명제함수가 T가 되는지, F가 되는지 확인하는 표입니다. 예를 들어, 연산자 &&로 진리표를 그려 보면, p&&q를 생각할 때

pqp&&q
TTT
TFF
FTF
FFF

와 같은 표가 완성됩니다. 

조건문은 p->q:(~p)||q로 정의되는 연산자입니다. 실제 그 의미는 "p가 T일 때 q도 T이다"라는 뜻입니다. 진리표를 통해 살펴봅시다.

pq~pp->q : (~p)||q
TTFT
TFFF
FTTT
FFTT

p가 T일 때, q가 T이라면 "p가 T일 때 q도 T이다"는 T인 것 같습니다. 반대로 p가 T일 때, q가 F라면 F인 것 같습니다.

p가 F라면 q에 관계 없이 조건문이 T가 되는데, 쉽게 납득하기 힘들지 모릅니다. 구체적인 예시로 살펴보겠습니다.

"내일 날이 맑다면, 운동을 하겠다"는 문장을 살펴봅시다. "내일 날이 맑다면", "운동을 하겠다"를 진리표를 이용해 분석해봅시다.

내일 날이 맑다면운동을 하겠다내일 날이 맑다면->운동을 하겠다
TT내일 날이 맑고, 운동을 한다.
TF내일 날이 맑고, 운동을 하지 않는다
FT내일 날이 맑지 않지만 운동을 한다
FF내일 날이 맑지 않아 운동을 하지 않는다

내일 날이 맑고 운동을 한다면, 내일 날이 맑고 운동을 한다는 타당해 보입니다. 내일 날이 맑고 운동을 하지 않는다면, 조건문은 거짓처럼 보입니다. 내일 날이 맑지 않은 경우는, 날이 맑은 경우만 운동을 하겠다고 했지 날이 맑지 않은 경우는 이야기 하지 않았으므로 운동을 하는 것과 안하는 것은 조건문을 거짓이라고 말할 충분한 이유가 되기는 힘듭니다.

즉, 조건문 연산자는 p->q: (~p)||q로 정의하는 것은 어색해 보이지는 않습니다.


쌍조건문은 p<->q : (p->q)&&(q->p)로 정의되는 연산자입니다. 논리 표를 통해 어떤 관계에 있는 지 살펴보면 좋겠습니다.


4. 양화사

명제함수는 그 자체로는 명제는 아니지만, 변항에 구체적인 대상이 대입되었을 때 명제가 되는 문장이었습니다. 그런데, 변항의 값에 상관 없이 T이거나 F인 경우는 어떨까요?

변항의 값에 상관 없이 T이라는 뜻은, 변항에 어떤 대상이 대입되어도 T인 경우를 의미합니다. 즉, 모든 대입의 경우의 수에 따라 계산해 봐도 T이라는 뜻입니다. 이런 상황을 표현하기 위해 명제함수 앞에 양화사를 추가하여 표현할 수 있습니다.


for all 양화사는 변항에 어떤 값이 들어와도 T이다 라는 주장입니다. 예를 들어, (for all x)(p(x))라는 뜻은, x에 어떤 대상이 대입되어도 T가 된다는 뜻입니다. 예를 들면, (for all x)(~(x&&F))는, x에 어떤 대상이 대입되어도 ~(x&&F)가 T라는 주장입니다. x로 가능한 대상은 T, F이고, 다른 어떤 대상도 &&에 들어갈 수 없습니다. ~(T&&F)는 T이고, ~(F&&F)도 T이므로 ~(x&&F)는 x의 모든 경우에 대해 T가 됩니다. (for all x)(~(x&&F))는 타당합니다. 한편, (for all x)(~(x&&T))는 ~(T&&T)가 F이고, ~(F&&T)는 T이므로 타당하지 않은 문장입니다. 타당한 문장을 T, 타당하지 않은 문장을 F라고 생각하면 (for all x)(~(x&&F))는 T, (for all x)(~(x&&T))는 F라고 할 수 있습니다. for all 양화사는 모든 대입을 &&로 연결한 명제와 동일합니다. 예를 들어, (for all x)(~(x&&F))는 (~(T&&F))&&(~(F&&F))와 동일합니다. for all 양화사의 정의가 모든 대입을 &&로 연결한 명제라고 할 수 있습니다.

반대로, 모든 대입을 ||로 연결한 명제는 exist 양화사로 표현할 수 있습니다. (exist x)(p(x))처럼 쓸 수 있습니다. exist 양화사는 어떤 의미를 가지고 있을지 생각해 보면 좋겠습니다.


5. 묶인 변항와 자유 변항

양화사는 명제함수의 변항을 변항인 채로 두고 명제를 만들어 주는 역할을 합니다. 즉, 문자열 중에 변항이 남아있는 경우가 있는데 명제인 경우가 있습니다. 이를 구분하기 위하여 묶인 변항과 자유 변항을 구분할 필요가 있습니다.

묶인 변항은 양화사에 의해 대입되는 대상이 결정되고 있는 변항입니다. 반대로, 어떤 양화사에도 영향을 받지 않고 어떤 대입도 허용되는 변항은 자유 변항입니다.

예를 들어, (for all x)(x&&y)의 변항을 x,y라고 하면, x는 for all x 양화사에 의해 묶여 있는 묶인 변항, y는 자유 변항입니다. 우리는 명제와 명제함수를 자유 변항의 유무에 따라 분류할 수 있습니다. 자유 변항이 있는 문장은 명제함수, 없는 문장은 명제로 구분할 수 있습니다. 

양화사 또는 대입은 자유 변항을 없애게 됩니다. 저는 일반적으로 양화사가 추가되거나 대입을 통해 자유 변항이 없어지는 것을 변수가 해소된다고 표현하기도 합니다. 공연히 사용되는 용어는 아니지만 저는 자주 사용하는 용어입니다.


6. 마치며

생각보다 글이 길어졌습니다. 이 편에서 집합도 정의하고 싶었는데 너무 길어져서 미룹니다. 분량은 적당한지, 너무 횡설수설하고 있지는 않은지 걱정이 되긴 합니다.