generated at
Iコンビネータ
identity combinator
\lambda x.x
恒等関数
Haskellでは id

IコンビネータはSコンビネータKコンビネータの組み合わせで表現できる
と表記することが多いが、2つ目のKは何でもいい
SKS でも SK(KK) でもなんでもいい
SK_ やなmrsekut
簡約する
SKK = (λxyz.xz(yz))KK → λz.Kz(Kz) Kz = (λxy.x)z → λy.z λz.Kz(Kz) → λz.(λy.z)(λy.z) // ① → λz.z = I
①から次へ行くときが注意が必要
λz.(λy.z)(_) に実引数 x を与えれば x が返ってくることが確認できる
簡約
(λz.(λy.z)(_))x // zにxを代入 → (λy.x)(_) // yに(_)を代入 → x


hs
k = const s x y z = x z (y z) skk :: a -> a skk = s k k