部分関数
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を使うとか
参考