컴퓨터논리 소개elearning.kocw.net/contents4/document/lec/2013/hankyong/...귀납법소개 167...

13
13 13.1 한한 . . :“n 2n < n 2 + 2 장을 ? 적정적정한항: (1) (basis) (2) (inductive clauses) 를만방법 () 164

Upload: others

Post on 09-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 컴퓨터논리 소개elearning.kocw.net/contents4/document/lec/2013/Hankyong/...귀납법소개 167 •그러면 명제1에 의해기본문자가최소한하나가¬∨→에 포함되어

제13장

귀납법

13.1 귀납법소개

귀납법

• 귀납법은 대상이 되는 사례가 무한히 많더라도 유한한 증명 단계를 통해서

일반적인 결론을 내릴 수 있게 해준다.

• 매우 강력한 증명 수단이다.

• 예 : “모든 자연수 n에 대해 2n < n2 + 2이 성립한다” 라는 주장을 어떻게

증명할 수 있는가 ?

귀납적 정의

• 어떤 집합을 귀납적 정의하는 데 필요한 항목들 :

(1) (토대 basis) 기본요소

(2) (귀납 항목 inductive clauses) 복잡한 요소를 만드는 방법 (한 개 이상)

164

Page 2: 컴퓨터논리 소개elearning.kocw.net/contents4/document/lec/2013/Hankyong/...귀납법소개 167 •그러면 명제1에 의해기본문자가최소한하나가¬∨→에 포함되어

귀납법 소개 165

(3) 해당 집합의 원소를 만들 수 있는 이외의 방법이 더 이상 없음을 밝히

는 항목.

귀납적 정의 예제

• 자연수들의 집합을 아래와 같이 귀납적으로 정의할 수 있다.

(1) (토대) 0은 자연수이다.

(2) (귀납항목) n이 자연수이면 n+ 1도 자연수이다.

(3) 자연수는 위 두 가지 방법으로만 만들 수 있으며 이외의 방법으로는

자연수를 만들 수 없다.

귀납적 정의 Inductive Definitions

• 컴퓨터논리 수업에서 이미 많은 귀납적 정의를 보고 다루었다.

– 1차 논리언어의 명제를 정의하는 법

– 1차 논리언어의 명사구를 정의하는 법 등등

귀납적 정의 Inductive Definitions: 사례 1

• 괄호가 없는 1차 논리언어 문장인 ambig-wff 정의하기

∗ wff = well-formed formula = 격식에 맞게 정의된 문장

∗ ambig = ambiguous = 괄호가 없어서 의미가 모호해질 수 있다는 의미

(1) (토대) A1, A2, A3 등의 기본 문자는 ambig-wff이다.

(2) (귀납항목 1) p가 ambig-wff이면 ¬p도 그렇다.

(3) (귀납항목 2) p, q가 ambig-wff이면 p∧q, p∨q, p→ q, p↔ q도 그렇다.

(4) 위 항목을 반복적으로 적용해서 만든 것만이 ambig-wff이다.

Page 3: 컴퓨터논리 소개elearning.kocw.net/contents4/document/lec/2013/Hankyong/...귀납법소개 167 •그러면 명제1에 의해기본문자가최소한하나가¬∨→에 포함되어

166 귀납법

귀납적 증명 : 사례 1

명제 13.1. 모든 ambig-wff는 기본 문자를 최소한 하나 포함하고 있다.

Proof. 증명 : ambig-wff에 대한 귀납법으로 증명

• 증명 1단계 (토대 관련):

기본 문자는 모두 기본 문자를 최소한 하나 포함하고 있다. 모두 정확히 하

나씩 포함하고 있으므로, 당근 !

• 증명 2단계 (귀납항목 관련):

– 귀납가정

p와 q가 ambig-wff라 하고 둘 모두 모두 최소한 하나의 기본 문자를

포함하고 있다.

– 귀납결론

p, q를 이용하여 만든 복합 문장들 (¬p, p∧q, p∨q, p→ q, p↔ q) 모두

또한 최소한 하나의 기본 문자를 포함하고 있음을 보이면 된다.

하지만 이건 너무나도 당연하다.

• 결론 : 귀납법에 의해 모든 ambig-wff는 기본 문자를 최소한 하나 포함한다.

귀납적 증명 : 사례 1

명제 13.2. ¬∨→는 ambig-wff가 아니다.

Proof. 모순유도 증명

• ¬∨→가 ambig-wff라 가정하자.

