Լամբդայի հաշվարկ. թեորեմի նկարագրություն, առանձնահատկություններ, օրինակներ

Լամբդայի հաշվարկ. թեորեմի նկարագրություն, առանձնահատկություններ, օրինակներ
Լամբդայի հաշվարկ. թեորեմի նկարագրություն, առանձնահատկություններ, օրինակներ
Anonim

Լամբդա հաշվարկը մաթեմատիկական տրամաբանության ֆորմալ համակարգ է՝ աբստրակցիայի վրա հիմնված հաշվարկներն արտահայտելու և ֆունկցիաները կիրառելու համար՝ օգտագործելով կապող և փոփոխական փոխարինում: Սա ունիվերսալ մոդել է, որը կարող է կիրառվել ցանկացած Turing մեքենայի նախագծման համար: Լամբդա հաշվարկն առաջին անգամ ներդրվել է հայտնի մաթեմատիկոս Չերչի կողմից 1930-ականներին:

Համակարգը բաղկացած է լամբդա անդամներ կառուցելուց և դրանց վրա կրճատման գործողություններ կատարելուց:

Բացատրություններ և կիրառություններ

լամբդա հաշվարկի լուծում
լամբդա հաշվարկի լուծում

Հունարեն լամբդա (λ) տառը օգտագործվում է լամբդա արտահայտություններում և լամբդա տերմիններում՝ ֆունկցիայի մեջ փոփոխականի կապակցումը նշելու համար:

Լամբդայի հաշվարկը կարող է լինել անտիպ կամ տպագրված: Առաջին տարբերակում գործառույթները կարող են օգտագործվել միայն այն դեպքում, եթե դրանք ի վիճակի են ստանալ այս տեսակի տվյալներ: Տպված լամբդա հաշվարկներն ավելի թույլ են, կարող են ավելի փոքր արժեք արտահայտել: Բայց, մյուս կողմից, նրանք թույլ են տալիս ապացուցել ավելի շատ բաներ:

Այդքան տարբեր տեսակների գոյության պատճառներից մեկն այն է, որ գիտնականների ցանկությունն է ավելին անել՝ չհրաժարվելով լամբդա հաշվարկի ուժեղ թեորեմներն ապացուցելու հնարավորությունից:

Համակարգն ունի կիրառություն մաթեմատիկայի, փիլիսոփայության, լեզվաբանության և համակարգչային գիտության տարբեր ոլորտներում: Նախ, լամբդա հաշվարկը հաշվարկ է, որը կարևոր դեր է խաղացել ծրագրավորման լեզուների տեսության զարգացման գործում։ Հենց ֆունկցիոնալ ստեղծման ոճերն են իրականացնում համակարգերը: Դրանք նաև հետազոտության թեժ թեմա են այս կատեգորիաների տեսության մեջ:

Դիմերի համար

Լամբդայի հաշվարկը ներդրվել է մաթեմատիկոս Ալոնզո Չերչի կողմից 1930-ականներին՝ որպես գիտության հիմունքների իր հետազոտության մի մաս: Պարզվեց, որ սկզբնական համակարգը տրամաբանորեն անհամապատասխան է 1935 թվականին, երբ Սթիվեն Քլինը և Ջ. Բ. Ռոսսերը մշակեցին Քլին-Ռոսեր պարադոքսը:

Ավելի ուշ՝ 1936 թվականին, Չերչը առանձնացրեց և հրապարակեց միայն այն մասը, որը վերաբերում է հաշվարկներին, այն, ինչ այժմ կոչվում է անտիպ լամբդա հաշվարկ: 1940 թվականին նա նաև ներկայացրեց ավելի թույլ, բայց տրամաբանորեն հետևողական տեսություն, որը հայտնի է որպես պարզ տիպի համակարգ։ Իր աշխատության մեջ նա բացատրում է ամբողջ տեսությունը պարզ բառերով, ուստի կարելի է ասել, որ Չերչը հրապարակել է լամբդա հաշվարկը կեղծիքների համար։

Մինչև 1960-ականները, երբ նրա կապը ծրագրավորման լեզուների հետ պարզ դարձավ, λ-ն ընդամենը ֆորմալիզմ էր: Բնական լեզվի իմաստաբանության մեջ Ռիչարդ Մոնթագուի և այլ լեզվաբանների կիրառությունների շնորհիվ հաշվարկը հպարտորեն տեղ է գրավել ինչպես լեզվաբանության, այնպես էլ համակարգչային գիտության մեջ:

Սիմվոլի ծագումը

լամբդա հաշվարկ
լամբդա հաշվարկ

