Internet Italiano. Sezione dedicata ai fondamenti di informatica. Guida alla programmazione con l'algebra di Boole e algoritmi
     PROGRAMMAZIONE
Action script
Ajax
Asp
Asp.net
Assembler
Basic
C e C++
Cgi
Css
Html
Java
Javascript
Perl
Php
Sql
Visuale basic
Xml
     PUBBLICITA'
PROGRAMMAZIONE Programmazione logica
La logica

Tramite l'Algebra di Boole abbiamo già affrontato il concetto di logica ; infatti l'Algebra di Boole non è altro che uno strumento per lo studio della logica con dei metodi matematico – algebrici.

La logica è quella disciplina che studia le leggi del pensiero e quindi sta a metà tra filosofia e matematica , che ha dei risvolti pratico – applicativi e perciò desta interesse nelle materie scientifiche. Uno di questi risvolti che ha avuto l'area dei sistemi di logica formale è proprio la programmazione logica basata su dei linguaggi di programmazione che usano un approccio non imperativo cioè si descrive cosa si vuole per risultato e non il modo per ottenerlo a differenza dei linguaggi imperativi come il C++ in cui il programmatore specifica come vuole che il programma si comporti(cioè specifica come deve essere svolta l'elaborazione). I linguaggi si dividono in:

  • LINGUAGGI DI I GENERAZIONE : linguaggi macchina
  • LINGUAGGI DI II GENERAZIONE : linguaggi assemblativi
  • LINGAGGI DI III GENERAZIONE : C++ e Pascal
  • LINGUAGGI DI IV GENERAZIONE : linguaggi con i quali si descrive cosa si vuole come risultato anziché come deve essere fatta l'elaborazione

Per alcuni problemi lo sviluppo del software con una approccio diverso da quello imperativo come quello logico risulta più semplice. Questi sono i linguaggi di IV generazione.

La logica studia le leggi del pensiero e tramite l'Algebra di Boole trattiamo su aspetti di natura logica in forma geometrica. Le tecniche di ragionamento principali sono due:

  • DEDUTTIVO
  • INDUTTIVO

Nel ragionamento deduttivo si assumono per vere le ipotesi e si cerca di dedurne le proprietà conseguenza delle ipotesi assunte, si fanno cioè delle argomentazioni ; un'argomentazione ha delle premesse e delle conseguenze se affermo che oggi è giovedì non ho fatto altro che un'argomentazione banale. In termini di Algebra di Boole se dico oggi è giovedì ed è 10 Giugno faccio due affermazioni :

  • Oggi è giovedì
  • Oggi è 10 giugno

cioè la mia affermazione equivale ad un'affermazione composta dalle premesse A e B cioè composta dalle due semplici argomentazioni. Se ora suppongo l'affermazione composta vera cioè A * B = 1 scaturisce che A = 1 e B = 1 cioè sono entrambe vere le due affermazioni. Questo è un esempio banale in cui da un insieme di premesse scaturisce una conclusione : il fatto che A sia vero scaturisce attraverso le leggi dell'ALgebra di Boole dal fatto che A * B sono veri. Nella logica non interessa però stabilire la verità ma se un'argomentazione è valida cioè se è tale che le conseguenze scaturiscono dalle premesse . La logica studia quali sono le forme lecite di un'affermazione, quali sono cioè le regole per dedurre le affermazioni da altre affermazioni e studia anche quali sono le regole per verificare che un'affermazione sia vera a partire da certe premesse ( per esempio i teoremi = ipotesi + tesi ). Ciò che ci interessa della logica è la possibilità di fare delle deduzioni in maniera automatica così da dare a tale sistema delle premesse supposte vere e questo sistema ci darà le conseguenze che ci aspettiamo. Se sono in grado di creare tali sistemi di deduzione di questo tipo creo un sistema di calcolo e il linguaggio di programmazione che si bassa su quest'approccio è proprio il linguaggio di programmazione logica o PROLOG
Logica enunciativa

