空積
数学における空積(くうせき、empty product)あるいは零項積 (nullary product) は、0 個の因子を掛けた結果である。(考えている乗法演算に単位元が存在する場合に限り)「空積の値は単位元 1 に等しい」という規約を設ける。このことは、空和(すなわち0個の数を足した結果)が零元 0 に等しいと約束することと同様である。
用語 "空積" は算術的演算を議論するときに上の意味で使われることが多い。しかしながら、この用語は集合論の共通部分、圏論の積、コンピュータプログラミングにおける積に対しても使われる。これらは以下で議論される。
a1, a2, a3, … を数の列とし、
P_m = \prod_{i=1}^m a_i = a_1 \dotsb  a_m
をこの列の最初の m-項の積とする。このとき
P_m = a_m \cdot P_{m-1}
がすべての m  1, 2, … に対して成り立つというためには、P1  a1 および P0  1 とするという規約が必要である。これはつまり、ただ一つの因子からなる "積" P1 の値はその因子自身であり、全く因子を持たない "積" P0 の値は 1 とするということである。一つだけあるいは零個の因子の "積" を許すことで、多くの数学的な公式において考慮すべき場合の数を減らすことができるようになる。そのような "積" は数学的帰納法やアルゴリズムにおける起点として自然に現れる。これらの理由のため「空積の値は 1 であるものと約束する」ことは数学やコンピュータプログラミングにおいて常識である。
空積の概念は、数 0 や空集合が有用なのと同じ理由で有用である。全く面白くない概念を表しているように見えるが、その存在によって多くの主題のはるかに短い数学的表示が可能になるのである。
例えば、0!  1 や x0  1 といった空積は、テイラー級数表記を短くする(x  0 のときの議論は0の0乗を参照)。同様に、M が n × n 行列であれば、M0 は n × n 単位行列である。これは線型写像を零回適用することは恒等写像を適用することと同じ効果を持っているという事実を反映している。
別の例として、算術の基本定理は、すべての正の整数は素数の積として一意的に書けることを言っている。しかしながら、もし 0 個や 1 個の因子の積を許さなかったら、定理(と証明)は長くなる。
数学で空積を使用しているさらなる例は、二項定理(これは任意の x に対して x0  1 であることを仮定し、かつそれを導く)、スターリング数、ケーニッヒの定理、二項型多項式列、二項級数、有限差分、ポッホハマー記号において見つかるだろう。
対数は積を和に変えるから、空積を空和に写すべきである。そして空積を 1 と定義するならば、空和は log 1  0 であるべきである。逆に、指数関数は和を積に変えるから、空和を 0 と定義するならば、空積は e0  1 であるべきである。
\prod_i x_i = \exp\left(\sum_i \log x_i\right)
デカルト積の一般の定義を考えよう:
\prod_{i \in I} X_i = \{ g \colon I \to \bigcup_{i \in I} X_i \mid \forall i,\ g(i) \in X_i \}.
添字集合 I が空ならば、そのような g は空写像 f∅ ただ一つである。これは ∅ × ∅ の部分集合で写像 ∅ → ∅ を定める唯一のものであり、(∅ × ∅ が持つ唯一の部分集合としての)空部分集合 ∅ である:
\prod_\varnothing{} = \{ f_\varnothing: \varnothing \to \varnothing \} = \{ \varnothing\}.
したがって、零個の集合のデカルト積の濃度は 1 である。
より馴染みのあるであろう順序組の解釈の下では、
\prod_\varnothing{} = \{ ( ) \},
つまり、空リストを含む一元集合である。両方の表現において空積は濃度 1 を持つことに注意しよう。
写像の空デカルト積は再び空写像である。
任意の圏において、空の族の積はその圏の終対象である。これは積の極限による定義を用いて証明できる。n 重の圏論的積は n 個の対象からなる離散圏によって与えられる図式に関する極限として定義できる。すると空積は空圏に関する極限によって与えられ、これは圏の終対象(存在すれば)である。この定義を特殊化すれば上記の結果が与えられる。例えば、集合の圏において、圏論的積は通常のデカルト積であり、終対象は単元集合である。群の圏において、圏論的積は群のデカルト積であり、終対象は1つの元からなる自明群である。空積の通常の算術的定義を得るためには、有限集合の圏において空積の脱圏化を取らなければならない(今の場合これはすなわち、各集合に対してその濃度を考えるということに他ならない)。
双対的に、空な族の余積は始対象である。零項の圏論的積や余積は与えられた圏において存在しないかもしれない。例えば、体の圏においては、どちらも存在しない。
古典論理学で定義される演算としての連言は、普遍量化をすることとして、そして述語計算により任意個数の連言へ一般化することができる。真を 1, 偽を 0 と同一視すれば連言を取ることは単に算術的な掛け算をしているだけと直観できるから、連言のことは論理積といった方が通りがよかろう。論理積の因子としては任意個数の入力を受けることができるから、入力が零個の場合として空論理積 (empty conjunction) が考えられ、これは恒等的に真である。
論理学においてこれと関連する概念として、空虚な真は対象からなる空集合は任意の性質を持ち得ることを主張する。これを(論理学の一般論の一部として)論理積が 1 以下の値をとるということを用いて説明することができる。つまり、因子の数の多い論理積を考える場合、それが長くなれば長くなるほどその値が 0(つまり偽)となる確率は高くなる(特に、論理積を取る命題のうちの一つでも 0であることが分かれば、その論理積全体は 0 と確定するから、残り全ての命題について値が 0 かどうかを調べる必要が無くなる)ということであり、裏を返せば論理積の因子となる命題の数を減らせば、0 でないことのチェックを通過してその論理積の値が 1 になる確率はより増加するということである。従って特に、命題の数が零個なら、調べる回数も零回で、何もしなくてもチェックに引っかかることなどあり得ないから、どのような命題あるいは対象の性質を調べているかということとは無関係に、このチェックは必ず通過することになる。
多くのプログラミング言語、例えばPython、は数のリストの直接的表現を許しており、任意個のパラメーターを許す関数すら許している。そのような言語がリストに入っているすべての数の積を返す関数を持っていれば、通常以下のように動く:
listprod( [2,3,5] ) --> 30
listprod( [2,3] )   --> 6
listprod( [2] )     --> 2
listprod( [] )      --> 1
この慣習によって「リストの長さが1ならば」とか「リストの長さが0ならば」のような特別な場合を特別な場合としてコードしなくてもよくなる。
乗法は中置オペレータであり、したがって二項演算であり、空積の表記をややこしくしている。いくつかのプログラミング言語はこれを可変長引数関数を使うことによって扱っている。例えば、LISPの十分にかっこをつけた前置記法から0項の関数の自然な表記が生じる:
(* 2 2 2)   ; evaluates to 8
(* 2 2)     ; evaluates to 4
(* 2)       ; evaluates to 2
(*)         ; evaluates to 1