Լամբդան չի նշանակում բառ կամ հապավում, այն գալիս է Ռասելի Հիմնական մաթեմատիկայի հղումից, որին հաջորդում են երկու տպագրական փոփոխություններ: Նշման օրինակ. f (y)=2y + 1 ֆունկցիայի համար 2ŷ + 1 է: Եվ այստեղ մենք օգտագործում ենք մակագրություն («գլխարկ») y-ի վրա՝ մուտքային փոփոխականը պիտակավորելու համար:

Եկեղեցին ի սկզբանե մտադիր էր օգտագործել նմանատիպ խորհրդանիշներ, սակայն գրամեքենաները չեն կարողացել «գլխարկ» նշանը դնել տառերի վերևում: Այսպիսով, փոխարենը նրանք տպեցին այն սկզբնապես որպես «/\y.2y+1»: Խմբագրման հաջորդ դրվագում մեքենագրողները «/ \»-ը փոխարինեցին տեսողականորեն նման գրանշանով։

Ներածություն լամբդայի հաշվարկին

լուծման օրինակներ
լուծման օրինակներ

Համակարգը բաղկացած է տերմինների լեզվից, որոնք ընտրվում են որոշակի ֆորմալ շարահյուսությամբ, և փոխակերպման կանոնների մի շարք, որոնք թույլ են տալիս դրանք շահարկել: Վերջին կետը կարելի է համարել որպես հավասարման տեսություն կամ որպես գործառնական սահմանում։

Լամբդա հաշվարկի բոլոր ֆունկցիաները անանուն են, այսինքն՝ անուններ չունեն: Նրանք վերցնում են միայն մեկ մուտքային փոփոխական, և currying-ն օգտագործվում է բազմաթիվ փոփոխականներով սյուժեներ իրականացնելու համար:

Լամբդայի պայմաններ

Հաշվի շարահյուսությունը որոշ արտահայտություններ սահմանում է որպես վավեր, իսկ մյուսները՝ անվավեր: Ճիշտ այնպես, ինչպես նիշերի տարբեր տողերը վավեր C ծրագրեր են, իսկ որոշները՝ ոչ: Լամբդա հաշվարկի իրական արտահայտությունը կոչվում է «լամբդա տերմին»:

Հետևյալ երեք կանոնները տալիս են ինդուկտիվ սահմանում, որը կարող է լինելկիրառել բոլոր շարահյուսական վավերական հասկացությունների կառուցման համար՝

X փոփոխականն ինքնին վավեր լամբդա տերմին է.

  • եթե T-ը LT է, իսկ x-ը՝ ոչ հաստատուն, ապա (lambda xt) կոչվում է աբստրակցիա։
  • եթե T-ը, ինչպես նաև s-ը հասկացություններ են, ապա (TS) կոչվում է հավելված:

Ուրիշ ոչինչ լամբդա տերմին չէ: Այսպիսով, հայեցակարգը վավեր է, եթե և միայն այն դեպքում, եթե այն կարելի է ձեռք բերել այս երեք կանոնների կրկնակի կիրառմամբ: Այնուամենայնիվ, որոշ փակագծեր կարող են բաց թողնել այլ չափանիշների համաձայն:

Սահմանում

լամբդա հաշվարկի օրինակներ
լամբդա հաշվարկի օրինակներ

Լամբդա արտահայտությունները բաղկացած են՝

  • փոփոխականներ v 1, v 2, …, v n, …
  • աբստրակցիայի «λ» և «կետ» խորհրդանիշները։'
  • փակագծեր ().

Լ բազմությունը կարող է սահմանվել ինդուկտիվ կերպով՝

  • Եթե x-ը փոփոխական է, ապա x ∈ Λ;
  • x-ը հաստատուն չէ և M ∈ Λ, ապա (λx. M) ∈ Λ;
  • M, N ∈ Λ, ապա (MN) ∈ Լ.

Նշանակում

Լամբդա արտահայտությունների նշումն անխռով պահելու համար սովորաբար օգտագործվում են հետևյալ պայմանականությունները.

  • Արտաքին փակագծերը բաց են թողնվել. MN փոխարեն (MN):
  • Ենթադրվում է, որ հայտերը մնում են ասոցիատիվ. կարելի է գրել MNP ((MN) P-ի փոխարեն):
  • Աբստրակցիայի մարմինը ձգվում է ավելի աջ. λx. MN նշանակում է λx: (MN), ոչ (λx. M) N.
  • Աբստրակցիաների հաջորդականությունը կրճատվում է. λx.λy.λz. N կարող է լինել λxyz. N.

Ազատ և սահմանափակ փոփոխականներ

