From Wikipedia, the free encyclopedia
Ламбда рачун (ознака λ-рачун) је формални систем у математичкој логици за представљање рачунања базираног на апстракцији функција и апликација користећи везивање и супституцију променљиве. Увео га је Алонзо Черч да формулише концепт ефективног рачунања, ламбда рачун је наишо на прве успехе на пољу теорије рачунања, као што је негативан одговор на Хилбертов проблем одлуке. Ламбда рачун је концептуално једноставан универзални модел рачунања (Тјуринг је показао 1937. године[1] да Тјурингова машина једнака ламбда рачуну у експресивности). Име потиче од грчког слова ламбда (λ) коришћеног да означи везивање променљивих у функцији. Слово је само по себи произвољно и нема никакво специјално значење. Ламбда рачун се учи и користи у рачунарству због своје корисности у приказивању функционалног размишљања и итеративне редукције.[2]
Због важности појма везивања променљиве и субституције, не постоји само један систем ламбда рачуна, и у пракси постоје "типске" и "нетипске" варијанте. Историјски гледано, најважнији систем је био нетипски ламбда рачун, у којем функција апликације нема рестрикција (појам домена функције није уграђен у систем. У Черч-Тјуринговој тези, нетипски ламбда рачун је подешен да буде могуће израчунати све ефективно израчуниве функције. Типски ламбда рачун је варијација која има рестрикције за функцију апликације, тако да се функција може применити само ако се прихвати улазни тип података.
Данас, ламбда рачун има улогу у много различитих свера, као нпр. у математици, филозофији,[3] лингвистици,[4][5] и рачунарству. Још увек се користи у области теорије рачунања, као и Тјурингова машина која је врло важан модел за рачунање. Ламбда рачун је одиграо веома важну улоу у развоју теорије програмских језика. Делови бројача, у ламбда рачуну у рачунарству, су функционални програми, који имплементирају ламбда рачун (повећати неке константе и типове података). Поред програмских језика, лабмда рачун игра улогу у теорији доказа. Главни пример тога је Кари-Хауардова кореспонденција, која даје кореспонденцију између различитих система типова ламбда рачуна и система формалне логике.
Ламбда рачун је увео Алонзо Черч у 1930—им годинама као део истраге о основама математике.[6][7] Оригинални систем је показан као логички противречан 1935. године када су Стивен Клин и Ј. Б. Росер развили Клин-Росеров парадокс.
Након тога, у 1936. години, Черч је изоловао и објавио само део битан за рачунање, који се данас зове нетипски ламбда рачун.[8] У 1940. години, он је такође увео рачунски слабији, али логички доследнији систем, знан као једноставни типски ламбда рачун.[9]
Рачунске функције представљају круцијалан концепт у рачунарству и математици. Ламбда рачун даје једноставу семантику за израчунавање, омогућавајући особине израчунавања да буду формално учене. Ламбда рачун укључује два упрошћавања која чине семантику једноставном. Прво поједностављење је то да Ламбда рачун третира функцију "анонимно", без давања експлицитних имена. На пример, функција
може се поново написати у анонимној форми као
(чита се као "пар x и y је мапиран у "). Слично,
се може написати у анонимној форми , где је улаз једноставно мапиран у самог себе
Друго поједностављење је то да ламбда рачун користи само функције једног улаза. Обична функција која захтева два улаза , за инстанцу (збир квадрата) функције, може се написати као једна еквивалентна функција која прима један улаз, а да излаз враћа другу функцију, која заузврат прима један улаз. На пример,
се може написати као
Ова метода, позната и као кариинг, трансформише функцију која узима више аргумената у ланац функција, где свака има један аргумент.
Функционално окружење функције са аргументима (5, 2), добијено одједном
док процена каријеве верзије захтева још један корак
добија се исти резултат.
Ламбда рачун се састоји од програма ламбда услова, који су дефинисани одређеном формалном синтаксом, и сетом трансформацијских правила, који допуштају манипулацију ламбда услова. Ова трансформацијска правила се могу представити као еквивалентна теорија или као операционализам.
Као што је већ описано, све функције у ламбда рачуну су у ствари анонимне функције, тј. немају име. Дозвољавају само једну улазну променљиву, са каријевом верзијом да се убаце функције са неколико променљивих.
Синтакса ламбда рачуна дефинише неке изразе као дозвољене изразе ламбда рачуна и неке неважеће, као што су на пример стрингови који се састоје од карактера валидних C програма а неки ипак нису. Дозвољени израз ламбда рачуна се назива ламбда израз.
Следећа три правила дају индуктивну дефиницију која се могу искористити за прављење синтатички исправних ламбда изрази:
Ништа друго није ламбда услов. Ламбда услов је валидан ако и само ако се може добити применом ова три правила. Међутим, неке заграде могу бити изостављене у складу са неким правилима. На пример, спољашње заграде се обично не пишу.
Ламбда апстракција је дефиниција анонимне функције која може да узме један улаз и замени га у израз . На тај начин се дефинишу анонимне функције које узимају x а враћају t. На пример, је ламбда апстракција функције користећи израз за . Дефиниција функције са ламбда абрстракцијом само "поставља" функцију али је не уводи. Абрстракција везује променљиву у израз .
Апликација представља примену функције на улаз , који представља чин позива функције у односу на улаз да би се добио .
Не постоји концепт променљивих декларација у ламбда рачуну. У дефиницији као што је (i.e. ), ламбда рачун третира променљиву која још увек није дефинисана. Ламбда абрстракција је синтатички исправна, и представља функцију која додаје своје уносе за још увек непознату .
Заграде се могу користити тј. могу бити потребне неким изразима. На пример, and означава резиличите изразе (иако се случајно сређивањем добија исти резултат). Ево првог примера дефинисања функције која дефинише функцију и враћа резултат узимајући х из дечије-функције (примени функцију а затим врати), док други пример дефинише функцију која враћа функцију за било који улаз враћа његову вредност узете х (враћа функцију а онда је примени).
У ламбда рачуну, функције су узете да буду вредности прве класе, па тако функције могу бити коришћене као улази, или бити враћене као излази из других функција.
На пример, представља идентичну функцију, , а представља идентичну функцију примењену на . Дакле, представља константну функцију , функцију која увек враћа , без обзира на улаз. У ламбда рачуну, апликација функције се сматра лево-асоцијативном, што значи да значи .
Потоји неколико појмова "еквиваленције" и "редукције" која дозвољава ламбда изразима да буду "поједностављени" својим "еквивалентним" ламбда изразима.
Основна форма еквиваленције, дефинисана на основу ламбда услова . Она нам казује да партикулатан избор ограничене променљиве није битан. Инстанце, и су алфа-еквивалентни изрази, и представљају исте функције (идентичне функције). Изрази и нису алфа-еквивалентни, зато што нису ограничене ламбда апстракцијом. У доста случајева, обично се прво индетификују алфа-еквивалентни изрази.
Ове дефиниције су неопходне у одредђивању бета редукције.
Слободне променљиве су оне променљиве које нису ограничене лабда апстракцијом. Низ израза, који је сачињен од слободних променљивих, је дефинисан индуктивно:
На пример, ламбда израз представљен идентитетом нема слободне променљиве , али функција има једну слободну променљиву, .
Претпоставимо да су , и ламбда изрази а и да су променљиве. Ознака означава замену за у у маниру ухватити-избегнуто. Ово је дефинисано као:
На пример, , и .
Услов свежине (захтева да није у слободној променљивој ) је круцијалан у смислу да осигурава да замена не мења значење функција. На пример, замена је направљена тако да игнорише услов свежине: . Ова замена претвара константну функцију у идентитет уз помоћ измене.
Генерално, неуспех у успостављању услова свежине се може исправити уз помоћ алфа-преименовања са одговорајућом свежом променљивом. На пример, враћајући се назад на нашу тачну нотацију замене, у ламбда апстракција се може преименовати уз помоћ нове променљиве , да се добије , и значење функције је заштићено заменом.
Правило бета редукције каже да се редукује на израз . Ознака се користи да означи да се бета редукује до . На пример, за свако , . Ово значи да је стварно идентитет. Слично, , што показује да је константна функција.
Ламбда рачун се може представити као идеализовани функционални програм, као што је Хаскел или Стандард ML. Према томе, бета редукција одговара математичком кораку. Овај корак може бити поновљен у одговарајућој бета конверзији све док се не истроше све апликације. У нетипском ламбда рачуну, као што је овде показано, ова редукција се можда не би извршила. На пример, посматрати израз . Here . Израз се упрошћава у једној бета редукцији, а самим тим се процес редукције никада неће извршити.
Други аспект нетипског ламбда рачуна је та да не прави разлику између различитих дипова података. На пример, може се тражити да се напише функција која врши одређену операцију само на бројеве. Међутим, у нетипском ламбда рачуну, не постоји начин да се сачува функција од примењивања истинитосних вредонсти, стрингова или других објеката који нису бројеви.
Ламбда изрази се састоје од
Скуп ламбда израза, Λ, могу бити индуктивно дефинисани:
Инстанце правила 2 су познате као абрстракција а инстанце правила 3 су познате као апликације[10]
Да би се задржала ознака ламбда израза, обично се примењују следеће конвенције.
За апстракциони оператор, λ, се каже да везује своје променљиве кад год се појаве у телу апстракције. Променљиве које спадају у апстракцију су ограничене . Све остале су слободне. На пример, у пратећим изразима y је ограничена променљива а x слободна: λy.x x y. Такође се примећује да је променљива ограничена "најближом апстракцијом". У следећим примерима једно појављивање x у изразима је ограничено другим ламбда: λx.y (λx.z x)
Скуп слободних променљивих ламбда израза, М, је означен као FV(М) и дефинисан је рекурзијом структуре израза, као што је дато:
За изразе који не садрже слободне променљиве, каже се да су затворени. Затворени ламбда изрази су такође познати и као комбинације и еквивалентне су изразима у комбинаторичкој логици.
Значење ламбда израза је дефинисано према томе како ти изрази могу бити редуковани.[15]
Постоје три типа редукција:
Говорили смо такође о насталим једнакостима : два израза су β-еквивалентна, ако се могу β-конвертовати у исти израз, такође је и α/η-еквиваленција дефинисана слично.
Термин редекс, скраћеница од упростити израз, се односи на подтермине који могу бити редуковани уз помоћ једног редукционог праила. На пример, (λx.M) N је бета-редекс за изражавање замене N за x in M; ако x није слободно у M, λx.M x је ета-редекс. Израз где се примењује редекс редукција; користећи претходни пример, упросшћава дате редом дате изразе M[x:=N]и M.
Алфа-конверзија, позната и као алфа-преименовање,[16] дозвољава промену имена ограниченим променљивим. На пример, алфа-конверзија λx.x гласи λy.y. Изрази који се разликују само по алфа-конверзији се називају а-еквивалентно. Често, у коришћењу ламбда рачуна, а-еквивалентни изрази се сматрају еквивалентним.
Прецизна правила за алфа-конверзију нису баш једноставна. Прво, када алфа-конвертује апстракцију, једина променљива која се појављује и која је преименована је та која је огранилена истом апстракцијом. На пример, алфа-конверзија λx.λx.x даје λy.λx.x, али не даје λy.λx.y. Овај други пример даје другачије значење од оригинала.
Друго, алфа-конверзија није могућа ако ће резултат бити променљива која је под контролом друге апстракције . На пример, ако заменимо x са y у λx.λy.x, добијамо λy.λy.y, што није исто.
У програмима који имају статичко језгро, алфа-конверзија се може користити да се направи име резолуције једноставније обезбеђујући да име променљиве маскира име у одговарајућем језгру (видети алфа преименовање да се направи тривијална резолуција
У Де Бружиновој индексној ознаци, било која два алфа-еквивалентна израза су идентична.
Замена, написана као E[V := R], је процес замене свих битнијих случајева променљиве V у изразу E са изразом R. Субституција израза λ-рачуна је дефинисана на основу рекурзије структура израза, као што је дато (приметити: x и y су једине променљиве док су M и N било који λ изрази).
x[x := N] ≡ N y[x := N] ≡ y, if x ≠ y (M1 M2)[x := N] ≡ (M1[x := N]) (M2[x := N]) (λx.M)[x := N] ≡ λx.M (λy.M)[x := N] ≡ λy.(M[x := N]), if x ≠ y, дефинисано y ∉ FV(N)
Да би се трансформисало у ламбда апстракцију, понекад треба α-конвертовати израз. На пример, није тачно да (λx.y)[y := x] даје (λx.x), зато што је замењена вредност x претпостављена да буде слободна али на крају и ограничена. Исправна замена у овом случају је (λz.x), све до α-еквиваленције. Приметити да је замена дефинисана уникатно до α-еквиваленције.
Бета-редукција памти идеју апликације функције. Бета-редукција је дефинисана у оквирима замене: бета-редукција од((λV.E) E′) је E[V := E′].
На пример, претпоставимо шивровање 2, 7, ×, имамо следећу β-редукцију: ((λn.n×2) 7) → 7×2.
Ета-конверзија изражава идеју екстензије, која се у овом контексту састоји од две фунције које су исте ако и само ако дају исти резултат за све аргументе . Ета-конверзија конвертује између λx.(f x) и f кад год се x не појављује слободно у f.
За нетипски ламбда рачун, β-редукција као повратно правило, нити нормализује снажно нити нормализује слабо
Међутим, може се показати да је β-редукција спојена. (Наравно, радимо до α-конверзије, тј. сматрамо да су две нормалне форме једнаке, ако је могуће да се α-конвертује дуално.)
Дакле, оба снажно нормализујућа израза и слабо нормализујућа израза имају уникатну нормалну форму. За снажне нормализујуће системе, било која редукциона стратегија гарантује позивање нормалне форме, док за слабо нормализујуће изразе, неке редукционе стратегије се можда неће извршити.
Основе ламбда рачуна се могу користити за истинитосне вредности, аритметику, структуре података и рекурзију, као што је илустровано у наредним подељцима.
Постоји неколико могућих начина да се дефинишу природни бројеви у ламбда рачуну, али у скоро већини случајева су Черчови бројеви, који се могу дефинисати као:
и тако даље. Или користити алтернативну синтаксу:
Черчова цифра је функција вишег реда—која узима једну функцију f, а враћа другу функцију. Черчов број n је функција која узима функцију f као аргумент и враћа n-ту композицију f, тј. функција f се позива сама n пута. Ово је означено са f(n) у односу n-ти степен f (сматрати оператором); f(0) је дефинисана да буде идентична функција. Такве поновљене композиције (једне функције f) поштују законе ескпоната, због којег ови бројеви могу бити коришћени у аритметици. (У Черчовом оригиналном ламбда рачуну, формални параметар ламбда израза је био морао да се појављује барем једном у телу функције, што чини ову дефиницију 0 немогућом)
Можемо дефинисати наслеђену функцију , која узима број n и враћа n + 1 додајући другу апликацију f, где '(mf)x' значи да је функција 'f' примењена 'm' пута на 'x':
Због m-тог члана f упоређујући га са n-тим чланом f даје m+n-ти члан f, додавања се могу дефинисати на следећи начин:
PLUS се може сматрати као функција која узима два природна броја као аргумента а враћа природан број; може се представити на следећи начин
и
су β-еквивалентни ламбда изрази. Додавање m броју n се може постићи додавањем 1 m пута, еквивалентна дефиниција је:
Слично томе, множење се дефинише као
Алтернативно
умножавање m и n је исто што и понављање додате n функције m пута и помножено 0. Експонат је чешће једоставан враћајући Черчове бројеве, именоване
Претходна функција дефинисана PRED n = n − 1 за позитивни цели број n и PRED 0 = 0 је знатно више компликованија. Формула
може бити доказана, показујући да ако је T означено (λg.λh.h (g f)), онда је T(n)(λu.x) = (λh.h(f(n−1)(x)))за n > 0. Две постале дефиниције PRED су дате испод, једна користи услове а друга користећи парове. Са претходном функцијом, одузимање је једноставно. Дефинисање
SUB m n позива m − n када је m > n и 0 другачије.
Конвенцијом, следеће две дефиниције (позната и као Черчова истинитосна вредност) које се користе за одређивање истинитосне вредности TRUE(тачно) и FALSE(нетачно):
Затим, са ова два λ-израза, можемо дефинисати неке логичке операције (ово су само могуће формулације; остали изрази су еквивалентно тачнии):
Сада можемо да изралунамо логичке функције, нпр. :
видимо да је AND(и) TRUE(тачно) FALSE(нетачно) еквивалетно FALSE(нетачном).
Предикат је функција која враћа истинитосну вредност. Најбитнији предикат је ISZERO(је нула), који враћа TRUE(тачно)ако је аргумент Черчов број 0, а FALSE(нетачно)ако је аргумент било који други Черчов број:
Следећи предикат тестира да ли је први аргумент мањи или једнак другом:
и док је m = n, ако LEQ m n и LEQ n m, онда је лако изградити предикат нумеричке једнакости.
Доступност предиката и дефиниције TRUE и FALSE чине га жељеним да се напишу "ако-онда-или" изрази у ламбда рачуну. На пример, претходник функције се може дефинисати као:
што се може доказати покзујући индуктивно да је n (λg.λk.ISZERO (g 1) k (PLUS (g k) 1)) (λv.0) додата n − 1 функција за n > 0.
Пар (2-заграде) се може дефинисати уз помоћ TRUE and FALSE, користећи Черчово дешифровање за парове. На пример, PAIR енкапсулира пар (x,y), FIRST враа први елемент тог пара, док SECOND враћа други.
Линковане листе се могу дефинисати и као NIL за празну листу, или PAIR(пар) елемента и мале листе. Птерпоставимо да NULL тестира за вредност NIL(нула). (Алтернативно, са NIL := FALSE, конструкција l (λh.λt.λz.deal_with_head_h_and_tail_t) (deal_with_nil) уклања потребу за експлицитним NULL тестом.
Као пример коришћења парова, функције промена и раста које мапирају (m, n) до (n, n + 1) се може дефинисати као
Који нам омогућава да добијемо можда и најтранспарентнију верзију претходне функције
Рекурзија је дефиница функције која позива себе; ламбда рачун не дозвољава ово (не можемо одредити вредности која тек треба да се дефинише, унутар ламбда израза дефинише се иста вредност, као све анонимне функције у ламбда рачуну). Међутим, овај утисак вара: у (λx.x x) y обе x вредности се односе на исти ламбда израз , y, па је самим тим могућа за ламбда израз –овде је y – направљен тако да позива сопствену вредност, кроз своју апликацију.
Рекурзивна инстанца функције факторијела F(n) је дефинисана као
У ламбда изразу који је изабран да представља ту функцију, за параметар (углавном први) се претпоставља да прима свој ламбда израз, а то се назива-примати то као аргумент- што ће бити рекурзија. Овако се достиже рекурзија, намерно као свој референтни аргумент, (који се овде назива r) и мора увек себе да позива у телу функције, тј. :
Сопствена-апликација постиже репликацију овде, пролазећи функцију ламбда израза на следећи позив као вредносни аргумент, чинећи то могућим за реферисање и позив.
Ово решава то али подразумева поновно писање сваког рекурзивног позив као сопствена-апликација. Волели бисмо да имамо генеричко решење, без потребе поновног писања:
Дати ламбда израз са првим аргументом представља рекурзивни позив ( означено са G), комбинатор фиксне тачке FIX ће вратити сопствену репликацију ламбда израза представљајући рекурзивну функцију (овде је то F). Функција не мора проћи саму себе по сваку цену, за сопствену репликацију која је направљена у наставку, када се креира, да буде извршена сваки пут када се позове. Оригиналан ламбда израз (FIX G)је поново направљен у самом себи, постижући сопствену референцу
Постоји много различитих дефиниција за FIX оператор, најједноставнији је:
У ламбда рачуну , Y g је фиксирана тачка g, као што је показано:
Сада, да бисмо извели наш рекурзивни позив функције факторијела, једноставно ћемо позвати (Y G) n, где је n број чији факторијел израчунавамо. Доделимо нпр. вредност n = 4, што даје:
Свака рекурзивно дефинисана функција може бити представљена као фиксирана тачка неке одговарајуће дефинисане функције затварајући рекурзивни позив са екстра аргументом Y, свака рекурзивно дефинисана функција се може изразити као ламбда израз. Практично, ми можемо јасно дефинисати одузимање, множење и поређење предиката природних бројева рекурзивно.
Следећи изрази обично прихватају имена:
Типски ламбда рачун је типски формализам који користи ламбда симбол () да означи непознату апстракцију функције. У овом контексту, типови су обично објекти синтетичке природе који су додељени ламбда изразима; егзактна природа типова зависи од израчунавања рачуна (видети врсте у наставку) . Са одређене тачке гледишта, типски ламбда рачун се може представити као усавршавање нетипског ламбда рачуна али са друге тачке гледишта, они они се такође могу сматрати више фундаменталном теоријом и нетипски ламбда рачун је специјални случај са само једним типом.
Типски ламбда рачун је оснивач програмских језика и он представља базу функционалних програмских језика као што су ML и Хаскел и, више индиректни, типски императивни програмски језици. Типски ламбда рачун има веома важну улогу у дизајну типских система за програмске језике; овде одређивање типа обично означава пожељне карактеристике програма, нпр. програм неће наштетити приступ меморији
Типски ламбда рачун је уско повезан са математичком логиком и отпорном теоријом са Кари-Хаурадовим изоморфизмом и они се могу сматрати као интерни програми сачињени од класа категорија, нпр. једноставан типски ламбда рачун је програм Декартове затворене категорије (Дзк).
Функција F: N → N природних бројева је израчунива ако и сако ако постоји ламбда израз f такав да за сваки пар x, y у N, F(x)=y и ако и само ако је f x =β y, где су x и y Черчови одговарајући бројеви за x и y, односно и =β представља еквиваленцију за бета редукцију. Ово је један од много начина да се дефинише израчуњивост; видети Черч-Тјурингова теза за дискусију о другим прорачунима и њиховим једнакостима.
Не постоји алгоритам који узима као улазне податке два ламбда израза и враћа TRUE or FALSE у зависности од тога да ли су та два израза еквивалентна или нису. Историјски гледано, ово је први проблем чија се несигурност могла доказати. Као и код доказане несигурности , доказ показује да ни једна рачунива функција не може да одређује еквиваленцију. Черч-Тјурингова теза је уведена да покаже да не постоји алгоритам који ово ради.
Черчов доказ је први упростио проблем одређивања где ламбда израз има нормалну форму. Нормална форма је еквивалентна иразу који се не може упростити испод правила који су условљени правилом. Он сумња да је овај исказ рачунив, и да се мође представити преко ламбда рачуна. Надограђујући се на посао који је одрадио Клин, конструктујући Геделово бројање за ламбда изразем, он је осмислио ламбда израз e који стриктно прати доказ Геделове теореме о непотпуности . Ако се e примењује на сопствени Геделов број, резултат је контрадикција.
Као што је одређено од стране Питера Ландина 1965. кореспонденција између Алгола 60 и Черчове Ламбда нотације, секвенцијално процедурални програми могу да разумеју изразе ламбда рачуна, који пружају основне механизме за процедуралну апстракцију и процедуру (потпрограм) апликације.
Ламбда рачун чини "функције" повезанијим и чини их објектима прве класе што утиче на пораст комплексности имплементације када буде извршена.
На пример, у Lisp-у квадратна функције се може представити као ламбда рачун, као:
(lambda (x) (* x x))
Дати пример је израз који припада првој класи функција. Симбол lambda
креира анонимну функцију, дате листе имена параметра, (x)
— само један аргумент у овом случају, и израз који је представљен као тело функције , (* x x)
. Хаскелов пример је идентичан. Анонимне функције се понекад зову ламбда изразима
На пример, Паскал и много осталих императивних програма је дуго подржавало прелазак преко потпрограма, као аргументе за друге потпрограме кроз механизам извршилаца функције. Међутим, извршиоци програма нису довољан услов за функције да буду типови прве класе, зато што је функција тип података прве класе ако и само ако нова инстанца функције може бити креирана у брзом времену. У овом брзом времену креирање функција је подржано у Smalltalkу, Јаваскрипти, и чешће у Скали, Ајфелу ("агенти", C# ("делегација" и C++11, и многи други.
Без обзира на то да ли се израз нормализује или не, и колико му треба да се изрши у нормализацији тога, израз зависи у великој мери од коришћене стратегије упрошћавања. Разлика између редукционих стратегија зависи од разлике у функционалном програмском језику између пожељне процене и непожељне процене.
Апликативни израз није нормализовано осмишљен. Чести противпример је: дефинисати Ω = ωω где је ω = λx.xx. Цео овај израз садржи само један редекс, који именује цели израз; редукује се поново Ω. Како је ово једина могућа редукција, Ω нема нормалну форму (испод сваке процене стратегије). Користећи апликативни ред, израз KIΩ = (λx.λy.x) (λx.x)Ω је редукован од стране прве редукције Ω до нормалне форме (док је редекс скроз десно ), али док Ω нема нормалну форму, апликативни ред не може да нађе нормалну форму за KIΩ.
У супротности, нормални ред се тако назива зато што увек нађе нормализујућу редукцију. У наведеном примеру, KIΩ се редкује из нормалног реда до I, нормалне форме. Недостатак се огледа у томе што редекси у аргументима могу бити коопирани, што доводи до дуплираног израчунавања (нпр. , (λx.xx) ((λx.x)y) се редукује дп ((λx.x)y) ((λx.x)y) користећи ову стратегију; сада постоје два редекса, па целокупна процена мора да има још два корака, али ако су аргументи прво редуковани, тада ће неће постојати ништа).
Позитивни договор коришћења апликативног израза се огледа у томе што не изазива непотребно рачунањ, ако су сви аргументи коришћени, због тоха што се никада не замењују аргументи који садрже редекс и због тога их не треба никада копирати (што може да дуплира посао). У горњем примеру, у апликационом изразу (λx.xx) ((λx.x)y) се редукује прво до(λx.xx)y а затим до нормалног израза yy, узимајући два корака уместо да узме три израза.
Већина чистих функционалних програмских језика (посебно Миранда и његови претходници, укључујући Хаскел), и доказаних програмских језика теореме провере, користе лењу процену пто је у суштини исто ка и позив по потреби. Ове је слично нормалној редукцији, али позив по потреби успева да избегне дуплиање посла инхерентно у нормалној редукцији користећи дељење . У горе наведеном примеру, (λx.xx) ((λx.x)y) се редукује до ((λx.x)y) ((λx.x)y), што садржи два редекса, али у позиву по потреби они су представљени тако да користе исти објекат чешће него копирани, па када је један редукован, самим тим је и други редукован.
Док је идеја бета редукције изгледала довољно једноставно, она ипак није атомски корак, у смислу да мора да има компликовану структуру при процени рачунарске сложености.[19] Прецизно, једна мора некако да пронађе локацију свих ограничених појава променљиве V у изразу E, што доводи до трошења времена, или једна мора да води евиденцију локација V у изразу E, што такође доводи до трошења времена. Наивна претрага локације V у изразу E је О(n) у дужини n од E. Ово доводи до проучавања система који користе експлицитну замену. Синотов управљач стринговима [тражи се извор] нуди начин снимања локација слободних варијабли у изразима.
Черч-Росерова особина у ламбда рачуну значи да процена (β-редукција) може бити избачена у било ком редоследу, чак и у паралели. Ово значи да је променљива недетерминистичка процена стратегија битна. Међутим, ламбда рачун не нуди било какву експлицитну конструкцију за паралелну обраду. Један може додати конструкцију као карактеристику за ламбда рачун. Други процес рачунања је разби
Чињеница, да се изрази ламбда рачуна понашају као функције на остале ламбда изразе, па чак и на саме себе, довела је до питања о семантици ламбда рачуна . Да ли се могу разумна значења доделти изразима ламбда рачуна? Природа семантике је је да нађе скупове D изоморфне функционалном простору D → D, функције на саму себе. Међутим, компликовано постојање D, уз помоћ кардиналног ограничења зато што скуп свих функција из D до D има већу кардиналност него D, осим ако је D самостално.
У 1970-им, Дејна Скот је показако да, ако се посматрају само непрекидне функције, скуп или домен D са потребним особинама се може наћи, правећи тако модел ламбда рачуна.
Ово је створило основу за семантику система закона програмских језика.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.