진리표
1. 개요
진리표는 논리 연산의 결과를 시각적으로 나타내는 표로, 찰스 샌더스 퍼스가 1883년에 처음 고안한 것으로 알려져 있다. 루트비히 비트겐슈타인이 1921년 출판한 '논리 철학 논고'에서 진리 함수를 설명하는 데 사용하면서 널리 알려졌으며, 단항 및 이항 연산을 포함한 다양한 논리 연산의 결과를 표현하는 데 사용된다. 진리표는 논리적 동치 증명, 디지털 회로 설계, 디지털 전자공학 등 다양한 분야에 응용되며, 입력 변수가 증가함에 따라 표의 크기가 지수적으로 증가하는 특징을 갖는다. 진리표는 명제 변수의 진리값 조합을 체계적으로 나타내며, 번갈아 작성하거나 조합하는 방법으로 작성할 수 있다.
-
명제 논리 -
모순
모순은 논리학, 철학, 과학 등 다양한 분야에서 사용되는 개념으로, 서로 상반되는 두 가지 주장이나 사실이 동시에 존재하는 상태를 의미하며, 특히 헤겔과 마르크스의 변증법적 유물론에서 사물의 내재적 대립으로서 역사 발전의 원동력으로 간주된다. -
명제 논리 -
추론 규칙
추론 규칙은 전제가 참일 때 결론이 필연적으로 참임을 보이는 논리적 도출 과정을 형식적으로 표현한 규칙으로, 다양한 유형이 존재하며 명제 논리와 술어 논리에서 기본적인 추론을 수행하는 데 사용되고, 형식 체계의 핵심 요소이다. -
불 대수 -
드 모르간의 법칙
드 모르간의 법칙은 명제 논리, 술어 논리, 집합론, 부울 대수 등에서 결합 또는 분리의 부정을 각 요소의 부정의 분리 또는 결합으로 표현하는 논리적 원리이다. -
불 대수 -
불 논리
불 논리는 0과 1, 참과 거짓의 두 값만으로 논리곱, 논리합, 부정 연산을 통해 명제의 참, 거짓을 판단하고 조작하는 논리 체계로, 라이프니츠의 개념 대수에서 기원하여 조지 불에 의해 체계화되었으며, 섀넌의 스위칭 회로 연구를 통해 디지털 논리 회로 설계의 기초를 다지는 데 기여하며 다양한 분야에서 핵심적인 역할을 수행한다. -
개념 모형 -
시공간
시공간은 시간과 공간을 4차원 연속체로 통합한 개념으로, 아인슈타인의 상대성이론에 따라 상대적이며, 일반 상대성이론에서는 중력을 시공간의 곡률로 설명하고, 현대 물리학과 우주론 연구에 필수적이다. -
개념 모형 -
가설 연역 방법
가설 연역 방법은 관찰 가능한 데이터를 기반으로 검증 및 반증 가능한 가설을 설정하여 이론이나 자연 법칙을 도출하는 과학적 탐구 방법론으로, "현상 탐구 - 가설 설정 - 결과 예측 - 시험 - 검증 - 법칙 도출"의 단계를 거치며 과학적 발견에 활용되었다.
2. 역사
루트비히 비트겐슈타인이 1921년 논리 철학 논고를 출판하여 진리 함수를 논할 때 사용하면서 널리 알려지게 되었다. 그러나 찰스 샌더스 퍼스를 비롯한 다른 논리학자들도 이미 초기 형태를 고안한 바 있으며, 에밀 포스트 역시 비트겐슈타인과는 독립적으로 진리표 체계를 완성하였다.
2.1. 초기 형태
어빙 아넬리스의 연구에 따르면, 1883년에 찰스 샌더스 퍼스가 진리표 행렬을 고안한 최초의 논리학자로 보인다. 1997년, 존 쇼스키는 버트런드 러셀의 1912년 강의 "논리적 원자론의 철학"의 타이핑된 기록에서 진리표 행렬을 발견했다. 부정에 대한 행렬은 러셀의 것이고, 그 옆에는 루트비히 비트겐슈타인의 손으로 쓴 물질적 함의에 대한 행렬이 있었다. 1893년에 퍼스가 작성한 것으로 확인된 미출판 원고에는 존 쇼스키가 발견한 물질적 함의에 대한 행렬과 동일한 진리표 행렬이 포함되어 있음이 밝혀졌다. 1883–84년에 작성된 것으로 확인된 퍼스의 미출판 원고에는 조건문의 간접 진리표 예시가 포함되어 있는데, 이는 1885년 미국 수학 저널에 실린 퍼스의 "논리 대수학에 관하여: 표기법 철학에 대한 기여"의 작성을 위한 것이었다.
2.2. 독립적 발전과 확산
루트비히 비트겐슈타인이 1921년 논리 철학 논고를 출판하여 진리 함수를 논할 때 사용하면서 널리 알려지게 되었다. 그러나 찰스 샌더스 퍼스를 비롯한 다른 논리학자들도 이미 초기 형태를 고안한 바 있으며, 에밀 포스트 역시 비트겐슈타인과는 독립적으로 진리표 체계를 완성하였다.
어빙 아넬리스의 연구에 따르면, 1883년에 C.S. 퍼스가 진리표 행렬을 고안한 최초의 논리학자로 보인다. 1997년, 존 쇼스키는 버트런드 러셀의 1912년 강의 "논리적 원자론의 철학"의 타이핑된 기록에서 진리표 행렬을 발견했는데, 부정에 대한 행렬은 러셀의 것이고 그 옆에는 루트비히 비트겐슈타인이 직접 쓴 물질적 함의에 대한 행렬이 있었다.
논리-철학 논고 5.101절에서 비트겐슈타인은 진리표를 다음과 같이 나열했다.
| 진리값 | 연산자 | 연산 이름 | 논고 | |||
|---|---|---|---|---|---|---|
| 0 | (F F F F)(p, q) | ⊥ | 거짓 | Opq | 모순 | p 그리고 not p; 그리고 q 그리고 not q |
| 1 | (F F F T)(p, q) | NOR | p ↓ q | Xpq | 논리합 부정 | p도 q도 아님 |
| 2 | (F F T F)(p, q) | ↚ | p ↚ q | Mpq | 역 비함축 | q 그리고 not p |
| 3 | (F F T T)(p, q) | ¬p, ~p | ¬p | Np, Fpq | 부정 | not p |
| 4 | (F T F F)(p, q) | ↛ | p ↛ q | Lpq | 물질적 비함축 | p 그리고 not q |
| 5 | (F T F T)(p, q) | ¬q, ~q | ¬q | Nq, Gpq | 부정 | not q |
| 6 | (F T T F)(p, q) | XOR | p ⊕ q | Jpq | 배타적 논리합 | p 또는 q, 하지만 둘 다는 아님 |
| 7 | (F T T T)(p, q) | NAND | p ↑ q | Dpq | 논리곱 부정 | p와 q 둘 다 아님 |
| 8 | (T F F F)(p, q) | AND | p ∧ q | Kpq | 논리곱 | p 그리고 q |
| 9 | (T F F T)(p, q) | XNOR | p iff q | Epq | 논리적 쌍조건자 | 만약 p면 q; 그리고 만약 q면 p |
| 10 | (T F T F)(p, q) | q | q | Hpq | 투영 함수 | q |
| 11 | (T F T T)(p, q) | p → q | 만약 p면 q | Cpq | 물질적 함축 | 만약 p면 q |
| 12 | (T T F F)(p, q) | p | p | Ipq | 투영 함수 | p |
| 13 | (T T F T)(p, q) | p ← q | 만약 q면 p | Bpq | 역 함축 | 만약 q면 p |
| 14 | (T T T F)(p, q) | OR | p ∨ q | Apq | 논리합 | p 또는 q |
| 15 | (T T T T)(p, q) | ⊤ | 참 | Vpq | 항진명제 | 만약 p면 p; 그리고 만약 q면 q |
3. 기본 논리 연산
진리표는 여러 논리 연산의 결과를 표현하는 데 사용된다.
두 개의 불리언 변수 P와 Q의 가능한 16가지 진리 함수 중 가장 일반적으로 사용되는 7가지에 대한 정의는 다음과 같다.
축약된 형태의 진리표도 사용될 수 있는데, 행 머리글과 열 머리글이 피연산자를 지정하고 표 셀이 결과를 지정하는 방식이다. 예를 들어 불 대수에서는 다음과 같은 표기법을 사용한다.
| ∧ | T | F |
|---|---|---|
| T | T | F |
| F | F | F |
| ∨ | T | F |
|---|---|---|
| T | T | T |
| F | T | F |
이러한 표기법은 연산이 교환적일 때 유용하다. 여기서 T는 참, F는 거짓을 의미한다.
다음은 두 개의 부울 변수 p와 q에 대한 16개의 가능한 모든 진리 함수를 정의하는 확장된 진리표이다.
:
| p | q | 0>|NOR1 ||↚2||¬p3||NIMPLY4||¬q5||XOR6||NAND7||AND8||XNOR9||q10||IMPLY11 || p12||←13||OR14|| 참15 | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| T | T | F | F | F | F | F | F | F | F | T | T | T | T | T | T | T | T | |
| T | F | F | F | F | F | T | T | T | T | F | F | F | F | T | T | T | T | |
| F | T | F | F | T | T | F | F | T | T | F | F | T | T | F | F | T | T | |
| F | F | F | T | F | T | F | T | F | T | F | T | F | T | F | T | F | T | |
| 교환 법칙 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||||||
| 결합 법칙 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||||||
| 수반 연산자 | F0 | NOR1 | ↛4 | ¬q5 | ↚2 | ¬p3 | XOR6 | NAND7 | AND8 | XNOR9 | p12 | ←13 | q10 | →11 | OR14 | T15 | ||
| 부정 | T15 | OR14 | ←13 | p12 | IMPLY11 | q10 | XNOR9 | AND8 | NAND7 | XOR6 | ¬q5 | NIMPLY4 | ¬p3 | ↚2 | NOR1 | F0 | ||
| 쌍대 연산 | T15 | NAND7 | →11 | ¬p3 | ←13 | ¬q5 | XNOR9 | NOR1 | OR14 | XOR6 | q10 | ↚2 | p12 | ↛4 | AND8 | F0 | ||
| 왼쪽 항등원 | F | F | T | T | T,F | T | F | |||||||||||
| 오른쪽 항등원 | F | F | T | T | T,F | T | F | |||||||||||
여기서
:T = 참
:F = 거짓
:위첨자 0부터 15는 4개의 진릿값을 F = 0과 T = 1로 하는 이진수로 읽은 결과이다.
:Com 행은 연산자 op가 교환 법칙 - P op Q = Q op P를 따르는지 여부를 나타낸다.
:Assoc 행은 연산자 op가 결합 법칙 - (P op Q) op R = P op (Q op R)를 따르는지 여부를 나타낸다.
:Adj 행은 P op Q = Q op2 P를 만족하는 연산자 op2를 보여준다.
:Neg 행은 P op Q = ¬(P op2 Q)를 만족하는 연산자 op2를 보여준다.
:Dual 행은 T를 F로, AND를 OR로 바꾸어 얻은 쌍대 연산을 보여준다.
:L id 행은 연산자에 왼쪽 항등원이 있는 경우 - I op Q = Q를 만족하는 값 I를 보여준다.
:R id 행은 연산자에 오른쪽 항등원이 있는 경우 - P op I = P를 만족하는 값 I를 보여준다.
3.1. 단항 연산
단항 연산은 하나의 입력값에 대해 연산을 수행한다. 대표적인 단항 연산에는 항등(identity)과 부정(negation)이 있다.
* 항등(identity)은 입력값을 그대로 출력한다. 즉, 입력값 p에 대한 출력값은 p이다.
| p | p |
|---|---|
| T | T |
| F | F |
* [[부정 (논리)|부정]](negation, NOT)은 입력값의 반대 진리값을 출력한다. 입력값이 참이면 거짓을, 거짓이면 참을 출력한다. NOT p는 ¬p, Np, Fpq, ~p 등으로 표기한다.
| p | ¬p |
|---|---|
| T | F |
| F | T |
3.2. 이항 연산
다음은 두 개의 불리언 변수 P와 Q에 대한 16가지 가능한 진리 함수 중 가장 일반적으로 사용되는 7가지의 정의를 보여주는 진리표이다.
* T 는 '참'을 의미한다.
* F 는 '거짓'을 의미한다.
이진 연산은 행 머리글과 열 머리글이 피연산자를 지정하고 표 셀이 결과를 지정하는 축약된 형태의 진리표로도 표현할 수 있다. 예를 들어 불 대수는 다음과 같이 축약된 진리표를 사용한다.
| ∧ | T | F |
|---|---|---|
| T | T | F |
| F | F | F |
| ∨ | T | F |
|---|---|---|
| T | T | T |
| F | T | F |
이 표기법은 연산이 교환적일 때 유용하다. 행이 첫 번째 피연산자이고 열이 두 번째 피연산자임을 추가로 지정할 수 있다. 축약된 표기법은 논리의 다중 값 확장을 논의할 때 특히 유용하며, 필요한 행의 수를 줄여준다. 또한 표에서 값의 분포를 빠르게 인식할 수 있게 해준다.
진리표는 디지털 회로 내에서 하드웨어 룩업 테이블(LUT)의 기능을 지정하는 데 사용된다. n-입력 LUT의 경우 진리표는 2n개의 값을 가지며, LUT에 대한 불 대수 함수를 완전히 지정한다. 각 부울 값을 비트로, 이진법의 이진수로 표현함으로써 진리표 값은 전자 설계 자동화(EDA) 소프트웨어에서 정수 값으로 효율적으로 인코딩될 수 있다. 예를 들어, 32비트 정수는 최대 5개의 입력을 가진 LUT에 대한 진리표를 인코딩할 수 있다.
진리표는 부울 함수를 인코딩하는 간단하고 직관적인 방법이지만, 입력 수가 증가함에 따라 크기가 지수적 성장하므로 입력 수가 많은 함수에는 적합하지 않다. 텍스트 방정식과 이진 결정 다이어그램은 더 메모리 효율적인 표현이다.
두 개의 이진 변수에 대한 가능한 진리 함수는 16개이다.
4. 응용
진리표는 디지털 회로에서 룩업 테이블(LUT)의 기능을 지정하는 데 사용된다. n-입력 LUT의 진리표는 2n개의 값을 가지며, LUT에 대한 불 대수 함수를 완전히 정의한다. 진리표 값은 전자 설계 자동화(EDA) 소프트웨어에서 정수 값으로 효율적으로 인코딩될 수 있다. 32비트 정수는 최대 5개의 입력을 가진 LUT에 대한 진리표를 인코딩할 수 있다.
LUT의 출력 값은 입력 값을 기반으로 비트 인덱스 k를 계산하여 얻을 수 있다. 이때 LUT의 출력 값은 정수의 k번째 비트이다. n개 부울 입력 값(배열 자료 구조)이 주어졌을 때, LUT 출력 값을 평가하려면 진리표 출력 값의 비트 인덱스를 계산한다. i번째 입력이 참이면 , 거짓이면 으로 한다. 그러면 진리표의 이진 표현 k번째 비트가 LUT 출력 값이다. 여기서 이다.
진리표는 부울 함수를 인코딩하는 간단하고 직관적인 방법이지만, 입력 수가 증가하면 크기가 지수적으로 증가하여 입력 수가 많은 함수에는 적합하지 않다. 텍스트 방정식과 이진 결정 다이어그램은 더 메모리 효율적인 표현이다.
4.1. 논리적 동치 증명
진리표는 다른 많은 논리적 동치를 증명하는 데 사용될 수 있다. 예를 들어, 다음 진리표를 보자.
| p | q | ¬p | ¬p ∨ q | p → q |
|---|---|---|---|---|
| T | T | F | T | T |
| T | F | F | F | F |
| F | T | T | T | T |
| F | F | T | T | T |
이것은 p → q가 ¬p ∨ q와 논리적 동치임을 보여준다.
4.2. 디지털 논리
진리표는 디지털 회로에서 룩업 테이블(LUT)의 기능을 지정하는 데 사용된다. n-입력 LUT의 진리표는 2n개의 값을 가지며, LUT에 대한 불 대수 함수를 완전히 정의한다. 진리표 값은 전자 설계 자동화(EDA) 소프트웨어에서 정수 값으로 효율적으로 인코딩될 수 있다.
32비트 정수는 최대 5개의 입력을 가진 LUT에 대한 진리표를 인코딩할 수 있다.
LUT의 출력 값은 입력 값을 기반으로 비트 인덱스 k를 계산하여 얻을 수 있다. 이때 LUT의 출력 값은 정수의 k번째 비트이다. n개 부울 입력 값(배열 자료 구조)이 주어졌을 때, LUT 출력 값을 평가하려면 진리표 출력 값의 비트 인덱스를 계산한다. i번째 입력이 참이면 , 거짓이면 으로 한다. 그러면 진리표의 이진 표현 k번째 비트가 LUT 출력 값이다. 여기서 이다.
진리표는 부울 함수를 인코딩하는 간단하고 직관적인 방법이지만, 입력 수가 증가하면 크기가 지수적으로 증가하여 입력 수가 많은 함수에는 적합하지 않다. 텍스트 방정식과 이진 결정 다이어그램은 더 메모리 효율적인 표현이다.
4.3. 디지털 전자공학
진리표는 논리 게이트나 코드를 사용하지 않고 기본 부울 연산을 입력과 출력의 간단한 관계로 나타내는 데 사용될 수 있다. 예를 들어, 이진 덧셈은 진리표로 표현될 수 있다.
이진 연산자의 경우, 행 머리글과 열 머리글이 피연산자를 지정하고 표 셀이 결과를 지정하는 축약된 형태의 진리표도 사용된다. 예를 들어, 불 대수는 다음과 같은 축약된 진리표 표기법을 사용한다.
| ∧ | T | F |
|---|---|---|
| T | T | F |
| F | F | F |
| ∨ | T | F |
|---|---|---|
| T | T | T |
| F | T | F |
이 표기법은 특히 연산이 교환적일 때 유용하며, 행이 첫 번째 피연산자이고 열이 두 번째 피연산자임을 추가로 지정할 수 있다. 이 축약된 표기법은 논리의 다중 값 확장을 논의할 때 특히 유용하며, 그렇지 않으면 필요한 행의 수의 조합 폭발을 크게 줄여준다. 또한 독자가 규칙을 더 빨리 이해하는 데 도움이 될 수 있는 표에서 값의 분포의 빠르게 인식 가능한 특성 "모양"을 제공한다.
진리표는 디지털 회로 내에서 하드웨어 룩업 테이블(LUT)의 기능을 지정하는 데 사용된다. n-입력 LUT의 경우 진리표는 2n개의 값을 가진다. 각 부울 값을 비트로, 이진법의 이진수로 표현함으로써 진리표 값은 전자 설계 자동화(EDA) 소프트웨어에서 정수 값으로 효율적으로 인코딩될 수 있다. 예를 들어, 32비트 정수는 최대 5개의 입력을 가진 LUT에 대한 진리표를 인코딩할 수 있다.
진리표의 정수 표현을 사용할 때, LUT의 출력 값은 LUT의 입력 값을 기반으로 비트 인덱스 k를 계산하여 얻을 수 있으며, 이 경우 LUT의 출력 값은 정수의 k번째 비트이다. 예를 들어, n개의 부울 입력 값의 배열 자료 구조가 주어졌을 때 LUT의 출력 값을 평가하기 위해, 진리표의 출력 값의 비트 인덱스는 다음과 같이 계산할 수 있다. i번째 입력이 참이면 Vi = 1로 하고, 그렇지 않으면 Vi = 0으로 한다. 그러면 진리표의 이진 표현의 k번째 비트가 LUT의 출력 값이며, 여기서 k = V0 × 20 + V1 × 21 + V2 × 22 + ... + Vn × 2n이다.
진리표는 부울 함수를 인코딩하는 간단하고 직관적인 방법이지만, 입력 수가 증가함에 따라 크기가 지수적 성장하므로 입력 수가 많은 함수에는 적합하지 않다. 더 메모리 효율적인 다른 표현으로는 텍스트 방정식과 이진 결정 다이어그램이 있다.
5.1. 번갈아 작성하는 방법 (Alternating method)
랜더 대학교(Lander University)의 리 아치(Lee Archie)는 출판된 진리표에서 일반적으로 사용되는 다음과 같은 절차를 권장한다.
1. 변수(명제)를 알파벳 순서로 작성한다.
2. 필요한 행의 수는 2n이다. (n은 변수의 개수) (예: 세 개의 변수, 23 = 8).
3. 가장 오른쪽 열에서 시작하여 행이 소진될 때까지 T와 F를 번갈아 가며 적는다.
4. 그 다음 왼쪽 열로 이동하여 행이 소진될 때까지 두 개의 T와 F를 번갈아 가며 적는다.
5. 그런 다음 다음 왼쪽 열로 이동하여 T와 F의 개수를 두 배로 늘리면서 완료될 때까지 반복한다.
이 방법은 스티븐 콜 클리니(Stephen Cole Kleene)가 생성한 "P ⊃ (Q ∨ R ⊃ (R ⊃ ¬P))"에 대한 다음과 같은 진리표를 생성한다:
| P | Q | R | P ⊃ (Q ∨ R ⊃ (R ⊃ ¬P)) |
|---|---|---|---|
| T | T | T | F |
| T | T | F | T |
| T | F | T | F |
| T | F | F | T |
| F | T | T | T |
| F | T | F | T |
| F | F | T | T |
| F | F | F | T |
5.2. 조합 방법 (Combinatorial method)
콜린 하우슨은 모든 참(T)으로 시작하여, T와 F의 모든 조합을 나열하는 것이 "좋은 실용적인 규칙"이라고 보았다. 예를 들어, 세 개의 명제 A, B, C가 있을 때, প্রথমে তিনটি 명제 모두 참(TTT)인 경우로 시작한다. 그 다음, 두 개의 참과 하나의 거짓(T)을 결합하는 모든 경우(TTF, TFT, FTT)를 나열한다. 이어서 하나의 참과 두 개의 거짓을 결합하는 모든 경우(TFF, FTF, FFT)를 나열하고, 마지막으로 모두 거짓(FFF)인 경우를 나열한다. 복합 명제가 n개의 서로 다른 명제 기호로 구성된 경우, 진리표는 2n개의 행을 갖는다.
이는 콜린 하우슨이 제시한 "(A→C)∧(B→C)와 (A∨B)→C가 진리 함수적으로 동치임을 보여주는" 진리표에서 확인할 수 있다.
| A | B | C | (A → C) ∧ (B → C) | (A ∨ B) → C |
|---|---|---|---|---|
| T | T | T | T | T |
| T | T | F | F | F |
| T | F | T | T | T |
| F | T | T | T | T |
| F | F | T | T | T |
| F | T | F | F | F |
| T | F | F | F | F |
| F | F | F | T | T |
6. 진리표의 크기
만약 입력 변수가 n개 있다면, 해당 변수들의 진리값 조합은 2n개가 된다. 주어진 함수는 각 조합에 대해 참 또는 거짓을 반환할 수 있으므로, n개의 변수를 갖는 서로 다른 함수의 수는 이중 지수 22n이다.
| n | 2n | 22n |
|---|---|---|
| 0 | 1 | 2 |
| 1 | 2 | 4 |
| 2 | 4 | 16 |
| 3 | 8 | 256 |
| 4 | 16 | 65,536 |
| 5 | 32 | 4,294,967,296 |
| 6 | 64 | 18,446,744,073,709,551,616 |
| 7 | 128 | 340,282,366,920,938,463,463,374,607,431,768,211,456 |
| 8 | 256 | 115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,394,575,840,079,131,296,399,36 |
세 개 이상의 변수를 갖는 함수의 진리표는 거의 제시되지 않는다.