1. 함수

1.1 집합에 대한 용어와 표기법

개요

표현

1.2 카테시안 곱(Cartesian product)

1.3 함수

개요

예제 1.3.1 D = {1, 2, 3, …}을 가지는 배수 함수(doubling function)

{
  (1, 2),
  (2, 4),
  (3, 6),
  (4, 8) ...
}

예제 1.3.2 D = {1,2,3,…} x {1,2,3,…} 가지는 곱셈 함수(multiplication function)

{
  ((1,1), 1),
  ((1,2), 2),
    ...
  ((2,1), 2),
  ((2,2), 4),
  ((2,4), 6),
    ...
}

정의

매핑하는 함수의 의미

$f : D \longrightarrow F$ = D에서 F로의 함수 = D를 F로 매핑하는 함수

예제 1.3.3 시저의 암호체계. 알파벳 각 문자를 그 다음 세 번째 문자로 대치(마지막 세 문자 X, Y, Z는 wrap-around 적용). MATRIX -> PDWULA 평문의 문자를 암호문의 문자로 매핑하는 함수는 다음과 같다 $A\mapsto D, B\mapsto E, C\mapsto F, D\mapsto G, W\mapsto Z, X\mapsto A, Y\mapsto B, Z\mapsto C$ 이 함수의 정으역과 공역은 둘 다 알파벳 ${A, B, \dotsc, Z}$

예제 1.3.4 코사인 함수 cos는 실수의 집합 $\R$을 실수의 집합으로 매핑하는 함수 $cos: \R \longrightarrow \R$ cos 함수의 함수값은 모든 실수를 포함하는 것이 아니라 -1과 1 사이의 값만 가진다

치역

예제 1.3.5 함수 prod = 1보다 큰 정수 쌍을 입력으로 받아 두 정수의 곱을 출력.

1.3.1 함수, 프로시저, 계산 문제

프로시저

예제 1.3.6 프로시저 정의하는 파이썬 문법

def mul(p, q):
  return p * q

계산 문제

예제 1.3.7: 예제 1.3.2에 정의된 함수에 대응하는 계산문제

예제 1.3.8

차이점

1.3.2 함수와 연관된 두 가지 계산 문제

Forward 문제 함수 $f$의 정의역에 속하는 원소 $a$에 대해, $a$의 함수값 $f(a)$ 계산

Backward 문제 함수의 공역의 원소 $r$에 대해 임의의 원상을 계산하여라 (원상이 존재하지 않을 경우, 조재하지 않음을 리포트)

1.3.3 주어진 정의역과 공역을 가지는 함수들의 집합에 대한 표기법

1.3.4 항등함수

1.3.5 함수의 합성

graph LR
    A((A)) --> |f|B((0)) --> |g| C((3)) --> |h|D((D))
    E((B)) --> |f|F((1)) --> |g| G((4)) --> |h|H((E))
    I((C)) --> |f|J((2)) --> |g| K((5)) --> |h|L((F))

예제 1.3.10 함수 $f$와 $g$의 정의역과 공역이 $\Reals$

$f(x) = x + 1$ $g(y) = y^2$ 그렇다면 $g \circ f(x) = (x + 1)^2$(이는 $g(f(x))$와 같다)

예제 1.3.11:

이때 $h \circ (g \circ f)$는 예제 1.3.3의 시저 암호 구현한 함수

1.3.6 함수 합성의 결합법칙

graph LR
    subgraph U -> V
    U1[U1] --> V1[V1]
    U2[U2] --> V2[V2]
    U3[U3] --> V3[V3]
               V4[V4]
    end

x를 $f$의 정의역에 속하는 임의의 원소라 하자

$(h \circ (g \circ f))(x)$는

1.3.7 역함수

정의 1.3.13 다음 조건 만족하면 f와 g는 서로의 역함수

graph LR
    subgraph U -> V
    U1[U1] --> V1[V1]
    U2[U2] --> V2[V2]
    U3[U3] --> V3[V3]
    U4[U4] --> V3[V3]
    end

