First-order logic
Propositinal logic ei käsitle kvantifikaatoreid.
Estimest järku loogika (first-order logic, FOL) ehk predikaatloogika (predicate logic) on lauseloogika (propositional logic) üldistus mis lisab muutujate kvantifikaatorid mis võimaldab tuletada väiteid lõpmatute mudelite kohta. Näiteks: mõned linnud lendavad; vähemalt ühel planeedil on elu; kõik inimesed on imetajad.
Esimest järku loogikas saame kasutada samu lauseloogikas olnud konstante. Naturaalarv 5, koer nimega Tommy:
Esimest järku loogika toob sisse muutujad (variable):
Esimest järku loogika ei käsitle predikaatidele rakendatud kvanifikaatoreid, selle jaoks on teist ja kõrgemat järku loogika.
?? (term) kätkeb endas funktsioone, muutujaid ja konstante.
First-order logic adds predicates to propositional logic: P(x,y,z)
Predicates are like functions, except functions return arbitrary values, but predicates return truth values for certain instantiation.
Süntaks
First-order logic syntax:
Kvantifikaatorid
Esimest järku loogika puhul saab kvantifitseerida üle muutujate, näiteks: üldsuskvantor, kõigi ... puhul (universal quantifier, for all ...):
ning olemasolukvantor, eksisteerib ... (there exists ..., existential quantifier):
Näiteks iga x kohta eksisteerib y, nii et y armastab x:
Esimest järku loogikas ei saa kvantifitseerida funktsioone või suhteid, näiteks:
Kvantifikaatorite järjekord on oluline (?).
Predikaat
Predikaat on väide mis kehtib tema argumentide kohta. Predikaat on nagu funktsioon mis tagastab tõeväärtuse. Argumentideta predikaat on väide (proposition):
Predikaat on lause või valem (formula), mis sisaldab ühte või mitut muutujat (variables). Predikaatlause tõeväärtus oleneb väärtustatud muutuja(te) tõeväärtus(t)est.
Ühekohalist predikaati nimetatakse ka omaduseks (property). Kui predikaatmuutuja mingi konkreetse väärtuse n korral predikaatlause P(n) osutub tõeseks, siis ütleme et "n-il on omadus P" (variable n has property P):
Predikaadil võib argumente ka rohkem olla:
Kõik tudengid ei õpi ajalugu ja bioloogiat:
Kus Ajalugu ja Bioloogia on konstandid ning x on muutuja. Sama väite võib ümber kirjutada järgnevalt:
Näide
Analoogselt saame Pythonis kirja panna funktsiooni P:
def P(x): return (x > 2) and (x < 4)
Pythonis nagu ka paljudes teistes funktsionaalsetes programeerimiskeeltes on lambda notatsioon mis näeb pisut matemaatilisem välja ning võimaldab luua anonüümseid ehk nimeta funktsioone:
P = lambda x: (x > 2) and (x < 4)
Kui predikaadi muutujad asendada mingite konkreetsete väärtustega lubatud väärtustehulgast, siis predikaat muutub lauseks ehk omandab tõeväärtuse.
Predikaate tähistatakse suurtähtedega ning temas sisalduvaid (predikaat)muutujaid väiketähtedega. Pythoni koodimistavad näevad küll ette, et funktsioonide nimed kui ka muutujate nimed on väiketähtedega.
Laused, väärtustamine ning funktsioonide välja kutsumine
Väärtustades x = 3 saame tõese predikaatlause, ehk võib öelda, et täisarvul 3 on omadus P:
Pythonis tähendaks see funktsiooni välja kutsumist teatud argumentidega:
>>> P = lambda x: (x > 2) and (x < 4) >>> P(3) True
Predikaatmuutujate kohta tuleb eelnevalt täpsustada, milliseid väärtusi ta võib omandada ehk milline on predikaadi määramispiirkond. Programeerimiskeeltes võib leida erinevaid vahendeid määramispiirkonna paika panemiseks: andmetüübid, erindid, klassid (?). Pythoni puhul näiteks:
>>> 5/0 Traceback (most recent call last): File "<stdin>", line 1, in <module> ZeroDivisionError: integer division or modulo by zero
Näide
Kasutame prdikaadina Luhtus(x, y), mis tähendab tudeng y kukkus läbi aine x:
Ainult üks tudeng kukkus läbi ajaloos:
Predikaat vs funktsioon
Näiteks "Iga ema armastab oma last" võib kirja järgnevalt kui Ema on kahe argumendiga predikaat:
Esimest järku loogikas funktsioonid esinevad vaid predikaatides: Siin on Ema kasutusel kui funktsioon:
Kuna predikaat käsitleb vaidtõeväärtusi tuleb numbriliste väärtuste jaoks funktsiooni kasutada:
Küll aga saab jällegi predikaati kasutada nende võrdlemiseks:
Parim hinne ajaloos oli suurem kui (parim) suvaline hinne bioloogias:
Rahuldatavus
A formula is valid when it holds for all interpretations, i.e. ways of interpreting the domain of objects as D = ∅, constants as elements of D, function symbols as functions D n → D and relations as subsets of D n , and valuations of the variables as elements of D
In fact, first-order validity is undecidable (Church/Turing).
In second-order logic we allow quantification over functions and predicates with object-level arguments, e.g. in the induction principle
In higher-order logic we even allow predicates and functions with predicates and functions for arguments, and allow quantification over those, for infinitely many ‘orders’.