Raison d'apprendre la logique propositionnelle et prédicat

14

Je peux comprendre l'importance que les informaticiens ou tout ingénieur spécialisé dans le développement de logiciels aient compris comme base d'étude de la logique de base.

Mais y a-t-il des tâches / emplois qui nécessitent explicitement la connaissance de ceux-ci, autres que les tâches qui nécessitent tout type de représentation des connaissances à l'aide Knowledge Base? Je veux entendre les types de tâches, plutôt que les réponses conceptuelles.

La raison pour laquelle je pose cette question vient de ma curiosité. Alors que les étudiants CS doivent consacrer un certain temps à ce sujet, certains cours intensifs pratiques (par exemple AI-Class ) ont complètement ignoré ce sujet. Et je me demande simplement que, par exemple, la connaissance predicate logicpourrait aider à dessiner ER diagrammais ne serait pas une exigence.


Mise à jour 27/05/2012) Merci pour les réponses. Maintenant, je pense que je comprends parfaitement et suis d'accord avec l'importance de logicCS avec sa grande quantité d'application. Je viens de choisir la meilleure réponse vraiment de l'impressionnante que j'ai obtenue avec la solution pour Windowsle problème d'écran bleu.

IsaacS
la source
4
Au moment où j'écrivais ma réponse, j'ai trouvé que la portée de votre question n'était pas claire. Vous limitez-vous au CS, à l'industrie, ou aux deux, ou peut-être à l'ascenseur en général?
Dave Clarke
@Dave Clarke Oui, j'ai trouvé que ce n'était pas assez clair aussi. La première chose que je voulais savoir était dans quelle industrie la littératie de la logique spécifique est requise (, bien que j'apprécie votre réponse juste pour me convaincre que tout ingénieur logiciel ne devrait pas sauter ce sujet).
IsaacS
Ce serait bien si vous pouviez changer votre question pour capturer ce que vous cherchez vraiment.
Dave Clarke
Comment écrirait-on exactement une ifcondition sans logique propositionnelle?
edA-qa mort-ora-y

Réponses:

22

J'ai tendance à aimer l' Unification et tout ce qui s'y rapporte. Si vous ne connaissez pas la logique propositionnelle et prédictive, vous ignorez les bases de la logique. Si vous vous intéressez à tout ce qui figure sur la liste , ce serait comme si vous vous intéressiez aux mathématiques et si vous sautez l'addition et la multiplication. La logique n'est pas réservée à l'IA.

Comme réponse pratique, vous vous souvenez du problème des virgules flottantes Intel et comment vous ne les voyez plus? Grâce à l'utilisation de prouveurs de théorèmes, ils appartiennent au passé. N'oubliez pas l' écran bleu de la mort de Microsoft . Grâce aux solveurs SAT, à la vérification des modèles et à d'autres solutions basées sur la logique, ils sont une espèce en voie de disparition.

Guy Coder
la source
3
espèces menacées d'extinction [nee de citation— Erreur de segmentation. Noyau vidé.
JeffE
@JeffE Si vous cherchez une citation, je présente plutôt des preuves réelles. À quand remonte la dernière fois que vous en avez vu un? :)
Guy Coder
3
Je n'en ai jamais vu. J'utilise un Mac.
JeffE
1
Les Mac @JeffE sont des systèmes étroitement couplés, où tout, de l'architecture de la machine aux programmes d'application, est décidé par une seule équipe / organisation. Les systèmes Windows sont ouverts, où une variété de fabricants et d'équipes fournissent des solutions qui se connectent entre elles, en s'appuyant uniquement sur les normes et les interfaces qui ont été spécifiées (souvent de manière lâche et vague). Ils représentent beaucoup plus un défi pour l'informatique. Les équipes Microsoft qui ont développé les techniques d'analyse statique / de démonstration de théorèmes pour le faire en toute sécurité ont fait des progrès fondamentaux dans notre domaine.
Uday Reddy
1
@UdayReddy: Je ne doute pas que les chercheurs de Microsoft aient fait des progrès fondamentaux, ou que le BSOD soit beaucoup moins courant qu'avant. Mais "espèce en voie de disparition" est une hyperbole non prise en charge; un code défectueux n'est pas la seule source de plantages.
JeffE
22

Il existe des liens extrêmement profonds et omniprésents entre la logique et l'informatique. Pour comprendre ce qu'ils peuvent être, gardez à l'esprit que l'informatique est également appelée «technologie de l'information» ou «informatique», ce qui signifie que les systèmes informatiques capturent, traitent et fournissent des informations. Eh bien, la logique est une chose similaire. Il étudie comment les informations sont capturées dans les phrases et comment il est possible qu'une déclaration soit la conséquence d'une autre, c'est-à-dire comment son contenu d'information est déjà présent dans une autre déclaration (ou collection de déclarations). En ce sens, la logique et l'informatique sont essentiellement les mêmesdiscipline, en se concentrant sur différents aspects. Les logiciens (Church, Kleene, Turing, Post et leurs étudiants et collègues) ont créé la discipline de l'informatique, et de nombreux logiciens continuent de contribuer à l'informatique, notamment Jean-Yves Girard et ses étudiants.

