集合・論理記号

∃ は大文字の 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\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 には注釈が要ります。\iffLaTeX カーネルが \;\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 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 の違い ——空集合はデンマーク語の文字

∅ はギリシャ文字のファイでもなければ、斜線を引いたゼロでもありません。デンマーク語とノルウェー語のアルファベットの文字 Ø で、数学に入ってきたのは 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 ——証明とターンスタイルの記号

この四つはすべて 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 も欲しがりますから、プリアンブルの二行でこのページの内容はすべて賄えます。

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 の時点ですでに関係子の太い空きが両側に入っています。そこへ \ を足せば、空きは二重になるだけです。むしろ本当に注意すべきなのは使いどころのほうで、これらの記号は印刷された文章よりも黒板に属します。仕上がった散文では「ゆえに」「なぜなら」と語で書くほうがほぼ常に読みやすく、∴ は数式の内側など、本当に幅が足りない場所のために取っておくのが賢明です。

  • 空集合は \varnothingamssymb)に統一し、\emptyset を混ぜない
  • 包含は \subseteq、真部分集合は \subsetneq。曖昧な \subset は避けるか、意味を冒頭で宣言する
  • 集合の差は \setminus\backslash は二重剰余類のために残す
  • 内包表記の縦棒は \mid、伸ばすときは \middle|。素の | は使わない
  • 論理式では \land\lor\lnot、外積や束では \wedge\vee
  • 含意は短い \Rightarrow か長い \implies のどちらか一方に決める