レコード

summary:

レコード[record]とは,有限集合 $K$ をキー[フィールド名]の集合とし,各キーに対応する値を持つ関数である.

$K$ を有限集合[例:name, age, email]などの識別子の集合とする.そして,その各 $k \in K$ に対して,その値の型 $T(k)$ が定義されているものとする.このとき,型アノテーションをともなうレコードスキーマを $\tau : K \to \mathsf{Type}$ という写像で与えると,各レコード $r$ は,以下のような写像で表される.\[r : \prod_{k \in K} \tau(k) \]

形式的には、レコード $r$ は従属直積 $\prod_{k \in K} \tau(k)$ の要素である.これは,各キー $ k \in K $ に対して,型 $\tau(k)$ に属する値 $ v_k $ を対応させるような写像\[r : K \to \bigcup_{k \in K} \tau(k), \quad r(k) = v_k \in \tau(k)\]として記述されることを意味する.

この定義は,プログラミング言語におけるレコード型[例:Haskell, ML, Rust 等]を抽象化した構造的モデルであり,型安全なフィールドアクセス,部分型,多相的レコードなどの型理論的議論の基礎となる.

また,この定義は,プログラミング言語における以下のような構造を,型理論的・集合論的に正確にモデル化しているものである.

data Person = { name :: String, age :: Int }

つまり,レコードのフィールド名 name と age からなる有限集合を,次のように定めると,\[K = \{ \texttt{name}, \texttt{age} \}\]これは,レコードのキーすなわち識別子の集合である.

次に,各キーに対応する型を与える写像 $ \tau : K \to \mathsf{Type} $ を定める.具体的には,\[\tau(\texttt{name}) = \mathsf{String}, \quad \tau(\texttt{age}) = \mathsf{Int}\]

このようにして,キーとそれに対応する型の対が決まり,レコードスキーマが形成される.

すると,具体的なレコード $ r $[例えば, "Alice" という名前と 30 という年齢を持つ人物]とは,関数\[r : \prod_{k \in K} \tau(k)\]

の要素,すなわち各キー $ k \in K $ に対して値 $ v_k \in \tau(k) $ を対応させるような写像として定義される.この写像は具体的には次のように記述される.\[r(\texttt{name}) = \text{"Alice"}, \quad r(\texttt{age}) = 30\]

従って,レコードとは,与えられたスキーマに従って定まる有限集合上の 従属直積[dependent product] の要素である.

Mathematics is the language with which God has written the universe.





















NIC Minskyマシン Calcite DPDK サブワード SentencePiece