我想知道在編程中如何使用Church-Rosser定理,特別是函數式編程。我查閱了信息,但只能找到提及lambda微積分(有限知識)和beta減少的來源。用基本術語解釋Church-Rosser定理
如果任何人都可以解釋lambda微積分在什麼地方出現,以及什麼是縮減,我認爲這樣可以解決問題。
我對Church-Rosser定理的初步想法是,它是關於評估和執行功能的順序,但我不完全確定這是否是準確的信息。
謝謝。
注意:我目前正在學習標準ML
我想知道在編程中如何使用Church-Rosser定理,特別是函數式編程。我查閱了信息,但只能找到提及lambda微積分(有限知識)和beta減少的來源。用基本術語解釋Church-Rosser定理
如果任何人都可以解釋lambda微積分在什麼地方出現,以及什麼是縮減,我認爲這樣可以解決問題。
我對Church-Rosser定理的初步想法是,它是關於評估和執行功能的順序,但我不完全確定這是否是準確的信息。
謝謝。
注意:我目前正在學習標準ML
您的初步想法很好。
拉姆達演算並不規定特定的評估順序,所以給定一個可以多次減少的lambda表達式,Church-Rosser定理說你可以選擇其中一個。這使得函數式編程語言設計人員在設計評估語義時有很大的自由度。例如,在f(g x)中,假設兩者都是純函數,則無論您是減少f還是g首先都是等效的。
的Church-Rosser theorem的Wikipedia的描述是:
[I F的有兩個不同的減少量或可施加到相同術語削減序列,則存在一個術語,是從兩個結果可達,通過應用(可能是空的)額外減少的序列。
示例F(GX)其中˚F是X 2和克是2X:
(λx.x*x) ((λy.y+y) 2) ~β~> ((λy.y+y) 2)*((λy.y+y) 2)
~β~> (2+2)*((λy.y+y) 2)
~β~> (2+2)*(2+2)
(λx.x*x) ((λy.y+y) 2) ~β~> (λx.x*x) (2+2)
~β~> (2+2)*(2+2)
在這個例子中,兩個不同的減少是β-還原在兩個lambda中的任一個上,並且可以從兩個縮減中獲得的一個術語是(2+2)*(2+2)
。
非常感謝!這使得現在更有意義。 –
你介意在功能性編程語言中展示一個教會勞教者的實際例子嗎?如果你能這樣做會很好,謝謝:) –
這個怎麼樣?這個例子中最好的函數語言就是lambda演算。 :)您可以將'λx.y'替換爲'fn x => y',以便轉換爲標準ML。 –
我不認爲教會Rosser定理具有直接的實際用途,如果「實際使用」是指您在編寫代碼時明確使用的某些東西。它對功能程序如何容易並行有確實的實際意義。 –