집합 및 논리 기호

“존재한다”를 뜻하는 ∃는 대문자 E를 반 바퀴 돌린 것이고, “모든”을 뜻하는 ∀는 대문자 A를 뒤집은 것입니다. LaTeX이 제공하는 집합론과 논리 기호, 곧 \forall, \exists, \in, \subset, \cup, \land는 설계된 체계가 아니라 이런 착상이 우연히 자리를 잡은 모음이며, 뒤집힌 두 글자 사이에는 38년의 간격과 서로 다른 두 사람이 있습니다. 이 페이지는 그 착상들을 따라가되, 지금 쓰고 있는 문서에 실제로 대가를 치르게 하는 자리만 다룹니다. ⊂가 읽는 사람에 따라 두 가지 뜻이 되는 이유, \setminus\backslash가 똑같은 그림을 인쇄하면서도 조판이 달라지는 이유, 그리고 공집합 기호가 덴마크어 글자인 이유입니다.

\forall\exists — 뒤집은 글자가 기호가 되기까지

둘 다 표준 LaTeX이라 \forall\exists는 패키지가 필요 없고, 실제로 활자를 돌려서 만든 기호입니다. 주세페 페아노는 1897년 『Formulaire de mathématiques』 제2권에서 “존재한다”를 뜻하는 뒤집힌 E를 인쇄했습니다. 소속 관계에 그리스 문자 엡실론을 쓴 1889년으로부터 8년 뒤의 일입니다. 위아래를 뒤집은 A는 훨씬 늦게 등장합니다. 게르하르트 겐첸의 「Untersuchungen über das logische Schließen」, 『Mathematische Zeitschrift』 39권(1935년) 178쪽이 그 첫 등장입니다. 그러니까 38년 동안 논리학에는 “존재한다”의 기호만 있고 “모든”의 기호는 없었으며, 속박 변수는 그냥 괄호에 넣어 (x)라고 썼습니다. 부정형 ∄는 더 나중에 나왔고 LaTeX 커널에는 아예 없습니다. \nexistsamssymb의 기호입니다.

이들은 모두 수식 모드의 주민입니다. 본문에 \forall을 쓰면 보기 나쁜 정도가 아니라 ! Missing $ inserted.로 컴파일이 멈춥니다. 수식 모드 밖에는 적용할 간격 규칙 자체가 없기 때문입니다. 그리고 안에서 적용되는 규칙은 알아 둘 만합니다. fontmath.ltx\forall\exists를 관계 기호가 아니라 \mathord, 곧 일반 기호로 선언합니다. 그래서 양화사는 스스로 간격을 차지하지 않고, \forall x\exists y는 빽빽하게 붙어 나옵니다. 꼼꼼한 원고가 \forall x\, \exists y\, P(x,y)처럼 가는 공백 \,를 끼워 넣는 이유가 여기에 있습니다.

latex
% quantifiers, and a set defined by a condition
\[
  \forall \varepsilon > 0 \;\exists \delta > 0 \;
  \bigl( |x - a| < \delta \implies |f(x) - f(a)| < \varepsilon \bigr)
\]
\[
  A \cup B = \{\, x \mid x \in A \lor x \in B \,\}, \qquad
  A \subseteq B \iff \forall x\,(x \in A \implies x \in B)
\]

\land\wedge, \lnot\neg — 무엇을 입력할까

