잘 정의됨

문서:well-defined에서 넘어옴

역사 raw
대문 랜덤 문서 최근 토론
분류

Well-definedness

1. 개요2. 예시
2.1. 잘 정의되지 않은 [[함수]]2.2. 잘 정의된 표기
3. 여담


1. 개요

어떤 개념이나 표기가 잘 정의되었다는 것은, 말 그대로 그것이 애매하게 정의되지 않고 정의되었다는 뜻이다. 반대로 잘 정의되지 않은 경우는, 그 정의를 만족하는 것이 유일하지 않은 경우, 또는 정의 자체에서 뭔가를 가정하고 있는데 그 가정이 잘못된 경우 등이 있다.

만약 자신이 어떤 개념이나 표기를 정의했을 때는 항상 그것이 잘 정의되어있는지 잘 확인해야 한다. 이거 때문에 수십 년 연구가 통째로 날라가기도 한다. 자세한 것은 밑에 여담 항목 참조. 사실 예시를 보면 훨씬 더 이해가 빠르다.

2. 예시

2.1. 잘 정의되지 않은 함수

함수가 잘 정의되지 않은 경우는 흔히 한 원소에 대한 함수값이 2개 이상이 나오는 경우나 함숫값이 존재하지 않는 경우, 정의역에 있어야 할 원소가 정의역에 있지 않은 경우 등이 있다.

  • 0으로 나누기, 0의 0제곱: 잘 정의되지 않은 대상의 대표적 사례.
  • [math(f : mathbb Q mapsto mathbb Z )]를 [math( f({b over a}) = a+b )](이 때, [math(a, b)]는 정수)는 well-defined 되지 않은 함수이다. [math(f({1 over 2}) = 3 neq 6 = f({2 over 4}) )]이기 때문이다. 단, [math(gcdleft(a,bright)=1)]이라는 조건을 추가하면 이는 잘 정의된 함수이다.
  • 정수 [math(n)]에 대해 [math(bar {n} )]를 "[math(n )]과 [math(10)]으로 나눈 나머지가 같은 수들의 집합"이라고 정의할 때[2]], [math(f(bar {n}) = n )] 라 한다면 [math(f)]는 잘 정의되지 않은 함수이다. [math( bar {1} = bar {11} )] 인데 [math( f(bar {1}) = 1 neq 11 = f(bar {11}))]이기 때문. 만약 [math(f(bar {n}) = nmod 10)]처럼 정의한다면 잘 정의된다. [math( bar {n})] 표기 때문에 처음 보면 헷갈릴 수 있으니 주의. 이런 표기를 쓸 때는 항상 잘 정의됨을 생각해야 한다.
  • [math(f : mathbb P(R^{n}) mapsto mathbb Z)]를 [math( f(U) = begin{cases} 1, & U mathsf{is open} \ -1, & U mathsf{is closed} \ 0, & mathsf{else} end{cases})]라 정의하면, [math(emptyset )]이나 전체집합, 이산 공간의 경우 임의의 개집합은 열린 집합이면서 닫힌 집합이므로 [math(f)]는 잘 정의되지 않았다.

  • 유계함수 [math( f : mathbb R mapsto mathbb R )]에 대해 [math( m(f) = )]"[math(f)]의 최솟값"라 하면 [math(m)]은 잘 정의되지 않은 함수이다. [math(f)]의 최솟값이 존재하지 않을 수도 있기 때문. [math( m(f) = inf(f(mathbb R)))]과 같이 정의하면 잘 정의된다.

  • 벡터 공간 [math(V)]의 차원을 "기저의 원소의 개수(또는 cardinality)"라고 정의했을 때도, 잘 정의되었는지 확인해야 한다. [math(V)]의 기저는 여러 개 있을 수 있고, 그 중 원소의 개수가 다른 것이 있을 수 있기 때문. 물론 이 경우엔 기저들의 원소의 개수가 같음을 증명할 수 있다.

  • 심지어는 함수의 합성에서도 '잘 정의되지 않는' 경우가 생기는데, 실수 범위에서 [math({-1,0,1})]을 공역으로 갖는 부호 함수 [math(rm sgn)]와 [math({-1,0,1})]을 정의역으로 갖지 않는 로그 적분 함수 [math(rm li)]를 합성한 꼴 중 [math(rm (li circ sgn))]은 잘 정의되지 않았다.

2.2. 잘 정의된 표기

  • 새로운 연산 [math(heartsuit)]를 정의했을 때초등학교 때 많이 봤다, [math(aheartsuit bheartsuit c)] 와 같은 표기를 쓰기 전에는 항상 [math(heartsuit)]가 결합법칙을 만족하는지 확인해봐야 한다. 예를 들어 [math(aheartsuit b = 2a+b)]라 하면 [math( ((1heartsuit 2)heartsuit 3) neq (1heartsuit (2heartsuit 3)))]가 되므로 결합법칙을 만족하지 않아, [math(aheartsuit bheartsuit c)]의 표기를 쓸 수 없다. 또한 이는 [math( a/b/c)] 같은 표기를 쓸 수 없는 이유이기도 하다. [4](우리가 아는 그 덧셈, 곱셈 맞다!) 같은 연산을 쓸 때도 결합법칙을 만족하는 것을 증명한 후에 [math(a+b+c)]와 같은 표기를 쓴다.]

3. 여담

  • 잘 정의된 표기의 중요성을 간과했을 때 벌어지는 재밌는 일 중 하나로, "가장 짧은 표현의 단어 개수가 세상에서 가장 큰 것"을 생각해보자. 즉, 존재하는 모든 것들에 대해 "가장 짧은 표현"을 생각해보고, 그것의 단어의 개수가 가장 많은 것을 생각해보자.[8] 그런데 우리는 방금 그것을 "가장 짧은 표현의 단어 개수가 세상에서 가장 많은 것"이라는 11단어[9]만으로 표현했으므로, 모든 것의 "가장 짧은 표현"은 9단어 이내여야 한다. 즉 모든 것은 11단어 이내로 표현 가능해야 한다! 따라서 존재하는 단어를 대충 넉넉히 1000만 개라고 하면, 이 세상에 존재하는 건 10^77개 이하이다.[10]

[1] 즉, [math(bar {1} =left{..., -19, -9, 1, 11, 21, ...right})[2] 즉, [math(bar {1} =left{..., -19, -9, 1, 11, 21, ...right})[3] 실제로 집합론 같은 변태같은 과목들을 보면 [math(+, times )[4] 실제로 집합론 같은 변태같은 과목들을 보면 [math(+, times )[5] 여기서 오류가 발생한다.[6] 어절은 9개[7] 더 깊숙히 파고 들자면 well-definedness 말고 다른 문제도 있다. 애초에 '표현'이라는 말이 애매할 뿐더러, 단어도 무한히 많이 만들어낼 수 있다. 당장 1부터 100,000,000까지는 1억개의 단어가 존재한다. 따라서 이 논증은 주로 언어의 애매성이나 언어의 한계를 깔 때 사용된다.[8] 여기서 오류가 발생한다.[9] 어절은 9개[10] 더 깊숙히 파고 들자면 well-definedness 말고 다른 문제도 있다. 애초에 '표현'이라는 말이 애매할 뿐더러, 단어도 무한히 많이 만들어낼 수 있다. 당장 1부터 100,000,000까지는 1억개의 단어가 존재한다. 따라서 이 논증은 주로 언어의 애매성이나 언어의 한계를 깔 때 사용된다.