簡體   English   中英

將lambda演算項簡化為正規形式

[英]Reducing lambda calculus term to normal form

這是在任何人要求之前進行的作業,我只是在尋找指導。

這是第一個問題項:

(λx.λy.x y)(λx.x y)
=(λx.λz.x z)(λx.x y)         α-renaming 
=(λz.(λx.x y)  z) 
=(λx.x y) 

我想確保我正確地考慮了這一點。 右邊的術語是放置在參數x中的值,對嗎? 然后,將x的每個實例替換為右邊的項。 我重命名了y,所以與自由y和有界y沒有任何混淆。 現在我不明白的是第二行以=開頭。 是否將最右邊的z作為變量z的參數傳遞? 還是將其傳遞給x? 無論哪種方式,我都認為答案是相同的,但是我想知道哪種方法是正確的。

這是第二個問題

((λx.λy.x y)(λx.x))  y
=((λx.λz.x z)(λx.x))  y 
=(λz.(λx.x)z)  y 
=(λx.x)y 
=(λx.x) 

由於括號的原因,(λx.x)項是否可以代替參數x? 還是用y代替x?

我希望這是有道理的。 在此先感謝您的幫助。

Lambda演算包含上下文無關的語法

E ::= v        Variable
   |  λ v. E   Abstraction
   |  E E      Application

其中v覆蓋變量,以及beta和eta減少規則

(λ x. B) E  ->  B   where every occurrence of x in B in substituted by E
  λ x. E x  ->  E   if x doesn't occur free in E

aλ b. ba自由的 λ b. ba λ b. ba ,但不在λ a. λ b. ba λ a. λ b. ba λ a. λ b. ba 兩個歸約規則都不適用的表達式是正常形式

減少最左邊的redex是優先事項。 應用順序在替換之前將參數標准化,而正常順序則不會。

糾正兩個表達式的正態beta-和eta-規范化:

   (λ x. (λ y. x y)) (λ a. a b)
=  (λ x. x) (λ a. a b)            Eta-reduction
=  λ a. a b                       Beta-reduction

   ((λ x. (λ y. x y)) (λ a. a)) f
=  ((λ x. x) (λ a. a)) f
=  (λ a. a) f
=  f

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM