- Egenskaper för logisk programmering
- Sanning och logiskt avdrag
- Första ordningens logik
- Klausuleringsformulär
- Artificiell intelligens
- Exempel på logisk programmering
- Exempel 1
- Exempel 2
- Fråga
- Andra förfrågningar
- referenser
Den logiska programmeringen är ett programmeringsparadigm som använder logikkretsarna snarare än bara matematiska funktioner för att kontrollera hur fakta och regler ställs in.
I stället för ett noggrant strukturerat flöde av kontroll som dikterar när man ska utföra och hur man ska utvärdera funktionssamtal eller andra instruktioner skrivs programmets logiska regler som klausuler eller logiska predikat.
Exempel på logisk programmering i Prolog. Källa: Av Kuldeepsheoran1 - skärmdump, CC BY-SA 3.0, wikimedia commons
Denna strategi, som ofta används i genetisk och evolutionär programmering, berättar generellt för en modell vilket mål man ska uppnå, snarare än hur man ska uppnå det.
Varje regel innehåller en rubrik och ett organ med en formaliserad logik snarare än en körbar matematisk funktion. Till exempel "Och är sant (rubrik): om C1, C2 och C3 är sanna (kropp)." Fakta eller resultat uttrycks utan kropp, till exempel "Och det är sant."
Men med vissa programmeringsspråk som Prolog, kan nödvändig programmering också inkluderas för att berätta för modellen hur man löser vissa problem. Till exempel, "För att lösa Y, lägg till C1, C2 och C3."
Egenskaper för logisk programmering
Logisk programmering skiljer sig väsentligt från de andra befintliga programmeringsstrategierna. I stället för att ge instruktioner till en dator med programmet upprättas förhållanden mellan objekt. På detta sätt kan datorn resonera dessa relationer och därmed nå logiska lösningar.
Inom ett logikprogram finns det två huvuduppsättningar med koder: fakta och regler. Reglerna tillämpas på fakta för att få kunskap om miljön.
Sanning och logiskt avdrag
Logikprogram kan dekrypteras genom två viktiga begrepp: sanning och logiskt avdrag. Sanningen framgår om beräkningen i programmet är sann eller inte, under implementeringen av programsymbolerna. Logiskt avdrag avgör om en logisk klausul är en konsekvens av programmet.
Dessa instruktioner kommer alltid att tolkas som logiska meningar och klausuler, resultatet av att de utförs är en logisk konsekvens av de beräkningar som den innehåller.
Första ordningens logik
Det är en utskjutning av propositionens logik. Tänk på om objekt är sanna eller falska ur ett partiellt världsperspektiv, kallad en domän. Logisk programmering baseras på en generalisering av första ordningens logik.
Denna logik består av syntax och semantik. Syntax är det formella språket som används för att uttrycka begrepp. Å andra sidan indikerar semantiken i första ordningens logiska formler hur man bestämmer det verkliga värdet på vilken formel som helst.
Denna logik är baserad på ett alfabet och ett första ordningsspråk samt en uppsättning axiomer och inferensregler.
Klausuleringsformulär
Det är en delmängd av första ordningens logik. Det har en normaliserad form där ett uttalande definieras av ett universellt prefix eller kedja av universella kvantifierare och en fri uppsättning kvantifierare i klausulen.
När du begär en fråga till programmet kommer kroppen av klausulen vars rubrik kan sammanfalla att beaktas. Detta är samma sak som att tillämpa en slutsregel i logik.
Som ett steg i slutsatsen väljs två klausuler som har en egenskap att en innehåller ett disjunktivt X (en positiv bokstav) och den andra innehåller ett disjunktivt ¬X (en negativ bokstav). Dessa avvägningar kallas kompletterande.
Från dessa två initiala klausuler byggs en ny resolutiv klausul med alla bokstäver, förutom de kompletterande.
Artificiell intelligens
Logisk programmering är en metod som används för att få datorer att dra, eftersom det är användbart att representera kunskap. Logik används för att representera kunskap och slutsatser för att hantera den.
Logiken som används för att representera kunskap är klausulformen. Det används eftersom första ordningens logik är väl förstått och kan representera alla beräkningsproblem.
Prolog är ett programmeringsspråk som bygger på idéerna om logisk programmering. Idén med Prolog är att få logiken att se ut som ett programmeringsspråk.
Exempel på logisk programmering
Exempel 1
- Fakta: Rubí är en katt.
- Regel: alla katter har tänder.
- Konsultation: Har Rubí tänder?
- Slutsats: ja.
Regeln "alla katter har tänder" kan tillämpas på Ruby, eftersom det finns ett faktum som säger "Ruby är en katt." Detta exempel är inte skrivet med någon syntax för ett riktigt programmeringsspråk.
Exempel 2
Detta exempel kan ses skrivet i Prolog, eftersom det är ett av de mest populära logiska programmeringsspråken:
- feminin (alissa).
- maskulint (bobby).
- maskulint (carlos).
- feminin (doris).
- son_of (doris, carlos).
- son_of (carlos, bobby).
- son_of (doris, alissa).
- far_of (F, P): - hane (F), son_of (P, F).
Detta program blir svårt att läsa, eftersom Prolog skiljer sig särskilt från andra språk. Alla kodkomponenter som liknar "feminin (alissa)." det är fakta.
En regel är "far_ av (F, P): - man (F), barn_ av (P, F)". Symbolen ": -" kan läsas som "är sant om". Med stora bokstäver kan variabler tillämpas på vilket objekt som helst, så F kan stå för carlos, doris, alissa eller bobby. Den här koden kan översättas till:
- Alissa är en kvinna.
- Bobby är en man.
- Carlos är en man.
- Doris är en kvinna.
- Doris är Carlos's dotter.
- Carlos är Bobbys son.
- Doris är Alissas dotter.
- «F är far till P» är sant om F är en man och om P är son till F.
Fråga
Anta att du vill konsultera programmet för mer information. Du kan söka för att hitta vars far Bobby är med:? - far_of (bobby, X). Systemet kommer att indikera följande svar: X = Carlos.
I det här fallet överförs en relation där ett av dess värden är en variabel. Vad Prolog gjorde var att tillämpa olika föremål på detta förhållande tills en av dem var logiskt solid.
Carlos ensamma far är Bobby, och Bobby är manlig. Detta uppfyllde regeln "far_ av (F, P): - maskulina (F), son_of (P, F)." När X är lika med "carlos" är logiken ljud.
Andra förfrågningar
Andra mer allmänna frågor kan ställas till Prolog, vilket gör att systemet genererar flera resultat:
-? - förälder_of (förälder, barn).
- Far = bobby
- Barn = Carlos
- Fader = Carlos
- Barn = doris
Som man har sett kräver logisk programmering inte att ha information om att alissa eller bobby är människor för att få kunskap om dem. Det är faktiskt inte nödvändigt att indikera att det finns ett begrepp som kallas person.
I de flesta icke-logiska programmeringsspråk måste du definiera dessa begrepp först innan du kan skriva program som bearbetar information om människor.
referenser
- Deep AI (2020). Logisk programmering. Hämtad från: deepai.org.
- Wikiversity (2020). Teori om programmeringsspråk / logikprogrammering. Hämtad från: en.wikiversity.org.
- Imperial College London (2006). Logisk programmering. Hämtad från: doc.ic.ac.uk.
- Jia-Huai You (2020). Introduktion till logikprogrammering. University of Alberta. Hämtad från: eng.ucy.ac.cy.
- C2 Wiki (2020). Logisk programmering. Hämtad från: wiki.c2.com.