Per costruire dei dimostratori automatici abbiamo bisogno di una logica formale e rigorosa; ci sono vari sistemi di logica, uno di questi è la logica enunciativa e l'Algebra di Boole è una logica enunciativa .La logica enunciativa è una logica in cui i valori di verità sono quelli booleani true o false (ma ne esistono anche altri sistemi basati su più valori) e un enunciato si compone a partire da enunciati atomici mediante i connettivi logici fondamentali che sono AND, OR, NOT (Congiunzione,disgiunzione,negazione) oltre quelli di implicazione ed equivalenza. Le argomentazioni valide nella logica enunciativa sono quelle che derivano dai postulati perché essi sono come le premesse e quindi da essi possiamo far derivare le argomentazioni . Un'argomentazione è vera se scaturisce direttamente o indirettamente da quello che abbiamo supposto vero e quindi può ritenersi valida se scaturisce direttamente dai postulati . Il teorema di De Morgan avendo assunto dei postulati è un' argomentazione che scaturisce dai postulati , un'altra argomentazione che scaturisce dal teorema di De Morgan scaturisce sempre da quei postulati in maniera indiretta ed è valida avendo supposto validi quei postulati. I connettivi logici, visto dal punto di vista algebrico non sono ambigui ; ma se pensiamo al linguaggio naturale possono esserci delle ambiguità : oggi piove ma io ho l'ombrello ho fatto un enunciato molecolare in cui il ma va interpretato non come una disgiunzione ma una congiunzione. La logica quindi ci interessa per per una migliore formalizzazione di quello che consente il linguaggio naturale che spesso è ambiguo . Quando si vuol ragionare sulle argomentazioni può essere utile costruire una tabella di verità perché un'argomentazione è un'affermazione composta da un insieme di premesse e un insieme di conseguenze.

P 1

P 2

……

P k

C 1 .......... C n

F

F

........

F

.....

F

F

........

V

............

V

V

........

V

............

Allora un' argomentazione è valida quando le conseguenze scaturiscono dalle premesse e per ragionare su ciò è utile ragionare modellando questa argomentazione con tabelle di verità : le premesse nella logica enunciativa e nell'Algebra di Boole non sono altro che enunciati atomici elementari che possono avere il valore vero – falso e quindi un'argomentazione può essere analizzata dettagliatamente considerando tutte le possibili combinazioni delle premesse e vedere cosa succede alle conseguenze per tutte le possibili combinazioni delle premesse. L'argomentazione la possiamo vedere come una funzione di k variabili booleane nell'Algebra di Boole o come un insieme di n funzioni delle k variabili booleane . Se k sono le variabili booleane le combinazioni delle premesse sono 2 k

Bisogna capire se le argomentazioni sono valide e cosa succede per ognuna delle combinazioni delle k variabili dipendenti cioè delle k premesse. Per esempio la frase chi non studia è bocciato è un'argomentazione e la possiamo articolare come segue : chi non studia e non è fortunato è bocciato che è un'affermazione che scaturisce da due premesse :

  1. Studia o non studia
  2. E' fortunato o non è fortunato

A

B

C

F

F

V

F

V

F

V

F

F

V

V

F

 

P 1

P 2

……

P k

C 1 .......... C n

F

F

........

F

.....

F

F

........

V

............

V

V

........

V

............

Ci sono 4 possibili combinazioni e con la tabella posso specificare cosa intendi con questa frase.

Supponiamo che :

A = STUDIA (vero,falso);
B = FORTUNATO (vero,falso);
C = BOCCIATO;

Tautologia

Una tautologia è un'argomentazione identicamente vera ed è il contrario di una contraddizione cioè di un enunciato identicamente falso. Tramite le tabelle di verità si può distinguere tra una contraddizione e una tautologia , cioè quando non dipende dai valori delle variabili indipendenti.

CONTRADDIZIONE

F

F

F

F

TAUTOLOGIA

V

V

V

V

A noi interessa capire se un'argomentazione o un enunciato è valido cioè se è soddisfacibile . cioè un enunciato che non sia una contraddizione. Se faccio un'affermazione che ha come conseguenze un'insieme di enunciati tutti questi enunciati sono simultaneamente soddisfacibile se è soddisfacibile la loro congiunzione . Se dico il Napoli è una grande squadra e fortissima ho fatto un'affermazione che ha più conseguenze e che sono tutte simultaneamente soddisfacibile.

