- A logikai programozás jellemzői
- Igazság és logikai következtetés
- Első rend logika
- Clausal forma
- Mesterséges intelligencia
- Logikai programozási példák
- 1. példa
- 2. példa
- Lekérdezés
- Egyéb kérdések
- Irodalom
A logikai programozás egy olyan programozási paradigma, amely a logikai áramköröket használja, nem csupán a matematikai függvényeket a tények és a szabályok beállításának ellenőrzésére.
A gondosan strukturált ellenőrzési folyamat helyett, amely diktálja, mikor kell végrehajtani és hogyan kell értékelni a függvényhívásokat vagy más utasításokat, a program logikai szabályai klauzulaként vagy logikai predikátumként vannak írva.

Példák a logikai programozásra a Prologban. Forrás: Kuldeepsheoran1 - képernyőkép, CC BY-SA 3.0, wikimedia commons
Ez a genetikai és evolúciós programozásban gyakran alkalmazott megközelítés általában egy modellnek mondja, hogy melyik célt kell elérni, nem pedig annak elérésére.
Minden szabály fejlécet és formátumú logikával ellátott testet tartalmaz, nem pedig egy végrehajtható matematikai függvényt. Például: "És igaz (fejléc): ha C1, C2 és C3 igaz (test)". A tényeket vagy eredményeket test nélkül fejezik ki, például: "És igaz".
Néhány programozási nyelvnél, például a Prolognál, szükségszerű programozás is beilleszthető, hogy megmondja a modellnek, hogyan kell megoldani bizonyos problémákat. Például: "Az Y megoldásához add hozzá C1, C2 és C3."
A logikai programozás jellemzői
A logikai programozás lényegesen különbözik a többi meglévő programozási stratégiától. Ahelyett, hogy utasításokat adna a számítógépnek a programmal, az objektumok közötti kapcsolatok jönnek létre. Ilyen módon a számítógép meg tudja indokolni ezeket a kapcsolatokat, és így logikai megoldásokhoz juthat.
A logikai programon belül két fő kódkészlet létezik: tények és szabályok. A szabályokat a tényekre alkalmazzák a környezettel kapcsolatos ismeretek megszerzése érdekében.
Igazság és logikai következtetés
A logikai programokat két fontos fogalom segítségével lehet megfejteni: az igazság és a logikus dedukció. Az az igazság derül ki, hogy a programban szereplő számítás igaz-e vagy sem, a program szimbólumok végrehajtása alatt. A logikai dedukció meghatározza, hogy a logikai záradék a program következményei-e.
Ezeket az utasításokat mindig logikai mondatokként és záradékként fogják értelmezni, végrehajtásuk eredménye az abban található számítások logikus következménye.
Első rend logika
Ez a javaslati logika kivezetése. Fontolja meg, hogy a tárgyak valóban vagy hamisak-e részleges világszempontból, amelyet tartománynak hívnak. A logikai programozás az elsőrendű logika általánosításán alapul.
Ez a logika szintaxisból és szemantikából áll. A szintaxis a fogalmak kifejezésére használt formális nyelv. Másrészt az elsőrendű logikai képletek szemantikája megmutatja, hogyan lehet meghatározni bármely képlet valódi értékét.
Ez a logika ábécére és elsőrendű nyelvre, valamint axiómákra és következtetési szabályokra épül.
Clausal forma
Ez az elsőrendű logika részhalmaza. Normalizált formában van, ahol az állítást egyetemes előtag vagy univerzális számszerűsítő lánc határozza meg, valamint a záradékban található szabad számszerűsítő készlet.
Amikor lekérdezést kér a programról, a záradék törzsét vesszük figyelembe, amelynek fejléce egybeeshet. Ez ugyanaz, mint egy következtetési szabály alkalmazása a logikában.
A következtetés lépésként két olyan záradékot választunk, amelyek tulajdonsága az, hogy az egyik diszjunktív X-et tartalmaz (pozitív literál), a másik diszjunktív ¬X-t (negatív literál) tartalmaz. Ezeket a kompromisszumokat komplementernek nevezik.
E két kezdeti záradékból egy új felbontó záradék épül fel, az összes literál felhasználásával, kivéve a kiegészítõket.
Mesterséges intelligencia
A logikai programozás egy módszertan, amelyet a számítógépek levezetésére használnak, mivel hasznos a tudás ábrázolása. A logikát a tudás ábrázolására és annak kezelésére való következtetésre használják.
A tudás ábrázolásához használt logika a clausal forma. Azért használják, mert az elsőrendű logika jól érthető és képes kiszámítani az összes számítási problémát.
A Prolog egy programozási nyelv, amely a logikai programozás ötletein alapul. A Prolog célja, hogy a logika programozási nyelvnek tűnjön.
Logikai programozási példák
1. példa
- Tény: Rubí macska.
- Szabály: minden macskának foga van.
- Konzultáció: Van Rubí-nak foga?
- Következtetés: igen.
A „minden macskának foga van” szabály alkalmazható Rubyra, mert van egy tény, hogy „Ruby macska”. Ez a példa nincs írva valós programozási nyelv szintaxisával.
2. példa
Ez a példa látható Prologban írt nyelven, mivel az egyik legnépszerűbb logikai programozási nyelv:
- nőies (alissa).
- férfias (bobby).
- férfias (carlos).
- nőies (doris).
- son_of (doris, carlos).
- fia (Carlos, Bobby).
- son_of (doris, alissa).
- apja (F, P): - hím (F), fiú_ (P, F).
Ez a program nehezen olvasható, mert a Prolog jelentősen különbözik a többi nyelvtől. Bármely kódösszetevő, amely hasonlít a "nőies (alissa)" kifejezésre. ez egy tény.
Az egyik szabály a "apa (F, P): - férfi (F), gyermek" (P, F) ". A ": -" szimbólum úgy olvasható, hogy "igaz, ha". A nagybetűk azt jelentik, hogy a változók bármilyen objektumra alkalmazhatók, tehát az F jelentése carlos, doris, alissa vagy bobby. Ezt a kódot le lehet fordítani:
- Alissa nő.
- Bobby egy ember.
- Carlos egy ember.
- Doris nő.
- Doris Carlos lánya.
- Carlos Bobby fia.
- Doris Alissa lánya.
- "F az P atyja" akkor igaz, ha F egy ember, és ha P a F fia.
Lekérdezés
Tegyük fel, hogy további információt szeretne megtudni a programról. Kereshet, hogy megkérdezze, kinek az apjának tartozik Bobby:? - apja_ (Bobby, X). A rendszer a következő választ jelzi: X = Carlos.
Ebben az esetben viszony kerül átadásra, ahol annak egyik értéke változó. Amit Prolog tett, az eltérő tárgyakat alkalmazott ehhez a kapcsolathoz, amíg egyikük logikusan szilárd volt.
Carlos egyetlen apja Bobby, és Bobby férfi. Ez teljesítette az "apja (F, P): - férfias (F), fiú_ ((P, F)" szabályt. Ha X megegyezik a "carlos" -kal, akkor a logika egészséges.
Egyéb kérdések
További általánosabb kérdéseket tehetünk fel a Prolog-hoz, amelyek miatt a rendszer több eredményt generál:
-? (szülő, gyermek).
- Apa = bobby
- Gyerek = Carlos
- Apa = Carlos
- Gyerek = doris
Mint láttuk, a logikai programozáshoz nem szükséges az információ, hogy az alissa vagy a bobby emberek, hogy megismerjék őket. Valójában nem szükséges jelezni, hogy létezik egy személynek nevezett fogalom.
A legtöbb nem logikus programozási nyelvben előbb meg kell határoznia ezeket a fogalmakat, mielőtt olyan programokat írna, amelyek az emberekkel kapcsolatos információkat dolgozzák fel.
Irodalom
- Deep AI (2020). Logikai programozás. Forrás: deepai.org.
- Wikiversity (2020). A programozási nyelvek elmélete / logikai programozás. Forrás: en.wikiversity.org.
- Imperial College London (2006). Logikai programozás. Feltöltve: doc.ic.ac.uk.
- Jia-Huai You (2020). Bevezetés a logikai programozásba. Alberta Egyetem. Feltöltve: eng.ucy.ac.cy.
- C2 Wiki (2020). Logikai programozás. Forrás: wiki.c2.com.
