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

Բովանդակություն:

Լամբդայի հաշվարկ. թեորեմի նկարագրություն, առանձնահատկություններ, օրինակներ
Լամբդայի հաշվարկ. թեորեմի նկարագրություն, առանձնահատկություններ, օրինակներ
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-ը: Եվ, ավելի անուղղակիորեն, ստեղծագործության հրամայական ոճերը: Տպված լամբդա հաշվարկները կարևոր դեր են խաղում ծրագրավորման լեզուների տիպային համակարգերի մշակման գործում: Այստեղ տպագրելիությունը սովորաբար գրավում է ծրագրի ցանկալի հատկությունները, օրինակ՝ այն չի առաջացնի հիշողության հասանելիության խախտում:

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

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