출력에는 아무 차이도 없으므로 의도가 드러나는 쪽 이름을 입력하면 됩니다. fontmath.ltx\DeclareMathSymbol{\wedge}{\mathbin}{symbols}{"5E}라고 선언한 다음, \land에도 클래스·폰트·슬롯까지 똑같은 줄을 씁니다. \lor/\vee("5F)와 \lnot/\neg("3A)도 마찬가지입니다. 여섯 가지 모두 amssymb가 필요 없습니다. 자리 잡은 관습은 논리식에는 논리 쪽 이름을, ∧이 논리가 아닌 것을 뜻하는 자리에는 도형 쪽 이름을 쓰는 것입니다. 미분형식의 쐐기곱은 \wedge, 격의 이음은 \vee로 씁니다. 원본에서 \land를 본 사람은 그 자리가 “그리고”임을 바로 압니다. 이점은 그것뿐이지만, 파일을 사람이 읽는 한 실질적인 이점입니다.

명령글리프이름 / 용도
\forall전칭 양화사(모든). \mathord
\exists존재 양화사(존재한다). \mathord
\nexists존재하지 않음. amssymb 필요
\neg¬부정. \lnot과 선언이 완전히 동일
\lnot¬부정. 논리식에서는 이 이름이 읽기 좋음
\land논리곱(그리고). \mathbin
\wedge같은 글리프. 쐐기곱과 격의 만남에
\lor논리합(또는). \mathbin
\vee같은 글리프. 격의 이음 등 논리 외 용도에
\Rightarrow함의. 짧은 이중선 화살표
\implies양쪽에 굵은 공백이 붙는 함의. amsmath
\Leftrightarrow동치. 짧은 이중선 화살표
\iff동치. 커널에 정의되어 패키지 불필요

\implies\iff에는 따로 주석이 필요합니다. \iffLaTeX 커널에 이미 \;\Longleftrightarrow\;로 정의되어 있습니다. 긴 이중 화살표 양쪽에 굵은 공백이 붙은 형태이므로 패키지 없이도 동작합니다. amsmath는 이를 \DOTSB\;\Longleftrightarrow\;로 다시 정의하는데, 간격은 전혀 달라지지 않고 달라지는 것은 \dots입니다. \DOTSB는 그 명령이 이항 연산자나 관계 기호임을 표시하는 표지라, 바로 뒤의 \dots가 밑줄선에 붙지 않고 가운데 정렬된 ⋯로 나옵니다. 반면 \impliesamsmath에만 있습니다. 한 문서 안에서는 짧은 \Rightarrow와 긴 \implies 중 하나를 골라 끝까지 유지하십시오. 증명 도중에 바꾸면 독자는 두 화살표의 뜻이 다르다고 읽습니다.

\in, \notin, \ni — 소속 기호와 \epsilon의 함정

소속 기호 ∈은 그리스 문자 엡실론으로 출발했습니다. 페아노가 1889년에 라틴어 est(“이다”)의 약자로 ε을 쓴 것이 시작입니다. 그 내력과 결과, 곧 x \epsilon A가 아무 문제 없이 컴파일되면서도 \epsilon\mathord이고 \in\mathrel인 탓에 간격이 사라진 수식이 조용히 인쇄된다는 이야기는 이 레퍼런스의 그리스 문자 페이지에서 자세히 다룹니다. 같은 선언 표에서 두 가지가 더 따라 나옵니다. 첫째, \notin은 문자가 아닙니다. fontmath.ltx는 이를 \mathrel{...\c@ncel\in}으로 만들어 \in 위에 작은 빗금을 겹쳐 찍습니다. 그래서 빗금 위치는 폰트에서 물려받는 것이 아니라 계산으로 정해지고, \not\in이라고 써도 너비가 똑같이 나옵니다. 둘째, ∋(\ni, “…을 원소로 가진다”)에는 같은 슬롯에 선언된 다른 이름 \owns가 있습니다. 문장 안에서는 A \owns xA \ni x보다 읽기 좋고, 비용은 전혀 들지 않습니다.

\subset\subseteq의 차이 — ⊂가 두 가지로 읽히는 문제

“부분집합, 같아도 됨”을 뜻할 때는 \subseteq를, “진짜로 더 작음”을 뜻할 때는 \subsetneq를 씁니다. ⊂를 피하는 이유는 그것이 틀렸기 때문이 아니라 두 가지로 읽히기 때문입니다. 문헌의 상당 부분에서 A \subset B는 A = B를 허용하며 ⊆의 다른 표기일 뿐이고, 또 다른 상당 부분에서는 A ≠ B를 주장합니다. 두 독법 모두 자리를 잡았고, 둘 다 현행 교과서에 실려 있으며, 어느 쪽도 이길 기미가 없습니다. ⊂와 ⊃ 한 쌍을 도입한 사람은 에른스트 슈뢰더로, 1890년 『Vorlesungen über die Algebra der Logik』 제1권에서 “…에 포함된다”와 “…을 포함한다”의 뜻으로 썼습니다. 엄밀성을 어떻게 볼 것인가 하는 문제는 그 뒤의 용법에서 갈라졌고, 지금까지 갈라진 채로 남아 있습니다.

명령글리프이름 / 용도
\in…에 속한다. \mathrel
\notin속하지 않는다. \in 위에 빗금을 겹친 합성
\ni…을 원소로 가진다. 별명 \owns
\subset포함. 진부분집합으로 읽는 유파도 있어 모호함
\subseteq부분집합이거나 같음. 모호하지 않음
\subsetneq진부분집합. amssymb 필요
\supset⊂의 반대 방향. 같은 모호함을 안고 있음
\supseteq상위집합이거나 같음

실무에서는 두 가지 습관이 따라 나옵니다. 첫째, 문서에서 ⊂를 쓴다면 어느 독법인지 앞부분에서 한 번 밝혀 둡니다. 많은 책이 실제로 그렇게 합니다. 둘째, 엄밀성이 논증을 떠받치는 자리에서는 분명히 씁니다. amssymb\subsetneq(⊊)를 쓰면 해석의 여지가 남지 않습니다. amssymb에는 아래 선이 두 겹인 \subsetneqq, 그리고 빗금과 가로선을 그리는 방식만 다른 \varsubsetneq, \varsubsetneqq도 있습니다. 투고처 스타일이 특정 형태를 요구하지 않는다면 \subsetneq가 무난한 기본값입니다. 덧붙이면 LaTeX 커널에는 진부분집합 기호가 하나도 없습니다. 이 표기법이 어떻게 자라났는지를 그 사실 자체가 말해 줍니다.

\cup, \cap, \setminus\backslash와 바꿔 쓰면 무슨 일이 생기나

\setminus\backslash같은 폰트의 같은 슬롯(symbols의 "6E)에서 같은 그림을 가져옵니다. 다른 것은 선언된 클래스뿐이며, 이야기는 그것이 전부입니다. fontmath.ltx\DeclareMathSymbol{\setminus}{\mathbin}{symbols}{"6E}라고 쓰면서, \backslash\mathord로 선언하고 소스 주석에 “이중 잉여류 G\backslash H를 위해”라고 적어 두었습니다. 10pt에서 A \setminus BA \backslash B를 나란히 놓고 상자를 재면 25.03pt와 20.59pt입니다. 사라진 4.44pt는 이항 연산자가 양쪽에 두는 4mu의 중간 간격입니다. 오류도 경고도 없고, 차이는 교정을 통과할 만큼 작습니다. 바로 그래서 한 번 정해 두는 편이 낫습니다. 집합의 차에는 \setminus를 쓰고, \backslash는 원래 목적인 이중 잉여류에 남겨 둡니다.

똑같은 함정이 한 치수 크게, 조건제시법에서 기다리고 있습니다. |\mid 역시 같은 글리프(슬롯 "6A)이며 각각 \mathord\mathrel로 선언되어 있습니다. \{x \mid x > 0\}은 48.10pt, \{x | x > 0\}은 42.54pt로 5.56pt 차이가 납니다. 관계 기호가 양쪽에 두는 5mu 굵은 간격입니다. 조건제시법의 세로 막대는 본래 관계 기호입니다. 변수와 그 변수에 관한 진술을 갈라놓기 때문입니다. 그러니 올바른 선택은 \mid이고, |를 쓰면 집합이 한 덩어리로 붙어 보입니다. 키가 큰 식 때문에 괄호가 늘어나야 할 때는 \left\{\, x \in X \;\middle|\; f(x) = 0 \,\right\}라고 쓰면 막대도 괄호와 함께 늘어납니다. \left\{ ... \right\} 안에 맨 \mid를 두면 괄호만 늘어나고 막대는 작은 채로 남습니다.

latex
% set difference and set-builder: pick the relation-class commands
\[
  A \setminus B = \{\, x \in A \mid x \notin B \,\}
\]
% \middle| grows with \left\{ ... \right\}; a bare \mid does not
\[
  \left\{\, x \in X \;\middle|\; \frac{f(x)}{g(x)} = 0 \,\right\}
\]
명령글리프이름 / 용도
\cup합집합. \mathbin
\cap교집합. \mathbin
\setminus차집합. 이항 연산자로 간격이 붙음
\backslash같은 글리프의 \mathord. 이중 잉여류 G\H용
\mid조건제시법의 세로 막대. \mathrel
\complement여집합. A^\complement처럼 위첨자로. amssymb

\emptyset\varnothing의 차이 — 공집합은 덴마크어 글자입니다

∅는 그리스 문자 파이도 아니고, 줄을 그은 0도 아닙니다. 덴마크어와 노르웨이어 알파벳의 글자 Ø이며, 1939년 부르바키의 『Éléments de mathématique』을 통해 수학에 들어왔습니다. 앙드레 베유는 훗날 회고록에서 자기 몫을 밝혔습니다. 이 기호는 노르웨이어 알파벳에서 왔으며, 부르바키 구성원 가운데 그 알파벳을 아는 사람은 자신뿐이었다고 썼습니다. 출처를 알고 나면 어느 LaTeX 명령을 쓸지에 대한 논쟁은 정리됩니다. 두 명령은 같은 글자에 대한 서로 다른 두 해석을 그리고 있기 때문입니다.

\emptyset은 커널 쪽 형태이고 \varnothingamssymb에서 오며, 둘은 같은 모양이 아닙니다. Computer Modern 10pt에서 재 보면 \emptyset은 너비 5.00pt, 높이 7.50pt로 가늘고 세로로 긴 타원에 선이 지나간 모습이고, \varnothing은 너비 7.78pt, 높이 5.82pt로 둥근 원을 양끝이 삐져나온 빗금이 가로지른 모습입니다. 후자가 손으로 쓴 Ø에 훨씬 가깝고, 대부분의 사람이 “공집합”이라고 들었을 때 떠올리는 모양이기도 합니다. 실무적 결론은 규칙 하나로 정리됩니다. amssymb를 불러오고 전체를 \varnothing으로 통일하며, 중간에 \emptyset이 슬며시 돌아오지 않게 하는 것입니다. 한 문서 안에서 같은 집합이 두 모양으로 나오는 일은 교정자가 빨간 펜으로 동그라미를 치는 종류의 사고입니다.

\vdash, \models, \top, \bot — 증명과 turnstile 기호

네 기호 모두 표준 LaTeX이며, 집합이 아니라 증명에 관해 말합니다. ⊢(\vdash)는 구문적 도출 가능성의 turnstile로 Γ ⊢ φ는 “Γ에서 φ를 도출할 수 있다”를 뜻하고, ⊨(\models)는 의미론적 귀결의 이중 turnstile로 “Γ의 모든 모형에서 φ가 참”임을 뜻합니다. 이 둘을 가려내는 일이 수리논리학의 절반이므로, 잘못 고르는 것은 조판상의 사소한 문제가 아닙니다. \models 역시 한 글자가 아닙니다. fontmath.ltx는 세로 막대에 이중선을 이어 붙여 \mathrel{|}\joinrel\Relbar로 조립합니다. ⊣(\dashv)는 ⊢의 거울상이며, 논리 밖에서는 수반 함자를 F ⊣ G로 쓸 때 사용합니다. ⊤와 ⊥는 참과 거짓 상수이자 격의 최대원과 최소원입니다.

여기서도 결정적인 것은 클래스입니다. \vdash, \dashv, \models\mathrel이라 양쪽에 자기 간격을 차지하지만, \top\bot\mathord입니다. 보통 상수로 홀로 서기 때문입니다. 그래서 “L은 M에 수직”이라는 뜻으로 L \bot M이라고 쓰면 빽빽하게 조판됩니다. 그 자리에 쓸 명령은 \perp이며, 이는 같은 슬롯 "3F를 관계 기호로 다시 선언한 것입니다. 실제로 재 보면 L \bot M은 25.38pt, L \perp M은 30.93pt로, 차이인 5.56pt는 역시 관계 기호가 양쪽에 두는 굵은 간격입니다. \perp도 커널에 있어 패키지가 필요 없습니다.

명령글리프이름 / 용도
\vdash도출 가능(turnstile). \mathrel
\dashv⊢의 거울상. 수반 F ⊣ G에도
\models의미론적 귀결. 세로 막대와 이중선의 합성
\top항진 / 최대원. \mathord
\bot모순 / 최소원. \mathord
\perp같은 글리프의 관계 기호. “수직”은 이쪽
\therefore그러므로. 관계 기호로 선언. amssymb
\because왜냐하면. 관계 기호로 선언. amssymb

어떤 명령에 amssymb가 필요한가 (∴와 ∵는 어떻게 쓰나)

이 페이지에서 LaTeX 커널 밖에 있는 것은 정확히 여섯 개입니다. \nexists, \varnothing, \subsetneq, \complement, \therefore, \because입니다. 여섯 모두 amssymb에서 오며, 프리앰블에 \usepackage{amssymb}가 없으면 하나같이 ! Undefined control sequence.로 컴파일이 멈춥니다. 일곱 번째 외부인은 \implies인데, 이쪽은 amssymb가 아니라 amsmath 소속입니다. amssymb가 내부에서 amsfonts를 불러오고, 수식이 있는 문서는 대개 amsmath도 필요로 하므로, 프리앰블 두 줄이면 이 페이지의 내용은 모두 해결됩니다.

document.tex
\usepackage{amsmath}  % \implies, \impliedby, \iff with \DOTSB
\usepackage{amssymb}  % \nexists \varnothing \subsetneq \complement \therefore \because

% \therefore is a relation: it already carries space on both sides
\[
  x^2 = 4 \quad \therefore x = \pm 2
\]

마지막으로 널리 퍼진 오해 하나를 정리합니다. ∴와 ∵는 앞뒤에 손으로 공백을 넣어야 한다며 \therefore\ 같은 식으로 쓰이곤 합니다. 그럴 필요가 없습니다. amssymb는 둘 다 \mathrel로 선언하므로 x \therefore y라고 쓴 시점에 이미 관계 기호의 굵은 간격이 양쪽에 들어가 있습니다. 여기에 \ 를 더하면 간격이 두 배가 될 뿐입니다. 오히려 신경 쓸 것은 어디에 쓰느냐입니다. 이 기호들은 인쇄된 지면보다 칠판에 어울립니다. 다듬어진 산문에서는 “그러므로”, “왜냐하면”이라고 단어로 쓰는 편이 거의 언제나 더 잘 읽히며, ∴는 별행 수식 안처럼 정말 자리가 부족한 곳에 남겨 두는 편이 낫습니다.

  • 공집합은 \varnothing(amssymb)으로 통일하고 \emptyset을 섞지 않습니다
  • 포함에는 \subseteq, 진포함에는 \subsetneq를 씁니다. 모호한 \subset은 피하거나 앞부분에서 뜻을 밝힙니다
  • 집합의 차는 \setminus이고, \backslash는 이중 잉여류에 남겨 둡니다
  • 조건제시법의 막대는 \mid, 늘려야 할 때는 \middle|를 쓰고 맨 |는 쓰지 않습니다
  • 논리식에는 \land, \lor, \lnot을, 쐐기곱과 격에는 \wedge, \vee를 씁니다
  • 함의는 짧은 \Rightarrow와 긴 \implies 중 하나로 정해 끝까지 유지합니다