Լ օպերատորը միացնում է իր ոչ հաստատունը, որտեղ էլ որ այն գտնվում է աբստրակցիայի մարմնում: Փոփոխականները, որոնք մտնում են շրջանակի մեջ, կոչվում են կապված: λ x արտահայտության մեջ. M, λ x մասը հաճախ կոչվում է կապող: Կարծես ակնարկելով, որ փոփոխականները դառնում են խումբ՝ X x-ի ավելացումով M-ին: Բոլոր մյուս անկայունները կոչվում են ազատ:

Օրինակ, λ y արտահայտության մեջ. x x y, y - կապված ոչ մշտական, իսկ x - անվճար: Եվ հարկ է նաև նշել, որ փոփոխականը խմբավորված է իր «մոտակա» վերացականությամբ: Հետևյալ օրինակում լամբդա հաշվարկի լուծումը ներկայացված է x-ի մեկ երևույթով, որը կապված է երկրորդ անդամի հետ.

λ x. y (λ x. z x)

Ազատ փոփոխականների բազմությունը M նշվում է որպես FV (M) և սահմանվում է ռեկուրսիայով տերմինների կառուցվածքի վրա հետևյալ կերպ.

  • FV (x)={x}, որտեղ x-ը փոփոխական է:
  • FV (λx. M)=FV (M) {x}.
  • FV (MN)=FV (M) ∪ FV (N).

Բանաձևը, որը չի պարունակում ազատ փոփոխականներ, կոչվում է փակ: Փակ լամբդա արտահայտությունները հայտնի են նաև որպես կոմբինատորներ և համարժեք են կոմբինատոր տրամաբանության տերմիններին:

Հապավում

Լամբդա արտահայտությունների նշանակությունը որոշվում է նրանով, թե ինչպես կարող են դրանք կրճատվել:

Կա երեք տեսակի կրճատումներ.

  • α-տրանսֆորմ. փոփոխվող սահմանափակ փոփոխականները (ալֆա).
  • β-կրճատում. գործառույթների կիրառում իրենց արգումենտներին (բետա):
  • η-տրանսֆորմ. ընդգրկում է ընդարձակման հասկացությունը:

Ահա և այնմենք խոսում ենք ստացված համարժեքների մասին. երկու արտահայտությունները β-համարժեք են, եթե դրանք կարող են β-փոխակերպվել նույն բաղադրիչի, և α/η-համարժեքությունը սահմանվում է նույն կերպ:

Ռեդեքս տերմինը, որը կրճատված է կրճատվող շրջանառություն, վերաբերում է ենթաթեմաներին, որոնք կարող են կրճատվել կանոններից մեկով: Լամբդայի հաշվարկ կեղծիքների համար, օրինակներ՝

(λ x. M) N-ը բետա-redex է M-ում N-ով x-ով փոխարինելու արտահայտության մեջ: Բաղադրիչը, որին կրճատվում է ռեդեքսը, կոչվում է դրա կրճատում: Կրճատումը (λ x. M) N-ը M է [x:=N]:

Եթե x-ը M-ում ազատ չէ, λ x: M x նաև em-REDEX կարգավորիչով M.

α-փոխակերպում

Ալֆա վերանվանումները թույլ են տալիս փոխել կապված փոփոխականների անունները: Օրինակ, x. x-ը կարող է տալ λ y: y. Այն տերմինները, որոնք տարբերվում են միայն ալֆա փոխակերպմամբ, ասում են, որ α-համարժեք են: Հաճախ, երբ օգտագործվում է լամբդա հաշվարկը, α-համարժեքները համարվում են փոխադարձ:

Ալֆա փոխակերպման ճշգրիտ կանոնները բոլորովին չնչին չեն: Նախ, այս աբստրակցիայով վերանվանվում են միայն այն փոփոխականները, որոնք կապված են նույն համակարգի հետ։ Օրինակ, ալֆա փոխակերպումը λ x.λ x. x-ը կարող է հանգեցնել λ y.λ x. x, բայց դա կարող է չհանգեցնել λy.λx.y-ին: Վերջինս ունի տարբեր նշանակություն, քան բնօրինակը: Սա նման է փոփոխական ստվերային ծրագրավորման հայեցակարգին:

Երկրորդ, ալֆա փոխակերպումը հնարավոր չէ, եթե այն կհանգեցնի ոչ մշտական այլ աբստրակցիային: Օրինակ, եթե x-ը փոխարինեք y-ով λ x.λ y-ում: x, ապա կարող եք ստանալλy.λy. u, որն ամենևին էլ նույնը չէ։

