数学 において、タプルとは、 数値 の有限列 (または順序付きリスト)のことです。より一般的には、タプルの要素 と呼ばれる数学的対象 の列のことです。nタプル は n 個の要素からなるタプルで、n は非負整数 です。0タプルは1つしかなく、空タプル と呼ばれます。1タプルと2タプルは、それぞれ一般的にシングルトン と順序付きペア と呼ばれます。 「無限タプル」 という用語は、 「無限列」 を指す場合にも使われることがあります。
タプルは通常、括弧「 () 」で囲み、コンマで区切って要素を列挙して記述します。例えば、(2, 7, 4, 1, 7) は 5 要素のタプルを表します。他の種類の括弧が使用されることもありますが、意味が異なる場合があります。[ a ]
nタプルは、定義域が最初の n 個の自然数 ( 1, 2, ..., n ) である関数の像として形式的に定義できます。 タプル は 、 順序対 から 始まる漸化式によって順序対から定義することもできます。実際、 nタプル は、その 最初の ( n − 1) 個の要素とn 番目の要素の順序対と同一視できます。( ( ( 1 、 2 ) 、 3 ) 、 4 ) = ( 1 、 2 、 3 、 4 ) {\displaystyle \left(\left(\left(1,2\right),3\right),4\right)=\left(1,2,3,4\right)} 。
コンピュータサイエンス では、タプルはさまざまな形式で存在します。ほとんどの型付き関数型プログラミング 言語は、タプルを積型として直接実装しています。 [ 1 ] これは、代数的データ型 、パターンマッチング 、分割代入と密接 に関連しています。[ 2 ] 多くのプログラミング言語は、ラベルによってアクセスされる順序付けされていない要素を特徴とするレコード型 と呼ばれる、タプルの代替手段を提供しています。[ 3 ] C言語の構造体 やHaskellのレコードのように、順序付きタプル積型と順序付けされていないレコード型を単一の構造に組み合わせたプログラミング言語もいくつかあります。リレーショナルデータベースでは、 行 (レコード)を正式にタプル として識別することができます。
タプルは関係代数、 リソース記述フレームワーク (RDF)を使用したセマンティックウェブの プログラミング、言語学 [ 4 ] 、 哲学[ 5 ] に も出現します。
語源 この用語は、数詞のラテン語 名から接頭辞を取って、single、couple/double、triple、quadruple、quintuple、sextuple、septuple、octuple、...、n ‐tuple、... という数列の抽象化として生まれました。唯一の 0 ‐tuple はnull ‐tuple またはempty ‐tuple と呼ばれます。1 ‐tuple はsingle (またはsingleton ) と呼ばれ、2 ‐tuple は順序付きペア またはcouple と呼ばれ、3 ‐tuple はtriple (またはtriplet ) と呼ばれます。数n は任意の非負整数 です。たとえば、複素数は 実数の 2 ‐tuple として表すことができ、四元数は 4 ‐tuple として表すことができ、八元数 は8 ‐tuple として表すことができ、六元数は 16 ‐tuple として表すことができます。
これらの用法では接尾辞として-tuple が用いられているが、本来の接尾辞は「triple」(3 倍)や「decuple」(10 倍)のように -pleであった。これは、 ギリシャ語の -πλοῦςに関連する中世ラテン語の plus (「より多く」を意味する)に由来し、古典古代および後期古代の-plex (「折り畳まれた」を意味する)に取って代わったもので、「duplex」のように用いられる。[ 6 ] [ b ]
物件 2つのn タプルの同一性に関する一般的な規則は次のとおりです。
( 1 1 、 1 2 、 … 、 1 n ) = ( b 1 、 b 2 、 … 、 b n ) {\displaystyle (a_{1},a_{2},\ldots ,a_{n})=(b_{1},b_{2},\ldots ,b_{n})} かつその場合に限り 1 1 = b 1 、 1 2 = b 2 、 … 、 1 n = b n {\displaystyle a_{1}=b_{1},{\text{ }}a_{2}=b_{2},{\text{ }}\ldots ,{\text{ }}a_{n}=b_{n}} 。したがって、タプルはセット とは異なる特性を持っている。
タプルには同じ要素の複数のインスタンスが含まれる可能性があるため、タプル( 1 、 2 、 2 、 3 ) ≠ ( 1 、 2 、 3 ) {\displaystyle (1,2,2,3)\neq (1,2,3)} ; しかし設定する{ 1 、 2 、 2 、 3 } = { 1 、 2 、 3 } {\displaystyle \{1,2,2,3\}=\{1,2,3\}} 。 タプルの要素は順序付けられています: タプル( 1 、 2 、 3 ) ≠ ( 3 、 2 、 1 ) {\displaystyle (1,2,3)\neq (3,2,1)} しかし、{ 1 、 2 、 3 } = { 3 、 2 、 1 } {\displaystyle \{1,2,3\}=\{3,2,1\}} 。 タプルは有限個の要素を持つが、セットまたはマルチセットは 無限個の要素を持つ可能性がある。
定義 タプルには、前のセクションで説明した特性を与える定義がいくつか存在する。
関数としてのタプル の0 {\displaystyle 0} -タプルは空の関数 として識別される可能性があります。n ≥ 1 、 {\displaystyle n\geq 1,} のn {\displaystyle n} -タプル( 1 1 、 … 、 1 n ) {\displaystyle \left(a_{1},\ldots ,a_{n}\right)} 射影 関数 と同一視できる
F : { 1 、 … 、 n } → { 1 1 、 … 、 1 n } {\displaystyle F~:~\left\{1,\ldots ,n\right\}~\to ~\left\{a_{1},\ldots ,a_{n}\right\}} ドメイン 付き
ドメイン F = { 1 、 … 、 n } = { 私 ∈ N : 1 ≤ 私 ≤ n } {\displaystyle \operatorname {domain} F=\left\{1,\ldots ,n\right\}=\left\{i\in \mathbb {N} :1\leq i\leq n\right\}} そして、コドメインは
値域 F = { 1 1 、 … 、 1 n } 、 {\displaystyle \operatorname {codomain} F=\left\{a_{1},\ldots ,a_{n}\right\},} それは以下のように定義されます私 ∈ ドメイン F = { 1 、 … 、 n } {\displaystyle i\in \operatorname {domain} F=\left\{1,\ldots ,n\right\}} による
F ( 私 ) := 1 私 。 {\displaystyle F(i):=a_{i}.} つまり、F {\displaystyle F} 関数は次のように定義されます
1 ↦ 1 1 ⋮ n ↦ 1 n {\displaystyle {\begin{alignedat}{3}1\;&\mapsto &&\;a_{1}\\\;&\;\;\vdots &&\;\\n\;&\mapsto &&\;a_{n}\\\end{alignedat}}} その場合、平等
( 1 1 、 1 2 、 … 、 1 n ) = ( F ( 1 ) 、 F ( 2 ) 、 … 、 F ( n ) ) {\displaystyle \left(a_{1},a_{2},\dots ,a_{n}\right)=\left(F(1),F(2),\dots ,F(n)\right)} 必然的に成り立つ。
タプルは順序対の集合として定義される。 関数は一般的に、特定の順序対の集合であるグラフ と関連付けられます。実際、多くの著者はグラフを関数の定義として使用しています。この「関数」の定義を使用すると、上記の関数はF {\displaystyle F} 次のように定義できます。
F := { ( 1 、 1 1 ) 、 … 、 ( n 、 1 n ) } 。 {\displaystyle F~:=~\left\{\left(1,a_{1}\right),\ldots ,\left(n,a_{n}\right)\right\}.}
入れ子になった順序対としてのタプル 集合論においてタプルをモデル化するもう一つの方法は、入れ子になった順序 対として表現することです。このアプローチでは、順序対の概念が既に定義されていることを前提としています。
0タプル(つまり空のタプル)は空集合で表される。∅ {\displaystyle \emptyset } 。 n > 0 のnタプルは、その最初の要素と( n − 1)タプル ( n > 1 の場合、残りの要素を含む) の 順序対として定義できます。 ( 1 1 、 1 2 、 1 3 、 … 、 1 n ) = ( 1 1 、 ( 1 2 、 1 3 、 … 、 1 n ) ) {\displaystyle (a_{1},a_{2},a_{3},\ldots ,a_{n})=(a_{1},(a_{2},a_{3},\ldots ,a_{n}))} この定義は、 ( n -1) タプルに再帰的に適用できます。
( 1 1 、 1 2 、 1 3 、 … 、 1 n ) = ( 1 1 、 ( 1 2 、 ( 1 3 、 ( … 、 ( 1 n 、 ∅ ) … ) ) ) ) {\displaystyle (a_{1},a_{2},a_{3},\ldots ,a_{n})=(a_{1},(a_{2},(a_{3},(\ldots ,(a_{n},\emptyset )\ldots ))))} 例えば、次のような場合が考えられます。
( 1 、 2 、 3 ) = ( 1 、 ( 2 、 ( 3 、 ∅ ) ) ) ( 1 、 2 、 3 、 4 ) = ( 1 、 ( 2 、 ( 3 、 ( 4 、 ∅ ) ) ) ) {\displaystyle {\begin{aligned}(1,2,3)&=(1,(2,(3,\emptyset )))\\(1,2,3,4)&=(1,(2,(3,(4,\emptyset ))))\\\end{aligned}}} この定義の変形版では、反対側から要素を「剥がしていく」ことから始める。
0タプルは空集合です∅ {\displaystyle \emptyset } 。 n > 0 の 場合: ( 1 1 、 1 2 、 1 3 、 … 、 1 n ) = ( ( 1 1 、 1 2 、 1 3 、 … 、 1 n − 1 ) 、 1 n ) {\displaystyle (a_{1},a_{2},a_{3},\ldots ,a_{n})=((a_{1},a_{2},a_{3},\ldots ,a_{n-1}),a_{n})} この定義は再帰的に適用できる。
( 1 1 、 1 2 、 1 3 、 … 、 1 n ) = ( ( … ( ( ( ∅ 、 1 1 ) 、 1 2 ) 、 1 3 ) 、 … ) 、 1 n ) {\displaystyle (a_{1},a_{2},a_{3},\ldots ,a_{n})=((\ldots (((\emptyset ,a_{1}),a_{2}),a_{3}),\ldots ),a_{n})} 例えば、次のような場合が考えられます。
( 1 、 2 、 3 ) = ( ( ( ∅ 、 1 ) 、 2 ) 、 3 ) ( 1 、 2 、 3 、 4 ) = ( ( ( ( ∅ 、 1 ) 、 2 ) 、 3 ) 、 4 ) {\displaystyle {\begin{aligned}(1,2,3)&=(((\emptyset ,1),2),3)\\(1,2,3,4)&=((((\emptyset ,1),2),3),4)\\\end{aligned}}}
タプルをネストされたセットとして扱う クラトフスキーの順序対表現を 用いると、上記の2番目の定義は純粋な集合論の 観点から次のように再定式化できる。
0タプル(つまり空のタプル)は空集合で表される。∅ {\displaystyle \emptyset } ; させてx {\displaystyle x} n タプルである( 1 1 、 1 2 、 … 、 1 n ) {\displaystyle (a_{1},a_{2},\ldots ,a_{n})} 、そしてx → b ≡ ( 1 1 、 1 2 、 … 、 1 n 、 b ) {\displaystyle x\rightarrow b\equiv (a_{1},a_{2},\ldots ,a_{n},b)} 。 それから、x → b ≡ { { x } 、 { x 、 b } } {\displaystyle x\rightarrow b\equiv \{\{x\},\{x,b\}\}} (右矢印、→ {\displaystyle \rightarrow } (「隣接する」と解釈することもできる。) この処方では:
( ) = ∅ ( 1 ) = ( ) → 1 = { { ( ) } 、 { ( ) 、 1 } } = { { ∅ } 、 { ∅ 、 1 } } ( 1 、 2 ) = ( 1 ) → 2 = { { ( 1 ) } 、 { ( 1 ) 、 2 } } = { { { { ∅ } 、 { ∅ 、 1 } } } 、 { { { ∅ } 、 { ∅ 、 1 } } 、 2 } } ( 1 、 2 、 3 ) = ( 1 、 2 ) → 3 = { { ( 1 、 2 ) } 、 { ( 1 、 2 ) 、 3 } } = { { { { { { ∅ } 、 { ∅ 、 1 } } } 、 { { { ∅ } 、 { ∅ 、 1 } } 、 2 } } } 、 { { { { { ∅ } 、 { ∅ 、 1 } } } 、 { { { ∅ } 、 { ∅ 、 1 } } 、 2 } } 、 3 } } {\displaystyle {\begin{array}{lclcl}()&&&=&\emptyset \\&&&&\\(1)&=&()\rightarrow 1&=&\{\{()\},\{(),1\}\}\\&&&=&\{\{\emptyset \},\{\emptyset ,1\}\}\\&&&&\\(1,2)&=&(1)\rightarrow 2&=&\{\{(1)\},\{(1),2\}\}\\&&&=&\{\{\{\{\emptyset \},\{\emptyset ,1\}\}\},\\&&&&\{\{\{\emptyset \},\{\emptyset ,1\}\},2\}\}\\&&&&\\(1,2,3)&=&(1,2)\rightarrow 3&=&\{\{(1,2)\},\{(1,2),3\}\}\\&&&=&\{\{\{\{\{\{\emptyset \},\{\emptyset ,1\}\}\},\\&&&&\{\{\{\emptyset \},\{\emptyset ,1\}\},2\}\}\},\\&&&&\{\{\{\{\{\emptyset \},\{\emptyset ,1\}\}\},\\&&&&\{\{\{\emptyset \},\{\emptyset ,1\}\},2\}\},3\}\}\\\end{array}}}
m 個の集合からなるn 個のタプル離散数学 、特に組み合わせ論 と有限確率論 では、n タプルはさまざまな計数問題の文脈で現れ、より非公式には長さn の順序付きリストとして扱われます。[ 7 ] m 個の要素の集合からエントリが来るn タプルは、繰り返しのある配置 、多重集合の順列 、および英語以外の文献では繰り返しのあるバリエーション とも呼ばれます。m個の集合の n タプルの数はm n です。これは組み合わせの積の規則 から導かれます。[ 8 ] S が 濃度 m の有限集合である場合、この数はn 重のデカルト冪 S × S × ⋯ × S の濃度です。タプルはこの積集合の要素です。
型理論 プログラミング言語 で一般的に用いられる型理論 では、タプルは積型 を持ちます。これは、長さだけでなく、各要素の基となる型も規定します。正式には次のようになります。
( x 1 、 x 2 、 … 、 x n ) : T 1 × T 2 × … × T n {\displaystyle (x_{1},x_{2},\ldots ,x_{n}):{\mathsf {T}}_{1}\times {\mathsf {T}}_{2}\times \ldots \times {\mathsf {T}}_{n}} そして、射影は 項構成子である。
π 1 ( x ) : T 1 、 π 2 ( x ) : T 2 、 … 、 π n ( x ) : T n {\displaystyle \pi _{1}(x):{\mathsf {T}}_{1},~\pi _{2}(x):{\mathsf {T}}_{2},~\ldots ,~\pi _{n}(x):{\mathsf {T}}_{n}} 関係モデル で使用されるラベル付き要素を持つタプルはレコード型 を持つ。これらの型はどちらも、単純型ラムダ計算 の単純な拡張として定義できる。[ 9 ]
型理論におけるタプルの概念と集合理論におけるタプルの概念は、次のように関連している。型理論の自然なモデル を考え、意味解釈を示すためにスコット括弧を用いると、そのモデルはいくつかの集合から構成される。S 1 、 S 2 、 … 、 S n {\displaystyle S_{1},S_{2},\ldots ,S_{n}} (注:ここではイタリック体を使用することで、集合と型を区別しています)以下のようになります。
[ [ T 1 ] ] = S 1 、 [ [ T 2 ] ] = S 2 、 … 、 [ [ T n ] ] = S n {\displaystyle [\![{\mathsf {T}}_{1}]\!]=S_{1},~[\![{\mathsf {T}}_{2}]\!]=S_{2},~\ldots ,~[\![{\mathsf {T}}_{n}]\!]=S_{n}} そして、基本用語の解釈は以下のとおりです。
[ [ x 1 ] ] ∈ [ [ T 1 ] ] 、 [ [ x 2 ] ] ∈ [ [ T 2 ] ] 、 … 、 [ [ x n ] ] ∈ [ [ T n ] ] {\displaystyle [\![x_{1}]\!]\in [\![{\mathsf {T}}_{1}]\!],~[\![x_{2}]\!]\in [\![{\mathsf {T}}_{2}]\!],~\ldots ,~[\![x_{n}]\!]\in [\![{\mathsf {T}}_{n}]\!]} 。型理論のn タプルは、集合理論のn タプルとして自然に解釈される: [ 10 ]
[ [ ( x 1 、 x 2 、 … 、 x n ) ] ] = ( [ [ x 1 ] ] 、 [ [ x 2 ] ] 、 … 、 [ [ x n ] ] ) {\displaystyle [\![(x_{1},x_{2},\ldots ,x_{n})]\!]=(\,[\![x_{1}]\!],[\![x_{2}]\!],\ldots ,[\![x_{n}]\!]\,)} 単位型 は、意味論的には0タプルとして解釈される。
プログラミング言語におけるタプル型の一覧については、「製品型#プログラミング言語における製品型」 を参照してください。
参考文献 ↑ "代数的データ型 - HaskellWiki" . wiki.haskell.org . ↑ 「代入の分解」 。MDN Web Docs 。2023年4月18日。 ↑ 「JavaScriptはオブジェクトのプロパティの順序を保証しますか?」 。 Stack Overflow 。 ↑ マシューズ、PH 編 (2007 年 1 月) 「N タプル」 『 簡潔オックスフォード言語学辞典 』オックスフォード大学出版局 。ISBN 9780199202720 2015年5月1日 に取得 。↑ ブラックバーン、サイモン (1994)。「順序付きnタプル」。 『オックスフォード哲学辞典』 。オックスフォードガイドラインクイックリファレンス(第3 版)。オックスフォード:オックスフォード大学出版局(2016年刊行)。342 ページ 。ISBN 9780198735304 . 2017-06-30 に取得。順序付き n タプル[:] [...] 順序付きペアの概念を n 個のオブジェクトのシーケンスに一般化したもの。 ↑ OED 、 sv "トリプル"、"四重"、"五重"、"十二重"↑ D'Angelo & West 2000 、 p.9 ↑ D'Angelo & West 2000 、p. 101 ↑ ピアース、ベンジャミン (2002). 型とプログラミング言語 . MIT Press. pp. 126–132 . ISBN 0-262-16209-1 。↑ スティーブ・アウォディ、「集合から型へ、カテゴリーへ、そして集合へ」 、2009年、プレプリント
外部リンク Wiktionaryにおける タプル の辞書定義