- Karakteristika ved logisk programmering
- Sandhed og logisk deduktion
- Første ordens logik
- Form for klausul
- Kunstig intelligens
- Eksempler på logisk programmering
- Eksempel 1
- Eksempel 2
- Forespørgsel
- Andre henvendelser
- Referencer
Den logiske programmering er et programmeringsparadigme, der bruger de logiske kredsløb snarere end kun matematiske funktioner til at kontrollere, hvordan fakta og regler er indstillet.
I stedet for en omhyggeligt struktureret strøm af kontrol, der dikterer, hvornår der skal udføres, og hvordan man evaluerer funktionskald eller andre instruktioner, skrives programmets logiske regler som logiske klausuler eller predikater.
Eksempler på logisk programmering i Prolog. Kilde: Af Kuldeepsheoran1 - skærmbillede, CC BY-SA 3.0, wikimedia commons
Denne tilgang, der ofte bruges i genetisk og evolutionær programmering, fortæller generelt en model, hvilket mål man skal nå, snarere end hvordan man skal nå det.
Hver regel indeholder et overskrift og et organ med en formaliseret logik snarere end en eksekverbar matematisk funktion. For eksempel "Og er sandt (header): hvis C1, C2 og C3 er sandt (krop)." Fakta eller resultater udtrykkes uden et organ, som "Og det er sandt."
På nogle programmeringssprog som Prolog kan imperativ programmering dog også inkluderes for at fortælle modellen, hvordan man løser visse problemer. For eksempel "For at løse Y skal du tilføje C1, C2 og C3."
Karakteristika ved logisk programmering
Logisk programmering adskiller sig væsentligt fra de andre eksisterende programmeringsstrategier. I stedet for at give instruktioner til en computer med programmet, etableres forhold mellem objekter. På denne måde kan computeren resonnere disse forhold og dermed nå logiske løsninger.
Inden for et logikprogram er der to hovedkodesæt: fakta og regler. Reglerne anvendes til fakta for at få viden om miljøet.
Sandhed og logisk deduktion
Logikprogrammer kan dekrypteres gennem to vigtige begreber: sandhed og logisk deduktion. Sandheden kommer ud, om beregningen i programmet er sand eller ej, under implementeringen af programsymbolerne. Logisk deduktion afgør, om en logisk klausul er en konsekvens af programmet.
Disse instruktioner fortolkes altid som logiske sætninger og klausuler, idet resultatet af deres udførelse er en logisk konsekvens af de beregninger, den indeholder.
Første ordens logik
Det er en forskydning af propositionslogik. Overvej, om objekter er sande eller falske fra et delvist verdensperspektiv, kaldet et domæne. Logisk programmering er baseret på en generalisering af førsteordens logik.
Denne logik består af syntaks og semantik. Syntaks er det formelle sprog, der bruges til at udtrykke begreber. På den anden side indikerer semantikken i første ordens logiske formler, hvordan man fastlægger den sande værdi af enhver formel.
Denne logik er baseret på et alfabet og et førsteordens sprog samt et sæt aksiomer og inferensregler.
Form for klausul
Det er en undergruppe af førsteordens logik. Det har en normaliseret form, hvor en erklæring er defineret af et universelt præfiks eller kæde af universelle kvantificeringsmidler og et frit sæt kvantificatorer i klausulen.
Når du anmoder om en forespørgsel til programmet, overvejes kroppen af den klausul, hvis header kan falde sammen. Dette er det samme som at anvende en inferensregel i logik.
Som et trin i inferensen vælges to klausuler, der har som egenskab, at den ene indeholder et disjunktivt X (en positiv bogstavelig) og den anden indeholder et disjunktivt ¬X (en negativ bogstavelig). Disse kompromiser er kendt som komplementære.
Fra disse to indledende klausuler er der bygget en ny resolutiv klausul ved hjælp af alle bogstaverne undtagen de komplementære.
Kunstig intelligens
Logisk programmering er en metode, der bruges til at få computere til at udlede, fordi det er nyttigt at repræsentere viden. Logik bruges til at repræsentere viden og slutning til at håndtere den.
Logikken, der bruges til at repræsentere viden, er klausulformen. Det bruges, fordi førsteordens logik er godt forstået og i stand til at repræsentere alle beregningsproblemer.
Prolog er et programmeringssprog, der er baseret på ideerne om logisk programmering. Ideen med Prolog er at få logikken til at se ud som et programmeringssprog.
Eksempler på logisk programmering
Eksempel 1
- Fakta: Rubí er en kat.
- Regel: alle katte har tænder.
- Konsultation: Har Rubí tænder?
- Konklusion: ja.
Reglen "alle katte har tænder" kan anvendes på Ruby, fordi der er en kendsgerning, der siger "Ruby er en kat." Dette eksempel er ikke skrevet med nogen syntaks for et rigtigt programmeringssprog.
Eksempel 2
Dette eksempel kan ses skrevet i Prolog, da det er et af de mest populære programmeringssprog for logik:
- feminin (alissa).
- maskuline (bobby).
- maskuline (carlos).
- feminin (doris).
- son_of (doris, carlos).
- son_of (carlos, bobby).
- son_of (doris, alissa).
- far_of (F, P): - han (F), søn_of (P, F).
Dette program bliver vanskeligt at læse, fordi Prolog er forskellig fra andre sprog. Enhver kodekomponent, der ligner "feminin (alissa)." det er en kendsgerning.
En regel er "far_of (F, P): - mand (F), barn_of (P, F)". Symbolet ": -" kan læses som "er sandt hvis". Med store bogstaver betyder, at variabler kan anvendes på ethvert objekt, så F kunne stå for carlos, doris, alissa eller bobby. Denne kode kan oversættes til:
- Alissa er en kvinde.
- Bobby er en mand.
- Carlos er en mand.
- Doris er en kvinde.
- Doris er Carlos's datter.
- Carlos er Bobbys søn.
- Doris er Alissas datter.
- «F er far til P» er sandt, hvis F er en mand, og hvis P er søn af F.
Forespørgsel
Antag, at du vil konsultere programmet for at få flere oplysninger. Du kan søge og bede om at finde, hvis far Bobby er sammen med:? - far_of (bobby, X). Systemet angiver følgende svar: X = Carlos.
I dette tilfælde overføres et forhold, hvor en af dens værdier er en variabel. Hvad Prolog gjorde, var at anvende forskellige objekter til dette forhold, indtil en af dem var logisk solid.
Carlos's eneste far er Bobby, og Bobby er mand. Dette opfyldte reglen "far_of (F, P): - maskulin (F), son_of (P, F)." Når X er lig med "carlos", er logikken lyd.
Andre henvendelser
Andre mere generelle forespørgsler kan stilles til Prolog, som får systemet til at generere flere resultater:
-? - forælder_of (forælder, barn).
- Far = bobby
- Barn = Carlos
- Far = Carlos
- Barn = doris
Som det har været set, kræver logisk programmering ikke at have de oplysninger, at alissa eller bobby er mennesker for at få viden om dem. Det er faktisk ikke nødvendigt at indikere, at der er et begreb kaldet person.
I de fleste ikke-logiske programmeringssprog skulle du først definere disse begreber, før du kan skrive programmer, der behandler oplysninger om mennesker.
Referencer
- Deep AI (2020). Logisk programmering. Taget fra: deepai.org.
- Wikiversity (2020). Teori om programmeringssprog / logisk programmering. Taget fra: en.wikiversity.org.
- Imperial College London (2006). Logisk programmering. Taget fra: doc.ic.ac.uk.
- Jia-Huai You (2020). Introduktion til logisk programmering. University of Alberta. Taget fra: eng.ucy.ac.cy.
- C2 Wiki (2020). Logisk programmering. Taget fra: wiki.c2.com.