数学、特に集合論において、集合構成記法は、集合の要素を特徴付ける性質によって集合を指定する記法である。 [ 1 ]列挙記法は、集合の要素を列挙することによって集合を指定するために使用される同様の記法である。
要素のプロパティによって集合を指定することは、仕様の公理スキーマによって許可されています。これは集合内包表記および集合抽象化とも呼ばれます。
集合構成記法は、述語、つまり集合の要素に対して真、それ以外の場合は偽と評価される論理式によって定義される集合を記述するために使用できます。[ 2 ]この形式の集合構成記法は、変数、コロンまたは縦棒の区切り記号、および述語の 3 つの部分から構成されます。したがって、区切り記号の左側に変数があり、右側に規則があります。これら 3 つの部分は、中括弧で囲まれています。
または
縦棒(またはコロン)は、「~のような」、「~に対して」、「~という性質を持つ」と読み取れる区切り記号です。式Φ ( x )は、規則または述語と呼ばれます。述語が成り立つ(真である) xのすべての値は、定義される集合に属します。述語が成り立たないxのすべての値は、集合に属しません。したがっては、式Φを満たすxのすべての値の集合です。[ 3 ]式を満たすxの値がない場合は、空集合になることがあります。
ドメインE(つまり、表記法が部分集合を定義する集合)は、縦棒の左側に現れることがあります。[ 4 ]
または、述語に隣接させることによって:
(シンボル は集合への所属を表し、記号はは論理演算子を表します。この表記は、集合Eに属し、述語が真となるxのすべての値の集合を表します。部分集合公理は、Eが集合であり、の場合、 が成り立つことを保証します。は述語であり、表記法は常に集合を定義し、それはEの部分集合である。形式は、 それから時々、記号の代わりにコンマを使用する。
文脈から集合Eが明らかな場合は、明示的に指定する必要はありません。文献では、著者が定義域を事前に述べておきながら、集合構成記法ではそれを明示しないことがよくあります。例えば、「特に断りのない限り、変数は自然数とする」といった記述がありますが、定義域が想定できるような非公式な文脈では、明記する必要がない場合が多いです。
ドメインEが定義されていない場合(暗黙的または明示的に)、表記法が集合ではなく、適切なクラスを定義することがあります。[ 5 ]例えば、ラッセルのパラドックスは、式が一見すると集合構成式として適切に構成されているように見えるが、矛盾を生じさせずに集合を定義することはできない。[ 6 ]
場合によっては、表記法によって、以前に定義された集合の部分集合ではない集合が定義されることがあります。これは、集合Eの冪集合の場合に当てはまります。冪集合は次のように定義されます 。 これが集合を定義するという事実は、集合論の公理であり、冪集合の公理と呼ばれている。
以下の例は、述語を用いた集合構成記法によって定義された特定の集合を示しています。いずれの場合も、縦棒の左側に定義域が、右側に規則が指定されています。
集合構成記法の拡張では、単一の変数x を式に置き換えます。したがって、 我々は読むべきもの
例えば:
逆関数が明示的に表せる場合、左辺の式は簡単な代入によって消去できます。例題を考えてみましょう。置換を行うつまり次に、セットビルダー表記のt を置き換えて、
2 つの集合は、同じ要素を持つ場合に限り等しい。集合構成記法で定義された集合は、ドメイン指定子を含む集合構成規則が同等である場合に限り等しい。つまり、
かつその場合に限り
したがって、集合構成記法で定義された2つの集合の等価性を証明するには、領域修飾子を含む述語の等価性を証明すれば十分である。
例えば、
なぜなら、この2つの規則述語は論理的に同等だからである。
この等価性は、任意の実数xに対して、次の式が成り立つため成り立つ。xが有理数である場合に限る特に、両方の集合は集合と等しい。。
ツェルメロ・フレンケル集合論のような多くの形式集合論では、集合構成記法は理論の形式構文の一部ではありません。代わりに、集合存在公理体系があり、Eが集合であり、Φ( x )が集合論の言語の式である場合、Φ を満たすEの要素のみで構成される集合Yが存在すると述べています。
この公理から得られる集合Yは、集合構成記法で記述された集合と全く同じである。。
多くのプログラミング言語(特にPythonとHaskell)で利用できる同様の表記法として、リスト内包表記があります。これは、1つまたは複数のリストに対するマップ操作とフィルタ操作を組み合わせたものです。
Pythonでは、セット構築子の波括弧は角括弧、丸括弧、または波括弧に置き換えられ、それぞれリスト、ジェネレータ、セットオブジェクトになります。Pythonは英語ベースの構文を使用します。Haskellでは、セット構築子の波括弧は角括弧に置き換えられ、標準のセット構築子の縦棒を含む記号が使用されます。
Scalaでは、シーケンス内包表記を使用して同様のことが実現できます。「for」キーワードは、「yield」キーワードを使用してyieldされた変数のリストを返します。[ 7 ]
いくつかのプログラミング言語における集合構成記法の例を以下に示します。
セット構築記法とリスト内包表記法はどちらも、モナド内包表記法と呼ばれるより一般的な記法の例であり、ゼロ要素を持つ任意のモナドに対してマップ/フィルターのような操作を可能にします。