次の定義を総称高階関数計算の記法に翻訳しましょう。
- τ := (ν*L)・(EE*μ)・(E*γ*L)
- τ := (E*μ)・(ν*LL)・(E*γ*L)
いや、これは宿題にしよう、っと。計算練習にやってみてください。解答はたぶん来週。
このテのエントリーはまったく人気がなくて、この計算練習は誰一人やってないような気がするが、、、まー、いいや。
以下で、「=」は普通の等号で、「≒」は「翻訳をしたよ」という意味。(ν*L)・(EE*μ)・(E*γ*L) を、総称高階関数計算の記法で書き下します。まず、3つのパーツを別々に計算しておきます。
(E*γ*L)X = [E*(γ*L)]X = E(γ*L)X = E(γLX) ≒ e_map(combinations[List X])
(EE*μ)X = EE(μX) ≒ e_map(e_map(l_flatten[X]))
(ν*L)X = νLX ≒ e_flatten[List X]
では、全体を計算します。「#」は、コメントじゃなくて反図式順の関数結合です。
[(ν*L)・(EE*μ)・(E*γ*L)]X = (ν*L)X(EE*μ)X(E*γ*L)X ≒ e_flatten[List X] # e_map(e_map(l_flatten[X])) # e_map(combinations[List X])
マップ関数はカリー化されているとして(そのほうが計算が簡単なので)、引数elelを渡してみます。
[e_flatten[List X] # e_map(e_map(l_flatten[X])) # e_map(combinations[List X])](elel) = [e_flatten[List X] # e_map(e_map(l_flatten[X]))] (e_map(combinations[List X])(elel)) = e_flatten[List X]( e_map(e_map(l_flatten[X]))(e_map(combinations[List X])(elel)) )
総称の型パラメータを省略して、一部のマップ関数を2引数にすると、次の形になります。
- e_flatten(e_map(e_map(l_flatten), e_map(combinations, elel)))
τ := (E*μ)・(ν*LL)・(E*γ*L) のほうも同様にやってみてください(って、誰もやらないか ^^;)。