# 関数 ## 定義 関数(function)f: A → B は、定義域(domain)Aの各要素に、余域(codomain)Bの要素を割り当てる対応であり、f(a) = b はfが要素aに値bを割り当てることを表す。関数は数式(f(x) := 1/x²)、有限な定義域では値の対応表、あるいは値を計算する手続きなど様々な方法で指定できる。定義域のすべての要素に値が定義されているとは限らず、値が定義されない要素を持つ関数を部分関数(partial function)、定義域のすべての要素に値が定義されている関数を全域関数(total function)と呼ぶ(例: f(x) := 1/x² は x = 0 で値を持たない部分関数)。f: A → B と部分集合 S ⊆ A について、Sの要素にfを適用して得られる値の集合を f(S) := {b ∈ B | f(s) = b for some s ∈ S} と定義し、これをSの下でのfの像(image)と呼ぶ。定義域全体の像 range(f) := f(domain(f)) を値域(range)と呼び、これは余域(codomain)一般とは区別すべき概念である(余域はfの型の一部として指定される集合であり、値域はその中で実際に値として現れる部分集合)。関数fとgについて、f: A → B, g: B → C のとき、合成(composition)g∘f は (g∘f)(x) := g(f(x)) で定義される A → C の関数である。(Source: [[@2015__MIT__Mathematics for Computer Science - Chapter 4 Mathematical Data Types]]) ## 横断的知見 (この concept は本 ingest が初出のため、複数ソースの突き合わせによる横断的知見はまだない。第4章内では、関数は「定義域の各要素から出る矢印が高々1本」という条件を満たす[[二項関係]]の特別な場合として位置づけ直される。他章・他ソースが関数に触れた際にここへ追記する。) ## 未解決の問い - 値域(range)と余域(codomain)の区別が「重要になる」と予告されている第4.5節・[[濃度]]の議論(Mapping Rule)以外に、この区別が本質的に効いてくる場面はどこか(後続章での再登場を確認する)。 - 部分関数と全域関数の区別は、第6章の再帰的データ型(計算が停止しない、あるいは未定義になるケース)や第9章の有向グラフの議論にどう接続するか。 ## 関連 - 概念: [[二項関係]] / [[集合]] / [[濃度]] - source: [[@2015__MIT__Mathematics for Computer Science - Chapter 4 Mathematical Data Types]] ## 出典 - Eric Lehman, F. Thomson Leighton, Albert R. Meyer, *Mathematics for Computer Science*, revised 2015-05-18, Chapter 4.