に加え機能上の乗算の分配法則を証明:私はHaskellのとラムダ計算の初級コースで、現在だと私は、次の演習を行う方法がわからないんだハスケル
+(の次の定義を使用してHaskellでは)と(*)事業、証明:
1)(+)
(∀m⇓,n⇓,k⇓::N) (m+n) * k = m * k + n * k
定義を超える(*)の分配法則:
(+) :: N -> N -> N
(+) = \m n -> case m of { 0 -> n; S(y) -> S(y+n)}
(*) :: N -> N -> N
(*) = \m n -> case m of { 0 -> 0; S y -> n + (y*n)}
私の考えは、以前の練習でやったことを、mの可能性のあるケースごとに証明することでした。違いは、私が行った練習は、trueまたはfalseのみであり、これは自然なので、m = 0およびm = S(y)の場合の証明を行うことだったブール型の練習であるということです。
は、私は簡単にはm = 0のための平等を証明するために管理しますが、M =のS(y)のためにそれをやったときに捕まってしまった
ケースメートル= 0
(0 + n) * k =? 0 * k + n * k
Left side:
(0 + n) * k = (case 0 of {0->n;Sy->...}) * k
= n * k
Right side:
0 * k + n * k = (case 0 of {0->0;Sy->...}) + (n * k)
= 0 + (n * k) = (case 0 of {0->(n*k);Sy->...}) = n * k (equal to the left side)
ケースメートルの=のS(Y)
(Sy + n) * k =? Sy * k + n * k
Left side:
(case Sy of {0->...;Sy->S(y+n)}) * k = S(y+n) * k
= case Sx of {0->...;Sx-> k + k * (y+n)
Right side:
Sy * k + n * k = (case Sy of {0->...;Sy->k + k*y}) + n * k
= k + k*y + n * k (Point at which I got stuck)
(...)無関係コード
サイドの質問では、∀m⇓の上にある矢印は、正確には何を意味していますか?前もって感謝します!
あなたが何をしたのか、正確にどこにいらっしゃいましたか教えてください。 – leftaroundabout
@leftaroundabout確かに、m = 0の部分を追加し、現在m = Syの試行を追加しました – Chapi
矢印⇓はおそらく、有限の底値ではないことを意味します。ハスケルでは、次のように定義することができます: 'n :: Nat; n = S n 'であり、これは「無限数」である。また、 'loop :: Nat; loop = loop'であり、これは 'Nat'型の分岐計算です。この種の値をその式に代入すれば、式は成り立たないかもしれません。 – Bakuriu