Voici quelques applications standard de la logique en informatique:

  • La conception des circuits numériques est entièrement basée sur la logique de proposition, à tel point que ses ingénieurs l'appellent "conception logique" plutôt que "conception de circuits". Même l'écriture d'un programme informatique implique souvent de concevoir sa «logique». (Notez que la "logique" dans ce dernier sens est une idée informelle plutôt qu'une logique formelle, utilisée pour faire référence au flux d'informations à travers le programme et si elles sont traitées correctement.)

  • La logique des prédicats et son cousin mathématique, la théorie des ensembles, sont utilisés dans divers langages informatiques , par exemple le langage SQL pour les requêtes de bases de données relationnelles. Il existe également des langages de programmation basés sur la logique, appelés "langages de programmation logiques".

  • La représentation des connaissances , que vous avez déjà mentionnée, a de nombreux formalismes basés sur la logique. Même s'il utilise des formalismes non logiques, beaucoup d'entre eux ont encore une signification logique et sont donc basés sur la logique.

  • La logique probabiliste, où les énoncés n'ont pas seulement des valeurs vraies / fausses, mais des niveaux de certitude / incertitude, est de plus en plus le fondement des systèmes d'apprentissage automatique .

  • Si vous voulez déclarer formellement ce que fait un programme, c'est-à-dire donner une spécification de programme , vous finirez par utiliser une certaine forme de langage logique. En effet, il existe de nombreux langages de spécification de programme, comme Z et B, qui sont basés sur la logique des prédicats et la théorie des ensembles. Il existe également des langages de spécification basés sur la logique équationnelle, comme le mélèze. Les informaticiens inventent souvent de nouvelles logiques pour représenter les besoins de l'informatique, par exemple, la logique de Hoare et la logique de séparation, ou ils prennent et développent diverses formes sous-utilisées de logiques traditionnelles, telles que la logique temporelle et la logique modale, et les développent davantage.

  • Si vous voulez vérifier si un programme fait ce qu'il est censé faire, vous finissez par utiliser non seulement le langage de la logique, mais l'ensemble de la machinerie de la logique: théorie des preuves, théorie des modèles et procédures de décision. La technologie de vérification se développe maintenant à pas de géant et je m'attends à ce que, dans une dizaine d'années environ, elle soit utilisée de façon routinière pour presque tous les développements logiciels.

En fait, les liens entre la logique et l'informatique sont si profonds et omniprésents que je dirais qu'il est difficile d'être un bon informaticien sans une compréhension approfondie de la logique.

La raison pour laquelle certains scientifiques de l'IA sous-estiment la logique à ce moment-ci est que certains des premiers développeurs de l'IA avaient proposé la logique standard comme outilplutôt qu’une fondation. L'IA, de par sa nature même, promet de délivrer de la magie. Nous n'avons pas à faire le dur travail de programmation des systèmes pour produire des résultats. Ils seraient en mesure de déterminer par eux-mêmes comment produire des solutions car ils seraient «intelligents». La logique semblait montrer la voie car si les systèmes informatiques comprenaient la logique et savaient comment traiter les informations en utilisant les règles de la logique, ils seraient capables de fournir de la magie. Ce genre de foi dans la logique était, rétrospectivement, déplacé. En premier lieu, la logique standard est trop forte et trop faible à la fois. Elle est trop forte en ce sens que les règles de logique sont trop générales pour concevoir des procédures efficaces. C'est aussi trop faible parce que c'est la logique conçue par les mathématiciens pour les besoins des mathématiques et ça ne marche pas. Nous n'avons pas le vocabulaire nécessaire pour traiter de nombreux autres types d'informations du monde réel que les systèmes d'IA doivent gérer (tels que l'incertitude, les informations contextuelles telles que le temps, le changement, les connaissances, l'agence, etc.). Ainsi, l'IA subit actuellement un contrecoup contre la logique. Mais je pense que, quand ils surmonteront ce contrecoup, les scientifiques de l'IA se rendront compte que toutes les nouvelles méthodes sont toujours basées surlogique, au sens large .

Uday Reddy
la source
Ajoutez des bases de données relationnelles!
reinierpost
Réponse très agréable et complète, mention à Jean-Yves Girard. Considérez-vous que la logique probabiliste est le même domaine de recherche que la logique floue? Dans la littérature, nous rencontrons les deux termes et j'aimerais savoir s'ils désignent le même domaine de recherche.
zurgl
@zurgl. Je crois comprendre qu'il n'y a pas de formalisme unique qui soit fermement appelé "logique probabiliste". La logique floue est en effet un tel formalisme, mais il y en a aussi d'autres. La forme de raisonnement probabiliste qui réussit le mieux en intelligence artificielle aujourd'hui est l'inférence bayésienne. Cependant, ses fondements logiques ne sont pas encore solidement établis.
Uday Reddy
17

