Motivo per apprendere la logica proposizionale e predicata


14

Sono in grado di comprendere l'importanza che gli informatici o gli ingegneri collegati allo sviluppo software avrebbero dovuto comprendere come base lo studio delle logiche di base.

Ma ci sono compiti / lavori che richiedono esplicitamente la conoscenza di questi, oltre ai compiti che richiedono qualsiasi tipo di rappresentazione della conoscenza usando Knowledge Base? Voglio ascoltare i tipi di attività, piuttosto che le risposte concettuali.

Il motivo per cui lo chiedo è solo per mia curiosità. Mentre gli studenti CS devono trascorrere un certo periodo di tempo su questo argomento, alcuni corsi ad alta intensità di praticità (ad es. Classe AI ) hanno saltato completamente questo argomento. E mi chiedo solo che per esempio sapere predicate logicpossa aiutare a disegnare ER diagramma potrebbe non essere un requisito.


Aggiornamento 27/05/2012) Grazie per le risposte. Ora penso di comprendere e concordare totalmente con l'importanza di logicCS con la sua vasta gamma di applicazioni. Ho appena scelto la migliore risposta davvero dall'impressionabilità che ho ottenuto con la soluzione per Windowsil problema della schermata blu.


4
Mentre stavo scrivendo la mia risposta, ho scoperto che la portata della tua domanda non era chiara. Ti stai limitando a CS, o industria, o entrambi, o forse sollevare in generale?
Dave Clarke,

@Dave Clarke Sì, ho scoperto che non è abbastanza chiaro. La prima cosa che volevo sapere era in quale settore è richiesta l'alfabetizzazione della logica specifica (anche se apprezzo la tua risposta solo per convincermi che qualsiasi ingegnere del software non dovrebbe saltare questo argomento).
Isacco

Sarebbe bello se potessi cambiare la tua domanda per catturare ciò che stai veramente cercando.
Dave Clarke,

Come si scriverà esattamente una ifcondizione senza logica proposizionale?
edA-qa mort-ora-y,

Risposte:


22

Tendo ad amare l' Unificazione e qualsiasi cosa ad essa collegata. Se non conosci la logica proposizionale e predicata, allora stai saltando le basi della logica. Se sei interessato a qualcosa elencato , sarebbe come avere un interesse per la matematica e saltare l'aggiunta e la moltiplicazione. La logica non è solo per l'IA.

Come risposta pratica, ricordi il problema Intel in virgola mobile e come non li vedi più? Grazie all'uso dei dimostratori di teoremi sono un ricordo del passato. Ricorda la schermata blu della morte di Microsoft . Grazie ai solutori SAT, al controllo del modello e ad altre soluzioni basate sulla logica, sono una specie in pericolo.