Ստատիկ տիրույթով ծրագրավորման լեզուներում ալֆա փոխակերպումը կարող է օգտագործվել անվանման լուծումը պարզեցնելու համար: Միևնույն ժամանակ, հոգ տանելով, որ փոփոխականի հայեցակարգը չքողարկի նշումը պարունակող տարածքում:

Դե Բրույնեի ինդեքսի նշումներում ցանկացած երկու ալֆա-համարժեք տերմիններ շարահյուսորեն նույնական են:

Փոխարինում

E [V:=R]-ով գրված փոփոխությունները E արտահայտության մեջ V փոփոխականի բոլոր ազատ երևույթները փոխարինելու գործընթացն են R շրջանառությամբ: λ-ով փոխարինումը սահմանվում է ռեկուրսիայի լամբդայով: Հայեցակարգի կառուցվածքի հաշվարկը հետևյալ կերպ (նշում. x և y - միայն փոփոխականներ, և M և N - ցանկացած λ-արտահայտություն):

x [x:=N] ≡ N

y [x:=N] ≡ y, եթե x ≠ y

(M 1 M 2) [x:=N] ≡ (M 1 [x:=N]) (M 2 [x:=N])

(λ x. M) [x:=N] ≡ λ x. M

(λ y. M) [x:=N] y λ y. (M [x:=N]), եթե x ≠ y, պայմանով, որ y ∉ FV (N).

Լամբդա աբստրակցիայի փոխարինման համար երբեմն անհրաժեշտ է α-փոխակերպել արտահայտությունը: Օրինակ, ճիշտ չէ, որ (λ x. Y) [y:=x] հանգեցնում է (λ x. X), որովհետև փոխարինված x-ը պետք է ազատ լիներ, բայց ի վերջո կապված լիներ: Ճիշտ փոխարինումն այս դեպքում (λ z. X) է մինչև α-համարժեքը։ Նկատի ունեցեք, որ փոխարինումը եզակիորեն սահմանված է մինչև լամբդա:

β-կրճատում

Բետա կրճատումն արտացոլում է գործառույթ կիրառելու գաղափարը: Բետա-նվազեցնողը սահմանվում է տերմիններովփոխարինում. ((X V. E) E ') E [V:=E'] է:

Օրինակ, ենթադրելով որոշ կոդավորում 2, 7, ×, կա հետևյալ β-կրճատումը. ((λ n. N × 2) 7) → 7 × 2.

Բետա կրճատումը կարելի է համարել նույնը, ինչ տեղային կրճատելիության հայեցակարգը բնական դեդուկցիայի միջոցով Քարի-Հովարդի իզոմորֆիզմի միջոցով:

η-փոխակերպում

լամբդա առաջադրանքների օրինակներ
լամբդա առաջադրանքների օրինակներ

Այս փոխարկումն արտահայտում է ընդարձակման գաղափարը, որն այս համատեքստում այն է, որ երկու ֆունկցիաները հավասար են, երբ բոլոր արգումենտների համար տալիս են նույն արդյունքը: Այս փոխակերպումը փոխանակվում է λ x-ի միջև: (F x) և f, երբ x-ն ազատ չի թվում f-ում։

Այս գործողությունը կարելի է համարել նույնը, ինչ տեղային ամբողջականության հայեցակարգը բնական դեդուկցիայում Քարի-Հովարդի իզոմորֆիզմի միջոցով:

Նորմալ ձևեր և միաձուլում

Անտիպ լամբդա հաշվարկի համար β-կրճատման կանոնը սովորաբար ոչ ուժեղ է, ոչ էլ թույլ նորմալացնող:

Այնուամենայնիվ, կարելի է ցույց տալ, որ β-կրճատումը միաձուլվում է α-փոխակերպումից առաջ գործելու ժամանակ (այսինքն, երկու նորմալ ձևերը կարող են հավասար համարվել, եթե հնարավոր է α-վերափոխումը մեկից մյուսը):

Հետևաբար, և՛ խիստ նորմալացնող, և՛ թույլ ճշգրտվող տերմինները ունեն մեկ նորմալ ձև: Առաջին տերմինների համար ցանկացած կրճատման ռազմավարություն երաշխավորված է տիպիկ կոնֆիգուրացիայի արդյունքում: Մինչդեռ թույլ նորմալացնող պայմանների դեպքում որոշ նվազեցման ռազմավարություններ կարող են դա չգտնել:

ծրագրավորման լրացուցիչ մեթոդներ

լամբդա լուծումների տեսակները
լամբդա լուծումների տեսակները

