- Caratteristiche della programmazione logica
- Verità e deduzione logica
- Logica del primo ordine
- Forma clausale
- Intelligenza artificiale
- Esempi di programmazione logica
- Esempio 1
- Esempio 2
- Query
- Altre richieste
- Riferimenti
La programmazione logica è un paradigma di programmazione che utilizza i circuiti logici anziché solo funzioni matematiche per controllare come vengono impostati i fatti e le regole.
Invece di un flusso di controllo attentamente strutturato che determina quando eseguire e come valutare chiamate di funzioni o altre istruzioni, le regole logiche del programma vengono scritte come clausole o predicati logici.
Esempi di programmazione logica in Prolog. Fonte: di Kuldeepsheoran1 - screenshot, CC BY-SA 3.0, wikimedia commons
Questo approccio, che viene spesso utilizzato nella programmazione genetica ed evolutiva, generalmente dice a un modello quale obiettivo raggiungere, piuttosto che come raggiungerlo.
Ogni regola contiene un'intestazione e un corpo con una logica formalizzata, piuttosto che una funzione matematica eseguibile. Ad esempio, "And is true (header): if C1, C2, and C3 are true (body)." I fatti o i risultati sono espressi senza un corpo, ad esempio "Ed è vero".
Tuttavia, con alcuni linguaggi di programmazione come Prolog, è possibile includere anche la programmazione imperativa per indicare al modello come risolvere determinati problemi. Ad esempio, "Per risolvere Y, aggiungi C1, C2 e C3".
Caratteristiche della programmazione logica
La programmazione logica è sostanzialmente diversa dalle altre strategie di programmazione esistenti. Invece di dare istruzioni a un computer con il programma, vengono stabilite relazioni tra gli oggetti. In questo modo il computer può ragionare su queste relazioni e raggiungere così soluzioni logiche.
All'interno di un programma logico ci sono due serie principali di codice: fatti e regole. Le regole vengono applicate ai fatti per acquisire conoscenze sull'ambiente.
Verità e deduzione logica
I programmi logici possono essere decifrati attraverso due concetti importanti: verità e deduzione logica. La verità viene fuori se il calcolo nel programma è vero o no, sotto l'implementazione dei simboli del programma. La deduzione logica determina se una clausola logica è una conseguenza del programma.
Queste istruzioni saranno sempre interpretate come frasi e clausole logiche, il risultato della loro esecuzione è una conseguenza logica dei calcoli che contiene.
Logica del primo ordine
È un ramo della logica proposizionale. Considera se gli oggetti sono veri o falsi da una prospettiva del mondo parziale, chiamata dominio. La programmazione logica si basa su una generalizzazione della logica del primo ordine.
Questa logica è composta da sintassi e semantica. La sintassi è il linguaggio formale utilizzato per esprimere concetti. D'altra parte, la semantica delle formule logiche del primo ordine indica come determinare il vero valore di qualsiasi formula.
Questa logica si basa su un alfabeto e una lingua del primo ordine, oltre a un insieme di assiomi e regole di inferenza.
Forma clausale
È un sottoinsieme della logica del primo ordine. Ha una forma normalizzata in cui un'affermazione è definita da un prefisso universale o da una catena di quantificatori universali e un set gratuito di quantificatori nella clausola.
Quando si richiede una query al programma, verrà considerato il corpo della clausola la cui intestazione può coincidere. È lo stesso che applicare una regola di inferenza nella logica.
Come passo nell'inferenza, vengono scelte due clausole che hanno come proprietà che una contiene una X disgiuntiva (un letterale positivo) e l'altra contiene un ¬X disgiuntivo (un letterale negativo). Questi compromessi sono noti come complementari.
Da queste due clausole iniziali si costruisce una nuova clausola risolutiva utilizzando tutti i letterali, tranne quelli complementari.
Intelligenza artificiale
La programmazione logica è una metodologia che viene utilizzata per far dedurre dai computer, perché è utile per rappresentare la conoscenza. La logica viene utilizzata per rappresentare la conoscenza e l'inferenza per gestirla.
La logica utilizzata per rappresentare la conoscenza è la forma clausale. Viene utilizzato perché la logica del primo ordine è ben compresa e in grado di rappresentare tutti i problemi computazionali.
Prolog è un linguaggio di programmazione basato sulle idee della programmazione logica. L'idea di Prolog è di far sembrare la logica un linguaggio di programmazione.
Esempi di programmazione logica
Esempio 1
- Fatto: Rubí è un gatto.
- Regola: tutti i gatti hanno i denti.
- Consultazione: Rubí ha i denti?
- Conclusione: sì.
La regola "tutti i gatti hanno i denti" può essere applicata a Ruby, perché c'è un fatto che dice "Ruby è un gatto". Questo esempio non è scritto con alcuna sintassi per un vero linguaggio di programmazione.
Esempio 2
Questo esempio può essere scritto in Prolog, poiché è uno dei linguaggi di programmazione logica più popolari:
- femminile (alissa).
- maschile (bobby).
- maschile (carlos).
- femminile (doris).
- son_of (doris, carlos).
- son_of (carlos, bobby).
- son_of (doris, alissa).
- padre_di (F, P): - maschio (F), figlio_di (P, F).
Questo programma diventa difficile da leggere, perché Prolog è notevolmente diverso dalle altre lingue. Qualsiasi componente di codice che assomiglia a "femminile (alissa)". è un fatto.
Una regola è "padre_di (F, P): - maschio (F), figlio_di (P, F)". Il simbolo ": -" può essere letto come "è vero se". Le lettere maiuscole indicano che le variabili possono essere applicate a qualsiasi oggetto, quindi F potrebbe stare per carlos, doris, alissa o bobby. Questo codice può essere tradotto come:
- Alissa è una donna.
- Bobby è un uomo.
- Carlos è un uomo.
- Doris è una donna.
- Doris è la figlia di Carlos.
- Carlos è il figlio di Bobby.
- Doris è la figlia di Alissa.
- «F è il padre di P» è vero se F è un uomo e se P è il figlio di F.
Query
Supponiamo di voler consultare il programma per maggiori informazioni. Puoi cercare chiedendo di trovare con chi è il padre Bobby :? - father_of (bobby, X). Il sistema indicherà la seguente risposta: X = Carlos.
In questo caso, viene trasmessa una relazione in cui uno dei suoi valori è una variabile. Ciò che Prolog ha fatto è stato applicare diversi oggetti a questa relazione fino a quando uno di loro non è stato logicamente solido.
L'unico padre di Carlos è Bobby e Bobby è un maschio. Ciò soddisfaceva la regola "padre_di (F, P): - maschile (F), figlio_di (P, F)". Quando X è uguale a "carlos", la logica è valida.
Altre richieste
Altre query più generali possono essere fatte a Prolog, che fanno sì che il sistema generi più risultati:
-? - parent_of (genitore, figlio).
- Padre = Bobby
- Bambino = Carlos
- Padre = Carlos
- Bambino = doris
Come si è visto, la programmazione logica non richiede di avere l'informazione che alissa o bobby sono persone per poter ottenere conoscenza su di loro. Non è infatti necessario indicare che esiste un concetto chiamato persona.
Nella maggior parte dei linguaggi di programmazione non logici, è necessario definire questi concetti prima di poter scrivere programmi che elaborano informazioni sulle persone.
Riferimenti
- Deep AI (2020). Programmazione logica. Tratto da: deepai.org.
- Wikiversità (2020). Teoria dei linguaggi di programmazione / Programmazione logica. Tratto da: en.wikiversity.org.
- Imperial College London (2006). Programmazione logica. Tratto da: doc.ic.ac.uk.
- Jia-Huai You (2020). Introduzione alla programmazione logica. Università di Alberta. Tratto da: eng.ucy.ac.cy.
- Wiki C2 (2020). Programmazione logica. Tratto da: wiki.c2.com.