La logique est fondamentale pour toute informatique théorique. Sans les apprendre, vous ne pourrez pas saisir correctement la sémantique du langage de programmation, les machines de Turing, la programmation logique, la calculabilité, etc. Même le raisonnement sur vos programmes sera plus difficile sans cela. Certes, essayer de faire une preuve mathématique d'un concept CS avec être pratiquement impossible.

Ou peut-être vous posez des questions sur les utilisations dans l'industrie. La logique d'apprentissage constitue la base pour apprendre à raisonner clairement et à voir les trous dans les arguments des autres. La logique est fondamentale, que vous utilisiez ou non les symboles formels.

Dave Clarke
la source
Vous manquez d'algorithmique.
Yuval Filmus
4
Cela est inclus dans «et ainsi de suite».
Dave Clarke
9

L'une des tâches répétitives auxquelles sont confrontés les praticiens et les théoriciens du CS est de gagner en confiance dans l'exactitude de leur code.

Il existe deux approches principales:

  1. Preuve: Concevoir une preuve logique qu'une partie d'un système possède certaines propriétés, éventuellement aidées par des conditions préalables, la conception par contrat, des vérificateurs de code.
  2. Test: tester que certaines propriétés détiennent une variété d'entrées, puis induire que cette propriété est valable pour d'autres entrées.

La première, basée sur des méthodes logiques, est souvent la seule option

  1. Il n'y a pas d'entrée typique. Par exemple, lorsque vous testez des propriétés de sécurité, ce sont les entrées atypiques dont vous devez vous soucier, donc à moins que vous ne puissiez logiquement raisonner sur les entrées atypiques, il est peu probable que vous obteniez une bonne couverture.
  2. L'espace de configuration est très grand, vous devez donc le décomposer en parties en raisonnant logiquement sur les parties qui peuvent affecter quelles autres parties avant de tester localement.
  3. Vous ne disposez que de la documentation décrivant le comportement des cas limites des systèmes hors de votre contrôle. Vous pouvez peut-être les simuler, mais vous ne pouvez pas tester ce qui se passe lorsqu'une dépendance externe échoue car vous n'êtes pas en mesure de la faire échouer pour des raisons juridiques ou éthiques.

Les tests empiriques en l'absence de preuve sont essentiellement un substitut à la preuve. Lorsque vous concevez un système à tester, vous créez une esquisse de preuve où vous remplissez des parties de la preuve avec "test X, Y et Z ici". La capacité de raisonner logiquement est essentielle pour pouvoir concevoir un système testable. Si le système n'est pas testable ou prouvable, son concepteur / architecte n'a aucune raison de dire qu'il est apte à l'usage auquel il est destiné.

Mike Samuel
la source
6

Les deux domaines les plus importants que la logique joue un rôle vital sont:

  1. Spécification et vérification du langage formel .
  2. Classes tractables à paramètres fixes .

Z

En bref: 1. La définition de la langue a besoin de logique, 2: La justice de ses procédures a besoin de logique, 3. Les procédures de vérification ont besoin de logique.

Je dois mentionner que cela est différent de la conception du compilateur ou ..., Il s'agit d'une définition "formelle" des langues, la raison principale pour cela est de prouver l'exactitude du langage ou du modèle, ayant également une preuve formelle. Cela peut être utilisé pour la vérification des modèles de logiciels, la recherche d'erreurs avant l'implémentation, la recherche de blocages à nouveau avant l'implémentation, ...., Pour les logiciels qui simulent cela, vous pouvez jeter un œil à NModel .

Maintenant, pourquoi dans les problèmes traitables à paramètres fixes, vous devez travailler avec la logique, vous pouvez diviser les classes de tractabilité à paramètres fixes avec différents niveaux de logique, ils peuvent être convertis les uns aux autres: logique en automates, automates en graphique et vice-versa, mais si vous êtes un expert en logique, vous pouvez les diviser et les décider simplement, le théorème le plus important (après le théorème de Robertson et Seymour ), dans ce domaine est le théorème de Courcelle . pour plus d'informations, lisez le levé du Théorème Méta Algorithmique .


la source
Alors que les logiques peuvent être utilisées pour définir les langues, ce n'est guère un "rôle vital" dans mon expérience. Je ne vois pas du tout comment les logiques sont liées à FPT.
Raphael
@Raphael, je vois que la réponse à votre commentaire prend plus d'une ligne, j'ai mis à jour ma réponse. Je pense que je vous ai répondu, mais si vous pensez toujours que ça ne va pas, dites-moi, à propos de ma partie "formelle" Je pense que mon premier lien wiki n'était pas assez bon, j'ai ajouté plus d'informations, également pour la deuxième partie j'ai ajouté un beau papier et si vous souhaitez en savoir plus, vous pouvez le lire.