생각그림 연구소 / 조지 불 특집 / 제8회

조지 불 특집 · 생각을 계산하는 법 08

불의 연산을 조합하면 몇 가지 규칙이 될까요?

불의 두 기호 전개를 따라 출력 네 칸으로 가능한 16개 불 함수를 만들고 분류합니다.

1848년 두 기호 함수 전개

조지 불의 역사적 초상 판화
조지 불(1815–1864)논리의 관계를 기호와 계산으로 나타낸 수학자
초상화 출처

『일러스트레이티드 런던 뉴스』, 1865년 1월 21일 게재. 작가 미상. 퍼블릭 도메인.

위키미디어 공용에서 원본 보기
본문 크기

두 조건 x, y를 받는 규칙은 모두 몇 가지일까요? 조지 불(George Boole)은 논리 문제를 네 경우로 펼쳐 각 경우의 값을 계수로 붙이는 방법을 제시했습니다. 이번에는 그 전개를 거꾸로 읽습니다. 00·01·10·11의 출력 네 칸을 각각 0 또는 1로 정하고, 가능한 규칙 16개를 빠짐없이 만들어 봅니다.

01 · 불이 풀려던 문제

여러 경우의 판단을 한 식으로 어떻게 묶을까요?

불은 가능한 경우를 구성항으로 나누어 추론을 계산하려 했습니다. 1848년 「논리의 계산법」에서 두 기호의 함수는 xy, x(1−y), (1−x)y, (1−x)(1−y)의 네 구성항으로 전개된다고 설명했습니다. 각 항 앞에는 그 경우에 함수가 갖는 값이 붙습니다.

두 입력은 네 상태이고 각 상태의 출력은 0과 1 가운데 하나입니다. 따라서 출력열은 2×2×2×2=16가지가 됩니다. 여기서 16은 두 0·1 입력에 출력값을 배정하는 서로 다른 규칙의 수입니다.

불의 제안과 이번 실험
불은 두 기호 함수를 네 구성항으로 펼치는 계산법을 제안했습니다. ‘16개의 두 입력 불 함수’라는 분류는 그 네 칸에 0·1을 배치해 얻는 후대의 관점입니다.

02 · 불의 방법과 기호

출력 네 값이 식의 네 항을 켜고 끕니다

입력 순서를 00 → 01 → 10 → 11로 고정하겠습니다. 출력열이 0001이면 11 행의 구성항 xy만 남아 AND가 됩니다. 0111이면 01·10·11 행이 남아 하나 이상인 경우를 고릅니다. 1110이면 11만 제외하는 규칙이 됩니다. AND·OR·XOR·NAND 같은 이름은 후대에 널리 쓰인 명칭입니다.

f(x,y)=a₀₀(1−x)(1−y)+a₀₁(1−x)y+a₁₀x(1−y)+a₁₁xy

각 a는 그 행의 출력 0 또는 1입니다. 1이면 해당 구성항을 식에 포함하고, 0이면 제외합니다. 불의 1848년 논문은 이 전개의 원리를 제시했지만 오늘 우리가 보는 16개 함수 도감 전체를 한 장의 표로 제시한 것은 아닙니다.

03 · 불의 제안을 표로

16개 규칙을 고르고 출력 한 칸을 바꿔 보세요

불의 두 기호 전개 · 16개 함수 도감출력열의 네 자리는 00 · 01 · 10 · 11 순서입니다.
입력xy불의 구성항출력

0000은 아무 행도 고르지 않는 상수 0, 1111은 모든 행을 고르는 상수 1입니다. 두 경계 상태도 16개 규칙에 포함됩니다. 출력 한 칸을 바꾸면 식의 어떤 구성항이 새로 들어오거나 빠지는지 바로 확인할 수 있습니다.

04 · 표에서 얻은 발견

출력 네 칸으로 규칙을 구별합니다

출력열이 같으면 식의 모양이 달라도 00·01·10·11에서 같은 결과를 내므로 같은 두 입력 함수입니다. 0011은 x, 0101은 y, 1100은 1−x, 1010은 1−y처럼 한 입력만 보는 규칙입니다. 0001·0111·0110·1001·1110·1000은 각각 AND·OR·XOR·동치·NAND·NOR로 익숙하게 불립니다.

대칭 여부도 네 칸에서 보입니다. 입력의 순서를 바꾸면 01과 10이 서로 자리를 바꿉니다. 따라서 두 칸의 출력이 같으면 x, y 순서를 바꿔도 같은 규칙입니다. AND와 OR는 대칭이지만 한 방향의 조건문은 방향을 바꾸면 다른 규칙이 됩니다.

행 수와 함수 수를 구별하세요.
두 입력의 행은 4개이고, 각 행의 출력을 0·1 중 하나로 고르므로 함수 수는 2⁴=16개입니다. 서로 다른 종류의 숫자입니다.

05 · 오늘의 실제 적용

두 조건 정책을 빠짐없이 검토할 수 있습니다

가상의 문서 공개 정책에서 x를 ‘직원’, y를 ‘보안교육 이수’로 두었다고 해 보겠습니다. 출력열 0001은 직원이면서 이수한 사람만 허용하고, 0101은 직원 여부와 관계없이 이수 여부만 따릅니다. 1101 같은 규칙은 네 조합 가운데 어느 경우를 허용하고 어느 경우를 막는지 표에서 즉시 읽을 수 있습니다.

프로그램의 조건 검사와 필터에서도 같은 방식이 쓰입니다. 두 입력 정책이라면 네 조합을 테스트해 예상 출력과 비교할 수 있습니다. 16개 규칙을 모아 보면 현재 규칙의 출력이 다른 규칙과 어느 행에서 달라지는지 비교할 수 있습니다.

후대의 발전을 구별합니다.
불은 1848년에 함수 전개를 제시했습니다. 클로드 섀넌은 1938년 발표 논문에서 두 값 대수를 릴레이·스위칭 회로 분석과 합성에 적용했습니다. 회로 설계의 이 단계는 불이 직접 수행한 작업이 아닙니다.

06 · 바르게 쓰는 기준

0·1의 뜻과 입력 순서를 먼저 고정합니다

같은 0101이라도 y가 ‘신청 완료’인지 ‘미완료’인지에 따라 정책의 뜻이 달라집니다. 0은 확인된 비해당이며, 미확인을 편의상 0으로 넣지 않습니다. 00·01·10·11의 순서를 바꾸면 같은 네 숫자가 다른 규칙을 나타낼 수 있으므로 표 머리말과 저장 형식을 함께 고정해야 합니다.

출력 1인 행의 수는 실제 인원수, 비율, 확률이 아닙니다. 실제 100명 가운데 몇 명이 선택되는지는 각 사람의 입력값을 넣어 따로 세어야 합니다.

확인 문제
출력열 0110은 왜 ‘서로 다름’일까요? 01과 10 행만 1이므로 두 입력이 다를 때만 선택됩니다. 불의 구성항으로는 (1−x)y+x(1−y)입니다.

07 · 자료와 출처

불의 원전과 후대의 활용 자료

  1. 조지 불, 「The Calculus of Logic」(1848) — 두 기호 함수의 네 구성항 전개.
  2. Wolfram MathWorld · Boolean Function — 두 입력의 16개 함수 분류.
  3. MDN Web Docs · Boolean — 현대 프로그래밍의 불 값.
  4. Claude E. Shannon, “A Symbolic Analysis of Relay and Switching Circuits” (1938).
  5. 조지 불 초상 판화 · Wikimedia Commons.