Page 4: 컴퓨터논리 소개elearning.kocw.net/contents4/document/lec/2013/Hankyong/...귀납법소개 167 •그러면 명제1에 의해기본문자가최소한하나가¬∨→에 포함되어

귀납법 소개 167

• 그러면 명제1에 의해 기본 문자가 최소한 하나가 ¬∨→에 포함되어 있어야

하는데 그렇지가 않다.

• 따라서 모순이다.

• 결국 ¬∨→는 ambig-wff가 아니다.

귀납적 증명 : 사례 2

명제 13.3. 어떤 ambig-wff도 이진 연결자 ∧,∨,→,↔ 바로 앞에 ¬을 갖지 않는

다.

Proof. 증명

• 모든 ambig-wff를 다루어야 하기에 귀납법을 이용한다.

– 토대를 다루는 증명 1단계는 당연하다.

(왜 ?)

– 증명 2단계 : p, q가 ambig-wff이고 어떤 이진 연결자 앞에도 ¬가 붙지

않는다고 가정하자.

위 가정에서 예를 들어 p ∧ q 또한 동일한 성질을 갖는다고 추론해낼

수 있는가 ?

아니다. 왜 ?

• 아마도 보다 강력한 주장이 필요하다.

어떤 주장 ?

• 좀 심각하게 고민해야 한다.

Page 5: 컴퓨터논리 소개elearning.kocw.net/contents4/document/lec/2013/Hankyong/...귀납법소개 167 •그러면 명제1에 의해기본문자가최소한하나가¬∨→에 포함되어

168 귀납법

귀납적 증명 : 사례 2

명제 13.4. 어떤 ambig-wff도 이진 연결자 ∧,∨,→,↔ 바로 앞에 ¬을 갖지 않는

다.

Proof. 증명

• 새로운 주장 :

“이진 연결자로 시작하거나 ¬으로 끝나는 ambig-wff도 없고, 이진 연결자

바로 앞에 ¬이 붙는 ambig-wff도 없다.”

– 토대를 다루는 증명 1단계는 당연하다.

(왜 ?)

– 증명 2단계 : p, q가 ambig-wff이고, 이진 연결자로 시작하거나 ¬으로

끝나지 않으면서, 어떤 이진 연결자 앞에도 ¬가 붙지 않는다고 가정

하자.

위 가정에서 예를 들어 p ∧ q 또한 동일한 성질을 갖는다고 추론해낼

수 있다.

왜 ?

• 새로운 주장으로 부터 명제 3은 논리적으로 따라온다.

귀납적 증명 : 사례 2

명제 13.5. A1¬→ A2는 ambig-wff가 아니다.

Proof. 모순유도 증명

• A1¬→ A2가 ambig-wff라고 가정하면 명제 3과 모순이다.

• 따라서 A1¬→ A2는 ambig-wff가 아니다.

Page 6: 컴퓨터논리 소개elearning.kocw.net/contents4/document/lec/2013/Hankyong/...귀납법소개 167 •그러면 명제1에 의해기본문자가최소한하나가¬∨→에 포함되어

귀납법 소개 169

귀납적 정의 사례 2

• 특별한 문자열들의 집합인 pal의 원소를 귀납적으로 정의한다.

(1) (토대) 모든 알파벳(a, b, c, . . . )은 pal의 원소이다.

(2) (귀납항목 1) 문자열 α가 pal의 원소이면, α의 앞뒤에 같은 알파벳을

붙혀서 만든 문자열도 pal의 원소이다.

(3) 위 항목을 반복적으로 적용해서 만든 것만이 pal의 원소가 된다.

• pal의 원소들의 어떤 성질을 갖고 있는지 추측이 되는가 ?

귀납적 증명 : 사례 3

명제 13.6. pal의 모든 원소는 앞으로 읽으나 뒤로 읽으나 같다. 다시 말해서 pal

의 모든 원소는 palindrome이다.

Proof. 증명 : pal의 원소에 대한 귀납법으로 증명한다.

• 증명 1단계(토대 관련)은 당연하다. (왜 ?)

• 증명 2단계

– (귀납 가정) α가 pal의 원소이고 α를 앞으로 읽으나 뒤로 읽으나 같

다고 가정한다.

– (귀납결론) α의 앞뒤에 문자 k를 붙인 kαk도 앞으로 읽으나 뒤로 읽

으나 같음을 보인다.

하지만 이는 당연하다. (왜 ?)

• 귀납법에 의해 명제 5는 논리적으로 옳다.

