본문 바로가기
Topos Uranos

요약

하나의 진리 함수를 나타내는 논리식은 무한히 많으며, 그중 아무것이나 하나를 골라서는 그것이 무엇을 말하는지 보이지 않는다. 이 수업은 모든 논리식이 동치를 무시하면 들어맞는 두 가지 틀을 정한다. 리터럴의 연언들의 선언인 선언 표준형과, 리터럴의 선언들의 연언인 연언 표준형이다. 리터럴, 절, 기본 연언을 정의하고, 각 리터럴을 반대 리터럴로 바꾸면 부정이 한 형태를 다른 형태로 옮긴다는 것, 곧 둘 사이의 쌍대성을 증명하며, 진리표로부터 완전 표준형을 구성하고 그것이 유일함을 증명한다. 존재 정리는 두 가지 증명을 받는다. 하나는 진리표에 의한 것으로 함수적 완전성의 따름정리이고, 다른 하나는 복잡도에 관한 귀납법에 의한 것으로 부정논리합이라는 유일한 경우와 그 증명이 요구하는 이중 귀납 가정을 쓴다. 끝으로 왜 그만한 수고를 들일 가치가 있는지 드러난다. 연언 표준형의 타당성과 선언 표준형의 충족 가능성은 한눈에 판정된다.

학습 목표

  1. 리터럴, 절, 기본 연언, 그리고 선언 표준형이나 연언 표준형에 있는 논리식을 알아보고, 기호열의 성질인 형태와 의미의 성질인 동치를 구별한다.
  2. 진리표로부터 논리식의 완전 선언 표준형과 완전 연언 표준형을 구성하고, 완전 표준형이 유일하며 논리식의 동치류를 결정함을 증명한다.
  3. 쌍대성, 일반화된 드모르간 법칙과 분배 법칙, 의미론적 대체를 사용하여, 모든 논리식이 어떤 선언 표준형 및 어떤 연언 표준형과 동치임을 복잡도에 관한 귀납법으로 증명한다.
  4. 연언 표준형의 타당성과 선언 표준형의 충족 가능성을 한눈에 판정하고, 표준형을 의미론적 귀결과 표준형의 최소 크기 평가에 응용한다.

이 단원의 앞선 수업들에서는 논리식에 의미를 부여했다. 명제 논리의 의미론 수업은 각 진리값 할당을 모든 논리식으로 확장했고, 의미론적 귀결과 동치 수업은 동치 φ≡ψ\varphi \eqsem \psi를 정의하고 의미론적 대체를 증명했으며, 일반화된 드모르간 법칙과 분배 법칙 수업은 그 법칙들을 nn개 논리식의 연언과 선언으로 확장했고, 함수적 완전성 수업은 모든 진리 함수가 어떤 논리식으로 표현됨을 보였다. 그런데 하나의 진리 함수는 무한히 많은 논리식으로 표현되며, 그것들은 서로 매우 다를 수 있다. (v1→v2)(v_1 \rightarrow v_2), ¬(v1∧¬v2)\neg(v_1 \wedge \neg v_2), (((v1↓v1)↓v2)↓((v1↓v1)↓v2))(((v_1 \downarrow v_1) \downarrow v_2) \downarrow ((v_1 \downarrow v_1) \downarrow v_2))는 같은 것의 세 이름이다. 그렇다면 각 동치류에서 정해진 형태의 대표를 고르는 것이 좋다. 그 대표는 수고 없이 읽히고, 어떤 물음들은 보기만 해도 답할 수 있다. 그것이 표준형이다.

리터럴, 절, 표준형

일반화된 법칙 수업에서 정한 nn개 논리식의 연언과 선언의 표기법을 떠올리자. 그것은 재귀로 정의되며 왼쪽부터 묶는다. 논리식 하나의 연언과 선언은 그 논리식 자신이다.

⋀i=11φi=φ1,⋀i=1n+1φi=(⋀i=1nφi∧φn+1)\bigwedge_{i=1}^{1} \varphi_i = \varphi_1, \qquad \bigwedge_{i=1}^{n + 1} \varphi_i = \left( \bigwedge_{i=1}^{n} \varphi_i \wedge \varphi_{n + 1} \right)
⋁i=11φi=φ1,⋁i=1n+1φi=(⋁i=1nφi∨φn+1)\bigvee_{i=1}^{1} \varphi_i = \varphi_1, \qquad \bigvee_{i=1}^{n + 1} \varphi_i = \left( \bigvee_{i=1}^{n} \varphi_i \vee \varphi_{n + 1} \right)

같은 수업에서 항의 순서와 묶는 방식은 동치를 무시하면 논리식을 바꾸지 않음(일반화된 결합 법칙, 그리고 순서와 반복에 대한 무관성)이 증명되었다. 그래서 괄호 없이 φ1∧φ2∧⋯∧φn\varphi_1 \wedge \varphi_2 \wedge \cdots \wedge \varphi_n라고도 쓰며, 왼쪽부터 묶는 것으로 이해한다.

리터럴은 변항 vnv_n(양 리터럴이라 한다)이거나 변항의 부정 ¬vn\neg v_n(음 리터럴이라 한다)이다. 리터럴 ℓ\ell의 반대 리터럴은 ℓ∗\ell^{*}으로 쓰며, 같은 변항의 부호가 반대인 리터럴이다.

ℓ=vn  ⇒  ℓ∗=¬vn,ℓ=¬vn  ⇒  ℓ∗=vn\ell = v_n \;\Rightarrow\; \ell^{*} = \neg v_n, \qquad \ell = \neg v_n \;\Rightarrow\; \ell^{*} = v_n

정의로부터 (ℓ∗)∗=ℓ(\ell^{*})^{*} = \ell가 따라 나온다. 두 리터럴은 하나가 다른 하나의 반대 리터럴일 때 상보 쌍을 이룬다. 예를 들어 v3v_3과 ¬v3\neg v_3이다.

절은 리터럴의 선언 ⋁j=1kℓj\bigvee_{j=1}^{k} \ell_j이고, 기본 연언은 리터럴의 연언 ⋀j=1kℓj\bigwedge_{j=1}^{k} \ell_j이며, 두 경우 모두 k≥1k \geq 1이다. 따라서 리터럴 하나는 절이자 기본 연언이다. 리터럴이 절이나 기본 연언의 ℓj\ell_j 가운데 하나일 때, 그 리터럴은 거기에 나타난다고 한다.

논리식이 기본 연언들의 선언이면 선언 표준형에 있고, 절들의 연언이면 연언 표준형에 있다. 곧 각각 다음 두 형태 중 하나일 때이다. 여기서 mm과 k1,…,kmk_1, \ldots, k_m은 자연수이고 각 ℓi,j\ell_{i,j}는 리터럴이다.

⋁i=1m⋀j=1kiℓi,j,⋀i=1m⋁j=1kiℓi,j\bigvee_{i=1}^{m} \bigwedge_{j=1}^{k_i} \ell_{i,j}, \qquad \bigwedge_{i=1}^{m} \bigvee_{j=1}^{k_i} \ell_{i,j}

Φ\Phi를 φ\varphi 의 선언 표준형이라 하는 것은, 그것이 선언 표준형에 있고 φ≡Φ\varphi \eqsem \Phi일 때이다. 연언 표준형도 마찬가지이다. 길이 kik_i는 연언(또는 절)마다 달라도 된다. 모두에 같은 개수의 리터럴을 요구하면 반복으로 채워야 하고, 아무것도 더해지지 않는다.

예시표준형에 있는 것과 없는 것

논리식 (v1∧¬v2)∨¬v3(v_1 \wedge \neg v_2) \vee \neg v_3은 선언 표준형에 있으며, m=2m = 2, k1=2k_1 = 2, k2=1k_2 = 1이다. 연언 표준형에는 있지 않은데, 연언이 아니기 때문이다(두 성분이 서로 다르고, 연언은 이중 부정이다). 또 절도 아니다. 선언으로 읽으면 항 (v1∧¬v2)(v_1 \wedge \neg v_2)를 가지며, 그것은 리터럴도 아니고 리터럴의 선언도 아니다. 논리식 v1∧¬v2∧v3v_1 \wedge \neg v_2 \wedge v_3은 두 형태 모두에 있다. 단 하나의 기본 연언(m=1m = 1)의 선언으로서, 그리고 각각 리터럴 하나로 된 세 절의 연언으로서이다. 마찬가지로 (¬v1∨v2)(\neg v_1 \vee v_2)는 절, 곧 m=1m = 1인 연언 표준형이면서, 동시에 각각 리터럴 하나로 된 두 연언의 선언 표준형이다.