정의 1.3.14 $f: D \rightarrow F$ 모든 $x,y \in D$에 대해 $f(x) = f(y)$는 $x = y$임을 의미 $\to f$는 단사함수(one-to-one) 모든 $z \in F$에 대해 $f(x) = z$ 만족하는 $x \in D$가 존재 $\to f$는 전사함수(onto)

예제 1.3.15 예제 1.3.5에서 정의된 함수 prod(1보다 큰 정수 쌍을 입력으로 받아 두 정수의 곱을 출력) 생각해 보자 소수는 원상을 가지지 않으므로, 이 함수는 전사함수가 아니다 (2,3)과 (3,2) 같이 동일한 정수에 매핑되는 복수의 정수 쌍이 존재하므로 단사함수도 아니다

부명제(Lemma) 1.3.16: 가역함수는 단사함수 @증명

역함수 정의에 의해 $f^{-1}(y) = x_1$이며 동시에 $f^{-1}(y) = x_2$다 된다 하지만 앞서 $x_1,x_2$는 정의역 내 서로 다른 원소라 했으므로 둘 다 참이 되는 것은 불가능, 즉 모순(귀류법)

부명제 1.3.17: 가역함수는 전사함수: @증명

$\hat{y}$는 $f^{-1}$에 의한 함수값 $\hat{x}$를 갖게 되며, 역함수 정의에 따라 $f(\hat{x}) = \hat{y}$ 되지만 함수값이 되지 않는 공역의 원소라 가정했으므로 모순이다(귀류법)

정리(Theorem) 1.3.18 (Function Invertibility Theorem):

@증명 부명제 1.3.16과 1.3.17은 가역함수는 단사함수이며 전사함수임을 보여준다.

$f$는 단사함수이므로 $\hat{x}$는 $f$의 함수값이 $\hat{y}$가 되는 $f$의 정의역에 있는 유일한 원소다. 따라서 $g(\hat{y}) = \hat{x}$에서 $\hat{x}$가 여러 값이 될 수 없으며, 이는 $g \circ f$가 항등함수임을 보여준다

$g$의 정의에 의해 $f(g(\hat{y})) = \hat{y}$

부명제 1.3.19: 모든 함수는 많아야 하나의 역함수를 가진다 @ 증명

$f$는 단사함수이므로(부명제 1.3.17), $v = f(v)$ 만족하는 어떤 원서 $u \in U$가 존재. 역함수 정의에 의해 $g_1(v) = u$이고 $g_2(v) = u$이며, 따라서 $g_1(v) = g_2(v)$이다. 즉 $g_1$과 $g_2$는 같다.

1.3.8 가역함수를 합성한 함수의 가역성

부명제 1.3.20: if ($f$와 $g$가 가역함수 && $f \circ g$ 존재) $\to$ ($f \circ g$는 가역함수 && $(f \circ g)^{-1} = g^{-1} \circ f^{-1}$)

문제 1.3.21 부명제 1.3.20 증명 @증명

가역함수는 정리 1.3.18에 따라 전단사함수. $f(v)^{-1} = u$, $g(z)^{-1} = x$ $f \circ g = f(g(x)) = f(z) = v$

1.4 확률

1.4.0 개요

1.4.1 확률분포

\[\textstyle\sum_{\omega\in \varOmega}Pr(\omega) = 1 \to \text{(이산) 확률분포}\]

1.4.1.1 균등 분포

예제 1.4.1 동전을 던지는 경우를 모델링하면,
\(\varOmega = \lbrace \text{heads(앞면)}, \text{tails(뒷면)}\rbrace\)
두 실험결과가 동일한 가능성을 가지므로, 두 결과에 동일한 확률을 할당
\(Pr(heads) = Pr(tails)\)
확률의 합은 1이 되어야 하므로, $Pr(heads) = Pr(tails) = \frac{1}{2}$

Pr = {
  'heads': 1/2,
  'tails': 1/2
}

