payamvha/North_RAG huggingface dataset:
شود. اگرچه حساب لامبدا نانوشته راهی برای جلوگیری از بیان ارزش درست و رشته هاو شی‌های بدون اعداد ندارد تعریف رسمی تعریف عبارات لامبدا عبارتند از: متغیرهای v1، v2، …، vn، ... نمادهای انتزاعی lambda ،' λ 'و نقطه '.' است. پرانتز () مجموعه‌ای از عبارات لامبدا، Λ، می‌تواند به صورت القایی تعریف شود: اگر x یک متغیر باشد، پس x ∈ Λ اگر x یک متغیر و M ∈ Λ باشد، (λx.M) ∈ Λ اگر M, N ∈ Λ، و سپس (M N) ∈ Λ نمونه‌هایی از قانون ۲ به عنوان انتزاع و نمونه‌هایی از قانون ۳ به عنوان برنامه‌های کاربردی شناخته می‌شوند نشانه گذاری
برنامه‌های کاربردی شناخته می‌شوند نشانه گذاری برای حفظ نشانه‌ای از عبارات لامبدا بدون سر و صدا، معمولاً قراردادهای زیر اعمال می‌شود: پرانتز خارج از محدوده کاهش می‌یابد: M N به جای (M N) فرض می‌شود که برنامه‌های کاربردی باقی می‌مانند: M N P ممکن است به جای ((M N) P) بدن انتزاع به همان اندازه که ممکن است به سمت راست گسترش می‌یابد: λx.M N معنی λx.(M N) و نه (λx.M) N یک دنباله از انتزاع قرارداد: λx. λy. λz.N به اختصار λxyz.N می‌باشد متغیرهای آزاد و محدود گفته می‌شود که اپراتور انتزاعی، λ، متغیر آن را هر جا که
که اپراتور انتزاعی، λ، متغیر آن را هر جا که در انتهای انتزاع رخ می‌دهد، مرتبط کند. گفته می‌شود متغیرهایی که در محدوده یک انتزاع قرار می‌گیرند محدود می‌شوند. همه متغیرهای دیگر نامیده می‌شوند. به عنوان مثال، در عبارت زیر، یک متغیر محدود و x آزاد است: λy.x x y. همچنین توجه داشته باشید که یک متغیر با انتزاع «نزدیکترین» آن محدود شده‌است. در مثال زیر، وقفه تک x در بیان توسط لامبدا دوم محدود می‌شود: λx.y (λx.z x) مجموعه‌ای از متغیرهای آزاد بیان Lambda, M، به عنوان FV (M) تعریف شده‌است و توسط بازگشتی بر ساختار
FV (M) تعریف شده‌است و توسط بازگشتی بر ساختار اصطلاحات تعریف شده‌است، به شرح زیر است: 3. FV(M N) = FV(M) ∪ FV(N) گفته می‌شود که عبارت ای که حاوی هیچ متغیر آزاد نیست بسته می‌شود. عبارت lambda بسته نیز به عنوان ترکیبی شناخته می‌شود و معادل آن‌ها در منطق ترکیبی است. کاهش معنای عبارات لامبدا به این معناست که چگونه عبارات را می‌توان کاهش داد. سه نوع کاهش وجود دارد: α تبدیل: تغییر متغیرهای متناوب (آلفا). β-reduction: اعمال توابع به استدلال‌های آن‌ها (بتا). η-conversion: که مفهوم گسترش (eta) را ترسیم می‌کند. ما
که مفهوم گسترش (eta) را ترسیم می‌کند. ما همچنین از معادلات حاصل می‌گوییم: دو عبارات β-معادل هستند، اگر آن‌ها می‌توانند β-تبدیل به یک عبارت مشابه باشند، و α / η-هم‌ارزی به‌طور مشابه تعریف می‌شوند. اصطلاح redex، کوتاهی برای عبارت reducible refers to subterms که می‌تواند توسط یکی از قوانین کاهش کاهش یابد. به عنوان مثال (λx.M) N یک بتا-redex در بیان جایگزینی N برای x در M است؛ اگر x در M آزاد نباشد، λx.M x نیز eta-redex است. بیان که بازده کاهش می‌یابد، کاهش آن نامیده می‌شود؛ با استفاده از مثال قبلی، کاهش این
نامیده می‌شود؛ با استفاده از مثال قبلی، کاهش این عبارات به ترتیب M [x: = N] و M. α تبدیل تبدیل آلفا، که گاهی اوقات به عنوان تغییر نام آلفا شناخته می‌شود، نام نام متغیر را تغییر می‌دهد. به عنوان مثال، تبدیل آلفا λx.x ممکن است λy.y. شرایطی که فقط با تبدیل آلفا متفاوت هستند، معادل α نامیده می‌شوند. اغلب، در استفاده از محاسبات لامبدا، معادلات معادل α معادل است. قوانین دقیق برای تبدیل آلفا کاملاً بی‌اهمیت نیستند. اول، هنگامی که تبدیل آلفا یک انتزاع، تنها رخ داده‌های متغیر که تغییر نام داده‌اند، کسانی هستند که
متغیر که تغییر نام داده‌اند، کسانی هستند که به یک انتزاع متعهد هستند. به عنوان مثال، تبدیل آلفا λx. λx.x می‌تواند به λy. λx.x منجر شود، اما نمی‌تواند نتیجه λy. λx.y. این دومین معنای متفاوت از اصل دارد. دوم، تبدیل آلفا امکان‌پذیر نیست اگر یک متغیر با یک انتزاع متفاوت گرفته شود. برای مثال، اگر x را با y در λx. λy.x جایگزین کنیم، می‌توانیم λy. λy.y را به دست آوریم که کاملاً متفاوت نیست. در زبان‌های برنامه‌نویسی با محدوده استاتیک، تبدیل آلفا می‌تواند برای ایجاد وضوح نام ساده‌تر با اطمینان از اینکه نام متغیر یک
وضوح نام ساده‌تر با اطمینان از اینکه نام متغیر یک نام را در دامنه حاوی مخفی می‌کند (نگاه کنید به تغییر نام آلفا برای ایجاد وضوح نام نامطلوب). در نماد شاخص De Bruijn، هر دو اصطلاح معادل آلفای معادل به صورت همگانی یکسان هستند. جایگزینی تعویض، نوشته شده E [V: = R]، فرایند جایگزینی تمام رخدادهای آزاد متغیر V در عبارت E با بیان R است. تعویض در شرایط λ-calculus توسط بازگشتی بر ساختار اصطلاحات تعریف شده‌است، همان‌طور که به این ترتیب (توجه داشته باشید: x و y فقط متغیر هستند در حالی که M و N هر عبارت λ هستند). x[x
هستند در حالی که M و N هر عبارت λ هستند). x[x := N] ≡ N y[x := N] ≡ y, if x ≠ y (λx.M)[x := N] ≡ λx.M برای جایگزینی به یک انتزاع لامبدا، گاهی لازم است که بیان α تبدیل شود. به عنوان مثال، برای (λx.y) [y: = x] درست نیست (به خاطر آوردن (λx.x)، زیرا x جایگزین به صورت آزاد بود اما به پایان رسید. جایگزینی صحیح در این مورد (λz.x)، تا α-هم‌ارزی است. توجه داشته باشید که تعویض به صورت منحصر به فرد به α-هم‌ارزی تعریف شده‌است. β-کاهش کاهش بتا ایده برنامه کاربردی را ضبط می‌کند. بتا-کاهش از نظر جایگزینی تعریف می‌شود:
می‌کند. بتا-کاهش از نظر جایگزینی تعریف می‌شود: کاهش بتا ((λV.E) E ') E [V: E] است. به عنوان مثال، با فرض برخی از کدگذاری ۲، ۷، ×، ما کاهش زیر را داریم: ((λn.n × ۲) ۷) → ۷ × ۲. η-تبدیل Eta-conversion بیان عقلی را بیان می‌کند که در این چارچوب این است که دو توابع یکسان هستند اگر و فقط اگر آن‌ها نتایج مشابهی را برای تمام استدلال‌ها ارائه دهند. Eta-conversion بین λx (fx) و f تبدیل می‌کند هر زمان که x در فضای آزاد ظاهر نشود. اشکال طبیعی و همپوشانی برای محاسبه لامبدا ty، β-reduction به عنوان یک قانون بازنویسی نه
ty، β-reduction به عنوان یک قانون بازنویسی نه به شدت نرمال و نه ضعیف نرمال کردن است. با این حال، می‌توان نشان داد که β-reduction با هم مخلوط است. (البته، ما به آلفا تبدیل می‌پردازیم، یعنی ما دو عددی معمول را در نظر می‌گیریم، اگر ممکن است به α-تبدیل یک به دیگری تبدیل شود) بنابراین، هر دو اصطلاح به شدت نرمال و شرایط ضعیف عادی، یک فرم طبیعی منحصر به فرد دارند. برای اصطلاحات به شدت نرمال، هر استراتژی کاهش تضمین می‌شود که فرم طبیعی را تولید کند، در حالی که برای اصطلاحات ضعیف نرمال، برخی از استراتژی‌های کاهش
اصطلاحات ضعیف نرمال، برخی از استراتژی‌های کاهش می‌توانند آن را پیدا نکنند. انواع داده‌ها کدگذاری مقالات اصلی: رمزگذاریchurch و کدگذاری مگنسن اسکات محاسبات پایه لامبدا ممکن است برای مدل‌سازی بولی‌ها، ریاضیات، ساختار داده‌ها و رکود استفاده شود، که در زیر بخش‌های زیر نشان داده شده‌است. ریاضی در محاسبات لامبدا چندین روش ممکن برای تعریف اعداد طبیعی در محاسبات لامبدا وجود دارد، اما اکثر عبارات church هستند که می‌توانند به صورت زیر تعریف شوند: ۰ := λf. λx.x ۱ := λf. λx.f x ۲ := λf. λx.f (f x) ۳ := λf. λx.f (f (f
λx.f x ۲ := λf. λx.f (f x) ۳ := λf. λx.f (f (f x)) و غیره یا با استفاده از نحوه جایگزین ارائه شده در بالا در نماد: ۰ := λfx.x ۱ := λfx.f x ۲ := λfx.f (f x) ۳ := λfx.f (f (f x)) یک عدد church یک تابع مرتبه بالاتر است - یک تابع یک پارامتر تابع f را می‌گیرد و یک تابع تک استدلالی را بازمی‌گرداند. عدد n عنصر کلیسا یک تابع است که یک تابع f را به عنوان علامت می‌گیرد و ترکیب n-th f را به دست می‌دهد، یعنی تابع f با خود برابر n برابر است. این نشان دهنده f (n) است و در واقع n-th power f است (در نظر گرفته شده به عنوان
واقع n-th power f است (در نظر گرفته شده به عنوان یک اپراتور)؛ f (0) به عنوان تابع هویت تعریف می‌شود. چنین ترکیبات تکراری (از یک تابع f) به قوانین مادیات احترام می‌گذارند، به همین دلیل این عددها را می‌توان برای محاسبات استفاده کرد. (در محاسبات لامبدا اصلی کلیسای، پارامتر رسمی بیان لامبدا حداقل یکبار در بدن تابع اتفاق افتاد که تعریف فوق از ۰ غیرممکن بود). ما می‌توانیم یک تابع جانشین را تعریف کنیم که یک عدد n را می‌گیرد و n + 1 را با اضافه کردن یک برنامه دیگر از f تعریف می‌کند، where '(mf) x' به معنی تابع 'f'
f تعریف می‌کند، where '(mf) x' به معنی تابع 'f' است 'm' بار در 'x' اعمال می‌شود: SUCC: = λn. λf. λx.f (n f x) از آنجا که ترکیب m-th f با ترکیب n-th f به ترکیب m + n-th f می‌دهد، افزودن می‌تواند به صورت زیر تعریف شود: PLUS: = λm. λn. λf. λx.m f (n f x) PLUS را می‌توان به عنوان یک تابع در نظر گرفت که دو عدد طبیعی را به عنوان استدلال و بازگشت یک عدد طبیعی؛ می‌توان آن را تأیید کرد PLUS 2 3 و ۵ عبارات لامبدا β معادل هستند. از آنجا که اضافه کردن m به عدد n می‌توان با اضافه کردن 1 m بار، تعریف معادل آن است: PLUS:
با اضافه کردن 1 m بار، تعریف معادل آن است: PLUS: = λm. λn.m SUCC n به‌طور مشابه، ضرب می‌تواند به صورت زیر تعریف شود MULT: = λm. λn. λf.m (n f) متناوباً MULT: = λm. λn.m (PLUS n) 0 از آنجا که ضرب m و n همانند تکرار تابع add n تابع m است و سپس آن را به صفر اعمال می‌کند. انحراف در عبارات church نسبتاً پیچیده‌است. POW: = λb. λe.e b عملکرد پیشینی تعریف شده توسط PRED n = n-1 برای یک عدد صحیح مثبت n و PRED 0 = ۰ به مراتب سخت‌تر است. فرمول PRED: = λn. λf. λx.n (λg. λh.h (g f)) (λu.x) (λu.u) می‌توان با نشان دادن
λh.h (g f)) (λu.x) (λu.u) می‌توان با نشان دادن الگویی که اگر T نامیده می‌شود (λg. λh.h (gf)), T (n) (λu.x) = (λh.h (f (n-1) (x))) برای n&gt; 0. دو تعریف دیگر از PRED در زیر آمده‌است، یکی با استفاده از شرط و دیگری با استفاده از جفت. با عملکرد پیشین، تفریق ساده است. تعریف کردن SUB: = λm. λn.n PRED m، SUB m n بازده m - n زمانی که m&gt; n و ۰ در غیر این صورت. منطق و پیش فرض‌ها به‌طور مشترک، دو تعریف زیر (به نام کلیسای booleans) برای مقادیر بولین TRUE و FALSE استفاده می‌شود: TRUE: = λx. λy.x FALSE: = λx. λy.y
می‌شود: TRUE: = λx. λy.x FALSE: = λx. λy.y سپس با استفاده از این دو λ-term، می‌توانیم برخی از اپراتورهای منطقی را تعریف کنیم (این فقط فرمول‌های ممکن است؛ عبارات دیگر به همان اندازه صحیح هستند): AND := λp. λq.p q p OR := λp. λq.p p q NOT := λp.p FALSE TRUE IFTHENELSE := λp. λa. λb.p a b اکنون می‌توانیم برخی از توابع منطقی را محاسبه کنیم، مثلاً: و TRUE FALSE ≡ (λp. λq.p q p) TRUE FALSE →β TRUE FALSE TRUE ≡ (λx. λy.x) FALSE TRUE →β FALSE و ما می‌بینیم که عدد درست عدد برابر با FALSE است. یک پیش‌فرض یک تابع است
عدد برابر با FALSE است. یک پیش‌فرض یک تابع است که مقدار boolean را بازمی‌گرداند. اساسی‌ترین اساسی ISZERO است، که اگر علامت آن عدد کلیسای عدد ۰ باشد، عدد را درست می‌کند، و علامت FALSE اگر علامت دیگری باشد، عدد کلیسای دیگری است: ISZERO: = λn.n (λx.FALSE) درست است. پیش فرض زیر تست می‌کند که آیا آرگومان اول کمتر از نسبت یا برابر با دوم است: LEQ: = λm. λn.ISZERO (SUB m n)، و از آنجا که m = n، اگر LEQ m n و LEQ n m باشد، ساختن پیش‌فرض برای برابری عددی ساده است. در دسترس بودن پیش فرض‌ها و تعریف بالا از TRUE و
در دسترس بودن پیش فرض‌ها و تعریف بالا از TRUE و FALSE، آن را مناسب برای بیان عبارات "if-then-else" در محاسبات لامبدا ایجاد کنید. برای مثال، تابع پیشینی را می‌توان به صورت زیر تعریف کرد: PRED: = λn.n (λg. λk.ISZERO (g 1) k (PLUS (g k) 1)) (λv 0) 0 که می‌تواند با نشان دادن القاء الگویی که n (λg. λk.ISZERO (g 1) k (PLUS (g k) 1)) (λv.0) تابع افزودن n - 1 برای n&gt; 0 است. جفت یک جفت (2-tuple) را می‌توان از نظر TRUE و FALSE تعریف کرد، با استفاده از کلیسای رمزگذاری برای جفت‌ها. به عنوان مثال، PAIR جفت (x, y) را
برای جفت‌ها. به عنوان مثال، PAIR جفت (x, y) را محاسبه می‌کند، FIRST اولین عنصر جفت را باز می‌کند و SECOND دوم را بازمی‌گرداند. PAIR := λx. λy. λf.f x y FIRST := λp.p TRUE SECOND := λp.p FALSE NIL := λx.TRUE NULL := λp.p (λx. λy.FALSE) یک لیست مرتبط را می‌توان به عنوان NIL برای لیست خالی یا PAIR یک عنصر و یک لیست کوچکتر تعریف کرد. آزمون NULL پیش‌فرض برای مقدار NIL. (به جای آن، با NIL: = FALSE، ساختار l (λh. λt. λz.deal_with_head_h_and_tail_t) (deal_with_nil) نیاز به یک آزمون NULL صریح را از بین می‌برد). به
نیاز به یک آزمون NULL صریح را از بین می‌برد). به عنوان مثال استفاده از جفت، تابع shift و increment کهm,n))به(n,n+1) می‌توان تعریف کرد به عنوان Φ: = λx.PAIR (SECOND x) (SUCC (SECOND x)) که به ما اجازه می‌دهد تا شاید نسخه شفاف تابع سلف: PRED: = λn.FIRST (n Φ (PAIR 0)). ر کوردها و نقاط ثابت همچنین نگاه کنید به: SKI حساب کاربری ترکیبی § خود برنامه‌ریزی و بازپخش Recursion تعریف یک تابع با استفاده از تابع خود است. محاسبات لامبدا نمی‌تواند این را به‌طور مستقیم به عنوان برخی از نشانه‌های دیگر بیان کند: تمام توابع
عنوان برخی از نشانه‌های دیگر بیان کند: تمام توابع در محاسبات لامبدا ناشناس هستند، بنابراین ما نمی‌توانیم به یک مقدار که هنوز تعریف شده‌است، در داخل عبارت لامبدا تعریف کنیم که همان مقدار است. با این وجود، می‌توان از طریق برگزاری یک عبارت لامبدا برای بازگشت خود به عنوان ارزش استدلال خود، به عنوان مثال در (λx.xx) E. دریافت کرد. تابع فاکتوریل F (n) را به صورت بازگشتی به وسیلهٔ تعریف می‌کنیم F(n) = 1, if n = 0; else n × F(n − ۱) در بیان لامبدا که برای نشان دادن این تابع است، پارامتر (به‌طور پیش‌فرض اول) فرض
این تابع است، پارامتر (به‌طور پیش‌فرض اول) فرض می‌شود که خودش را به عنوان مقدار خود دریافت می‌کند، به‌طوری‌که فراخوانی آن - استفاده از آن به یک استدلال - به مقدار بازگشتی تبدیل می‌شود؛ بنابراین برای رسیدن به بازگشت، استدلال در نظر گرفته شده به عنوان خود ارجاع (به نام r اینجا) همیشه باید در داخل بدن تابع در یک نقطه تماس منتقل شود: G := λr. λn.(1, if n = 0; else n × (r r (n−۱))) with r r x = F x = G r x to hold, so r = G and F := G G = (λx.x x) G خود نرم‌افزار در اینجا تکرار می‌کند، بیانگر لامبدا تابع را به
در اینجا تکرار می‌کند، بیانگر لامبدا تابع را به فراخوانی بعدی به عنوان یک مقدار استدلال انتقال می‌دهد، و آن را در دسترس برای ارجاع و فراخوانی در آنجا قرار می‌دهد. این را حل می‌کند اما نیاز به نوشتن هر تماس مجدد را به عنوان خود برنامه کاربردی دارد. ما می‌خواهیم یک راه حل عمومی بدون نیاز به نوشتن مجدد داشته باشیم: G := λr. λn.(1, if n = 0; else n × (r (n−۱))) with r x = F x = G r x to hold, so r = G r =: FIX G and F := FIX G where FIX g := (r where r = g r) = g (FIX g) so that FIX G = G (FIX G) = (λn.(1, if
g (FIX g) so that FIX G = G (FIX G) = (λn.(1, if n = 0; else n × ((FIX G) (n−۱)))) با توجه به یک اصطلاح لامبدا با اولین آرگومان که نشانگر فراخوانی بازگشتی است (به عنوان مثال G در اینجا)، ترکیبی FIX نقطه ثابت یک بیان لامبدا خود تکراری را نشان می‌دهد که نشانگر تابع بازگشتی (در اینجا، F) است. این تابع به هیچ وجه نباید صریحاً به خود منتقل شود، زیرا خود تکرار به صورت پیشفرض تنظیم می‌شود، زمانی که آن ایجاد می‌شود، هر بار که آن را فراخوانی می‌شود؛ بنابراین بیان اصلی لامبدا (FIX G) در داخل خود، در نقطه تماس،
اصلی لامبدا (FIX G) در داخل خود، در نقطه تماس، دستیابی به خود ارجاع ایجاد می‌شود. در حقیقت، بسیاری از تعاریف ممکن برای این اپراتور FIX، ساده‌ترین آن‌ها وجود دارد: Y: = λg. (λx.g (xx)) (λx.g (xx)) در محاسبات لامبدا، Yg یک نقطه ثابت از g است، به عنوان گسترش به: codice_1 codice_2 codice_3 codice_4 codice_5 codice_4 codice_7 codice_2 codice_9 codice_4 codice_11 codice_4 codice_13 codice_2 codice_15 codice_4 codice_11 codice_4 codice_7 codice_2 codice_21 codice_22 حالا، برای فراخوانی بازگشتی ما به تابع
codice_22 حالا، برای فراخوانی بازگشتی ما به تابع فاکتوریل، ما به سادگی می‌توانیم (Y G) n, where n تعدادی است که فاکتوریل را محاسبه می‌کنیم. به عنوان مثال، با توجه به n = ۴، این می‌دهد: (Y G) 4 G (Y G) 4 (λr. λn.(1, if n = 0; else n × (r (n−1)))) (Y G) ۴ (λn.(1, if n = 0; else n × ((Y G) (n−۱)))) ۴ 1, if ۴ = 0; else ۴ × ((Y G) (4−۱)) ۴ × (G (Y G) (4−۱)) ۴ × ((λn.(1, if n = 0; else n × ((Y G) (n−۱)))) (۴−۱)) ۴ × (1, if ۳ = 0; else ۳ × ((Y G) (3−۱))) ۴ × (۳ × (G (Y G) (3−۱))) ۴ × (۳ × ((λn.(1, if n = 0; else
(G (Y G) (3−۱))) ۴ × (۳ × ((λn.(1, if n = 0; else n × ((Y G) (n−۱)))) (۳−۱))) ۴ × (۳ × (1, if ۲ = 0; else ۲ × ((Y G) (2−۱)))) ۴ × (۳ × (۲ × (G (Y G) (2−۱)))) ۴ × (۳ × (۲ × ((λn.(1, if n = 0; else n × ((Y G) (n−۱)))) (۲−۱)))) ۴ × (۳ × (۲ × (1, if ۱ = 0; else ۱ × ((Y G) (1−۱))))) ۴ × (۳ × (۲ × (۱ × (G (Y G) (1−۱))))) ۴ × (۳ × (۲ × (۱ × ((λn.(1, if n = 0; else n × ((Y G) (n−۱)))) (۱−۱))))) ۴ × (۳ × (۲ × (۱ × (1, if ۰ = 0; else ۰ × ((Y G) (0−۱)))))) ۴ × (۳ × (۲ × (۱ × (۱)))) ۲۴ هر تابع تعریف بازگشتی را می‌توان
× (۱ × (۱)))) ۲۴ هر تابع تعریف بازگشتی را می‌توان به عنوان یک نقطه ثابت از برخی از تابع تعریف شده مناسب تعریف شده در تماس فراخوان با یک استدلال اضافی دیده می‌شود و بنابراین، با استفاده از Y، هر تابع تعریف بازگشتی را می‌توان به عنوان بیان لامبدا بیان کرد. به‌طور خاص، اکنون می‌توانیم تفکیک، ضرب و محاسبه مقادیر عدد طبیعی را به صورت مجزا تعریف کنیم. شرایط استاندارد اصطلاحات خاصی نام‌های رایج دارند: I: = λx.x K: = λx. λy.x S: = λx. λy. λz.x z (y z) B: = λx. λy. λz.x (y z) C: = λx. λy. λz.x z y W: = λx. λy.x y y
(y z) C: = λx. λy. λz.x z y W: = λx. λy.x y y U: = λx. λy.y (x x y) ω: = λx.x x Ω: = ω ω Y: = λg. (λx.g (xx)) (λx.g (xx)) محاسبات لامبدا تایپ شده یک محاسبات لامبدا تایپ شده یک فرمالیسم تایپی است که از نماد لامبدا ({\ displaystyle \ lambda} \ lambda) برای انتساب تابع ناشناس استفاده می‌کند. در این زمینه، انواع معمولاً اشیاء طبیعت نحوی هستند که به شرایط لامبدا اختصاص دارند؛ نوع دقیق یک نوع بستگی به محاسبات دارد (نگاه کنید به انواع زیر). از دیدگاه خاص، محاسبات لامبدا تایپ شده را می‌توان به عنوان اصلاحاتی از
لامبدا تایپ شده را می‌توان به عنوان اصلاحاتی از محاسبات لامبدا غیرتصویر مشاهده کرد، اما از دیدگاه دیگر، آن‌ها همچنین می‌توانند تئوری بنیادی تر و محاسبات لامبدا با استفاده از یک مورد خاص با تنها یک نوع در نظر گرفته شوند. زبان‌های تایپ شده لامبدا زبان‌های برنامه‌نویسی پایه هستند و پایه زبان‌های برنامه‌نویسی کارکردی مانند ML و Haskell و غیرمستقیم زبان‌های برنامه‌نویسی ضروری را تایپ می‌کنند. Calibles lambda تایپ شده نقش مهمی در طراحی سیستم‌های نوع زبان‌های برنامه‌نویسی بازی می‌کند. در اینجا typability معمولاً
بازی می‌کند. در اینجا typability معمولاً ویژگی‌های مطلوب برنامه را ضبط می‌کند، برای مثال برنامه باعث نقض دسترسی به حافظه نمی‌شود. محاسبات لامبدا تایپ شده با منطق ریاضی و تئوری اثبات شده از طریق Isomorphism کاری-هوارد مرتبط هستند و می‌توان آن‌ها را به عنوان زبان داخلی کلاس‌های دسته‌بندی، به عنوان مثال محاسبات لامبدا به سادگی تایپ شده‌است زبان رده بسته دکارتی (CCCs). توابع قابل محاسبه و محاسبات لامبدا یک تابع F: N → N از اعداد طبیعی یک تابع قابل محاسبه است اگر و فقط اگر یک عبارت lambda f وجود دارد به‌طوری‌که
و فقط اگر یک عبارت lambda f وجود دارد به‌طوری‌که برای هر جفت x, y در N, F (x) = y اگر و فقط اگر fx = β y، جایی که x و y عددهای church مربوط به x و y هستند و به ترتیب β = β معادل بودن با کاهش بتا است. این یکی از روش‌های بسیاری برای تعریف محاسبات است. دیدگاه کلیسون تورینگ را برای بحث در مورد رویکردهای دیگر و همسانیشان ببینید. عدم قطعیت برابر بودن هیچ الگوریتمی وجود ندارد که به عنوان ورودی دو علامت لامبدا و خروجی TRUE یا FALSE را در نظر بگیرد که آیا دو عبارت برابر هستند یا نه. این مسئله از لحاظ تاریخی اولین
برابر هستند یا نه. این مسئله از لحاظ تاریخی اولین مشکل بود که قابل اثبات نیست. همان‌طور که برای اثبات غیرقابل انکار بودن معمول است، اثبات نشان می‌دهد که هیچ تابع قابل محاسبه نمی‌تواند همسان‌سازی را تعیین کند. سپس پایان‌نامه کلیسا به نشان می‌دهد که هیچ الگوریتمی نمی‌تواند این کار را انجام دهد. اثبات کلیسا برای اولین بار مشکل را برای تعیین اینکه آیا یک لامبدا داده شده به شکل نرمال است، کاهش می‌دهد. یک فرم عادی بیان معادل است که نمی‌تواند تحت قوانینی که توسط فرم اعمال می‌شود کاهش یابد. سپس فرض می‌کند که این
فرم اعمال می‌شود کاهش یابد. سپس فرض می‌کند که این پیش‌فرض قابل محاسبه است و بنابراین می‌تواند در محاسبات لامبدا بیان شود. بر اساس کار قبلی Kleene و ساخت شماره Gödel برای عبارات لامبدا، او یک عبارت لامبدا را ایجاد می‌کند که دقیقاً به اثبات اولین قضیه ناقص گودل می‌رسد. اگر e به شماره Gödel خود اعمال شود، یک تضاد حاصل می‌شود. محاسبات لامبدا و زبان‌های برنامه‌نویسی همان‌طور که توسط مقاله پیتر لندن در سال ۱۹۶۵ ذکر شده‌است A Correspondence between ALGOL 60 and Lambda-notation کلیسا، زبان برنامه‌نویسی رویه‌های
Lambda-notation کلیسا، زبان برنامه‌نویسی رویه‌های متوالی را می‌توان از طریق محاسبات لامبدا، که مکانیسم اولیه برای انتزاع رویه و برنامه (زیر برنامه) کاربرد را فراهم می‌کند. توابع ناشناس به عنوان مثال، در Lisp تابع 'مربع' می‌تواند به صورت بیان lambda به صورت زیر بیان شود: مثال فوق یک عبارت است که به یک تابع کلاس اول ارزیابی می‌شود. نماد lambda تابع ناشناس ایجاد می‌کند، با توجه به لیستی از نام‌های پارامتر، (x) - فقط یک آرگومان در این مورد و یک عبارت است که به عنوان بدن تابع (* x x) ارزیابی می‌شود. توابع
به عنوان بدن تابع (* x x) ارزیابی می‌شود. توابع ناشناس گاهی اوقات عبارات لامبدا نامیده می‌شود. به عنوان مثال، پاسکال و بسیاری از زبان‌های ضروری دیگر، از طریق مکانیزم اشاره گرهای عملکرد، مدت زمان پشتیبانی از زیر برنامه‌ها را به عنوان استدلال برای دیگر برنامه‌های زیر پشتیبانی می‌کنند. با این حال، دستورالعمل‌های تابع شرایط کافی برای توابع به عنوان نوع داده‌های کلاس اول نیستند، زیرا یک تابع نوع داده کلاس اول است اگر و تنها اگر نمونه‌های جدیدی از تابع در زمان اجرا ایجاد شود؛ و این ایجاد زمان اجرای توابع در
اجرا ایجاد شود؛ و این ایجاد زمان اجرای توابع در Smalltalk، جاوا اسکریپت، و اخیراً در Scala, Eiffel ("عوامل")، C # ("نمایندگان") و C ++ 11 در میان دیگر پشتیبانی می‌شود. استراتژی کاهش برای جزئیات بیشتر در مورد این موضوع، به استراتژی ارزیابی مراجعه کنید. این که آیا یک اصطلاح عادی است یا خیر، و چه مقدار کار باید انجام شود در عادی‌سازی آن، در صورت وجود، به شدت به استراتژی کاهش استفاده بستگی دارد. تمایز بین استراتژی‌های کاهش شامل تمایز در زبان‌های برنامه‌نویسی کاربردی بین ارزیابی مشتاق و ارزیابی تنبل است. کاهش
بین ارزیابی مشتاق و ارزیابی تنبل است. کاهش بتا کامل هر گونه بازدهی می‌تواند در هر زمان کاهش یابد. این بدان معنی است که اساساً فقدان استراتژی کاهش خاص، با توجه به کاهش پذیری، «تمام شرط‌ها خاموش است». سفارش کاربردی راست‌ترین، بازخورد بیرونی همیشه اولین بار کاهش می‌یابد. به‌طور مستقیم این به این معنی است که استدلال‌های تابع همیشه قبل از تابع خود کاهش می‌یابد. دستور Applicatory همیشه تلاش می‌کند تا توابع را به فرم‌های معمول اعمال کند، حتی اگر این امکان‌پذیر نباشد. اکثر زبان‌های برنامه‌نویسی (از جمله Lisp, ML و
اکثر زبان‌های برنامه‌نویسی (از جمله Lisp, ML و زبان‌های ضروری مانند C و Java) به عنوان «سخت» توصیف می‌شوند، به این معنی که توابع اعمال شده به استدلال‌های غیرعادی غیرطبیعی هستند. این کار اساساً با استفاده از نظم اعمال انجام می‌شود، با کاهش ارزش تماس بگیرید (نگاه کنید به زیر)، اما معمولاً «ارزیابی مشتاق» نامیده می‌شود. سفارش عادی اولیای چپ و راست، خارج از محدوده همیشه اول کاهش می‌یابد. به عبارت دیگر، هر گاه استدلال‌ها قبل از اینکه استدلال‌ها کاهش یابد، به انتزاعی تعویض می‌شوند. تماس با نام به عنوان منظور
انتزاعی تعویض می‌شوند. تماس با نام به عنوان منظور عادی، اما در انتساب‌ها هیچ کاهشی انجام نمی‌شود. به عنوان مثال، λx (λx.x) x طبق این استراتژی در فرم عادی است، هرچند که حاوی redex (λx.x) x می‌باشد. با ارزش تماس بگیرید فقط بازخوانی‌های خارج از محدوده کاهش می‌یابد: یک مقدار بازده کاهش می‌یابد تنها زمانی که سمت راست آن به یک مقدار کاهش می‌یابد (انتزاعی متغیر یا لامبدا). با نیاز تماس بگیرید به عنوان مثال عادی، اما عملکرد برنامه‌های کاربردی که اصطلاحات را تکرار می‌کنند، به جای آن آرگومان نامیده می‌شود، که پس از
به جای آن آرگومان نامیده می‌شود، که پس از آن فقط «هنگامی که لازم است» کاهش می‌یابد. در زمینه‌های عملی «ارزیابی تنبل» نامیده می‌شود. در پیاده‌سازی این «نام» به صورت یک اشاره گر به دست می‌آید، با استفاده از redex توسط Thunk نشان داده می‌شود. منظور کاربردی یک استراتژی عادی نیست. مثال نمونه معمولی به شرح زیر است: تعریف Ω = ωω که در آن ω = λx.xx. این کل عبارت شامل تنها یک redex است یعنی کل عبارت؛ کاهش آن دوباره Ω است. از آنجا که این تنها کاهش موجود است، Ω دارای فرم عادی نیست (تحت هر استراتژی ارزیابی). با
دارای فرم عادی نیست (تحت هر استراتژی ارزیابی). با استفاده از نظم اعمال، بیان KIΩ = (λx. λy.x) (λx.x) Ω توسط اولین کاهش از Ω به شکل عادی کاهش می‌یابد (از آنجایی که آن مجذور راست‌ترین است)، اما از آنجا که Ω دارای فرم عادی نیست، نظم اعمال ناکافی است برای پیدا کردن یک فرم عادی برای KIΩ. در مقابل، نظم طبیعی به اصطلاح نامیده می‌شود، زیرا اگر همیشه وجود داشته باشد، همیشه یک کاهش نرمال پیدا می‌کند. در مثال بالا، KIΩ طبق معمول به I، یک فرم عادی کاهش می‌یابد. یک نقص این است که بازنگری در استدلال ممکن است کپی شود و
این است که بازنگری در استدلال ممکن است کپی شود و نتیجه محاسبات تکراری (به عنوان مثال (λx.xx) ((λx.x) y) به ((λx.x) y) ((λx.x) y) با استفاده از این استراتژی؛ در حال حاضر دو بازخوانی وجود دارد، بنابراین ارزیابی کامل نیاز به دو مرحله دارد، اما اگر این استدلال ابتدا کاهش یافته باشد، در حال حاضر هیچ‌کدام وجود ندارد). معامله مثبت استفاده از دستور applicative این است که اگر همه استدلال‌ها مورد استفاده قرار گیرد، محاسبات غیرضروری را ایجاد نمی‌کند، زیرا هرگز استدلال‌هایی را که حاوی redexes است جایگزین نمی‌کند و
را که حاوی redexes است جایگزین نمی‌کند و بنابراین هرگز نیازی به کپی کردن آن‌ها نیست (که کار را کپی می‌کند). در مثال فوق، در برنامه کاربردی (λx.xx) ((λx.x) y) ابتدا به (λx.xx) y و سپس به حالت عادی yy کاهش می‌یابد، و به جای آن سه مرحله را می‌گیرد. بیشتر زبان‌های برنامه‌نویسی کاملاً کاربردی (به ویژه میراندا و نسل‌های آن، از جمله Haskell) و زبان‌های اثبات شده از قضیه‌های پیشین، از ارزیابی تنبل استفاده می‌کنند که اساساً همان چیزی است که نیاز به نیاز دارد. این همانند کاهش نظم طبیعی است، اما نیاز به مدیریت می‌شود
کاهش نظم طبیعی است، اما نیاز به مدیریت می‌شود تا از تقسیم کار ذاتی در کاهش سفارش معمول با استفاده از اشتراک استفاده شود. در مثال فوق داده شده (λx.xx) ((λx.x) y) به ((λx.x) y) ((λx.x) y) کاهش می‌یابد، که دارای دو بازخوانی است، اما در تماس با نیاز، آن‌ها نماینده با استفاده از همان شیء به جای کپی، بنابراین هنگامی که یکی کاهش می‌یابد دیگر نیز است. یک یادداشت در مورد پیچیدگی در حالی که ایده کاهش بتا به اندازه کافی ساده به نظر می‌رسد، این یک گام اتمی نیست، در حالی که هنگام تخمینی پیچیدگی محاسباتی باید هزینه‌ای
که هنگام تخمینی پیچیدگی محاسباتی باید هزینه‌ای بی‌اهمیت داشته باشد. برای دقیق بودن، باید مکان‌یابی هر رخداد متغیر محدود V را در عبارت E پیدا کرد، یعنی یک هزینه زمانی، یا باید مسیری را از این مکان‌ها به نحوی پیگیری کرد، یعنی یک هزینه فضایی است. جستجوی ساده‌ای برای مکان‌های V در E برابر O (n) در طول n از E. این منجر به مطالعه سیستم‌هایی که از جایگزینی صریح استفاده می‌کنند. رشته‌های مدیر سینو، راهی برای ردیابی مکان‌های آزاد متغیر در عبارات ارائه می‌دهد. همزمان‌سازی و هم‌زمان سازی اموال church-rosser از