Per ragionare si usano le REGOLE DI INFERENZA

- AND A · B => A se A e B sono vere allora è vera A
+ AND A , B => A · B se è vera A ed è vera B allora è vera A * B
+ OR A => A È B Se è vera A è vera A unione B
- OR A È + B , A => B se è vera A + B e A è falso allora è vero B
MODUS TOLLENS A => B , A => B se A implica B e A è vera ne segue che B è vera
MODUS PONENS A => B , B => A se A implica B e B è falsa ne segue che anche A è falsa

Un classico ragionamento matematico può essere il DEDUCTIO AD ABSURDUM ( RAGIONAMENTO PER ASSURDO) . Supposta vera un'ipotesi se da questa si arriva ad una contraddizione evidentemente tale ipotesi è falsa ( in pratica è il MODUS TOLLENS ) ; ma al logica enunciativa non consente neppure di ragionare sui sillogismi. Per esempio se tutti gli uomini sono mortali e Socrate è un uomo ne consegue che Socrate è mortale ; non si può ragionare su questo con la logica enunciativa perché mancano il concetto di individuo appartenente all'insieme e quindi di proprietà dell'insieme( che è una proprietà di tutti gli individui dell'insieme).

Se introduco questi concetti passo dalla logica enunciativa alla logica predicativa che in pratica è l'estensione della logica enunciativa .
Logica enunciativa
  • Concetto di UNIVERSO del discorso ( che è l'insieme di riferimento)
  • Concetto di INDIVIDUO ( come elemento dell'insieme)
  • Concetto di PROPRIETA' ( che può essere vero o no)
  • Concetto di relazione tra gli individui

Posso esprimere introducendo un universo del discorso U con riferimento al sillogismo di prima ( che è quello degli uomini ) una proprietà P(x) che è quella di essere mortale che viene espressa attraverso il predicato ( es : MORTALE(x) ) e il concetto di individuo x Î U . Per poter ragionare sui sillogismi bisogna introdurre un modo per quantificare sull'universo del discorso e si introducono due quantificatori fondamentali :

  1. QUANTIFICATORE UNIVERSALE " " x MORTALE(x)
  2. QUANTIFICATORE ESISTENZIALE $ $ x FELICE(x)

Analogamente si introducono le relazioni tra gli individui della logica predicativa come più vecchio (x,y) è vero se x è più vecchio di y .

La logica predicativa intesa come logica enunciativa più i quantificatori e le relazioni si chiama logica dei predicati di primo ordine perché quando si predica si predica sugli individui. Ci sono poi logiche in cui i predicatori possono predicare non solo sugli individui ma anche sui predicati o sulle relazioni e sono logiche di ordine superiore in cui diventa più difficile vedere la validità dell'argomentazione.

Si dice poi che un sistema di logica è decidibile se è sempre possibile classificare le argomentazioni in valide o non valide. Church attraverso un teorema dimostrò che la logica predicativa non è decidibile cioè non c'è un algoritmo generale che ci può dire se un'argomentazione è vera o no ma si può dire se un'affermazione è vera oppure no. Più precisamente si può dimostrare che se un'argomentazione è valida allora la si può ottenere automaticamente, se non è valida non sono sicuro di poterlo dimostrare automaticamente. Il problema della decidibilità è un problema teorico ma per molti problemi pratici si riesce a dimostrare automaticamente i teoremi cioè la validità delle argomentazioni. Questo è ciò che si fa nei sistemi basati sulla PROGRAMMAZIONE LOGICA . La PROLOG non si basa su un approccio imperativo ma dichiarativo cioè si forniscono i fatti , le regole e le relazioni tra i vari individui e poi per le risposte si interroga il sistema; il sistema ha un algoritmo che opera secondo le regole di inferenza e ci darà una risposta.
InternetItaliano.com © 2006 - Contatti - Privacy - Mappa sito - Pubblicità - Segnala un sito - Network - Siti e pagine ospiti
Z-System di De rinaldis Marco P.iva 0504459698 - Legnano (MI) - Design by Pagine Aziende