3
specie in via di estinzione [citazione nee— Errore di segmentazione. Core scaricato.
JeffE,

@JeffE Se stai cercando una citazione, presento invece prove concrete. Quando è stata l'ultima volta che ne hai visto uno? :)
Guy Coder

3
Non ne ho mai visto uno. Uso un Mac.
JeffE,

1
I Mac di @JeffE sono sistemi a coppie ravvicinate, in cui tutto, dall'architettura della macchina ai programmi applicativi, viene deciso da un team / organizzazione. I sistemi Windows sono aperti, dove una varietà di produttori e team fornisce soluzioni che si collegano, basandosi solo sugli standard e sulle interfacce specificate (spesso vagamente e vagamente). Sono molto più una sfida per l'Informatica. I team Microsoft che hanno sviluppato le tecniche di dimostrazione / analisi statica del teorema per farlo in sicurezza hanno fatto progressi fondamentali nel nostro campo.
Uday Reddy,

1
@UdayReddy: Non ho dubbi sul fatto che i ricercatori Microsoft abbiano compiuto progressi fondamentali o che il BSOD sia molto meno comune di prima. Ma "specie in pericolo" è iperbole non supportata; il codice difettoso non è l'unica fonte di arresti anomali.
JeffE,

22

Esistono connessioni estremamente profonde e pervasive tra la logica e l'informatica. Nel comprendere ciò che potrebbero essere, tenere presente che l'informatica è anche chiamata "tecnologia dell'informazione" o "informatica", il che significa che i sistemi informatici acquisiscono, elaborano e forniscono informazioni. Bene, la logica è una cosa simile. Studia come le informazioni vengono catturate in frasi e come è possibile che un'affermazione sia una conseguenza di un'altra, cioè come il suo contenuto informativo sia già presente in un'altra affermazione (o raccolta di affermazioni). In tal senso, la logica e l'informatica sono essenzialmente le stessedisciplina, concentrandosi su diversi aspetti. I logici (Church, Kleene, Turing, Post e i loro studenti e colleghi) hanno creato la disciplina dell'informatica e molti logici continuano a dare contributi all'informatica, in particolare Jean-Yves Girard e i suoi studenti.

Ecco alcune applicazioni standard di logica in Informatica:

  • La progettazione di circuiti digitali si basa interamente sulla logica della proposta, al punto che i suoi ingegneri la chiamano "progettazione logica" piuttosto che "progettazione di circuiti". Anche scrivere un programma per computer spesso si pensa che abbia ideato la sua "logica". (Si noti che la "logica" in quest'ultimo senso è un'idea informale piuttosto che una logica formale, utilizzata per fare riferimento al flusso di informazioni attraverso il programma e se è stato elaborato correttamente.)

  • La logica predicata e il suo cugino matematico, la teoria degli insiemi, sono utilizzati in una varietà di linguaggi informatici , ad esempio il linguaggio SQL per le query di database relazionali. Esistono anche linguaggi di programmazione basati sulla logica, chiamati "linguaggi di programmazione logica".

  • La rappresentazione della conoscenza , che hai già menzionato, ha molti formalismi basati sulla logica. Anche se utilizza formalismi non logici, molti di essi hanno ancora un significato logico e quindi sono basati sulla logica.

  • La logica probabilistica, in cui le affermazioni non hanno solo valori veri / falsi, ma livelli di certezza / incertezza, è sempre più la base per i sistemi di apprendimento automatico .

  • Se vuoi dichiarare formalmente cosa fa un programma, cioè dare una specifica del programma , finirai per usare una forma di un linguaggio logico. In effetti, ci sono molti linguaggi di specifica del programma, come Z e B, che si basano sulla logica predicata e sulla teoria degli insiemi. Esistono anche linguaggi di specifica basati sulla logica equazionale, come Larch. Gli informatici spesso inventano nuove logiche per rappresentare le esigenze dell'informatica, ad esempio Hoare Logic e Separation Logic, oppure raccolgono e sviluppano varie forme sottoutilizzate di logiche tradizionali, come la logica temporale e la logica modale, e le sviluppano ulteriormente.

  • Se vuoi verificare se un programma fa quello che dovrebbe fare, finisci per usare non solo il linguaggio della logica, ma l'intero meccanismo della logica: teoria delle prove, teoria dei modelli e procedure decisionali. La tecnologia di verifica sta ora crescendo a passi da gigante e mi aspetto che, in un altro decennio o giù di lì, vengano usati abitualmente per quasi tutto lo sviluppo del software.

In effetti, le connessioni tra la logica e l'informatica sono così profonde e pervasive che direi che è difficile essere un buon informatico senza una conoscenza approfondita della logica.

La ragione per cui alcuni scienziati dell'IA hanno sottovalutato la logica in questo momento è che alcuni dei primi sviluppatori dell'IA avevano proposto la logica standard come strumentopiuttosto che una fondazione. L'IA, per sua stessa natura, promette di offrire magia. Non dobbiamo fare il duro lavoro dei sistemi di programmazione per fornire risultati. Sarebbero in grado di capire da soli come produrre soluzioni perché sarebbero "intelligenti". La logica sembrava indicare la strada perché se i sistemi informatici comprendessero la logica e sapessero elaborare le informazioni usando le regole della logica, sarebbero in grado di fornire magia. Quel tipo di fede nella logica era, a posteriori, fuori luogo. In primo luogo, la logica standard è troppo forte e allo stesso tempo troppo debole. È troppo forte nel senso che le regole della logica sono troppo generali per escogitare procedure efficaci. È anche troppo debole perché è la logica ideata dai matematici per le esigenze della matematica e non lo fa Hanno il vocabolario necessario per gestire molti altri tipi di informazioni del mondo reale che i sistemi di intelligenza artificiale devono gestire (come incertezza, informazioni contestuali come tempo, cambiamento, conoscenza, agenzia e così via). Quindi, l'IA sta attualmente subendo un contraccolpo contro la logica. Ma penso che, quando supereranno quel contraccolpo, gli scienziati dell'IA realizzeranno che tutti i metodi più recenti sono ancora basatilogica, ampiamente interpretata .


Aggiungi database relazionali!
reinierpost,

Risposta molto bella e completa, menzione a Jean-Yves Girard. Ritieni che la logica probabilistica sia lo stesso campo di ricerca della logica fuzzy? In letteratura incontriamo i due termini e vorrei sapere se denotano lo stesso dominio di ricerca.
zurgl

@zurgl. La mia comprensione è che non esiste un singolo formalismo che sia fermamente chiamato "logica probabilistica". La logica fuzzy è davvero uno di questi formalismi, ma ce ne sono anche altri. La forma del ragionamento probabilistico che oggi ha più successo nell'intelligenza artificiale è l'inferenza bayesiana. Tuttavia, le sue basi logiche non sono ancora saldamente poste.
Uday Reddy,

17

La logica è fondamentale per tutta l'informatica teorica. Senza apprenderli, non sarai in grado di cogliere correttamente la semantica del linguaggio di programmazione, le macchine di Turing, la programmazione logica, la calcolabilità e così via. Anche il ragionamento sui tuoi programmi sarà più difficile senza di essa. Certamente, provare a fare una prova matematica di alcuni concetti di CS è praticamente impossibile.

O forse stai chiedendo degli usi nell'industria. La logica dell'apprendimento costituisce la base per apprendere come ragionare chiaramente e vedere buchi negli argomenti degli altri. La logica è fondamentale, che tu usi o meno i simboli formali.


Ti stai perdendo algoritmi.
Yuval Filmus,

4
È incluso in "e così via".
Dave Clarke,

9

Uno dei compiti ricorrenti che i professionisti e i teorici della CS devono affrontare è quello di acquisire fiducia nella correttezza del loro codice.

Esistono due approcci principali:

  1. Prova: elaborare una prova logica che parte di un sistema abbia determinate proprietà, eventualmente supportate da condizioni preliminari, progettazione per contratto, controllori di codice.
  2. Test: verifica che determinate proprietà valgano per una varietà di input, quindi induci che tale proprietà è valida per altri input.

Il primo, basato su metodi logici, è spesso l'unica opzione quando

  1. Non c'è input tipico. Ad esempio, quando si verificano le proprietà di sicurezza, è necessario preoccuparsi degli input atipici, a meno che non si possa ragionare logicamente su quali input sono atipici, è improbabile che si ottenga una buona copertura.
  2. Lo spazio di configurazione è molto ampio, quindi è necessario scomporlo in parti ragionando logicamente su quali parti possono influenzare quali altre parti prima di eseguire il test in locale.
  3. Hai solo documentazione che descrive il comportamento dei casi limite di sistemi al di fuori del tuo controllo. Potresti essere in grado di simularli ma non puoi testare cosa succede quando una dipendenza esterna fallisce perché non sei in grado di farlo fallire per motivi legali o etici.

Il test empirico in assenza di una prova è sostanzialmente un sostituto della prova. Quando si progetta un sistema per essere testabile, si sta creando uno schizzo di prova in cui si riempiono parti della prova con "test X, Y e Z qui". La capacità di ragionare logicamente è essenziale per essere in grado di progettare un sistema testabile. Se il sistema non è testabile o dimostrabile, il suo progettista / architetto non ha nessun affare a dire che è adatto all'uso previsto.


6

Due campi più importanti in cui la logica gioca un ruolo vitale sono:

  1. Specifica e verifica del linguaggio formale .
  2. Classi trattebili di parametri fissi .

Sembra aver bisogno di alcuni chiarimenti, nei linguaggi formali è necessario lavorare molto sulla logica, per chiarimenti dare un'occhiata a: 1. Linguaggio formale . 2. Introduzione aZ.

In breve: 1. La definizione del linguaggio ha bisogno della logica, 2: La giustizia delle sue procedure ha bisogno della logica, 3. Le procedure di verifica hanno bisogno della logica.

Devo dire che questo è diverso dalla progettazione del compilatore o ..., Questa è la definizione "formale" dei linguaggi, il motivo principale per farlo è dimostrare la correttezza del linguaggio o del modello, avendo anche una prova formale. Questo può essere usato per verificare i modelli di software, trovare errori prima dell'implementazione, trovare di nuovo deadlock prima di implementare, .... Per i software che simulano questo, puoi dare un'occhiata a NModel .

Ora, perché nei problemi di tracciabilità dei parametri fissi è necessario lavorare con la logica, è possibile dividere le classi di tracciabilità dei parametri fissi con diversi livelli di logica, possono essere convertiti l'uno nell'altro: logica in automi, automi in grafico e viceversa, ma se tu sei un esperto di logica puoi dividerli e deciderli semplicemente, il teorema più importante (dopo il teorema di Robertson e Seymour ), in questo campo è il teorema di Courcelle . per maggiori informazioni leggi l' indagine sul teorema di Meta Algorithmic .


Mentre la logica può essere usata per definire le lingue, questo non è certo un "ruolo vitale" nella mia esperienza. Non vedo affatto come le logiche si collegano a FPT.
Raffaello

@Raphael, vedo che la risposta al tuo commento richiede più di una riga, ho aggiornato la mia risposta. Penso di averti risposto, ma se ancora pensi che non sia OK, dimmi, della mia parte "formale" penso che il mio primo link wiki non fosse abbastanza buono, ho aggiunto ulteriori informazioni, anche per la seconda parte ho aggiunto un bel documento e se ti piace saperne di più, puoi leggerlo.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.