POPULARITY
durée : 00:42:34 - Signes des temps - par : Marc Weitzmann - Tentative de réflexions sur la séquence Zelensky-Trump/Vance à la Maison-Blanche - réalisation : Luc-Jean Reynaud - invités : Régis Genté Journaliste; Françoise Thom Historienne; Anne-Elisabeth Moutet Journaliste à l'hebdomadaire américain « The Weekly standard », éditorialiste pour l'hebdomadaire anglais « The Sunday Telegraph »
durée : 00:53:57 - Le grand atelier - par : Vincent Josse, Virginie ROUZIC - Marcher sur le fil tendu de la littérature entre les tentatives de récupération et les lieux communs, manifester son droit à l'incertitude, au doute, à la pluralité, à la contradiction même : voilà ce qui rapproche Leïla Slimani et son invité du jour Frédéric Pajak, tous deux écrivains. - invités : Leïla Slimani, Frédéric Pajak - Leïla Slimani : Écrivaine, Frédéric Pajak : Éditeur, écrivain, dessinateur - réalisé par : Lucie Lemarchand
Une nouvelle étape dans la transition syrienne a été franchie mercredi 29 janvier, avec la nomination d'Ahmad al-Charaa comme président par intérim pour une durée non précisée. Les nouvelles autorités ont annoncé aussi la suspension de la Constitution, la dissolution du Parlement, de tous les groupes armés et du parti Baas qui a gouverné la Syrie pendant plus de 60 ans. Entretien avec Hala Kodmani, journaliste franco-syrienne, grand reporter à Libération.
durée : 00:59:07 - Entendez-vous l'éco ? - par : Aliette Hovine, Bruno Baradat - Léon Walras (1834-1910) est un acteur de la “révolution marginaliste” et le fondateur de la théorie de l'équilibre général et de son “tâtonnement". Démocrate, socialiste et libéral, Walras a une approche économique qui concilie les mathématiques et ses idéaux républicains. - réalisation : Françoise Le Floch - invités : Vincent Bourdeau Enseignant-chercheur en philosophie à l'université de Franche-Comté, membre du laboratoire Logiques de l'Agir et directeur adjoint de la Maison des sciences de l'homme et de l'environnement Claude-Nicolas Ledoux
Dans ce nouvel épisode Focus, le trio se penche sur l'évolution de genre magical girl. La discussion est structurée autour de trois périodes historiques. 1) Repères historiques et définition (3:07) 2) Les productions de la Toei Animation : Majoko Series, années 1960-1970 (15:04) 3) Nouvelle culture Shōjo et public otaku, années 1980 (38:16) 4) Héroïnes guerrières et diversification, années 1990 et 2000 (58:31) Crédits musicaux : Meiko Nakahara - Fantasy
Dans l'épisode d'aujourd'hui, notre duo mère-fille plonge dans le fascinant monde des différences entre les femmes et les hommes dans leur façon de communiquer. Elles abordent également les étapes clés pour résoudre nos chicanes de couple ! Avec beaucoup de transparence, Laurie-Raphaëlle nous partage un exemple concret dans lequel elle a utilisé les techniques de communication pour résoudre un conflit qui s'annonçait destructeur pour une de ses relations.Allons voir pourquoi le verbe "communiquer" se conjugue différemment selon qu'on soit un homme ou une femme !Ready to shine ?Let's go !Références :1. Podcast: Kwik Brain with Jim Kwik, « The art of arguing: using disagreements to deepen your relationships with Dr. Julie and John Gottman. https://podcasts.apple.com/ca/podcast/kwik-brain-with-jim-kwik/id1208024744?i=1000648795872 2. Dr. Julie and John Gottman, Fight Right: How Successful Couples Turn Conflict into Connection.3. Dallaire, Yvon, S'aimer longtemps ? L'homme et la femme peuvent-ils vivre ensemble ? Éd. Option Santé, Québec, 1996, 192 p.4. Dallaire, Yvon, Chéri, Parle-Moi… Dix règles pour faire parler un homme ? Éd. Option Santé, Québec, 1998, 144 p.5. Gray, John, L'homme vient de Mars, la femme vient de Vénus, Éd. Logiques, Montréal, 1994, 327 p.6. Tanenbaum, Joe, Découvrir nos différences entre l'homme et la femme, Éd. Québécor, Outremont, 1992, 234 p.7. Tannen, Déborah Décidément, tu ne me comprends pas, ou Comment surmonter les malentendus entre hommes et femmes, Éd. Robert Laffont, Paris, 1993, 350 p. NB :Nous tenons à souligner que nous ne sommes pas des professionnels de la santé. Notre objectif est d'informer et de vulgariser des informations pour le grand public. Bien que nous nous efforcions de fournir des contenus précis et fiables, il est important de consulter des experts qualifiés pour des conseils médicaux ou psychologiques personnalisés. Notre intention est de partager des connaissances dans le but de sensibiliser et d'éduquer, mais nous encourageons toujours nos auditeurs à rechercher des sources spécialisées et à prendre des décisions éclairées en matière de santé. Hébergé par Acast. Visitez acast.com/privacy pour plus d'informations.
Mbappé a été désigné pour la 5e fois meilleur joueur du championnat de France lors de la cérémonie des Trophées UNFP. Auteur d'un discours sincère et touchant, Mbappé aura marqué l'histoire du championnat français et le WFC revient sur ce nouveau triomphe de l'attaquant du PSG. Eric Roy meilleur coach, Zaïre-Emery meilleur espoir, Donnarumma meilleur gardien... le Winamax FC debriefe l'ensemble du palmarès des Trophées UNFP.
On a baissé les impôts des Québécois et maintenant on leur parle de déficits structurels futurs… 2) Réflexion fiscale : penser à l’impôt changerait drastiquement notre rapport à la consommation Petite réflexion sur les taux marginaux d’impôt. Voir https://www.cogecomedia.com/vie-privee/fr/ pour notre politique de vie privée
Découvrez ce qui vous attente dans la saison 2 du podcast Théo-Logiques... Parution imminente! Soutenez ce podcast http://supporter.acast.com/theo-logiques. Hébergé par Acast. Visitez acast.com/privacy pour plus d'informations.
La 7ème recommandation de la CIASE proposait ceci : dans tout type de formation et de catéchèse, enseigner que les Évangiles donnent l'exemple d'une parole comme dynamique, non pas de pouvoir sur l'autre, mais de volonté de le faire grandir et advenir, rappelant que, comme dans un échange humain reposant sur des bases saines, la parole ne doit être prise que pour être donnée ; mettre au jour les expressions bibliques dévoyées à des fins de manipulation et aider à une lecture à la fois critique et spirituelle de la Bible à tous les niveaux de la formation." C'est dans la suite de cette recommandation qu'un Cahier évangile intitulé "Déjouer les logiques abusives - perspectives bibliques à la suite du rapport de la CIASE" a pris chair de manière collective et nous recevons aujourd'hui un de ses auteurs, Erwan Chauty, pour nous en parler. Oui, la Bible n'est pas dépassée pour nous aider dans la crise que nous traversons, bien au contraire : c'est un sujet important, voire essentiel, pour chacun ! - Commander un Cahier évangile sur le site du service biblique catholique : https://sbev.bible/les-cahiers-evangile - Profil d'Erwan Chauty s.j. sur le site du Centre Sèvres avec indications de ses cours : https://centresevres.com/enseignant/erwan-chauty/ Interview menée par Isabelle de La Garanderie, doctorante en théologie au Centre Sèvres. Enregistrement et montage : Cyprien Rigolot. Musique : Improvisations au piano de Pascal Marsault
1) Encore des promesses sans logiques des libéraux pour l’image - Étirer les prêts aux PME Étirer la période de pardon? - Demander des comptes aux épiciers…. Qui font déjà des marges en %... - Pas de taxes sur les immeubles locatifs… - Ça va rien changer…. Voir https://www.cogecomedia.com/vie-privee/fr/ pour notre politique de vie privée
Dans cet épisode, Geneviève Fraisse, philosophe de la pensée féministe, directrice de recherche émérite au CNRS, et Hélène Périvier, économiste à l'Observatoire français des conjonctures économiques, conversent sur les liens entre recherche et féminisme. Elles abordent leurs travaux et leurs sujets de recherche, la pensée féministe en travail, entre effacement et subversion. -- Lire la transcription écrite de l'épisode. --
Qu'est-ce qu'une conséquence logique? Qu'est-ce que la différence entre une conséquence logique, une conséquence naturelle et une punition? (!) ...Est-ce que ces types de conséquences fonctionnent vraiment et est-ce que les conséquences sont optimales pour le développement des enfants? Toutes des questions auxquelles Sarah répond & plus encore!
De New York à Barcelone, en passant par Guayaquil, Martin Lamotte nous propose une enquête passionnante sur les Ñetas. Dans Au-delà du crime. Ethnographie d'un gang transnational publié aux éditions du CNRS dans la collection « Logiques du désordre », l'anthropologue nous raconte l'histoire particulière de ce « gang » né dans les prisons de Porto-Rico avant de s'internationaliser. ► Martin Lamotte, chargé de recherche au CNRS, travaille sur les structures criminelles aux États-Unis, en Amérique latine et en Europe.
Invité : Léo Peria-Peigné, chercheur au centre des études de sécurité de l'IFRI 6:00 La genèse et la méthodologie de l'étude 11:30 Définitions et logiques de stockage 15:30 Logiques soviétiques et russes du stock 29:30 Le stockage massif américain 35:00 Le mystère chinois 40:30 L'Europe de l'est 45:30 Les munitions 52:00 Le cas des stocks français 1:05:00 Les leçons de la guerre en Ukraine 1:13:00 Les pistes de complémentarité public/privé Générique par @yotta_music Extrait audio : Taras Borovok, « Himars » - https://www.youtube.com/watch?v=t89Q1W4GkXw L'étude : https://www.ifri.org/fr/publications/etudes-de-lifri/focus-strategique/stocks-militaires-une-assurance-vie-haute-intensite
Révisez votre Allemand et améliorez votre vocabulaire partout avec nos podcasts ! Dans cet épisode, nouveau thème de vocabulaire sur les connecteurs logiques !
✅ Vous souhaitez accéder à la formation complète pour apprendre l'Espagnol avec notre partenaire Babbel, accessible sur ordinateur et mobile. Cliquez ici pour en savoir plus
La 7ème recommandation de la CIASE proposait ceci : dans tout type de formation et de catéchèse, enseigner que les Évangiles donnent l'exemple d'une parole comme dynamique, non pas de pouvoir sur l'autre, mais de volonté de le faire grandir et advenir, rappelant que, comme dans un échange humain reposant sur des bases saines, la parole ne doit être prise que pour être donnée ; mettre au jour les expressions bibliques dévoyées à des fins de manipulation et aider à une lecture à la fois critique et spirituelle de la Bible à tous les niveaux de la formation." C'est dans la suite de cette recommandation qu'un Cahier évangile intitulé "Déjouer les logiques abusives - perspectives bibliques à la suite du rapport de la CIASE" a pris chair de manière collective et nous recevons aujourd'hui un de ses auteurs, Erwan Chauty, pour nous en parler. Oui, la Bible n'est pas dépassée pour nous aider dans la crise que nous traversons, bien au contraire : c'est un sujet important, voire essentiel, pour chacun ! - Commander un Cahier évangile sur le site du service biblique catholique : https://sbev.bible/les-cahiers-evangile - Profil d'Erwan Chauty s.j. sur le site du Centre Sèvres avec indications de ses cours : https://centresevres.com/enseignant/erwan-chauty/ Interview menée par Isabelle de La Garanderie, doctorante en théologie au Centre Sèvres. Enregistrement et montage : Cyprien Rigolot. Musique : Improvisations au piano de Pascal Marsault
Pour partir au travail ou en vacances, il arrive que vous soyez coincés dans le trafic. Il y a des raisons qui expliquent ce phénomène et des moyens existent pour les réduire, voire de les supprimer...
Série d'articles dans "On Leadership" (1&2), collection HBR's 10 Must Reads"Seven Transformations of Leadership" (David Rooke, William Torbert)Ce qui différencie les leaders: pas leur philosophie, leur personnalité, leur style mais…. leur logique d'action.Donc comprendre notre logique d'action, donc nos "moteurs".Donc découvrir ce que nous sommes puis le devenir, dans la logique matérialiste déterministe.Deviens ce que tu es (Pindare) - Amor Fati (Nietszche)7 logiques de leadership = 7 manières de penser et d'agirPourquoi 7?Pourquoi ces 7-là? Opportuniste: gagne à tout prix, égocentré, manipulateurBon dans les urgences et la venteMauvais dans la fédération des énergies sur le long terme Diplomate: évite le conflit à tout prix, veut "faire partie", obéit aux normesBon comme liantMauvais dans le feedback et les décisions difficiles Expert: gouverne avec logique et expertiseBon comme contributeur individuel (son succès dépend de son propre travail)Mauvais en compétences émotionnelles Winner (Achiever): remplit ses objectifs stratégiques grâce aux autres, très orienté objectifsBon dans le managementMauvais en créativité Individualiste: lie la logique personnelle avec la logique organisationnelle, crée des structures pour résoudre des problèmes de performanceBon comme consultantMauvais dans la coopération et la collaboration Stratège: génère de la transformation organisationnelle, utilise la curiosité, la vigilance et une certaine vulnérabilité sur le court et le moyen termeBon comme leader transformationnel Alchimiste: génère de la transformation sociale, se réinvente et les autres autour de luiBon comme leader de transformation sociale (Mandela) Entreprises en-dessous de la moyenne (performance): CEO ou majorité de managers opportunistes, diplomates et/ou experts Pour vous:Quelle logique d'action est la mienne actuellement?Pourquoi? Comment y suis-je arrivé.e?De quelle(s) autre(s) logique(s) ai-je besoin?Comment vais-je les développer?Ecouter ce podcast :-)Faire une réflexion sur soi (formation, coaching, psycho)Se faire challenger par son organisation (RH, boss) Accès gratuit à toutes nos ressources: www.coapta.ch/campusAccès aux archives du podcast: www.coapta.ch/podcast© COAPTA SàrlTous les épisodes disponibles sur www.coapta.ch/podcast ou sur votre plateforme préférée (Spotify, Apple Podcasts, Google Podcasts); cherchez "Leadershift" ou "Vincent Musolino"
durée : 00:01:38 - L'Humeur du matin par Guillaume Erner - par : Guillaume Erner - Depuis la tuerie d'Uvalde, deux manières de voir s'affrontent et sont symptomatiques de ce que sont les États-Unis : d'un côté, la vision sécuritaire et, de l'autre, la santé publique.
Neste episódio tratamos das relações lógicas em francês.
Ici toutes les ressources citées dans le podcast : Mon dernier livre : https://amzn.to/3LE9CMB MasterClass Ennéagramme : https://enneagramme-alchimie.com/pod-enneagramme La Spirale Dynamique : https://enneagramme-alchimie.com/pod-spirale Cette semaine, sur le podcast "Connaissance de Soi", je te parle d'un concept FONDAMENTAL de la PNL (programmation neurolinguistique) : les Niveaux logiques. Également appelé pyramide de Dilts (d'ailleurs, nous verrons en quoi ce n'est pas véritablement une pyramide), cet outil est redoutablement efficace en coaching ou autocoaching. Comme tu vas le découvrir, les 6 niveaux logiques vont te permettre d'avoir une vision plus subtile et profonde pour chaque situation ou contexte problématique de ta vie. Dans cet épisode, je t'expliquerai également les liens avec la Spirale Dynamique, la pyramide de Maslow et... l'ennéagramme bien sûr. ——— Une approche intégrale* de la Connaissance de Soi. Nous vous guidons dans cette merveilleuse quête qu'est la connaissance de Soi. *L'approche intégrale est vision holistique de la conscience humaine, alliant science et spiritualité. Pour cela, nous utilisons des modèles avancés et pertinents tels l'enneagramme, la spirale dynamique, la symbolique alchimique, le tarot, la programmation neuro-linguistique… ——— Qui est Nico Pène, l'auteur de ce Podcast : Depuis plus d'une décennie, Nico Pène vous guide dans cette merveilleuse quête qu'est la connaissance de Soi. Auteur & Formateur, il est le fondateur de la toute première formation numérique francophone certifiante en ennéagramme, l'auteur du bestseller "Petit livre de l'Ennéagramme" et du livre "Trouvez votre Mission de Vie" (tous 2 édités chez First Editions). Pour aller plus loin dans votre connaissance de vous-même : https://linktr.ee/nicoalquimia #PNL #coaching #Enneagramme
"Les logiques du logement", c'était l'édito de Fabrice Grosfilley ce mercredi dans Toujours + d'Actu.
Écoutez les nouvelles Capsules éclair du SLM 2021. Dans une courte vidéo, Joanie Lalonde-Piecharski vous fait découvrir son livre Au-delà des dix-huit ans, paru chez LOGIQUES.Le Site Web du #SalonDuLivreDeMontreal : https://www.salondulivredemontreal.com/
durée : 00:21:59 - Les Nuits de France Culture - par : Philippe Garbit, Albane Penaranda, Antoine Dhulster - . - réalisation : Virginie Mourthé
Dans l'épisode 54 du podcast, Angela Baranes vous parle de sa thèse sur « La formation du paysage ecclésial au Danemark médiéval. Logiques spatiales et pratiques sociales (IXe-XIIIe siècles)« , sous la direction de Michel Lauwers et Anne Nissen. Elle étudie la construction d'un paysage chrétien durant le processus de christianisation du Danemark au début du Moyen Âge, en croisant l'histoire, la géographie, l'archéologie, et d'autres sciences humaines. ➡ Plus d'informations sur cet épisode sur le site de Passion Médiévistes > https://passionmedievistes.fr/ep-54-angela-danemark-moyen-age
Le Podcast de l'émission IQSOG - Fenêtres Ouvertes sur la Gestion (RFG)
Nouvelles logiques de l'inconnu et transformations de la science et de la société -- Pascal Le Masson, Benoît Weil, Mines ParisTech
Ce mercredi 16 juin est dévoilé en Conseil des ministres le plan de lutte contre les violences liées aux rixes. Cette série de mesures, attendue depuis le 1er mai, fait suite à la recrudescence des affrontements entre bandes. Selon le ministère de l'Intérieur, 357 ont été recensés contre 288 en 2019. Plusieurs ont été meurtriers, notamment à Boussy-Saint-Antoine, dans l'Essonne. Entretien avec Romain Colas, son maire.
Xavier Leroy Collège de France Science du logiciel Année 2020-2021 Logiques de programmes : quand la machine raisonne sur ses logiciels Dans le cinquième cours, nous avons étudié quatre extensions des logiques de séparation des précédents cours qui permettent ou facilitent la spécification et la vérification d'une plus large classe de programmes. La première extension est l'opérateur d'implication séparante, familièrement appelé « baguette magique » en raison de sa forme, qui est l'adjoint de la conjonction séparante, au même titre que l'implication usuelle est l'adjoint de la conjonction usuelle. Cette « baguette magique » facilite le raisonnement en logique de séparation, notamment via la règle de conséquence ramifiée ou via un calcul de plus faibles préconditions. La deuxième extension permet de vérifier des processus qui partagent des données mais y accèdent en lecture seule, sans modifications. Il s'agit d'associer des permissions aux cellules de la mémoire, ces permissions pouvant être partielles (permettant uniquement la lecture) ou complètes (permettant aussi l'écriture et la libération). Deux modèles bien connus de permissions partielles sont les permissions fractionnaires et les permissions comptées. Nous avons illustré l'utilisation de ces dernières pour vérifier un verrou à lecteurs multiples implémenté par deux sémaphores. Le « code fantôme » est la troisième technique étudiée dans cette séance. Il s'agit de commandes qui ne sont pas exécutées dans le programme final, mais contribuent à définir des « variables fantômes » qui simplifient la vérification. Dans le cadre du calcul parallèle, code et variables fantômes permettent de garder trace des calculs faits par chacun des processus et comment ces calculs individuels contribuent à l'exécution globale du programme. La dernière extension que nous avons décrite permet de stocker en mémoire des verrous et leur invariant de ressources, tout comme les données protégées par ces verrous. Cela permet de spécifier et de vérifier des algorithmes parallèles à grain fin, comme nous l'avons illustré avec une structure de liste simplement chaînée avec verrouillage couplé. Aussi disparates qu'elles peuvent sembler, ces extensions et bien d'autres sont des cas particuliers d'un petit nombre de notions plus générales, comme le montre l'infrastructure logique Iris.
Xavier Leroy Collège de France Science du logiciel Année 2020-2021 Logiques de programmes : quand la machine raisonne sur ses logiciels Dans le cinquième cours, nous avons étudié quatre extensions des logiques de séparation des précédents cours qui permettent ou facilitent la spécification et la vérification d'une plus large classe de programmes. La première extension est l'opérateur d'implication séparante, familièrement appelé « baguette magique » en raison de sa forme, qui est l'adjoint de la conjonction séparante, au même titre que l'implication usuelle est l'adjoint de la conjonction usuelle. Cette « baguette magique » facilite le raisonnement en logique de séparation, notamment via la règle de conséquence ramifiée ou via un calcul de plus faibles préconditions. La deuxième extension permet de vérifier des processus qui partagent des données mais y accèdent en lecture seule, sans modifications. Il s'agit d'associer des permissions aux cellules de la mémoire, ces permissions pouvant être partielles (permettant uniquement la lecture) ou complètes (permettant aussi l'écriture et la libération). Deux modèles bien connus de permissions partielles sont les permissions fractionnaires et les permissions comptées. Nous avons illustré l'utilisation de ces dernières pour vérifier un verrou à lecteurs multiples implémenté par deux sémaphores. Le « code fantôme » est la troisième technique étudiée dans cette séance. Il s'agit de commandes qui ne sont pas exécutées dans le programme final, mais contribuent à définir des « variables fantômes » qui simplifient la vérification. Dans le cadre du calcul parallèle, code et variables fantômes permettent de garder trace des calculs faits par chacun des processus et comment ces calculs individuels contribuent à l'exécution globale du programme. La dernière extension que nous avons décrite permet de stocker en mémoire des verrous et leur invariant de ressources, tout comme les données protégées par ces verrous. Cela permet de spécifier et de vérifier des algorithmes parallèles à grain fin, comme nous l'avons illustré avec une structure de liste simplement chaînée avec verrouillage couplé. Aussi disparates qu'elles peuvent sembler, ces extensions et bien d'autres sont des cas particuliers d'un petit nombre de notions plus générales, comme le montre l'infrastructure logique Iris.
Xavier Leroy Collège de France Science du logiciel Année 2020-2021 Logiques de programmes : quand la machine raisonne sur ses logiciels Dans le cinquième cours, nous avons étudié quatre extensions des logiques de séparation des précédents cours qui permettent ou facilitent la spécification et la vérification d'une plus large classe de programmes. La première extension est l'opérateur d'implication séparante, familièrement appelé « baguette magique » en raison de sa forme, qui est l'adjoint de la conjonction séparante, au même titre que l'implication usuelle est l'adjoint de la conjonction usuelle. Cette « baguette magique » facilite le raisonnement en logique de séparation, notamment via la règle de conséquence ramifiée ou via un calcul de plus faibles préconditions. La deuxième extension permet de vérifier des processus qui partagent des données mais y accèdent en lecture seule, sans modifications. Il s'agit d'associer des permissions aux cellules de la mémoire, ces permissions pouvant être partielles (permettant uniquement la lecture) ou complètes (permettant aussi l'écriture et la libération). Deux modèles bien connus de permissions partielles sont les permissions fractionnaires et les permissions comptées. Nous avons illustré l'utilisation de ces dernières pour vérifier un verrou à lecteurs multiples implémenté par deux sémaphores. Le « code fantôme » est la troisième technique étudiée dans cette séance. Il s'agit de commandes qui ne sont pas exécutées dans le programme final, mais contribuent à définir des « variables fantômes » qui simplifient la vérification. Dans le cadre du calcul parallèle, code et variables fantômes permettent de garder trace des calculs faits par chacun des processus et comment ces calculs individuels contribuent à l'exécution globale du programme. La dernière extension que nous avons décrite permet de stocker en mémoire des verrous et leur invariant de ressources, tout comme les données protégées par ces verrous. Cela permet de spécifier et de vérifier des algorithmes parallèles à grain fin, comme nous l'avons illustré avec une structure de liste simplement chaînée avec verrouillage couplé. Aussi disparates qu'elles peuvent sembler, ces extensions et bien d'autres sont des cas particuliers d'un petit nombre de notions plus générales, comme le montre l'infrastructure logique Iris.
Xavier LeroyCollège de FranceScience du logicielAnnée 2020-2021Logiques de programmes : quand la machine raisonne sur ses logicielsDans le cinquième cours, nous avons étudié quatre extensions des logiques de séparation des précédents cours qui permettent ou facilitent la spécification et la vérification d'une plus large classe de programmes.La première extension est l'opérateur d'implication séparante, familièrement appelé « baguette magique » en raison de sa forme, qui est l'adjoint de la conjonction séparante, au même titre que l'implication usuelle est l'adjoint de la conjonction usuelle. Cette « baguette magique » facilite le raisonnement en logique de séparation, notamment via la règle de conséquence ramifiée ou via un calcul de plus faibles préconditions.La deuxième extension permet de vérifier des processus qui partagent des données mais y accèdent en lecture seule, sans modifications. Il s'agit d'associer des permissions aux cellules de la mémoire, ces permissions pouvant être partielles (permettant uniquement la lecture) ou complètes (permettant aussi l'écriture et la libération). Deux modèles bien connus de permissions partielles sont les permissions fractionnaires et les permissions comptées. Nous avons illustré l'utilisation de ces dernières pour vérifier un verrou à lecteurs multiples implémenté par deux sémaphores.Le « code fantôme » est la troisième technique étudiée dans cette séance. Il s'agit de commandes qui ne sont pas exécutées dans le programme final, mais contribuent à définir des « variables fantômes » qui simplifient la vérification. Dans le cadre du calcul parallèle, code et variables fantômes permettent de garder trace des calculs faits par chacun des processus et comment ces calculs individuels contribuent à l'exécution globale du programme.La dernière extension que nous avons décrite permet de stocker en mémoire des verrous et leur invariant de ressources, tout comme les données protégées par ces verrous. Cela permet de spécifier et de vérifier des algorithmes parallèles à grain fin, comme nous l'avons illustré avec une structure de liste simplement chaînée avec verrouillage couplé.Aussi disparates qu'elles peuvent sembler, ces extensions et bien d'autres sont des cas particuliers d'un petit nombre de notions plus générales, comme le montre l'infrastructure logique Iris.
Xavier Leroy Collège de France Science du logiciel Année 2020-2021 Logiques de programmes : quand la machine raisonne sur ses logiciels Dans le cinquième cours, nous avons étudié quatre extensions des logiques de séparation des précédents cours qui permettent ou facilitent la spécification et la vérification d'une plus large classe de programmes. La première extension est l'opérateur d'implication séparante, familièrement appelé « baguette magique » en raison de sa forme, qui est l'adjoint de la conjonction séparante, au même titre que l'implication usuelle est l'adjoint de la conjonction usuelle. Cette « baguette magique » facilite le raisonnement en logique de séparation, notamment via la règle de conséquence ramifiée ou via un calcul de plus faibles préconditions. La deuxième extension permet de vérifier des processus qui partagent des données mais y accèdent en lecture seule, sans modifications. Il s'agit d'associer des permissions aux cellules de la mémoire, ces permissions pouvant être partielles (permettant uniquement la lecture) ou complètes (permettant aussi l'écriture et la libération). Deux modèles bien connus de permissions partielles sont les permissions fractionnaires et les permissions comptées. Nous avons illustré l'utilisation de ces dernières pour vérifier un verrou à lecteurs multiples implémenté par deux sémaphores. Le « code fantôme » est la troisième technique étudiée dans cette séance. Il s'agit de commandes qui ne sont pas exécutées dans le programme final, mais contribuent à définir des « variables fantômes » qui simplifient la vérification. Dans le cadre du calcul parallèle, code et variables fantômes permettent de garder trace des calculs faits par chacun des processus et comment ces calculs individuels contribuent à l'exécution globale du programme. La dernière extension que nous avons décrite permet de stocker en mémoire des verrous et leur invariant de ressources, tout comme les données protégées par ces verrous. Cela permet de spécifier et de vérifier des algorithmes parallèles à grain fin, comme nous l'avons illustré avec une structure de liste simplement chaînée avec verrouillage couplé. Aussi disparates qu'elles peuvent sembler, ces extensions et bien d'autres sont des cas particuliers d'un petit nombre de notions plus générales, comme le montre l'infrastructure logique Iris.
Xavier LeroyCollège de FranceScience du logicielAnnée 2020-2021Logiques de programmes : quand la machine raisonne sur ses logicielsDans le cinquième cours, nous avons étudié quatre extensions des logiques de séparation des précédents cours qui permettent ou facilitent la spécification et la vérification d'une plus large classe de programmes.La première extension est l'opérateur d'implication séparante, familièrement appelé « baguette magique » en raison de sa forme, qui est l'adjoint de la conjonction séparante, au même titre que l'implication usuelle est l'adjoint de la conjonction usuelle. Cette « baguette magique » facilite le raisonnement en logique de séparation, notamment via la règle de conséquence ramifiée ou via un calcul de plus faibles préconditions.La deuxième extension permet de vérifier des processus qui partagent des données mais y accèdent en lecture seule, sans modifications. Il s'agit d'associer des permissions aux cellules de la mémoire, ces permissions pouvant être partielles (permettant uniquement la lecture) ou complètes (permettant aussi l'écriture et la libération). Deux modèles bien connus de permissions partielles sont les permissions fractionnaires et les permissions comptées. Nous avons illustré l'utilisation de ces dernières pour vérifier un verrou à lecteurs multiples implémenté par deux sémaphores.Le « code fantôme » est la troisième technique étudiée dans cette séance. Il s'agit de commandes qui ne sont pas exécutées dans le programme final, mais contribuent à définir des « variables fantômes » qui simplifient la vérification. Dans le cadre du calcul parallèle, code et variables fantômes permettent de garder trace des calculs faits par chacun des processus et comment ces calculs individuels contribuent à l'exécution globale du programme.La dernière extension que nous avons décrite permet de stocker en mémoire des verrous et leur invariant de ressources, tout comme les données protégées par ces verrous. Cela permet de spécifier et de vérifier des algorithmes parallèles à grain fin, comme nous l'avons illustré avec une structure de liste simplement chaînée avec verrouillage couplé.Aussi disparates qu'elles peuvent sembler, ces extensions et bien d'autres sont des cas particuliers d'un petit nombre de notions plus générales, comme le montre l'infrastructure logique Iris.
Xavier Leroy Collège de France Science du logiciel Année 2020-2021 Logiques de programmes : quand la machine raisonne sur ses logiciels Dans le cinquième cours, nous avons étudié quatre extensions des logiques de séparation des précédents cours qui permettent ou facilitent la spécification et la vérification d'une plus large classe de programmes. La première extension est l'opérateur d'implication séparante, familièrement appelé « baguette magique » en raison de sa forme, qui est l'adjoint de la conjonction séparante, au même titre que l'implication usuelle est l'adjoint de la conjonction usuelle. Cette « baguette magique » facilite le raisonnement en logique de séparation, notamment via la règle de conséquence ramifiée ou via un calcul de plus faibles préconditions. La deuxième extension permet de vérifier des processus qui partagent des données mais y accèdent en lecture seule, sans modifications. Il s'agit d'associer des permissions aux cellules de la mémoire, ces permissions pouvant être partielles (permettant uniquement la lecture) ou complètes (permettant aussi l'écriture et la libération). Deux modèles bien connus de permissions partielles sont les permissions fractionnaires et les permissions comptées. Nous avons illustré l'utilisation de ces dernières pour vérifier un verrou à lecteurs multiples implémenté par deux sémaphores. Le « code fantôme » est la troisième technique étudiée dans cette séance. Il s'agit de commandes qui ne sont pas exécutées dans le programme final, mais contribuent à définir des « variables fantômes » qui simplifient la vérification. Dans le cadre du calcul parallèle, code et variables fantômes permettent de garder trace des calculs faits par chacun des processus et comment ces calculs individuels contribuent à l'exécution globale du programme. La dernière extension que nous avons décrite permet de stocker en mémoire des verrous et leur invariant de ressources, tout comme les données protégées par ces verrous. Cela permet de spécifier et de vérifier des algorithmes parallèles à grain fin, comme nous l'avons illustré avec une structure de liste simplement chaînée avec verrouillage couplé. Aussi disparates qu'elles peuvent sembler, ces extensions et bien d'autres sont des cas particuliers d'un petit nombre de notions plus générales, comme le montre l'infrastructure logique Iris.
Xavier Leroy Collège de France Science du logiciel Année 2020-2021 Logiques de programmes : quand la machine raisonne sur ses logiciels Dans le cinquième cours, nous avons étudié quatre extensions des logiques de séparation des précédents cours qui permettent ou facilitent la spécification et la vérification d'une plus large classe de programmes. La première extension est l'opérateur d'implication séparante, familièrement appelé « baguette magique » en raison de sa forme, qui est l'adjoint de la conjonction séparante, au même titre que l'implication usuelle est l'adjoint de la conjonction usuelle. Cette « baguette magique » facilite le raisonnement en logique de séparation, notamment via la règle de conséquence ramifiée ou via un calcul de plus faibles préconditions. La deuxième extension permet de vérifier des processus qui partagent des données mais y accèdent en lecture seule, sans modifications. Il s'agit d'associer des permissions aux cellules de la mémoire, ces permissions pouvant être partielles (permettant uniquement la lecture) ou complètes (permettant aussi l'écriture et la libération). Deux modèles bien connus de permissions partielles sont les permissions fractionnaires et les permissions comptées. Nous avons illustré l'utilisation de ces dernières pour vérifier un verrou à lecteurs multiples implémenté par deux sémaphores. Le « code fantôme » est la troisième technique étudiée dans cette séance. Il s'agit de commandes qui ne sont pas exécutées dans le programme final, mais contribuent à définir des « variables fantômes » qui simplifient la vérification. Dans le cadre du calcul parallèle, code et variables fantômes permettent de garder trace des calculs faits par chacun des processus et comment ces calculs individuels contribuent à l'exécution globale du programme. La dernière extension que nous avons décrite permet de stocker en mémoire des verrous et leur invariant de ressources, tout comme les données protégées par ces verrous. Cela permet de spécifier et de vérifier des algorithmes parallèles à grain fin, comme nous l'avons illustré avec une structure de liste simplement chaînée avec verrouillage couplé. Aussi disparates qu'elles peuvent sembler, ces extensions et bien d'autres sont des cas particuliers d'un petit nombre de notions plus générales, comme le montre l'infrastructure logique Iris.
Xavier Leroy Collège de France Science du logiciel Année 2020-2021 Logiques de programmes : quand la machine raisonne sur ses logiciels Dans le cinquième cours, nous avons étudié quatre extensions des logiques de séparation des précédents cours qui permettent ou facilitent la spécification et la vérification d'une plus large classe de programmes. La première extension est l'opérateur d'implication séparante, familièrement appelé « baguette magique » en raison de sa forme, qui est l'adjoint de la conjonction séparante, au même titre que l'implication usuelle est l'adjoint de la conjonction usuelle. Cette « baguette magique » facilite le raisonnement en logique de séparation, notamment via la règle de conséquence ramifiée ou via un calcul de plus faibles préconditions. La deuxième extension permet de vérifier des processus qui partagent des données mais y accèdent en lecture seule, sans modifications. Il s'agit d'associer des permissions aux cellules de la mémoire, ces permissions pouvant être partielles (permettant uniquement la lecture) ou complètes (permettant aussi l'écriture et la libération). Deux modèles bien connus de permissions partielles sont les permissions fractionnaires et les permissions comptées. Nous avons illustré l'utilisation de ces dernières pour vérifier un verrou à lecteurs multiples implémenté par deux sémaphores. Le « code fantôme » est la troisième technique étudiée dans cette séance. Il s'agit de commandes qui ne sont pas exécutées dans le programme final, mais contribuent à définir des « variables fantômes » qui simplifient la vérification. Dans le cadre du calcul parallèle, code et variables fantômes permettent de garder trace des calculs faits par chacun des processus et comment ces calculs individuels contribuent à l'exécution globale du programme. La dernière extension que nous avons décrite permet de stocker en mémoire des verrous et leur invariant de ressources, tout comme les données protégées par ces verrous. Cela permet de spécifier et de vérifier des algorithmes parallèles à grain fin, comme nous l'avons illustré avec une structure de liste simplement chaînée avec verrouillage couplé. Aussi disparates qu'elles peuvent sembler, ces extensions et bien d'autres sont des cas particuliers d'un petit nombre de notions plus générales, comme le montre l'infrastructure logique Iris.
Xavier Leroy Collège de France Science du logiciel Année 2020-2021 Logiques de programmes : quand la machine raisonne sur ses logiciels Dans le cinquième cours, nous avons étudié quatre extensions des logiques de séparation des précédents cours qui permettent ou facilitent la spécification et la vérification d'une plus large classe de programmes. La première extension est l'opérateur d'implication séparante, familièrement appelé « baguette magique » en raison de sa forme, qui est l'adjoint de la conjonction séparante, au même titre que l'implication usuelle est l'adjoint de la conjonction usuelle. Cette « baguette magique » facilite le raisonnement en logique de séparation, notamment via la règle de conséquence ramifiée ou via un calcul de plus faibles préconditions. La deuxième extension permet de vérifier des processus qui partagent des données mais y accèdent en lecture seule, sans modifications. Il s'agit d'associer des permissions aux cellules de la mémoire, ces permissions pouvant être partielles (permettant uniquement la lecture) ou complètes (permettant aussi l'écriture et la libération). Deux modèles bien connus de permissions partielles sont les permissions fractionnaires et les permissions comptées. Nous avons illustré l'utilisation de ces dernières pour vérifier un verrou à lecteurs multiples implémenté par deux sémaphores. Le « code fantôme » est la troisième technique étudiée dans cette séance. Il s'agit de commandes qui ne sont pas exécutées dans le programme final, mais contribuent à définir des « variables fantômes » qui simplifient la vérification. Dans le cadre du calcul parallèle, code et variables fantômes permettent de garder trace des calculs faits par chacun des processus et comment ces calculs individuels contribuent à l'exécution globale du programme. La dernière extension que nous avons décrite permet de stocker en mémoire des verrous et leur invariant de ressources, tout comme les données protégées par ces verrous. Cela permet de spécifier et de vérifier des algorithmes parallèles à grain fin, comme nous l'avons illustré avec une structure de liste simplement chaînée avec verrouillage couplé. Aussi disparates qu'elles peuvent sembler, ces extensions et bien d'autres sont des cas particuliers d'un petit nombre de notions plus générales, comme le montre l'infrastructure logique Iris.
Xavier Leroy Collège de France Science du logiciel Année 2020-2021 Logiques de programmes : quand la machine raisonne sur ses logiciels Les processeurs multicœurs sont un exemple d'architecture parallèle à mémoire partagée, où plusieurs unités de calcul travaillent simultanément sur une mémoire commune. La programmation de ces architectures est difficile : il faut maîtriser les interférences possibles entre les actions des processus, et éviter les courses critiques (race conditions) entre des écritures et des lectures simultanées. Quelles logiques de programmes nous permettent de vérifier des programmes parallèles à mémoire partagée ? Pour répondre à cette question, le quatrième cours a introduit la logique de séparation concurrente (Concurrent Separation Logic, CSL), une extension de la logique de séparation avec des règles de raisonnement sur le parallélisme et l'exclusion mutuelle. La logique de séparation décrit très simplement le calcul parallèle sans partage de ressources, où les processus s'exécutent en parallèle sur des portions disjointes de la mémoire. C'est le cas de nombreux algorithmes récursifs sur les tableaux ou sur les arbres, où les appels récursifs s'effectuent sur des sous-arbres ou sous-tableaux disjoints. La CSL, comme introduite par O'Hearn en 2004, ajoute des règles de raisonnement sur les sections critiques permettant à plusieurs processus d'accéder à des ressources partagées à condition que ces accès s'effectuent en exclusion mutuelle. Les ressources partagées sont décrites par des formules de logique de séparation qui doivent être invariantes en dehors des sections critiques. Cela permet de décrire non seulement de nombreux idiomes de synchronisation entre processus, mais aussi les transferts de ressources qui s'effectuent implicitement lors de ces synchronisations. Nous avons défini une CSL pour le petit langage du précédent cours enrichi de constructions décrivant le parallélisme et les instructions atomiques. Nous avons montré comment construire sur ce langage et cette logique des sémaphores binaires, des sections critiques, et des schémas producteur-consommateur. Enfin, nous avons montré la correction sémantique de cette CSL en reprenant une démonstration publiée par Vafeiadis en 2011.
Xavier Leroy Collège de France Science du logiciel Année 2020-2021 Logiques de programmes : quand la machine raisonne sur ses logiciels Les processeurs multicœurs sont un exemple d'architecture parallèle à mémoire partagée, où plusieurs unités de calcul travaillent simultanément sur une mémoire commune. La programmation de ces architectures est difficile : il faut maîtriser les interférences possibles entre les actions des processus, et éviter les courses critiques (race conditions) entre des écritures et des lectures simultanées. Quelles logiques de programmes nous permettent de vérifier des programmes parallèles à mémoire partagée ? Pour répondre à cette question, le quatrième cours a introduit la logique de séparation concurrente (Concurrent Separation Logic, CSL), une extension de la logique de séparation avec des règles de raisonnement sur le parallélisme et l'exclusion mutuelle. La logique de séparation décrit très simplement le calcul parallèle sans partage de ressources, où les processus s'exécutent en parallèle sur des portions disjointes de la mémoire. C'est le cas de nombreux algorithmes récursifs sur les tableaux ou sur les arbres, où les appels récursifs s'effectuent sur des sous-arbres ou sous-tableaux disjoints. La CSL, comme introduite par O'Hearn en 2004, ajoute des règles de raisonnement sur les sections critiques permettant à plusieurs processus d'accéder à des ressources partagées à condition que ces accès s'effectuent en exclusion mutuelle. Les ressources partagées sont décrites par des formules de logique de séparation qui doivent être invariantes en dehors des sections critiques. Cela permet de décrire non seulement de nombreux idiomes de synchronisation entre processus, mais aussi les transferts de ressources qui s'effectuent implicitement lors de ces synchronisations. Nous avons défini une CSL pour le petit langage du précédent cours enrichi de constructions décrivant le parallélisme et les instructions atomiques. Nous avons montré comment construire sur ce langage et cette logique des sémaphores binaires, des sections critiques, et des schémas producteur-consommateur. Enfin, nous avons montré la correction sémantique de cette CSL en reprenant une démonstration publiée par Vafeiadis en 2011.
Xavier Leroy Collège de France Science du logiciel Année 2020-2021 Logiques de programmes : quand la machine raisonne sur ses logiciels Dans le troisième cours, nous avons étudié les structures de données et la vérification de programmes qui les manipulent. Les tableaux sont la plus ancienne des structures de données. Une extension simple de la logique de Hoare avec une règle pour l'affectation à un élément d'un tableau permet de spécifier et de vérifier de nombreux programmes utilisant des tableaux, comme par exemple les tris en place. Les pointeurs, aussi appelés références, permettent de représenter de nombreuses structures de données : graphes, listes chaînées, arbres... Un codage des pointeurs en termes de tableaux globaux, comme proposé par R. Burstall (1972) et développé par R. Bornat (2000), se révèle efficace pour vérifier des algorithmes opérant sur des graphes, mais très lourd pour les algorithmes sur les listes et autres structures chaînées. En effet, il est difficile d'éviter les situations de partage, d'alias et d'interférence qui peuvent invalider ces structures. C'est en cherchant à décrire et maîtriser ces phénomènes d'interférence que J. C. Reynolds, rejoint ensuite par P. O'Hearn et H. Yang, invente entre 1997 et 2001 la logique de séparation. Cette logique met en avant l'importance du raisonnement local et des règles d'encadrement associées, le besoin d'associer une empreinte mémoire à chaque assertion, et le concept de conjonction séparante entre assertions. Nous avons illustré l'approche en développant une logique de séparation pour un petit langage fonctionnel et impératif doté de variables immuables et de pointeurs vers des cases mémoires mutables. Cette logique de séparation permet de décrire très précisément de nombreuses structures de données par des prédicats de représentation : listes simplement ou doublement chaînées, listes circulaires, arbres, etc., et de spécifier et vérifier leurs principales opérations. Enfin, nous avons esquissé deux démonstrations de la correction sémantique de cette logique de séparation, l'une reposant sur une propriété de non-déterminisme de l'allocation mémoire ; l'autre, sur une quantification sur tous les encadrements possibles.
Xavier Leroy Collège de France Science du logiciel Année 2020-2021 Logiques de programmes : quand la machine raisonne sur ses logiciels Dans le troisième cours, nous avons étudié les structures de données et la vérification de programmes qui les manipulent. Les tableaux sont la plus ancienne des structures de données. Une extension simple de la logique de Hoare avec une règle pour l'affectation à un élément d'un tableau permet de spécifier et de vérifier de nombreux programmes utilisant des tableaux, comme par exemple les tris en place. Les pointeurs, aussi appelés références, permettent de représenter de nombreuses structures de données : graphes, listes chaînées, arbres... Un codage des pointeurs en termes de tableaux globaux, comme proposé par R. Burstall (1972) et développé par R. Bornat (2000), se révèle efficace pour vérifier des algorithmes opérant sur des graphes, mais très lourd pour les algorithmes sur les listes et autres structures chaînées. En effet, il est difficile d'éviter les situations de partage, d'alias et d'interférence qui peuvent invalider ces structures. C'est en cherchant à décrire et maîtriser ces phénomènes d'interférence que J. C. Reynolds, rejoint ensuite par P. O'Hearn et H. Yang, invente entre 1997 et 2001 la logique de séparation. Cette logique met en avant l'importance du raisonnement local et des règles d'encadrement associées, le besoin d'associer une empreinte mémoire à chaque assertion, et le concept de conjonction séparante entre assertions. Nous avons illustré l'approche en développant une logique de séparation pour un petit langage fonctionnel et impératif doté de variables immuables et de pointeurs vers des cases mémoires mutables. Cette logique de séparation permet de décrire très précisément de nombreuses structures de données par des prédicats de représentation : listes simplement ou doublement chaînées, listes circulaires, arbres, etc., et de spécifier et vérifier leurs principales opérations. Enfin, nous avons esquissé deux démonstrations de la correction sémantique de cette logique de séparation, l'une reposant sur une propriété de non-déterminisme de l'allocation mémoire ; l'autre, sur une quantification sur tous les encadrements possibles.
Xavier Leroy Collège de France Science du logiciel Année 2020-2021 Logiques de programmes : quand la machine raisonne sur ses logiciels Le deuxième cours a été consacré à l'étude approfondie des « logiques de Hoare », c'est-à-dire des logiques de programmes qui suivent l'approche introduite par C. A. R. Hoare en 1969. Nous avons défini une telle logique de programmes pour le langage IMP, un petit langage impératif à contrôle structuré que nous avions déjà étudié dans le cours 2019-2020 « Sémantiques mécanisées ». Nous avons ensuite développé diverses extensions de cette logique : règles de raisonnement dérivées ou admissibles, non-déterminisme, erreurs dynamiques, contrôle non structuré, etc. La suite du cours a étudié les liens entre la logique de programmes et la sémantique opérationnelle du langage IMP. Nous avons défini et démontré la correction sémantique de la logique : toutes les propriétés d'un programme dérivables par les règles de la logique sont bien vérifiées par toutes les exécutions concrètes du programme. Plusieurs techniques de démonstration ont été esquissées : inductives, co-inductives, ou encore par comptage de pas (step-indexing). La complétude est la propriété réciproque de la correction sémantique : toute propriété vraie de toutes les exécutions d'un programme peut-elle s'exprimer comme un triplet de Hoare et se dériver par règles de la logique ? Une logique complète permettrait de décider le problème de l'arrêt. La complétude absolue est donc impossible pour un langage Turing-complet. En revanche, la logique de Hoare satisfait une propriété de complétude relative montrant qu'elle est aussi expressive qu'un raisonnement direct sur les exécutions des programmes, à logique ambiante fixée. Enfin, nous avons discuté des possibilités d'automatiser une vérification déductive à base de logique de Hoare. À condition de fournir manuellement les invariants des boucles, un calcul de plus faible précondition, ou de plus forte postcondition, permet de réduire la vérification d'un programme en logique de Hoare à la vérification d'un ensemble d'implications en logique du premier ordre, tâche qui peut être confiée à des démonstrateurs automatiques ou assistés.
Xavier Leroy Collège de France Science du logiciel Année 2020-2021 Logiques de programmes : quand la machine raisonne sur ses logiciels Le deuxième cours a été consacré à l'étude approfondie des « logiques de Hoare », c'est-à-dire des logiques de programmes qui suivent l'approche introduite par C. A. R. Hoare en 1969. Nous avons défini une telle logique de programmes pour le langage IMP, un petit langage impératif à contrôle structuré que nous avions déjà étudié dans le cours 2019-2020 « Sémantiques mécanisées ». Nous avons ensuite développé diverses extensions de cette logique : règles de raisonnement dérivées ou admissibles, non-déterminisme, erreurs dynamiques, contrôle non structuré, etc. La suite du cours a étudié les liens entre la logique de programmes et la sémantique opérationnelle du langage IMP. Nous avons défini et démontré la correction sémantique de la logique : toutes les propriétés d'un programme dérivables par les règles de la logique sont bien vérifiées par toutes les exécutions concrètes du programme. Plusieurs techniques de démonstration ont été esquissées : inductives, co-inductives, ou encore par comptage de pas (step-indexing). La complétude est la propriété réciproque de la correction sémantique : toute propriété vraie de toutes les exécutions d'un programme peut-elle s'exprimer comme un triplet de Hoare et se dériver par règles de la logique ? Une logique complète permettrait de décider le problème de l'arrêt. La complétude absolue est donc impossible pour un langage Turing-complet. En revanche, la logique de Hoare satisfait une propriété de complétude relative montrant qu'elle est aussi expressive qu'un raisonnement direct sur les exécutions des programmes, à logique ambiante fixée. Enfin, nous avons discuté des possibilités d'automatiser une vérification déductive à base de logique de Hoare. À condition de fournir manuellement les invariants des boucles, un calcul de plus faible précondition, ou de plus forte postcondition, permet de réduire la vérification d'un programme en logique de Hoare à la vérification d'un ensemble d'implications en logique du premier ordre, tâche qui peut être confiée à des démonstrateurs automatiques ou assistés.
Xavier Leroy Collège de France Science du logiciel Année 2020-2021 Logiques de programmes : quand la machine raisonne sur ses logiciels Résumé Comment s'assurer qu'un logiciel fait ce qu'il est censé faire ? Les méthodes classiques de vérification et de validation du logiciel, reposant sur le test, les revues et les analyses, ne suffisent pas toujours. La vérification déductive permet d'aller plus loin en établissant des propriétés vraies de toutes les exécutions possibles d'un programme, via des raisonnements formels au sein d'une logique appropriée : une logique de programmes. Le premier cours a illustré cette approche par la vérification déductive d'une fonction de recherche dichotomique dans un tableau trié, un algorithme très utilisé et souvent implémenté de manière incorrecte. Ensuite, le cours a retracé l'émergence de la vérification déductive et des logiques de programmes via trois publications fondatrices. La brève communication d'Alan Turing en 1949, intitulée « Checking a large routine », introduit deux idées majeures : les assertions logiques et les ordres de terminaison, et les illustre sur la vérification d'un petit programme exprimé par un organigramme. Trop en avance sur son temps, et jamais publié formellement, ce texte précurseur tombe dans l'oubli jusqu'en 1984. L'article de Robert W. Floyd de 1967, « Assigning meanings to programs », réinvente l'approche de Turing et l'approfondit considérablement, avec une formalisation complète des conditions de vérification qui garantissent qu'un programme est correctement annoté, et l'observation, révolutionnaire pour l'époque, qu'une telle formalisation constitue une sémantique formelle du langage de programmation utilisé. Enfin, l'article de C. A. R. Hoare de 1969, intitulé « An axiomatic basis for computer programming », constitue le manifeste de la vérification déductive moderne. L'article étend les résultats de Floyd à un langage à contrôle structuré (séquences, conditionnelles, boucles) et introduit des notations toujours utilisées aujourd'hui (les « triplets de Hoare »). Mais, au-delà des contributions techniques, cet article est visionnaire tant par son approche purement axiomatique de la vérification déductive que par son analyse lucide de l'intérêt pratique de cette approche.
Xavier Leroy Collège de France Science du logiciel Année 2020-2021 Logiques de programmes : quand la machine raisonne sur ses logiciels Résumé Comment s'assurer qu'un logiciel fait ce qu'il est censé faire ? Les méthodes classiques de vérification et de validation du logiciel, reposant sur le test, les revues et les analyses, ne suffisent pas toujours. La vérification déductive permet d'aller plus loin en établissant des propriétés vraies de toutes les exécutions possibles d'un programme, via des raisonnements formels au sein d'une logique appropriée : une logique de programmes. Le premier cours a illustré cette approche par la vérification déductive d'une fonction de recherche dichotomique dans un tableau trié, un algorithme très utilisé et souvent implémenté de manière incorrecte. Ensuite, le cours a retracé l'émergence de la vérification déductive et des logiques de programmes via trois publications fondatrices. La brève communication d'Alan Turing en 1949, intitulée « Checking a large routine », introduit deux idées majeures : les assertions logiques et les ordres de terminaison, et les illustre sur la vérification d'un petit programme exprimé par un organigramme. Trop en avance sur son temps, et jamais publié formellement, ce texte précurseur tombe dans l'oubli jusqu'en 1984. L'article de Robert W. Floyd de 1967, « Assigning meanings to programs », réinvente l'approche de Turing et l'approfondit considérablement, avec une formalisation complète des conditions de vérification qui garantissent qu'un programme est correctement annoté, et l'observation, révolutionnaire pour l'époque, qu'une telle formalisation constitue une sémantique formelle du langage de programmation utilisé. Enfin, l'article de C. A. R. Hoare de 1969, intitulé « An axiomatic basis for computer programming », constitue le manifeste de la vérification déductive moderne. L'article étend les résultats de Floyd à un langage à contrôle structuré (séquences, conditionnelles, boucles) et introduit des notations toujours utilisées aujourd'hui (les « triplets de Hoare »). Mais, au-delà des contributions techniques, cet article est visionnaire tant par son approche purement axiomatique de la vérification déductive que par son analyse lucide de l'intérêt pratique de cette approche.