۱ - ۱۲جواب تمرین‌ها

دقت کنید که در حال حاضر این تنها فصلی از کتاب‌ه که ما جواب تمرین‌هاش رو نوشتیم. این کار رو کردیم چون مهمه که بتونین درک خودتون از مطالب این فصل رو چک کنین.

ترکیب‌کننده‌ها

۱.

‏‎λx․xxx‎‏

یک ترکیب‌کننده هست، فقط به متغیر ‏‎x‎‏ اشاره می‌کنه که اون هم یکی از پارامترهاست.

۲.

‏‎λxy․zx‎‏

ترکیب‌کننده نیست، متغیر ‏‎z‎‏ در سر تابع قید نشده، پس یه متغیر آزاد ِه.

۳.

‏‎λxyz․xy(zx)‎‏

همه‌ی متغیرها قید شدن، پس ترکیب‌کننده هست.

۴.

‏‎λxyz․xy(zxy)‎‏

باز هم همه‌ی متغیرهای بدنه در سر لاندا قید شدن، پس این هم یک ترکیب‌کننده هست.

۵.

‏‎λxy․xy(zxy)‎‏

متغیر ‏‎z‎‏ در سر تابع قید نشده و یه متغیر آزاد ِه، پس این بیانیه یک ترکیب‌کننده نیست.

حالت معمولی یا واگرایی؟

۱.

‏‎λx․xxx‎‏

واگرا نیست، اصلاً ساده‌تر هم نمیشه. اگه خودش رو به خودش اعمال می‌کردیم، اون موقع واگرا می‌شد، ولی به تنهایی اینطور نیست.

۲.

‏‎(λz․zz)(λy․yy)‎‏

این همون جمله‌ی امگاست که قبلاً نشون دادیم، فقط معادل آلفا ِ اونه: ‏‎(λx․xx)(λx․xx)‎‏. دیدیم که این جمله واگراست.

۳.

‏‎(λx․xxx)z‎‏

واگرا نیست و به ‏‎zzz‎‏ ساده میشه.

ساده‌سازی بتا

این تمرین‌ها رو با ترتیب معمولی حل کردیم. منظور از ترتیب معمولی، همون شرکت‌پذیری از چپ‌ه: جملات بیرونی‌تر و چپ‌تر، اول حساب (اعمال) میشن.

۱.

‏‎(λabc․cba)zz(λwv․w)‎‏

‏‎(λa․λb․λc․cba)(z)z(λw․λv․w)‎‏

‏‎(λb․λc․cbz)(z)(λw․λv․w)‎‏

‏‎(λc․czz)(λw․λv․w)‎‏

‏‎(λw․λv․w)(z)z‎‏

‏‎(λv․z)(z)‎‏

‏‎z‎‏

۲.

‏‎(λx․λy․xyy)(λa․a)b‎‏

‏‎(λy․(λa․a)yy)(b)‎‏

‏‎(λa․a)(b)b‎‏

‏‎bb‎‏

۳.

‏‎(λy․y)(λx․xx)(λz․zq)‎‏

‏‎(λx․xx)(λz․zq)‎‏

‏‎(λz․zq)(λz․zq)‎‏

‏‎(λz․zq)(q)‎‏

‏‎qq‎‏

۴.

‏‎(λz․z)(λz․zz)(λz․zy)‎‏

‏‎(λz․zz)(λz․zy)‎‏

‏‎(λz․zy)(λz․zy)‎‏

‏‎(λz․zy)(y)‎‏

‏‎yy‎‏

۵.

‏‎(λx․λy․xyy)(λy․y)y‎‏

‏‎(λy․(λy․y)yy)(y)‎‏

‏‎(λy․y)(y)y‎‏

‏‎yy‎‏

۶.

‏‎(λa․aa)(λb․ba)c‎‏

‏‎(λb․ba)(λb․ba)c‎‏

‏‎(λb․ba)(a)c‎‏

‏‎aac‎‏

۷.

مراحلی که رفتیم:

a)

‏‎(λxyz․xz(yz))(λx․z)(λx․a)‎‏

b)

‏‎(λx․λy․λz․xz(yz))(λx․z)(λx․a)‎‏

c)

‏‎(λy․λz1․(λx․z)z1(yz1))(λx․a)‎‏

d)

‏‎(λz1(λx․z)(z1)((λx․a)z1))‎‏

e)

(λz1․z((λx․a)(z1)))

f)

‏‎(λz1․za)‎‏

اینجا به کمک ‏‎z1‎‏ بین ‏‎z‎‏ هایی که از دو جای مختلف اومده بودن فرق گذاشتیم. یکی‌شون در لاندای اول قید شده بود؛ ولی اون یکی یه متغیر آزاد در بیانیه‌ی دوم بود.

حالا هر مرحله رو توضیح میدیم:

a)

صورت سؤال.

b)

لانداهای مستتر رو نوشتیم.

c)

چپ‌ترین ‏‎x‎‏ رو با ‏‎(λx․z)‎‏ جایگزین کردیم، چپ‌ترین ‏‎z‎‏ رو هم به ‏‎z1‎‏ تغییر نام دادیم تا فرق ‏‎z‎‏ ها واضح بشه. از اینجا به بعد، منظور از ‏‎z‎‏، متغیرِ آزاد ِ اینجاست: ‏‎(λx․z)‎‏.

d)

‏‎y‎‏ رو اعمال کردیم و با ‏‎(λx․a)‎‏ جایگزین شد.

e)

‏‎z1‎‏ رو نمی‌شد به چیزی اعمال کنیم، رَوشِ محاسبه هم ترتیبِ معمولی ِه، پس از چپ باید ادامه می‌دادیم. اما چپ‌ترین لاندا آرگومانی نداشت، پس یک لایه رفتیم داخل و ‏‎(λx․z)‎‏ رو به ‏‎z1‎‏ اعمال کردیم، که به ‏‎z‎‏ ساده شد (‏‎z1‎‏ کنار گذاشته شد). حالا ‏‎z‎‏ داره به ‏‎((λx․a)(z1))‎‏ اعمال میشه.

f)

‏‎z‎‏ یه متغیر آزاد بود و ساده‌تر نمی‌شد، پس یه لایه دیگه پیش رفتیم و ‏‎((λx․a)(z1))‎‏ رو ساده کردیم. مثل قبل، ‏‎λx․a‎‏ بی‌توجه به ورودیش (‏‎z1‎‏متغیر آزاد ِ خودش، یعنی ‏‎a‎‏ رو برگردوند. حالا همه‌ی جمله‌ها در حالت معمولی اند و ساده‌تر نمیشن.