(v1∧¬v2)∨¬v3,v1∧¬v2∧v3,¬v1∨v2(v_1 \wedge \neg v_2) \vee \neg v_3, \qquad v_1 \wedge \neg v_2 \wedge v_3, \qquad \neg v_1 \vee v_2

반면 (v1↓v2)(v_1 \downarrow v_2)와 ¬(v1→v2)\neg(v_1 \rightarrow v_2)는 두 형태 중 어디에도 있지 않다. 다만 앞의 것은 (¬v1∧¬v2)(\neg v_1 \wedge \neg v_2)와, 뒤의 것은 (v1∧¬v2)(v_1 \wedge \neg v_2)와 동치이며, 이것들은 표준형에 있다.

(v1↓v2)≡¬v1∧¬v2,¬(v1→v2)≡v1∧¬v2(v_1 \downarrow v_2) \eqsem \neg v_1 \wedge \neg v_2, \qquad \neg(v_1 \rightarrow v_2) \eqsem v_1 \wedge \neg v_2

“표준형에 있다”는 것이 무엇을 뜻하는지 잠시 생각해 볼 만하다. 그것은 원과 원판의 기호열의 성질이지 그 의미의 성질이 아니다. 자연수와 논리식에 관한 귀납법 수업이 유일 판독성을 증명했으므로, 논리식이 선언인지, 그리고 무엇의 선언인지라는 물음에는 답이 하나뿐이다. 그런데 공식 약어 때문에 어떤 논리식은 표준형처럼 보이지 않는데도 표준형에 있다. 함의 (v1→v2)(v_1 \rightarrow v_2)는 (¬v1∨v2)(\neg v_1 \vee v_2)로 정의된다. 그것이 이 절과 동치인 것이 아니라 바로 같은 기호열이며, 따라서 이미 표준형에 있다. 더 놀라운 것은 이중 부정이다. ¬\neg과 ∨\vee의 정의에 따라 기호열 (φ∨φ)(\varphi \vee \varphi)는 ¬(φ↓φ)\neg(\varphi \downarrow \varphi), 곧 ¬¬φ\neg\neg\varphi이다. 그러므로 ¬¬v1\neg\neg v_1은 리터럴이 아니지만, 글자 그대로 절 (v1∨v1)(v_1 \vee v_1)이다.

(φ∨φ)=¬(φ↓φ)=¬¬φ(\varphi \vee \varphi) = \neg(\varphi \downarrow \varphi) = \neg\neg\varphi

연언과 선언의 값

의미론 수업에서 파생 연결사의 값을 가져온다. v(¬φ)=1−v(φ)v(\neg\varphi) = 1 - v(\varphi). v(φ∧ψ)=v(φ) v(ψ)v(\varphi \wedge \psi) = v(\varphi)\,v(\psi)는 값 11을 가지며, 그것은 둘 다 값 11을 가질 때 그리고 그때에만이다. v(φ∨ψ)=0v(\varphi \vee \psi) = 0는 둘 다 값 00을 가질 때 그리고 그때에만이다. 일반화된 드모르간 법칙과 분배 법칙 수업은 항의 개수에 관한 귀납법으로 이것들을 nn개 논리식으로 확장했는데, 그것이 값 보조정리이다. 모든 진리값 할당 vv에 대해, 연언 ⋀i=1nφi\bigwedge_{i=1}^{n} \varphi_i가 값 11을 vv에서 가지는 것은 각 φi\varphi_i가 값 11을 vv에서 가질 때 그리고 그때에만이고, 선언 ⋁i=1nφi\bigvee_{i=1}^{n} \varphi_i가 값 11을 vv에서 가지는 것은 어떤 φi\varphi_i가 값 11을 vv에서 가질 때 그리고 그때에만이다. 여기서 증명을 되풀이하지 않고 인용하는 이 보조정리가 임의의 표준형의 값을 계산하는 도구이다.

보조정리리터럴의 부정

모든 리터럴 ℓ\ell에 대해, ℓ\ell의 부정은 그 반대 리터럴 ¬ℓ≡ℓ∗\neg\ell \eqsem \ell^{*}과 동치이다. 특히 v(ℓ∗)=1−v(ℓ)v(\ell^{*}) = 1 - v(\ell)이며, 이는 모든 진리값 할당 vv에 대해 성립한다.