예제 1.4.2 하나의 주사위를 굴리는 경우를 모델링하면,
\(\varOmega = \lbrace1,2,3,4,5,6\rbrace\)
\(Pr(1) = Pr(2) = Pr(3) = \dotsc = Pr(6)\)

Pr = {
    1:1/6,
    2:1/6,
    3:1/6,
    4:1/6,
    5:1/6,
    6:1/6
}

예제 1.4.3 두 개의 동전을 던지는 경우를 모델링하면,
\(\varOmega = \{HH, HT, TH, TT\}\)
각 실험결과는 동일한 확률 1/4 갖는다

Pr = {
    ('H', 'H'): 1/4,
    ('H', 'T'): 1/4,
    ('T', 'H'): 1/4,
    ('T', 'T'): 1/4
}

1.4.1.2 비균등 분포

예제 1.4.4 스크래블 게임
\(\varOmega = \{A, B, C, \dotsc, Z\}\)
문자를 뽑을(추출할) 가능성에 따라 확률을 할당.
스크래블 타일의 수는
A:9, B:2, C:2, D:4, E:12, F:2, G:3, H:2, I:9, J:1, K:1, L:1, M:2, N:6, O:8, P:2, Q:1, R:6, S:4, T:6, U:4, V:2, W:2, X:1, Y:2, Z:1

확률은 이 가능성에 비례하여 할당해야 한다. \(Pr[\text{문자 X 추출}] = c\cdot \text{문자 X가 적힌 타일 수}\) 모든 문자에 대한 확률을 더하면,
\(1 = c\cdot \text{총 타일 수}\)

총 타일 수는 95개이므로, $c = \frac{1}{95}$라 정의

Pr = {
    'A':9/95,
    'B':2/95,
    'C':2/95,
    'D':4/95,
    'E':12/95,
    'F':2/95,
    'G':3/95,
    'H':2/95,
    'I':9/95,
    'J':1/95,
    'K':1/95,
    'L':1/95,
    'M':2/95,
    'N':6/95,
    'O':8/95,
    'P':2/95,
    'Q':1/95,
    'R':6/95,
    'S':4/95,
    'T':6/95,
    'U':4/95,
    'V':2/95,
    'W':2/95,
    'X':1/95,
    'Y':2/95,
    'Z':1/95
}

1.4.2 사건과 확률의 합

예제 1.4.4에서 모음(vowel) 뽑을 확률?

Principle 1.4.5(확률이론의 기본 원칙):
어떤 사건에 대한 확률 = 사건 구성하는 실험결과들에 대한 확률의 합

1.4.3 랜덤 입력에 함수 적용

예제 1.4.6
\(f:\lbrace1,2,3,4,5,6\rbrace \longrightarrow \{0,1\}\)
\(f(x) = \begin{cases} 0 &\text{만약 x가 짝수인 경우} \\ 1 &\text{만약 x가 홀수인 경우} \end{cases}\)
주사위 굴려 집합 ${1,2,3,4,5,6}$에서 수 하나를 얻어 $f(\cdot)$ 적용하여 0 또는 1을 얻는다고 할 때, 이러한 실험의 결과에 대한 롹률 함수는 무엇인가?
$\lbrace2,4,6\rbrace$에 대하여 실험 결과는 0이므로, $\frac{1}{6} + \frac{1}{6} + \frac{1}{6} = \frac{1}{2}$ 확률로 0이 된다
$\lbrace 1,3,5\rbrace$에 대하여 실험 결과는 0이므로, $\frac{1}{6} + \frac{1}{6} + \frac{1}{6} = \frac{1}{2}$ 확률로 0이 된다

# 위 함수의 출력의 확률분포
{
  0:1/2, 
  1:1/2
}

