∃ は大文字の 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 カーネルには入っていません。\nexists は amssymb の記号です。
これらはすべて数式モードの住人です。本文に \forall と書くと見た目が崩れるどころか、! Missing $ inserted. でコンパイルが止まります。数式モードの外には、適用すべき間隔の規則そのものが存在しないからです。そしてその内側で適用される規則は知っておく価値があります。fontmath.ltx は \forall と \exists を \mathord(通常記号) として宣言しており、関係子ではありません。だから量化子は前後に空きを取らず、\forall x\exists y はぎゅうぎゅうに詰まって出ます。丁寧な原稿が \forall x\, \exists y\, P(x,y) のように細い空き \, を挟むのはそのためです。
% 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 は \wedge を \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 には注釈が要ります。\iff は LaTeX カーネルが \;\Longleftrightarrow\; として定義済み で、長い二重矢印の両側に太い空きが入った形です。だからパッケージなしで動きます。amsmath はこれを \DOTSB\;\Longleftrightarrow\; に再定義しますが、変わるのは間隔ではなく \dots の挙動です。\DOTSB はその命令を二項演算子・関係子だと宣言する印で、直後の \dots が中央揃えの ⋯ になります。\implies のほうは amsmath にしかありません。一つの文書のなかでは短い \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 x のほうが A \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 B と A \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 を置くと、括弧だけが伸びて縦棒は小さいままです。
% 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 の違い ——空集合はデンマーク語の文字
∅ はギリシャ文字のファイでもなければ、斜線を引いたゼロでもありません。デンマーク語とノルウェー語のアルファベットの文字 Ø で、数学に入ってきたのは 1939 年、ブルバキの『Éléments de mathématique』を通じてでした。のちにアンドレ・ヴェイユが回想録で名乗り出ています——この記号はノルウェー語のアルファベットから来たもので、ブルバキのメンバーでそれを知っていたのは自分だけだった、と。この由来を知ると、どちらの LaTeX 命令を使うかという議論には決着がつきます。二つの命令は、同じ文字についての二つの解釈を描いているからです。
\emptyset がカーネル版、\varnothing が amssymb 版で、両者は同じ形ではありません。Computer Modern 10pt で実測すると、\emptyset は幅 5.00pt・高さ 7.50pt の縦長で細い楕円に線が通ったもの、\varnothing は幅 7.78pt・高さ 5.82pt の丸い円を、両端がはみ出す斜線が横切ったものです。後者のほうが手書きの Ø にずっと近く、多くの人が「空集合」と聞いて思い浮かべるのもこちらでしょう。実務上の結論はひとつ、amssymb を読み込んで \varnothing に統一し、途中で \emptyset が紛れ込まないようにすることです。ひとつの文書のなかで同じ集合に二つの形が出るのは、校正者が赤で囲むたぐいの事故です。
\vdash・\models・\top・\bot ——証明とターンスタイルの記号
この四つはすべて LaTeX 標準で、集合ではなく証明について語る記号です。⊢(\vdash)は統語的な導出可能性のターンスタイル——Γ ⊢ φ で「Γ から φ が導ける」——、⊨(\models)は意味論的な帰結の二重ターンスタイルで「Γ のどのモデルでも φ が真になる」を表します。この二つの区別は数理論理学の半分を占める主題ですから、取り違えは組版上の些事ではありません。ちなみに \models も一文字ではなく、fontmath.ltx が縦棒と二重線をつないで \mathrel{|}\joinrel\Relbar として組み立てています。⊣(\dashv)は ⊢ の鏡像で、論理の外では随伴函手を F ⊣ G と書くのに使われます。⊤ と ⊥ は真・偽の定数であり、束の最大元・最小元でもあります。
ここでもクラスの違いが効いてきます。\vdash・\dashv・\models は \mathrel なので両側に自前の空きを取りますが、\top と \bot は \mathord——ふつうは定数として単独で立つからです。だから「L は M に垂直」のつもりで L \bot M と書くと詰まって組まれます。そこは \perp の出番で、これは \bot と 同じスロット "3F を関係子として宣言し直したものです。実測すると L \bot M が 25.38pt、L \perp M が 30.93pt——差の 5.56pt は、やはり関係子が両側に取る太い空きです。\perp もカーネルにあり、パッケージは要りません。
| 命令 | 字形 | 読み・用法 |
|---|---|---|
\vdash | ⊢ | 導出可能(ターンスタイル)。\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 も欲しがりますから、プリアンブルの二行でこのページの内容はすべて賄えます。
\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のどちらか一方に決める