部分関数
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\}
ref 部分関数の記法
値域
$ \{y\in\mathbb{N}\;|\;\exist\vec{x}\in\mathbb{N}^k;f(\vec{x})=y\}
例
有理関数
rational function
https://ja.wikipedia.org/wiki/有理関数
Haskell
http://tanakh.jp/posts/2011-12-25-partial-function-considered-harmful.html
https://wiki.haskell.org/Avoiding_partial_functions
書き方に工夫すれば部分関数を避けられる
例えば、要素アクセスをxs !! 2ではなく、dropを使うとか
参考
https://ja.wikipedia.org/wiki/部分写像