CoLF Logic Programming as Infinitary Proof Exploration
Chen, Pfenning
Logical Frameworks such as Automath [de Bruijn, 1968] or LF [Harper et al., 1993] were originally conceived as metalanguages for the specification of foundationally uncommitted deductive systems, yielding generic proof checkers. Their high level of abstraction was soon exploited to also express algorithms over deductive systems such as theorem provers, type-checkers, evaluators, compilers, proof transformers, etc. in the paradigm of computation-as-proof-construction. This has been realized in languages such as $λ$-Prolog [Miller et al., 1991] or Elf [Pfenning, 1991] based on backward chaining, and LolliMon [Lopez et al., 2005] or Celf [Schack-Nielsen and Schuermann, 2008], which integrated forward chaining. None of these early frameworks supported the direct expression of infinitary objects or proofs, which are available in the recently developed CoLF$^Ï$ [Chen, 2023]. In this work-in-progress report, we sketch an approach to computation-as-proof-construction over the first-order fragment of CoLF$^Ï$ (called CoLF$^Ï_1$ ) that already includes infinitary objects and proofs. A key idea is the interpretation of logic variables as communication channels and computation as concurrent message-passing. This is realized in a concrete compiler from CoLF$^Ï_1$ to Sax, a proof-theoretically inspired parallel programming language based on the proof-reduction in the semi-axiomatic sequent calculus [DeYoung et al., 2020].
academic
Programmation Logique CoLF comme Exploration de Preuves Infinitaires
Cet article explore la mise en œuvre du paradigme « calcul comme construction de preuve » sur le fragment du premier ordre de CoLF^ω (CoLF^ω_1), un fragment qui contient déjà des objets et des preuves infinitaires. L'idée centrale consiste à interpréter les variables logiques comme des canaux de communication et le calcul comme un passage de messages concurrents. Cette idée est concrétisée par une implémentation de compilateur qui traduit CoLF^ω_1 en Sax — un langage de programmation parallèle inspiré de la théorie des preuves, basé sur la réduction de preuves dans le calcul des séquents semi-axiomatisé.
Limitations des cadres logiques traditionnels: Les cadres logiques antérieurs tels qu'Automath et LF, bien qu'ils aient réussi à implémenter le paradigme « calcul comme construction de preuve », ne supportent pas l'expression directe d'objets ou de preuves infinitaires.
Problèmes des implémentations existantes: La recherche de preuves basée sur le retour arrière fait face à de multiples difficultés dans un contexte infinitaire:
Problèmes de terminaison lorsque les entrées sont infinies
Interactions problématiques entre objets infinitaires et retour arrière (qui peuvent ne jamais échouer explicitement)
Les algorithmes d'unification ne garantissent la terminaison que sur les termes rationnels (cycliques), alors que de nombreux objets ou preuves dans les applications ne sont pas rationnels
Support du calcul infinitaire: Nécessité d'une sémantique dynamique capable de calculer les sorties de manière incrémentale à partir des entrées, similaire aux transducteurs entre flux
Éviter le retour arrière: Assurer statiquement par des vérifications de motifs et d'unicité qu'il existe au maximum une preuve pour chaque entrée unique
Parallélisation: Exploiter la communication entre variables partagées pour réaliser le parallélisme ET entre plusieurs prémisses
Proposition du langage de programmation logique CoLF^ω_1: Support des preuves avec représentation de termes infinitaires, construction de preuves sans retour arrière, évaluation parallèle des prémisses utilisant des variables logiques partagées pour la communication
Modèle de calcul innovant: Interprétation des variables logiques comme des canaux de communication et du calcul comme un passage de messages concurrents
Implémentation d'un compilateur: Implémentation concrète d'un compilateur de CoLF^ω_1 vers Sax
Système d'exemples riche: Incluant l'implémentation de traitement de flux, de suites de Fibonacci, d'opérations d'intégration et d'autres relations complexes
Cet article étudie comment implémenter la programmation logique dans un cadre logique supportant les objets infinitaires, avec la tâche spécifique suivante:
Entrée: Spécification de programme CoLF^ω_1
Sortie: Structures infinitaires (telles que des flux) calculées via passage de messages concurrents
Contraintes: Pas de retour arrière, support du calcul parallèle, garantie d'unicité
Le comportement du programme est défini par les opérations suivantes:
Opérations sur canaux: Chaque paramètre est traité comme un canal de communication, les déclarations de motifs spécifiant les canaux d'entrée (+) ou de sortie (-)
Opérations de lecture/écriture: Le programme peut lire des valeurs à partir de canaux d'entrée et écrire des valeurs vers des canaux de sortie
Transfert de canaux: Transfert direct d'un canal d'entrée vers un canal de sortie
Génération parallèle: Allocation de nouveaux canaux et génération de nouveaux processus
La vérification statique d'unicité garantit qu'il existe au maximum une action possible à chaque point du programme, éliminant le besoin de retour arrière présent dans la programmation logique traditionnelle.
mult_s : mult A B C -> add B C D -> mult (s A) B D.
Dans la définition de multiplication ci-dessus, les deux prémisses mult A B C et add B C D peuvent être évaluées en parallèle, communiquant via la variable partagée C.
Support de l'évaluation paresseuse, où lorsque la sortie D est progressivement révélée, les B premières étapes ne nécessitent pas d'évaluer mult A B C, car C reste inchangé.
omega : conat = s omega.
main : stream = repeat omega.
Résultat:
(cons (s (s (s (s ...))))
(cons (s (s (s ...)))
(cons (s (s ...))
(cons (s ...)
(cons ...)))))
Vérification du parallélisme: Plusieurs prémisses peuvent effectivement être exécutées en parallèle, communiquant efficacement via des variables partagées
Traitement de structures infinitaires: Gestion réussie de définitions récursives infinitaires, telles que ω = s ω
Calcul incrémental: Validation de l'efficacité de l'évaluation paresseuse et de la sortie incrémentale
L'article cite des références importantes dans les domaines des cadres logiques, de la théorie des preuves et du calcul parallèle, incluant:
Le système Automath de de Bruijn
Le cadre LF de Harper et al.
λ-Prolog de Miller et al.
Le calcul des séquents semi-axiomatisé de DeYoung et al.
Évaluation Globale: Cet article est une contribution théorique innovante en informatique, introduisant pour la première fois le support d'objets infinitaires dans un cadre logique et proposant un modèle de calcul concurrent novateur. Bien qu'en tant que rapport de progrès il y ait place pour une plus grande profondeur théorique, ses idées centrales et son implémentation préliminaire ouvrent une nouvelle direction de recherche pour ce domaine.