Univ. of Worcester-Hankyong National Univ. Exchange Exhibition 2015
컴퓨터논리 소개elearning.kocw.net/contents4/document/lec/2013/Hankyong/...귀납법소개 167...
Transcript of 컴퓨터논리 소개elearning.kocw.net/contents4/document/lec/2013/Hankyong/...귀납법소개 167...
제13장
귀납법
13.1 귀납법소개
귀납법
• 귀납법은 대상이 되는 사례가 무한히 많더라도 유한한 증명 단계를 통해서
일반적인 결론을 내릴 수 있게 해준다.
• 매우 강력한 증명 수단이다.
• 예 : “모든 자연수 n에 대해 2n < n2 + 2이 성립한다” 라는 주장을 어떻게
증명할 수 있는가 ?
귀납적 정의
• 어떤 집합을 귀납적 정의하는 데 필요한 항목들 :
(1) (토대 basis) 기본요소
(2) (귀납 항목 inductive clauses) 복잡한 요소를 만드는 방법 (한 개 이상)
164
귀납법 소개 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이다.
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라 가정하자.
귀납법 소개 167
• 그러면 명제1에 의해 기본 문자가 최소한 하나가 ¬∨→에 포함되어 있어야
하는데 그렇지가 않다.
• 따라서 모순이다.
• 결국 ¬∨→는 ambig-wff가 아니다.
귀납적 증명 : 사례 2
명제 13.3. 어떤 ambig-wff도 이진 연결자 ∧,∨,→,↔ 바로 앞에 ¬을 갖지 않는
다.
Proof. 증명
• 모든 ambig-wff를 다루어야 하기에 귀납법을 이용한다.
– 토대를 다루는 증명 1단계는 당연하다.
(왜 ?)
– 증명 2단계 : p, q가 ambig-wff이고 어떤 이진 연결자 앞에도 ¬가 붙지
않는다고 가정하자.
위 가정에서 예를 들어 p ∧ q 또한 동일한 성질을 갖는다고 추론해낼
수 있는가 ?
아니다. 왜 ?
• 아마도 보다 강력한 주장이 필요하다.
어떤 주장 ?
• 좀 심각하게 고민해야 한다.
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가 아니다.
귀납법 소개 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는 논리적으로 옳다.
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(왜 ?)
귀납법에 바탕을 둔 프로그래밍 사례 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를
프로그램 이 내준다고 가정하자.
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까지
자연수의 합이다.
귀납법에 바탕을 둔 프로그래밍 사례 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;
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;
귀납법에 바탕을 둔 프로그래밍 사례 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
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단계 완성됨.