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
Programmazione Logica CoLF come Esplorazione di Prove Infinitarie
Questo articolo esamina l'implementazione del paradigma "computazione come costruzione di prove" sul frammento del primo ordine di CoLF^ω (CoLF^ω_1), che già contiene oggetti e prove infinite. L'idea centrale è interpretare le variabili logiche come canali di comunicazione e la computazione come passaggio di messaggi concorrente. Questa idea è realizzata attraverso un compilatore concreto che traduce CoLF^ω_1 in Sax, un linguaggio di programmazione parallelo ispirato dalla teoria delle prove, basato sulla riduzione di prove nel calcolo dei sequenti semi-assiomatizzato.
Limitazioni dei framework logici tradizionali: I primi framework logici come Automath e LF, sebbene abbiano implementato con successo il paradigma "computazione come costruzione di prove", non supportano l'espressione diretta di oggetti o prove infinite
Problemi delle implementazioni esistenti: La ricerca di prove basata su backtracking affronta molteplici difficoltà in contesti infiniti:
Problemi di terminazione quando l'input è infinito
Interazione problematica tra oggetti infiniti e backtracking (potrebbe non fallire mai esplicitamente)
Gli algoritmi di unificazione garantiscono terminazione solo su termini razionali (ciclici), ma molti oggetti e prove nelle applicazioni non sono razionali
Supporto per computazioni infinite: È necessaria una semantica dinamica che calcoli l'output in modo incrementale dall'input, simile a trasformatori tra flussi
Evitare il backtracking: Garantire staticamente attraverso pattern e controlli di unicità che esista al massimo una prova per ogni input unico
Parallelizzazione: Sfruttare la comunicazione tra variabili condivise per implementare il parallelismo-E tra più premesse
Propone il linguaggio di programmazione logica CoLF^ω_1: Supporta prove con rappresentazione di termini infiniti, costruzione di prove senza backtracking, valutazione parallela di premesse mediante variabili logiche condivise
Modello computazionale innovativo: Interpreta le variabili logiche come canali di comunicazione e la computazione come passaggio di messaggi concorrente
Implementazione di un compilatore: Compilatore concreto da CoLF^ω_1 a Sax
Sistema di esempi ricco: Include implementazioni di elaborazione di flussi, sequenza di Fibonacci, operazioni di integrazione e altre relazioni complesse
Il comportamento del programma è definito dalle seguenti operazioni:
Operazioni su canali: Ogni parametro è considerato un canale di comunicazione, le dichiarazioni di pattern specificano canali di input (+) o output (-)
Operazioni di lettura/scrittura: Il programma può leggere valori da canali di input e scrivere valori su canali di output
Inoltro di canali: Inoltrare direttamente un canale di input a un canale di output
Generazione parallela: Allocare nuovi canali e generare nuovi processi
Attraverso controlli di unicità statici, si garantisce che in ogni punto del programma esista al massimo un'azione possibile, eliminando la necessità di backtracking della programmazione logica tradizionale.
mult_s : mult A B C -> add B C D -> mult (s A) B D.
Nella definizione di moltiplicazione sopra riportata, le due premesse mult A B C e add B C D possono essere valutate in parallelo, comunicando attraverso la variabile condivisa C.
Supporta la valutazione pigra, quando l'output D viene rivelato gradualmente, i primi B passi non richiedono la valutazione di mult A B C, poiché C rimane invariato.
omega : conat = s omega.
main : stream = repeat omega.
Risultato:
(cons (s (s (s (s ...))))
(cons (s (s (s ...)))
(cons (s (s ...))
(cons (s ...)
(cons ...)))))
Verifica del Parallelismo: Molteplici premesse possono effettivamente essere eseguite in parallelo, comunicando efficacemente attraverso variabili condivise
Gestione di Strutture Infinite: Gestione riuscita di definizioni ricorsive infinite, come ω = s ω
Computazione Incrementale: Verifica dell'efficacia della valutazione pigra e dell'output incrementale
L'articolo cita letteratura importante nei campi della teoria delle prove, dei framework logici e del calcolo parallelo, inclusi:
Sistema Automath di de Bruijn
Framework LF di Harper e altri
λ-Prolog di Miller e altri
Calcolo dei sequenti semi-assiomatizzato di DeYoung e altri
Valutazione Complessiva: Questo è un articolo innovativo di informatica teorica che introduce per la prima volta il supporto per oggetti infiniti in un framework logico, proponendo un nuovo modello di calcolo concorrente. Sebbene come rapporto di progresso abbia spazio per miglioramenti nella profondità teorica, le sue idee fondamentali e l'implementazione preliminare aprono nuove direzioni di ricerca in questo campo.