Кіріспе
1=Y f = f (Y f) жоғары реттік функциясы. Компьютерлік ғылымдағы комбинаторлық логикада, тұрақты нүкте комбинаторы (немесе бекітілген нүкте комбинаторы) – функцияны аргумент ретінде қабылдайтын жоғары реттік функция, және егер ол болса, өзінің аргумент функциясының тұрақты нүктесін (өз-өзіне бейнеленетін мән) қайтарады. Формальды түрде, егер Y тұрақты нүкте комбинаторы болса және f функциясының бір немесе бірнеше тұрақты нүктелері болса, онда Y осы тұрақты нүктелердің бірі болады, яғни.
In combinatory logic for computer science, a fixed point combinator (or fixpoint combinator), is a higher order function (i. e. a function which takes a function as argument) that returns some fixed point (a value that is mapped to itself) of its argument function, if one exists. Formally, if is a fixed point combinator and the function has one or more fixed points, then is one of these fixed points, i. e.
Тұрақты нүкте комбинаторларын лямбда-есептеуде және функционалдық бағдарламалау тілдерінде анықтауға болады, және олар рекурсивті анықтамаларға мүмкіндік береді.
Ламбдалық есептегі Y комбинаторы
Классикалық типтелмеген лямбда-есептеуде әрбір функцияның тұрақты нүктесі болады. Haskell Curry-дің парадоксалды комбинаторы Y-тің нақты бір іске асырылуы мына төмендегідей берілген:
(Бұл жерде біз лямбда-есептеудің стандартты белгілері мен конвенцияларын қолданамыз: Y – бір аргумент f қабылдайтын және бірінші нүктеден кейін келетін бүкіл өрнекті қайтаратын функция; өрнек бір аргумент x қабылдайтын функцияны білдіреді, ол функция ретінде қарастырылады және өрнекті қайтарады, мұндағы x өзіне-өзі қолданылады. Өрнектердің жанына орналасуы функцияны қолдануды білдіреді, сол жақтан ассоциативті және нүктеден жоғары басымдыққа ие.)
Қолданылуы
Бір айнымалысы бар функцияға қолданғанда, Y комбинаторы көбінесе тоқтамайды. Көбірек қызығушылық тудыратын нәтижелерді екі немесе одан көп айнымалылары бар функцияларға Y комбинаторын қолдану арқылы алуға болады. Қосымша айнымалыларды сандық санауға немесе индекс ретінде пайдалануға болады. Соның нәтижесінде алынған функция императивті тілдегі while немесе for циклы сияқты жұмыс істейді. Осылай қолданғанда, Y комбинаторы қарапайым рекурсияны жүзеге асырады. Ламбда-есептеуі көптеген бағдарламалау тілдерінде мүмкін болғандай, функцияның өзінің анықтамасында термин ретінде пайда болуына рұқсат бермейді, бірақ функцияны рекурсивті түрде қолданатын жоғары деңгейдегі функцияға аргумент ретінде беруге болады. Y комбинаторы Керридің парадоксын жүзеге асыру үшін де қолданылуы мүмкін. Керридің парадоксының мәні – типтелмеген ламбда-есептеуі дедуктивті жүйе ретінде дұрыс емес, ал Y комбинаторы анонимді өрнектің нөлді немесе тіпті көп мәндерді білдіруге мүмкіндік беру арқылы осыны көрсетеді. Бұл математикалық логикамен үйлеспейді.
Құндылықтар мен домендер
Көптеген функциялардың тұрақты нүктелері жоқ, мысалы, Черч кодтамасын қолдану арқылы табиғи сандарды лямбда-есептеуде бейнелеуге болады, және осы f функциясын лямбда-есептеуде анықтауға болады. Дегенмен, енді оның домені тек табиғи сандарды ғана емес, барлық лямбда-өрнектерді қамтиды. Y комбинаторы f-қа қолданылғанда f үшін тұрақты нүкте шығады, бірақ бұл тұрақты нүкте табиғи санға сәйкес келмейді. Егер Y f-ті нақты бағдарламалау тілінде есептеуге тырыссақ, шексіз цикл орын алады.
Функция мен іске асыру
Белгілі нүктелік комбинатор математикада анықталып, кейін басқа тілдерде іске асырылуы мүмкін. Жалпы математика функцияны оның экстенсионалдық қасиеттеріне сүйене отырып анықтайды. Яғни, егер екі функция бірдей бейнелеуді жасаса, олар тең болып саналады. Ламбда-есептеу және бағдарламалау тілдері функцияның өзін интенсионалдық қасиет ретінде қарастырады. Функцияның өзі оның іске асырылуына негізделген. Ламбда-есептеудегі функция (немесе термин) – математикалық функцияның іске асырылуы. Ламбда-есептеуде белгілі нүктелік комбинатордың математикалық анықтамасын қанағаттандыратын бірнеше комбинатор (іске асырылым) бар.
"Комбинатор" терминінің анықтамасы
Комбинациялық логика – жоғары ретті функциялар теориясы. Комбинатор – еркін айнымалылары жоқ жабық ламбда өрнегі. Комбинаторлар оларды айнымалылар деп атамай, мәндерді өрнектегі тиісті орындарына бағыттау үшін біріктіріле алады.
Жалпы ақпарат
Рекурсияны іске асыру үшін тұрақты нүктелік комбинаторларды қолдануға болады, сондықтан оларды рекурсивті есептеулердің белгілі бір түрлерін сипаттауға болады, мысалы, тұрақты нүктелік итерация, итерациялық әдістер, реляциялық деректер базасындағы рекурсивті қосылу, дерек ағынын талдау, контекстсіз грамматикадағы терминал емес элементтердің FIRST және FOLLOW жиынтықтары, транзитивті жабу және басқа да жабу операцияларының түрлері. Кез келген кіріс мәні тұрақты нүкте болатын функция сәйкестік функциясы деп аталады. Формальды түрде:
In contrast to universal quantification over all , a fixed point combinator constructs one value that is a fixed point of The remarkable property of a fixed point combinator is that it constructs a fixed point for an arbitrary given function
Other functions have the special property that, after being applied once, further applications don't have any effect. More formally:
Such functions are called idempotent (see also Projection (mathematics)). An example of such a function is the function that returns 0 for all even integers, and 1 for all odd integers. In lambda calculus, from a computational point of view, applying a fixed point combinator to an identity function or an idempotent function typically results in non terminating computation. For example, we obtain
where the resulting term can only reduce to itself and represents an infinite loop. Fixed point combinators do not necessarily exist in more restrictive models of computation. For instance, they do not exist in simply typed lambda calculus. The Y combinator allows recursion to be defined as a set of rewrite rules, without requiring native recursion support in the language. In programming languages that support anonymous functions, fixed point combinators allow the definition and use of anonymous recursive functions, i. e. without having to bind such functions to identifiers. In this setting, the use of fixed point combinators is sometimes called anonymous recursion.
Жалпылама квантификациядан айырмашылығы, тұрақты нүктелік комбинатор -ның тұрақты нүктесі болатын бір мәнді құрастырады. Тұрақты нүктелік комбинатордың ерекше қасиеті – ол кез келген берілген функция үшін тұрақты нүкте құрастыра алады. Басқа функциялардың ерекше қасиеті бар: бір рет қолданғаннан кейін, одан әрі қолданудың қандай да бір әсері болмайды. Мұндай функциялар идемпотентті деп аталады (сонымен қатар «Проекция (математика)» дегенді қараңыз). Мұндай функциялардың мысалы – барлық жұп сандар үшін 0, ал барлық тақ сандар үшін 1 қайтаратын функция. Ламбда-есептеуде, есептеу тұрғысынан алғанда, тұрақты нүктелік комбинаторды сәйкестік функциясына немесе идемпотентті функцияға қолдану көбінесе тоқтамайтын есептеуге әкеледі. Мысалы, біз келесіні аламыз:
In contrast to universal quantification over all , a fixed point combinator constructs one value that is a fixed point of The remarkable property of a fixed point combinator is that it constructs a fixed point for an arbitrary given function
Other functions have the special property that, after being applied once, further applications don't have any effect. More formally:
Such functions are called idempotent (see also Projection (mathematics)). An example of such a function is the function that returns 0 for all even integers, and 1 for all odd integers. In lambda calculus, from a computational point of view, applying a fixed point combinator to an identity function or an idempotent function typically results in non terminating computation. For example, we obtain
where the resulting term can only reduce to itself and represents an infinite loop. Fixed point combinators do not necessarily exist in more restrictive models of computation. For instance, they do not exist in simply typed lambda calculus. The Y combinator allows recursion to be defined as a set of rewrite rules, without requiring native recursion support in the language. In programming languages that support anonymous functions, fixed point combinators allow the definition and use of anonymous recursive functions, i. e. without having to bind such functions to identifiers. In this setting, the use of fixed point combinators is sometimes called anonymous recursion.
мұнда алынған өрнек тек өзіне ғана келуге болады және ол шексіз циклді білдіреді. Тұрақты нүктелік комбинаторлар есептеудің барлық шектеулі модельдерінде міндетті түрде бола бермейді. Мысалы, олар жай типтелген Ламбда-есептеуде жоқ. Y комбинаторы тілде рекурсияны тікелей қолдаудың қажеті болмай, қайта жазу ережелерінің жиынтығы ретінде рекурсияны анықтауға мүмкіндік береді. Анонимді функцияларды қолдайтын бағдарламалау тілдерінде тұрақты нүктелік комбинаторлар анонимді рекурсивті функцияларды анықтауға және пайдалануға мүмкіндік береді, яғни мұндай функцияларды идентификаторларға байланыстырудың қажеті жоқ. Осы жағдайда тұрақты нүктелік комбинаторларды пайдалану кейде анонимді рекурсия деп аталады.
In contrast to universal quantification over all , a fixed point combinator constructs one value that is a fixed point of The remarkable property of a fixed point combinator is that it constructs a fixed point for an arbitrary given function
Other functions have the special property that, after being applied once, further applications don't have any effect. More formally:
Such functions are called idempotent (see also Projection (mathematics)). An example of such a function is the function that returns 0 for all even integers, and 1 for all odd integers. In lambda calculus, from a computational point of view, applying a fixed point combinator to an identity function or an idempotent function typically results in non terminating computation. For example, we obtain
where the resulting term can only reduce to itself and represents an infinite loop. Fixed point combinators do not necessarily exist in more restrictive models of computation. For instance, they do not exist in simply typed lambda calculus. The Y combinator allows recursion to be defined as a set of rewrite rules, without requiring native recursion support in the language. In programming languages that support anonymous functions, fixed point combinators allow the definition and use of anonymous recursive functions, i. e. without having to bind such functions to identifiers. In this setting, the use of fixed point combinators is sometimes called anonymous recursion.