Page 7: 컴퓨터논리 소개elearning.kocw.net/contents4/document/lec/2013/Hankyong/...귀납법소개 167 •그러면 명제1에 의해기본문자가최소한하나가¬∨→에 포함되어

170 귀납법

13.2 자연수에대한귀납법사례

자연수의 귀납적 정의

(1) (토대) 0은 자연수이다.

(2) (귀납항목) n이 자연수이면 n+ 1도 자연수이다.

(3) 자연수는 위 두 가지 방법으로만 만들 수 있으며 이외의 방법으로는 자연

수를 만들 수 없다.

자연수에 대한 귀납법 사례

• 명제 : 모든 자연수 n에 대해서, 처음 n개 자연수의 합은 n(n+1)2이다.

• 증명 : 자연수에 대한 귀납법으로 증명한다.

– (토대) 처음 0개 자연수의 합은 0임을 보이면 되는데, 당근 !

– (귀납)

∗ (귀납가정) 임의의 자연수 k에 대해서 처음 k개 자연수의 합은k(k+1)

2이다.

∗ (귀납결론) 처음 k+1개 자연수의 합이 (k+1)(k+2)2

임을 보여야 한다.

∗ 그런데 처음 k+1의 자연수의 합은 처음 k개 자연수의 합에다가

k+1을 더하면 됨으로, 귀납가정에 의해 처음 k+1개의 자연수의

합은 아래와 같다.

1+ 2+ · · ·+ k+ (k+ 1) =k(k+ 1)

2+ (k+ 1)

=(k+ 1)(k+ 2)

2(왜 ?)

Page 8: 컴퓨터논리 소개elearning.kocw.net/contents4/document/lec/2013/Hankyong/...귀납법소개 167 •그러면 명제1에 의해기본문자가최소한하나가¬∨→에 포함되어

귀납법에 바탕을 둔 프로그래밍 사례 171

13.3 귀납법에바탕을둔프로그래밍사례

재귀(recursive) 프로그램과 귀납법

• 요구사항 : n개의 자연수를 더하는 프로그램 작성

• 프로그램 스펙(specification)

– 입력 : 자연수 n

– 출력 : 0+ 1+ 2+ ...+ n

• 프로그램

public nat sumToRec( nat n) {

i f (n == 0) return 0;

else return n + sumToRec(n−1);

}

• 이 프로그램이 요구사항 대로 답을 내주는가 ?

사례1: 재귀 프로그램과 귀납법

• 증명목표 : sumToRec(n) = 0+ 1+ 2+ ...+ n

• 증명 : 귀납법으로 증명한다.

사례1: 재귀 프로그램과 귀납법

• (토대) sumToRec(0) = 0임을 보이면 되는데, 인수가 n= 0일 때 프로그램이

내주는 값은 0이므로 성립한다.

• (귀납가정) 인수가 k일 때 정확한 값인 sumToRec(k) = 0+1+2+ · · ·+ k를

프로그램 이 내준다고 가정하자.

Page 9: 컴퓨터논리 소개elearning.kocw.net/contents4/document/lec/2013/Hankyong/...귀납법소개 167 •그러면 명제1에 의해기본문자가최소한하나가¬∨→에 포함되어

172 귀납법

• (귀납결론) 인수가 k+1일 때에도 정확한 값을 내주는지를 보여주어야 한다.

k+1은 0이 아니므로 프로그램은 (k+1)+sumToRec(k)을 내주도록 작성되

어 있다.

그러면 귀납가정에 따라서 sumToRec(k)+k+1= (0+1+2+ · · ·+k)+(k+1)

이 되고, 바로 바라던 바 이다. 증명 끝.

사례2: 반복(iterative) 프로그램과 귀납법

• 아래의 자바코드를 살펴보자.

public in t sumUpTo( in t n) {

in t sum = 0;

in t count = 0;

while ( count < n) {

count += 1;

sum += count ;

}

return sum;

}

• 무슨 일을 하는 코드인가 ?

• 주장: 입력 값이 n일 때 자연수 1부터 n까지의 합을 구해주는 프로그램이

다. 즉, sum 변수의 최종값이 n까지 자연수의 합이다.

사례2: 반복(iterative) 프로그램과 귀납법

• 증명 목표 : 입력값이 n이고 프로그램이 종료하면 sum 변수의 값은 n까지

자연수의 합이다.

Page 10: 컴퓨터논리 소개elearning.kocw.net/contents4/document/lec/2013/Hankyong/...귀납법소개 167 •그러면 명제1에 의해기본문자가최소한하나가¬∨→에 포함되어

