部分関数
partial function
全ての定義域に対し、値域への対応がされてないものがある関数
部分関数f:A\rightarrow Bを考えた時、
あるa_1\in Aでは、f(a_1)\in Bがあるが、
あるa_2\in Aでは、f(a_2)\notin Bである
定義先が未定義なものを形式上f(x)=\botと書いたりする
自然数上の1変数部分関数fの定義域と値域
定義域
\{x\in\mathbb{N}|f(x)\downarrow\}
値域
\{y\in\mathbb{N}\;|\;\exist\vec{x}\in\mathbb{N}^k;f(\vec{x})=y\}
例
rational function
Haskell
書き方に工夫すれば部分関数を避けられる
例えば、要素アクセスを xs !! 2
ではなく、 drop
を使うとか
参考