Utilisation de la concurrence pour les tableaux analytiques au premier ordre

par Julie Cailler

Projet de thèse en Informatique

Sous la direction de David Delahaye.

Thèses en préparation à Montpellier , dans le cadre de École Doctorale Information, Structures, Systèmes , en partenariat avec LIRMM - Laboratoire d'Informatique, de Robotique et de Micro-électronique de Montpellier (laboratoire) et de Département Informatique (equipe de recherche) depuis le 01-10-2020 .


  • Résumé

    Contexte et position La recherche sur la résolution en parallèle de problèmes de logique propositionnelle a commencé au début des années 1990 et se poursuit encore activement aujourd'hui [7]. La recherche sur la preuve automatique en parallèle de théorèmes de logique du premier ordre, a commencé au milieu et à la fin des années 1980, s'est développée dans les années 1990, puis s'est pratiquement arrêtée au début des années 2000 [10]. En ce qui concerne la logique du premier ordre, la plupart des travaux concernent les méthodes basées sur les modèles, où une méthode de preuve est basée sur un modèle, si l'état d'une dérivation contient une représentation d'un modèle partiel candidat qui se déroule avec la dérivation. Pour la méthode des tableaux par exemple, il existe les 'model-elimination' tableaux, qui sont basés sur les tableaux clausaux. En ce qui concerne la méthode des tableaux [6], telle que conçue initialement par Beth et Hintikka [1, 3], qui manipule des formules de premier ordre (et non des clauses), il n'existe pas, à notre connaissance, de travaux sur le sujet dans la littérature. Pourtant, ce type de tableaux est intéressant car il ne transforme pas la formule initiale (pas de skolemisation, pas de clausification), et il produit une véritable preuve à la fin dans le calcul des séquents sans coupure. De plus, cette méthode pourrait naturellement et avantageusement s'étendre à la concurrence. En effet, la méthode du tableau est basée sur une recherche de preuve arborescente dans laquelle toutes les branches doivent être fermées (c'est-à-dire que nous recherchons une contradiction dans chaque branche). Ainsi, on pourrait imaginer essayer de fermer toutes les branches en parallèle. Néanmoins, le problème est plus complexe qu'il n'y paraît car dans la logique du premier ordre, il existe des dépendances entre les branches. Nous recherchons une substitution de métavariables (également appelées variables libres dans la littérature, et qui sont introduites par des quantificateurs existentiels pour lesquels nous recherchons une instanciation) de telle sorte que toutes les branches soient fermées simultanément. Objectifs Dans cette thèse, nous aimerions nous concentrer sur la concurrence pour les tableaux analytiques, qui traite des formules du premier ordre. Comme nous sommes intéressés par la recherche de preuves, nous considérerons les tableaux avec métavariables, qui nous permettent de trouver (par unification) des instances pour des formules existentielles. Comme nous l'avons dit précédemment, cela consistera à fermer toutes les branches d'un arbre de recherche de preuves en parallèle tout en tenant compte des dépendances introduites par les métavariables, et nous présenterons, dans la suite, les différents avantages et problèmes d'une telle recherche de preuves. L'exploration en parallèle de toutes les branches d'un arbre de recherche de preuves présente plusieurs avantages. L'un d'eux est que certaines branches peuvent fournir des exemples possibles de métavariables, tandis que d'autres ne le feront pas. Une exploration séquentielle des branches doit choisir une branche à explorer et si cette dernière ne fournit pas d'instances pour les métavariables, une longue recherche peut être effectuée dans cette branche avant que les conditions d'équité nous obligent à changer la branche à explorer. C'est le cas avec la formule : exists x.x = a land F(x), où a est une constante et F(x) une formule quelconque. Si nous commençons à explorer la branche correspondant à F(x), nous risquons de ne pas trouver de preuve, alors que la première branche nous donne immédiatement l'instance a pour x. Une exploration parallèle des branches nous permettrait de trouver rapidement l'instance a pour x. Avec une telle exploration parallèle, le problème est de savoir si nous instancions immédiatement dès que nous trouvons une instance et comment nous évitons de refaire le travail déjà effectué dans la recherche de preuves. Un autre avantage de l'exploration des branches parallèles est qu'il sera possible de mieux traiter les théorèmes purement classiques, qui nécessitent plusieurs métavariables pour une variable existentielle afin de pouvoir trouver la preuve. Par exemple, si nous considérons la formule exists x.P(x) implies P(a) land P(b), où a et b sont des constantes et P un prédicat, deux instanciations sont nécessaires (une avec a et une avec b). Dans le cas d'une gestion destructive des métavariables, nous allons d'abord essayer de trouver la preuve avec une métavariable, ce qui produira un échec. Nous essaierons ensuite avec deux métavariables et nous trouverons la preuve. Une exploration parallèle des branches pourrait nous montrer très rapidement que deux instances distinctes conviennent pour x, et nous pourrions voir tout de suite que deux métavariables sont nécessaires sans attendre un échec de la recherche de preuve. Il faudra examiner attentivement comment cette méthode est combinée avec celle mentionnée précédemment, qui recommence la recherche de preuves dès qu'une instance a été trouvée dans une branche. Actuellement, il existe plusieurs approches de programmation parallèles. Ces approches peuvent être classées en fonction des infrastructures matérielles ciblées (taxonomie de Flynn [2]). Nous nous intéressons en particulier aux architectures MIMD (Multiple Instruction, Multiple Data), y compris les processeurs multicœurs et les systèmes distribués, avec un espace mémoire partagé ou distribué, et les ordinateurs SIMD (Single Instruction, Multiple Data), comme les GPU. Dans chaque classification, de nombreux modèles de programmation sont également proposés, avec différents niveaux d'abstraction. Un modèle avec un faible niveau d'abstraction, comme le multithreading, combine généralement des aspects fonctionnels et non fonctionnels (gestion du parallélisme, synchronisation, partage/transfert de données, ordonnancement, etc.), tandis qu'un niveau d'abstraction élevé, comme la programmation de workflows [5, 12, 11], permet à un développeur de se concentrer sur les aspects fonctionnels et de déléguer la gestion des autres aspects à un intergiciel. Un des principaux objectifs de cette thèse est de proposer une stratégie et un modèle de programmation qui soient adaptés et efficaces pour résoudre les problèmes liés à la méthode des tableaux, tout en permettant la traçabilité de l'exécution. Pour cela, il sera nécessaire de bien comprendre la méthode des tableaux afin de déterminer notamment comment les données sont utilisées, comment elles peuvent être partagées entre les branches à explorer, comment elles peuvent être exploitées pour la traçabilité des résultats et quelles structures parallèles doivent être utilisées. Une étude minutieuse des approches de programmation parallèle existantes est également nécessaire pour identifier celles qui sont proches d'un niveau d'abstraction approprié, idéalement un modèle indépendant de l'infrastructure permettant l'exécution sur des processeurs multi-cœurs ainsi que sur des systèmes distribués. L'objectif est d'assurer l'extensibilité, la portabilité et l'extensibilité. À première vue, partir de modèles basés sur les workflows pourrait répondre à notre objectif. Enfin, il faudra veiller à ce que la stratégie parallèle d'exploration de l'espace de recherche de preuve reste correcte et complète. Pour ce faire, il sera nécessaire d'utiliser un formalisme capable de traiter les processus (un processus est créé pour chaque nouvelle branche) et la communication entre les processus (par exemple, un processus qui a trouvé une instance pour une métavariable doit le signaler aux autres processus pour éventuellement interrompre leur recherche de preuve). De nombreux calculs de processus existent depuis les années 1980, tels que le CCS de Milner [8] (ou son extension avec le pi-calculus [9]) ou le CSP de Hoare [4]. Notez que nous utiliserons ces formalismes comme cadres pour prouver la correction et la complétude de notre méthode, et en particulier, nous ne serons pas intéressés par l'utilisation d'implémentations de ces formalismes.

  • Titre traduit

    Using Concurrency for First-Order Analytic Tableaux


  • Résumé

    Context and Position Research on parallel satisfiability solving, meaning satisfiability in propositional logic (SAT), began in the early 1990's and is still actively pursued today [7]. Research on parallel theorem proving, meaning automatic theorem proving (ATP) in first-order logic, began in the mid and late 1980's, flourished in the 1990's, and came pretty much to a halt in the early 2000's [10]. Concerning first-order logic, most of the work concerns model-based methods, where a theorem-proving method is model-based, if the state of a derivation contains a representation of a candidate partial model that unfolds with the derivation. For the tableau method for example, there are model-elimination tableaux, which are based on clausal tableaux. Regarding the tableau method [6], as initially designed by Beth and Hintikka [1, 3], which manipulates first-order formulas (and not clauses), no work appears in the literature as far as the authors know. This kind of tableaux is interesting because it does not transform the initial formula (no Skolemisation, no clausification), and it produces a genuine proof at the end in the sequent calculus without cut. In addition, this method could naturally and advantageously extend to concurrency. Indeed, the tableau method is based on a tree-like proof search in which all branches are to be closed (i.e. we look for a contradiction in each branch). Thus, we could imagine trying to close all the branches in parallel. Nevertheless, the problem is more complex than it seems because in first-order logic, there are dependencies between branches. We look for a substitution of metavariables (also called free variables in the literature, and which are introduced by existential quantifiers for which we look for an instantiation) such that all branches are closed simultaneously. Objectives In this PhD thesis, we would like to focus on concurrency for analytic tableaux, which deals with first-order formulas. As we are interested in proof search, we will consider tableaux with metavariables, which allow us to find (by unification) instances for existential formulas. As said previously, this will consist in closing all the branches of a proof search tree in parallel while taking into account the dependencies introduced by the metavariables, and we will present, in the following, the different advantages and problems of such a proof search. Exploring all branches of a proof search tree in parallel has several advantages. One of them is that some branches can provide possible instances for metavariables while others will not. A sequential exploration of the branches must choose a branch to be explored and if the latter does not provide instances for metavariables, a long search may be done in this branch before the conditions of fairness require us to change the branch to be explored. This is the case with the formula: exists x.x = a land F(x), where a is a constant and F(x) any formula. If we start exploring the branch corresponding to F(x), we may not find a proof, while the first branch immediately gives us the instance a for x. A parallel exploration of the branches would allow us to find the instance a for x quickly. With such a parallel exploration, there is the problem of knowing if we instantiate immediately as soon as we find an instance and how we avoid redoing work already done in the proof search. Another advantage of parallel branch exploration is that it will be possible to better deal with purely classical theorems, which require several metavariables for an existential variable in order to be able to find the proof. For example, if we consider the formula exists x.P(x) implies P(a) land P(b), where a and b are constants and P a predicate, two instantiations are required (one with a and one with with b). In the case of destructive management of metavariables, we will first try to find the proof with one metavariable, which will produce a failure. We will then try with two metavariables and find the proof. A parallel exploration of the branches could show us very quickly that two separate instances are suitable for x, and we could see right away that two metavariables are necessary without waiting for a failure of the proof search. It will be necessary to look carefully at how this method is combined with the one mentioned previously, which restarts the proof search as soon as an instance has been found in a branch. Currently, there are several parallel programming approaches. These approaches can be classified according to targeted hardware infrastructures (taxonomy of Flynn [2]). We are in particular interested in MIMD (Multiple Instruction, Multiple Data) architectures, including multi-core processors and distributed systems, with a shared or a distributed memory space, and SIMD (Single Instruction, Multiple Data) computers, like GPUs. In each classification, many programming models are also proposed, with different levels of abstraction. A model with a low level of abstraction, like multithreading, usually combines functional aspects with non-functional ones (parallelism management, synchronization, data sharing/transfer, scheduling, etc.), while a high level of abstraction, like workflow programming [5, 12, 11], allows a developer to focus on functional aspects and delegate the management of other aspects to a middle-ware. A main objective of this PhD thesis is to propose a strategy and a programming model that are suitable and efficient for solving problems with the tableau method, while enabling execution traceability. For this, it will be necessary to well understand the tableau method to determine in particular how data are used, how they can be shared between branches to explore, how they can be exploited for result traceability, and which parallel structures should be used. A meticulous study of existing parallel programming approaches is also necessary to identify those close to meet a suitable level of abstraction, ideally an infrastructure independent model enabling execution on multi-core processors as well as on distributed systems. The aim is to ensure scalability, portability, and extensibility. At first glance, starting from workflow based models could meet our aim. Finally, it will be necessary to ensure that the parallel strategy of exploration of proof search space remains sound and complete. To do so, it will be necessary to use a formalism able to deal with processes (a process is created for each new branch) and communication between processes (for example, a process that has found an instance for a metavariable must report it to the other processes to possibly interrupt their proof search). Many process calculi have existed since the 1980s, such as Milner's CCS [8] (or its extension with the pi-calculus [9]) or Hoare's CSP [4]. Note that we will use these formalisms as frameworks to prove the soundness and completeness of our method, and in particular, we will not be interested in using implementations of these formalisms.