귀납법에 바탕을 둔 프로그래밍 사례 173

public in t sumUpTo( in t n) {

in t sum = 0;

in t count = 0;

while ( count < n) {

count += 1;

sum += count ;

}

return sum;

}

• 좀 더 강력한 목표 필요 : while 루프가 k번 반복 실행된 뒤, 변수 sum과

count의 값은 다음과 같다.

sum= (0+ 1+ 2+ ...+ k) & count= k

이와 같이 루프를 실행하기 전과 후에 언제나 만족되는 성질을 루프의 불

변식(invariant)이라 한다.

• 자 이제 위 강력한 목표를 어떻게 증명할 수 있는가를 고민해야 한다.

사례2: 반복(iterative) 프로그램과 귀납법

• 주장 : 아래 자바코드의 while 루프가 k번 반복 실행된 뒤, 변수 sum과 count

의 값은 다음과 같다.

sum= (0+ 1+ 2+ ...+ k) & count= k

public in t sumUpTo( in t n) {

in t sum = 0;

Page 11: 컴퓨터논리 소개elearning.kocw.net/contents4/document/lec/2013/Hankyong/...귀납법소개 167 •그러면 명제1에 의해기본문자가최소한하나가¬∨→에 포함되어

174 귀납법

in t count = 0;

while ( count < n) {

count += 1;

sum += count ;

}

return sum;

}

• 증명 : 귀납법을 이용한다. 즉, 자연수가 정의된 형태를 그대로 따라한다. 다

시 말하면

(1) k = 0일 때 위 주장이 타당함을 보인다.

(2) while 루프가 k번 실행되었을 때 위 주장이 타탕함을 가정했을 때 while

루프가 k+ 1번 실행되었을 때에도 위 주장이 타당함을 보인다.

귀납법 증명의 정당성

본격적인 증명에 앞서 질문 하나 :

앞서 사용된 귀납법을 이용한 증명이면 충분하다는 근거를 설명할 수 있는가 ?

왜 ?

사례2: 반복(iterative) 프로그램과 귀납법

• 주장 : 아래 자바코드의 while 루프가 k번 반복 실행된 뒤, 변수 sum과 count

의 값은 다음과 같다.

sum= (0+ 1+ 2+ ...+ k) & count= k

public in t sumUpTo( in t n) {

in t sum = 0;

Page 12: 컴퓨터논리 소개elearning.kocw.net/contents4/document/lec/2013/Hankyong/...귀납법소개 167 •그러면 명제1에 의해기본문자가최소한하나가¬∨→에 포함되어

귀납법에 바탕을 둔 프로그래밍 사례 175

in t count = 0;

while ( count < n) {

count += 1;

sum += count ;

}

return sum;

}

• 귀납법 증명 1단계 : k = 0일 때 위 주장이 타당함을 보인다.

– while 루프가 0번 실행된다.

– 그럼 sum과 count 값이 초기화 상태에서 전혀 변하지 않는다.

– 따라서 sum = 0이고 count = 0이다.

• 귀납법 증명 2단계 :

– 귀납 가정 : while 루프가 k번 실행되었을 때 위 주장이 타당함을 가

정한다.

– 귀납 결론 : while 루프가 k+ 1번 실행된 후에도 위의 불변식이 성립

함을 보여야 한다.

사례2: 반복(iterative) 프로그램과 귀납법

• 귀납 결론 증명 :

– while 루프가 k번 실행된 후의 sum 값과 count 값을 각각 sumk, countk

라고 하자. 그러면 귀납 가정에 의해 다음 등식이 성립한다.

sumk = 0+ 1+ 2+ · · ·+ k & countk = k

Page 13: 컴퓨터논리 소개elearning.kocw.net/contents4/document/lec/2013/Hankyong/...귀납법소개 167 •그러면 명제1에 의해기본문자가최소한하나가¬∨→에 포함되어

176 귀납법

– while 루프가 k번 실행된 후 한 번 더 실행될 경우 우리가 아는 것 :

count 값은 1 증가해서 k+ 1이 되고, sum 값은 count 만큼 증가한다.

sum = sumk + count

= 0+ 1+ 2+ · · ·+ k+ count

= 0+ 1+ 2+ · · ·+ k+ (countk + 1)

= 0+ 1+ 2+ · · ·+ k+ (k+ 1)

– 따라서 귀납법 증명 2단계 완성됨.