퀴즈 1.4.7
예제 1.4.3에 기술된 바와 같이, 두 개의 동전을 던지는 경우를 고려해 보자.
이 실험의 결과는 쌍 (x, y)이며, 여기서 x와 y 각각은 ‘H’ 또는 ‘T’이다.
\(f:\lbrace (\text{'H'}, \text{'H'}) (\text{'H'}, \text{'T'}) (\text{'T'}, \text{'H'}) (\text{'T'}, \text{'T'}) \rbrace\)
위 함수를 $f((x, y)) = \text{H가 나타나는 횟수}$를 사용하여 정의해 보자.
이때 함수의 출력에 대한 확률분포를 구하라

Pr = {
  0:1/4
  1:2/4
  2:1/4
}

예제 1.4.8 (시저의 Scrabble 게임)
예제 1.3.11에 정의된 함수 $f$는 A를 0으로, B를 1로, … 매핑하는 함수
함수 $f$를 예제 1.4.4에 기술된 확률분포에 따라 랜덤하게 선택된 문자에 적용하는 실험을 한다고 할 때, 출력에 대한 확률분포는 무엇인가?

# 출력이 정수가 될 확률 = 입력이 각 문자가 될 확률  
f_1_4_4 = {
    'A':'9/95',
    'B':'2/95',
    'C':'2/95',
    'D':'4/95',
    'E':'12/95',
    'F':'2/95',
    'G':'3/95',
    'H':'2/95',
    'I':'9/95',
    'J':'1/95',
    'K':'1/95',
    'L':'1/95',
    'M':'2/95',
    'N':'6/95',
    'O':'8/95',
    'P':'2/95',
    'Q':'1/95',
    'R':'6/95',
    'S':'4/95',
    'T':'6/95',
    'U':'4/95',
    'V':'2/95',
    'W':'2/95',
    'X':'1/95',
    'Y':'2/95',
    'Z':'1/95'
}
# 정수에 매핑되는 문자는 정확하게 하나이며, 
f_1_3_11 = {
    'A':0,
    'B':1,
    'C':2,
    'D':3,
    'E':4,
    'F':5,
    'G':6,
    'H':7,
    'I':8,
    'J':9,
    'K':10,
    'L':11,
    'M':12,
    'N':13,
    'O':14,
    'P':15,
    'Q':16,
    'R':17,
    'S':18,
    'T':19,
    'U':20,
    'V':21,
    'W':22,
    'X':23,
    'Y':24,
    'Z':25
}
f_1_4_8 = {}
for k in f_1_3_11:
    if k in f_1_4_4:
        f_1_4_8[f_1_3_11[k]] = f_1_4_4[k]

print(f_1_4_8)
{
  0: '9/95', 
  1: '2/95', 
  2: '2/95', 
  3: '4/95', 
  4: '12/95', 
  5: '2/95', 
  6: '3/95', 
  7: '2/95', 
  8: '9/95', 
  9: '1/95', 
  10: '1/95', 
  11: '1/95', 
  12: '2/95', 
  13: '6/95', 
  14: '8/95', 
  15: '2/95', 
  16: '1/95', 
  17: '6/95', 
  18: '4/95', 
  19: '6/95', 
  20: '4/95', 
  21: '2/95', 
  22: '2/95', 
  23: '1/95', 
  24: '2/95', 
  25: '1/95'
}

예제 1.4.9
시저의 암호체계에서 문자를 알파벳 순으로 뒤로 3 알파벳 위치만큼 이동하여 암호화
알파벳 위치는 0에서 25까지으 정수 중 어느 값이라도 상관없다
\(w(k) = h(f(P) + k\mod 26) = f(15 + k\mod 26)\)

1.4.4 완벽한 비밀 유지

암호 체계 요구 조건

은둔 보안(security through obscurity)

사용하는 암호체계에 대해 남들이 알지 못하게 해 정보 보안을 지킬 수 있다는 개념

커크호프의 원칙

암호체계의 안정성은 암호체계 자체의 비밀유지에 의존해서는 안 되며, 오직 사용된 키값의 비밀 유지에만 의존해야 한다

암호 체계 예제

나쁜 방식
좋은 방식