Լամբդա հաշվարկի համար ստեղծման շատ արտահայտություններ կան: Դրանցից շատերն ի սկզբանե մշակվել են համակարգերը որպես ծրագրավորման լեզվի իմաստաբանության հիմք օգտագործելու համատեքստում՝ դրանք արդյունավետորեն կիրառելով որպես ցածր մակարդակի կառուցվածք: Քանի որ որոշ ոճեր ներառում են լամբդա հաշվարկ (կամ շատ նման մի բան) որպես հատված, այս տեխնիկան նաև օգտագործվում է գործնական ստեղծման մեջ, բայց այնուհետև կարող է ընկալվել որպես անհասկանալի կամ օտար:

Անվանված հաստատուններ

Լամբդա հաշվարկում գրադարանը ստանում է նախկինում սահմանված ֆունկցիաների մի շարք, որտեղ տերմինները պարզապես կոնկրետ հաստատուններ են: Մաքուր հաշվարկը չունի անվանված անփոփոխների հասկացություն, քանի որ ատոմային լամբդա բոլոր տերմինները փոփոխականներ են: Բայց դրանք կարող են նաև ընդօրինակվել՝ ընդունելով փոփոխականը որպես հաստատունի անուն, օգտագործելով լամբդա աբստրակցիան՝ կապելու այդ ցնդող նյութը մարմնում և կիրառելով այդ աբստրակցիան նախատեսված սահմանմանը: Այսպիսով, եթե դուք օգտագործում եք f-ը՝ M-ը N-ում ներկայացնելու համար, կարող եք ասել

(λ f. N) M.

Հեղինակները հաճախ ներկայացնում են շարահյուսական հասկացություն, ինչպիսին է թույլ տալ, որպեսզի իրերը գրվեն ավելի ինտուիտիվ ձևով:

f=M-ից N

Շղթայելով նման սահմանումները՝ կարելի է գրել լամբդա հաշվարկի «ծրագիր» որպես զրոյական կամ ավելի ֆունկցիայի սահմանումներ, որին հաջորդում են մեկ լամբդա անդամ՝ օգտագործելով այն սահմանումները, որոնք կազմում են ծրագրի մեծ մասը:

Սրա ուշագրավ սահմանափակումն այն է, որ f անունը սահմանված չէ M-ում,քանի որ M-ը դուրս է լամբդա աբստրակցիայի պարտադիր շրջանակից f. Սա նշանակում է, որ ռեկուրսիվ ֆունկցիայի հատկանիշը չի կարող օգտագործվել որպես M let-ով: Ավելի առաջադեմ letrec շարահյուսությունը, որը թույլ է տալիս գրել ռեկուրսիվ ֆունկցիայի սահմանումներ այս ոճով, փոխարենը լրացուցիչ օգտագործում է ֆիքսված կետի կոմբինատորներ:

Տպագիր անալոգներ

լամբդա լուծումներ
լամբդա լուծումներ

Այս տեսակը տպագրված ֆորմալիզմ է, որն օգտագործում է խորհրդանիշ՝ անանուն ֆունկցիայի աբստրակցիան ներկայացնելու համար: Այս համատեքստում տիպերը սովորաբար շարահյուսական բնույթի օբյեկտներ են, որոնք վերագրվում են լամբդա տերմիններին։ Ճշգրիտ բնույթը կախված է խնդրո առարկա հաշվարկից: Որոշակի տեսանկյունից տպագրված LI-ն կարելի է համարել որպես անտիպ LI-ի ճշգրտումներ։ Բայց մյուս կողմից, դրանք կարող են նաև համարվել ավելի հիմնարար տեսություն, և անտիպ լամբդա հաշվարկը հատուկ դեպք է միայն մեկ տիպով:

Typed LI-ն ծրագրավորման լեզուների հիմքն է և ֆունկցիոնալ լեզուների հիմքը, ինչպիսիք են ML-ը և Haskell-ը: Եվ, ավելի անուղղակիորեն, ստեղծագործության հրամայական ոճերը: Տպված լամբդա հաշվարկները կարևոր դեր են խաղում ծրագրավորման լեզուների տիպային համակարգերի մշակման գործում: Այստեղ տպագրելիությունը սովորաբար գրավում է ծրագրի ցանկալի հատկությունները, օրինակ՝ այն չի առաջացնի հիշողության հասանելիության խախտում:

Տիպված լամբդա հաշվարկները սերտորեն կապված են մաթեմատիկական տրամաբանության և ապացույցների տեսության հետ Քարի-Հովարդի իզոմորֆիզմի միջոցով և կարող են ընկալվել որպես կատեգորիաների դասերի ներքին լեզու, օրինակ, որըպարզապես դեկարտյան փակումների ոճն է։

Խորհուրդ ենք տալիս: