Reprezentace přirozených čísel jako funkcí vyššího řádu
v matematika, Kódování kostela je prostředek reprezentující data a operátory v lambda kalkul. The Církevní číslice jsou reprezentací přirozených čísel pomocí lambda notace. Metoda je pojmenována pro Alonzo Church, který tímto způsobem nejprve zakódoval data do lambda kalkulu.
Termíny, které jsou obvykle považovány za primitivní v jiných notacích (například celá čísla, booleovské hodnoty, páry, seznamy a označené odbory), jsou mapovány na funkce vyššího řádu pod kódováním kostela. The Church-Turingova teze tvrdí, že jakýkoli vypočítatelný operátor (a jeho operandy) může být reprezentován pod kódováním Church. V netypový lambda kalkul jediným primitivním datovým typem je funkce.
Církevní kódování není zamýšleno jako praktická implementace primitivních datových typů. Jeho použití je ukázat, že jiné primitivní datové typy nepředstavují žádný výpočet. Úplnost je reprezentativní. K překladu reprezentace do běžných datových typů jsou zapotřebí další funkce pro zobrazení lidem. Obecně není možné rozhodnout, zda jsou dvě funkce prodlouženě stejné kvůli nerozhodnutelnost rovnocennosti z Církevní věta. Překlad může funkci nějakým způsobem použít k načtení hodnoty, kterou představuje, nebo k vyhledání její hodnoty jako doslovného výrazu lambda.
Lambda kalkul se obvykle interpretuje jako použití intenzionální rovnost. Existují Potenciální problémy s interpretací výsledků z důvodu rozdílu mezi intencionální a extenzivní definicí rovnosti.
Církevní číslice
Církevní číslice jsou reprezentacemi přirozená čísla pod kódováním kostela. The funkce vyššího řádu což představuje přirozené číslo n je funkce, která mapuje jakoukoli funkci
k jeho n-složit složení.[1] Jednoduše řečeno, „hodnota“ číslice je ekvivalentní počtu, kolikrát funkce zapouzdří svůj argument.

Všechny církevní číslice jsou funkce, které mají dva parametry. Církevní číslice 0, 1, 2, ..., jsou v dokumentu definovány následovně lambda kalkul.
Začínání s 0 funkci vůbec nepoužíváte, pokračujte 1 použití funkce jednou, 2použití funkce dvakrát, 3 použití funkce třikrát atd.:

Církevní číslo 3 představuje akci aplikace jakékoli dané funkce třikrát na hodnotu. Zadaná funkce se nejprve použije na zadaný parametr a poté postupně na vlastní výsledek.[1] Konečným výsledkem není číslice 3 (pokud není zadaný parametr 0 a funkce je a nástupnická funkce ). Samotná funkce, a nikoli její konečný výsledek, je církevní číslice 3. Církevní číslo 3 znamená jednoduše udělat cokoli třikrát. Je to ostensive ukázka toho, co se rozumí „třikrát“.
Výpočet s církevními číslicemi
Aritmetický operace s čísly mohou být reprezentovány funkcemi na církevních číslech. Tyto funkce mohou být definovány v lambda kalkul nebo implementovány ve většině funkčních programovacích jazyků (viz převod lambda výrazů na funkce ).
Funkce přidání
používá identitu
.

Funkce nástupce
je β-ekvivalent na
.

Funkce násobení
používá identitu
.

Funkce umocňování
je dáno definicí církevních číslic,
. V definici náhrada
dostat
a,

což dává výraz lambda,

The
funkce je obtížnější pochopit.

Církevní číslice používá funkci n krát. Funkce předchůdce musí vrátit funkci, která použije svůj parametr n - 1 krát. Toho je dosaženo vybudováním kontejneru F a X, který je inicializován způsobem, který poprvé vynechá použití funkce. Vidět předchůdce pro podrobnější vysvětlení.
Funkci odčítání lze zapsat na základě funkce předchůdce.

Tabulka funkcí na církevních číslech
* Všimněte si, že v kódování Církve


Odvození funkce předchůdce
Funkce předchůdce použitá v kódování kostela je,
.
K vytvoření předchůdce potřebujeme způsob, jak tuto funkci aplikovat o 1 čas méně. Číslice n použije funkci F n krát do X. Funkce předchůdce musí používat číslici n použít funkci n-1 krát.
Před implementací funkce předchůdce je zde schéma, které zabalí hodnotu do funkce kontejneru. Definujeme nové funkce, které se použijí místo F a X, volala vč a inic. Funkce kontejneru se nazývá hodnota. Na levé straně tabulky je číslice n aplikován na vč a inic.

Obecným pravidlem opakování je,

Pokud existuje také funkce pro načtení hodnoty z kontejneru (tzv výpis),

Pak výpis lze použít k definování samenum fungovat jako,

The samenum funkce není skutečně užitečná. Nicméně, jak vč volání delegátů z F k argumentu jeho kontejneru to můžeme zařídit u první aplikace vč obdrží speciální kontejner, který ignoruje svůj argument umožňující přeskočit první aplikaci F. Zavolejte tento nový počáteční kontejner konst. Pravá strana výše uvedené tabulky ukazuje rozšíření o n vč konst. Poté nahrazením inic s konst ve výrazu pro stejný funkce získáme funkci předchůdce,

Jak je vysvětleno níže, funkce vč, inic, konst, hodnota a výpis lze definovat jako,

Což dává výraz lambda pro před tak jako,

Hodnota kontejneruKontejner hodnot použije funkci na svou hodnotu. Je definován, 
tak, 
VčThe vč funkce by měla mít hodnotu obsahující proti, a vrátit novou hodnotu obsahující F v. 
Nechť g je kontejner hodnot, 
pak, 
tak,  
| Hodnotu lze extrahovat použitím funkce identity, 
Použitím Já, 
tak, 
ConstProvádět před the inic funkce je nahrazena konst to neplatí F. Potřebujeme konst uspokojit,  
Což je splněno, pokud 
Nebo jako lambda výraz, 
|
Další způsob definování před
Pred lze také definovat pomocí párů:

Toto je jednodušší definice, ale vede ke složitějšímu výrazu pro pred. Rozšíření pro
:

Divize
Divize přirozených čísel lze implementovat,[3]

Výpočet
vyžaduje mnoho beta redukcí. Pokud redukci neprovedete ručně, na tom až tak nezáleží, ale je lepší tento výpočet nemusíte provádět dvakrát. Nejjednodušší predikát pro testování čísel je IsZero zvažte tedy podmínku.

Ale tato podmínka je ekvivalentní k
, ne
. Pokud se použije tento výraz, pak se výše uvedená matematická definice rozdělení převede do funkce na církevních číslech jako,

Podle potřeby má tato definice jediné volání
. Výsledkem však je, že tento vzorec dává hodnotu
.
Tento problém lze opravit přidáním 1 do n před zavoláním rozdělit. Definice rozdělit je pak,

divide1 je rekurzivní definice. The Y kombinátor lze použít k implementaci rekurze. Vytvořte novou funkci s názvem div podle;
- V levé ruce

- Na pravé straně

dostat,

Pak,

kde,