증명

  1. ℓ=vn  ⇒  ¬ℓ=¬vn=ℓ∗\ell = v_n \;\Rightarrow\; \neg\ell = \neg v_n = \ell^{*}

    ℓ\ell가 변항 vnv_n이면, 그 반대 리터럴은 ¬vn\neg v_n이고, 이것은 정확히 기호열 ¬ℓ\neg\ell이다. 증명할 것이 없다.

  2. ℓ=¬vn  ⇒  ¬ℓ=¬¬vn≡vn=ℓ∗\ell = \neg v_n \;\Rightarrow\; \neg\ell = \resaltar{\neg\neg v_n} \eqsem v_n = \ell^{*}

    ℓ\ell가 ¬vn\neg v_n이면, 그 부정은 ¬¬vn\neg\neg v_n이며, 이것은 리터럴이 아니다. 이중 부정 법칙(의미론적 귀결과 동치 수업)에 따라 그것은 vnv_n과 동치이고, 이것이 ℓ\ell의 반대 리터럴이다.

  3. v(ℓ∗)=v(¬ℓ)=1−v(ℓ)v(\ell^{*}) = v(\neg\ell) = 1 - v(\ell)

    두 경우 모두 ℓ∗\ell^{*}과 ¬ℓ\neg\ell는 모든 진리값 할당에서 같은 값을 가지며, ¬ℓ\neg\ell의 값은 부정의 값이 정해 준다.

두 번째 경우는 놓치기 쉽다. 표준형을 부정할 때 리터럴 대신 ¬ℓi,j\neg\ell_{i,j}를 쓰고 싶어지는데, ¬¬vn\neg\neg v_n은 리터럴이 아니다. 결과를 틀로 되돌리는 것은 이중 부정이다.

보조정리기본 연언과 절

기본 연언이 충족 가능한 것은 상보 쌍을 하나도 포함하지 않을 때 그리고 그때에만이다. 절이 타당한 것은 어떤 상보 쌍을 포함할 때 그리고 그때에만이다.

증명

  1. v(ℓ) v(ℓ∗)=v(ℓ) (1−v(ℓ))=0v(\ell)\,v(\ell^{*}) = v(\ell)\,(1 - v(\ell)) = 0

    기본 연언이 ℓ\ell와 ℓ∗\ell^{*}을 포함하면, 앞의 보조정리에 따라 모든 진리값 할당에서 둘 중 하나는 값 00을 가진다. 값 보조정리에 따라 그 연언은 모든 진리값 할당에서 값 00을 가진다.

  2. vn=ℓj  ⇒  v(vn)=1,¬vn=ℓj  ⇒  v(vn)=0\dato{val}{v_n = \ell_j \;\Rightarrow\; v(v_n) = 1, \qquad \neg v_n = \ell_j \;\Rightarrow\; v(v_n) = 0}

    상보 쌍을 하나도 포함하지 않으면, 양 리터럴로 거기에 나타나는 각 변항에는 11을, 음 리터럴로 거기에 나타나는 각 변항에는 00을 주는 진리값 할당을 정의한다(나머지 변항에는 00). 어떤 변항도 두 방식으로 나타나지 않으므로 이 정의는 모순이 없다.

  3. v(⋀j=1kℓj)=1v\left( \bigwedge_{j=1}^{k} \ell_j \right) = 1

    그 진리값 할당에서 그 리터럴들은 모두 값 11을 가지며, 값 보조정리에 따라 그 연언은 값 11을 가진다. 그것은 충족 가능하다.

  4. v(ℓ)+v(ℓ∗)=1v(\ell) + v(\ell^{*}) = 1

    절이 ℓ\ell와 ℓ∗\ell^{*}을 포함하면, 모든 진리값 할당에서 둘 중 하나는 값 11을 가지며, 그 절은 값 11을 가진다. 그것은 타당하다.

  5. v(⋁j=1kℓj)=0v\left( \bigvee_{j=1}^{k} \ell_j \right) = 0

    상보 쌍을 하나도 포함하지 않으면, 그 양의 변항에는 00을, 부정된 변항에는 11을 주는 진리값 할당은 그 리터럴 모두가 값 00을 가지게 한다. 값 보조정리에 따라 그 절은 이 할당에서 값 00을 가지며, 타당하지 않다.