A matematikai logikában a kombinációs logika olyan elméleti logika, amelyet Moses Schönfinkel vezetett be 1920-ban egy 1929-es konferencián, és amelyet Haskell Brooks Curry fejlesztett ki annak érdekében, hogy kiküszöbölje a matematika változóinak szükségességét a funkció fogalmának szigorú formalizálása és a szükséges operátorok számának minimalizálása érdekében. hogy meghatározzuk a predikátumok kiszámítását Henry M. Sheffer nyomán . Újabban a számítástechnikában a számítás elméleti modelljeként és a funkcionális programozási nyelvek tervezésének alapjaként használják .
A kombinatorikus logika alapkoncepciója a kombinátoré, amely egy magasabb rendű függvény ; csak a függvényalkalmazást és esetleg más kombinátorokat használja új magasabb rendű függvények meghatározásához. Minden egyszerűen gépelhető kombinátor demonstráció Hilbert számára az intuíciós logikában és fordítva. Ezt hívjuk Curry-Howard levelezésnek
A kombinatorikus logika két alapvető „műveleten” alapul (két „kombinátort is mondunk”) S és K , amelyeket később meghatározunk; pontosabban meghatározzuk annak viselkedését vagy "szándékát", mert a kombinatorikus logika a logika megközelítése, amely inkább megmutatja a dolgok működését, mint az objektumok leírását, akkor azt mondjuk, hogy ez a logika szándékos megközelítése. Ha meg akarjuk definiálni azt a függvényt, amelyet C-nek fogunk hívni, és amely három paramétert vesz fel, és ennek eredményeként az első a harmadikra lesz alkalmazva, az egész pedig a másodikra vonatkozik, akkor megírhatjuk:
C ≡ S ((S (KS) K) (S (KS) K) S) (KK)amely, mint láthatjuk, nem tartalmaz változót. Sajnálhatjuk, hogy a változók nem használatának előnyét a kifejezések hossza és bizonyos olvashatatlanság fizeti meg. Ma a kombinatorikus logikát főleg a logikusok használják, hogy pozitívan megválaszolják a kérdést: "Meg lehet-e tenni változók nélkül?" »Számítógépes tudósok pedig funkcionális nyelvek összeállításához .
A kombinatorikus logika elsőrendű átírási rendszer . Vagyis a lambda-számítástól eltérően nem tartalmaz összekapcsolt változókat, ami sokkal egyszerűbb elméletet tesz lehetővé. Csak három operátora van: egy bináris operátor és két állandó.
Zárójeles Az írás egyszerűsítése érdekében a kombinatorikus logika eltávolít bizonyos zárójeleket, és a bal oldali konvenció asszociativitás alapján átveszi őket. Más szavakkal, az (abcd ... z) a (... (((ab) c) d) ... z) rövidítése.Az I jelölésű identitás-kombinátort az határozza meg
I x = x .Egy másik kombinátor, amelyet K jelöl , állandó függvényeket készít: ( K x ) az a függvény, amely bármely paraméter esetén x-et ad vissza , más szóval
( K x ) y = xminden x és y kifejezésre . Akárcsak a lambda-calculus esetében , az alkalmazásokat balról jobbra kapcsoljuk, ami lehetővé teszi a zárójelek eltávolítását, ezért írjuk
K x y = x .Egy másik kombinátor, az S nevű , elosztja a paramétert (itt z ) a komponens alkalmazások számára:
S x yz = xz ( yz )S az x és z alkalmazásának eredményét alkalmazza y és z alkalmazásának eredményére .
Azt lehet kialakítani a S és a K , sőt:
( S K K ) x = S K K x = K x ( K x ) = x .Ezért elrendeljük, hogy én egy származéka kombináló és I = SKK és úgy döntünk, hogy leírja az összes combinators használó S és K , ami ésszerű, mert tudjuk mutatni, hogy ez elegendő, hogy leírja az „összes” funkciót d „egy bizonyos formájának .
Valójában a transzformációk úgy működnek, mint a redukciók, és ezért megírjuk őket →. Megkapjuk tehát a kombinatorikus logika két alapvető redukciós szabályát.
K xy → x, S xyz → xz (yz).Az egyes kombinátorokhoz típus társítható . A kombinátor típusa megmondja, hogyan veszi figyelembe a paramétereinek típusát egy bizonyos típusú objektum előállításához. Így az I kombinátor önmagában megváltoztatja a paraméterét; ha az α típust ennek az x paraméternek tulajdonítjuk, akkor azt mondhatjuk, hogy I x-nek van α típusa, és nekem α → α típusa van. Itt a → nyíl a funkcionális típusú konstruktort jelzi, nagyjából az α → α a funkciók osztályának típusa α-tól α-ig, → az α típusból új α → α típust épített.
K vesz egy paramétert, mondjuk az α típusra, és egy β típusú paraméter függvényét adja, amely az első paramétert adja meg, ennek az utolsó függvénynek a típusa tehát β → α, a K típusa tehát α → (β → α) , amelyet α → β → α írunk. S három x, y és z paramétert vesz fel; adja meg az α típust a harmadik z paraméternek és γ típust a végeredménynek, a y második paraméter felvesz egy α típusú paramétert, és egy β típusú paramétert ad vissza (típusa ezért α → β), az első vesz egy α típusú paramétert, és egy β → γ típusú függvényt ad vissza, típusa tehát α → (β → γ), amelyet α → β → γ írunk. Összefoglalva, vannak az: α, y: β → α és x: α → β → γ és S xyz: γ, arra a következtetésre jutunk, hogy S típusa (α → β → γ) → (α → β) → α → γ.
Az eredmény MN , amely abból áll, hogy M a N jelentése tipizálható, ha M egy funkcionális típusú, mondjuk α → β, és ha N rendelkezik típus α. Az MN-nek ekkor a β típusa van.
A B típusa (α → β) → (γ → α) → γ → β. Látható, ha megjegyzi, hogy B xyz → * x (yz), vagy az összetételi szabályt alkalmazza S ( KS ) K-ra .
A C típus (α → β → γ) → β → α → γ, ugyanazon okok miatt, mint a B esetében .
A W viszont nem tipizálható. Ezt úgy láthatjuk, hogy emlékezünk arra, hogy S : (α → β → γ) → (α → β) → α → γ és I : (α → α). Ha S- et alkalmazunk I- re , akkor α = β → γ-nak kell lennie, akkor ha I-re SI- t alkalmazunk, akkor α = β-nak kell lennie, tehát β = β → γ. Ennek az egyenletnek nincs megoldása. Tehát az SII = W nem tipizálható.
Összefoglalva:
K : α → β → α S : (α → β → γ) → (α → β) → α → γ I : α → α B : (α → β) → (γ → α) → γ → β C : (α → β → γ) → β → α → γHa M tipikus kombinátor, akkor minden M-től kezdődő redukciós lánc véges. Ezt a tulajdonságot erős normalizálásnak nevezzük .
Látható, hogy a modus ponen
hasonlít a típusmegőrzési szabályra, amikor az α → β típusú kombinátort alkalmazzuk az α típusú kombinátorra. Vizsgáljuk meg a propozíciós logika Hilbert-stílusú bemutatásának első két axiómáját is , nevezetesen:
K : P → Q → P S ( P → Q → R ) → ( P → Q ) → P → R .Emlékezzünk arra, hogy lehetővé teszik az intuitionista propozíciós számítás formalizálását. Észrevesszük, hogy az első axióma megegyezik a K típusával, és hogy a második axióma azonos az S típusával, ha a P állítást α-val, a Q állítást β-val és az R- t γ-val helyettesítjük. Ezt az állítást és a típus, valamint a kombinátor és a bizonyítás közötti megfelelést Curry-Howard megfelelésnek nevezzük. Ezzel párhuzamosan állítja az à la Hilbert levonási rendszerét az intuitionista propozíciós logika és a kombinatorikus logika számára, amelyeket meg kell jegyezni, függetlenül fedezték fel.
A képlet
B : (α → β) → (γ → α) → γ → βazt jelenti ( például Coq nyelvén ), hogy B az (α → β) → (γ → α) → γ → β propozíciós képlet bizonyítéka (bármely eleve).
B ≡ S (KS) Kmajd hatékony bizonyítékot szolgáltat Hilbert elméletének képletére, amely csak a modus ponenseket, valamint a K és S axiómákat használja .
Ez egy kis átírási munkát igényel: Először visszaállítjuk a zárójeleket
B ≡ (S (KS)) KEzután bemutatjuk az üzemeltető ⇒
B ≡ (S ⇒ (K ⇒ S)) ⇒ Kvégül a postfix jelölést használjuk :
B ≡ KSK ⇒ S ⇒ ⇒Ekkor ez a képlet adja meg a demonstráció lépéseit a dedukció irányába. ⇒ a modus ponens használatát jelöli; K és S, használata axiómák K és S. Pontosabban Q ≡ IP ⇒ jelenti, hogy ha azt a demonstrálása P → Q és P kimutatása P , akkor az IP ⇒ az, hogy a Q . Sajnos ez a képlet nem biztosítja a szubsztitúciók műveleteit, amelyeket fel kell használni az axiómák bevezetésében.
Az előtagú jelölés,
B ≡ ⇒ ⇒ S ⇒ KSKa bizonyítás jelentését jelenti a Coq nyelvén. Itt a hiányzó információk a mod képleteiben használt P képletei .
DemonstrációAz írás megkönnyítése érdekében megjegyezzük
A cél tehát az
A kombinatorikus logika bármely kifejezése ekvivalens λ-calculus kifejezést, és a λ-calculus bármely kifejezése ekvivalens kombinatorikus logikai kifejezést fogad el.
Vegye figyelembe a kombinátorok λ-számításra való fordítását, amelyet a következő határoz meg:
A λ-számítás reprezentációjának meghatározása előtt a kombinatorikus logikában meg kell határoznunk egy absztrakciót a kombinatorikus logikában. Ha ez egy kifejezés, akkor meghatározzuk, hogy kié lesz a szerep .
Meghatározzuk a λ-számítás fogalmainak értelmezését a kombinatorikus logika szempontjából:
A közösítő fixpont a Turing , megjegyezte expresszálódik λ-kalkulus . Ezután kiszámíthatjuk:
azután
Ezután meghatározunk két kombinátort A és Θ
A : = S (S (KS) (KI)) (SII)
Θ : = AA
Θ fixpontos kombinátor.
Megfigyeljük, hogy akár a λ-tag, akár annak kombinátorként való fordítása van, megvan
A normál forma olyan kombinátor, amelyben a primitív kombinátorokat nem alkalmazzák annyi érvre, hogy leegyszerűsödjenek. Dönthetetlen tudni
ha egy általános kombinátornak normális formája van, ha két kombinátor egyenértékű, stb.Ez egyenértékű a lambda-számítás megfelelő problémáinak eldönthetetlenségével .