Expressing predicate subtyping in computational logical frameworks - Laboratoire Méthodes Formelles
Thèse Année : 2022

Expressing predicate subtyping in computational logical frameworks

Expression du sous-typage par prédicats dans les cadres logiques calculatoires

Résumé

Safe programming as well as most proof systems rely on typing. The more a type system is expressive, the more these types can be used to encode invariants which are therefore verified mechanically through type checking procedures. Dependent types extend simple types by allowing types to depend on values. For instance, it allows to define the types of lists of a certain length. Predicate subtyping is another extension of simple type theory in which types can be defined by predicates. A predicate subtype, usually noted {x: A | P(x)}, is inhabited by elements t of type A for which P(t) is true. This extension provides an extremely rich and intuitive type system, which is at the heart of the proof assistant PVS, at the cost of making type checking undecidable.This work is dedicated to the encoding of predicate subtyping in Dedukti: a logical framework with computation rules. We begin with the encoding of explicit predicate subtyping for which the terms in {x: A | P(x)} and terms of Aare syntactically different. We show that any derivable judgement of predicate subtyping can be encoded into a derivable judgement of the logical framework. Predicate subtyping, is often used implicitly: with no syntactic difference between terms of type A and terms of type {x: A | P(x) }. We enrich our logical framework with a term refiner which can add these syntactic markers. This refiner can be used to refine judgements typed with implicit predicate subtyping into explicited judgements.The proof assistant PVS uses extensively predicate subtyping. We show how its standard library can be exported to Dedukti. Because PVS only store proof traces rather than complete proof terms, we sketch in the penultimate section a procedure to generate complete proof terms from these proof traces.The last section provides the architecture of a repository dedicated to the exchange of formal proofs. The goal of such a repository is to categorise and store proofs encoded in Dedukti to promote interoperability.
Le typage permet d'apporter de la sûreté dans la programmation, et il est utilisé au coeur de la majorité des systèmes de preuve. Plus un système de types est expressif, plus il est aisé d'y encoder des invariantsqui seront vérifiés mécaniquement lors du typage. Les types dépendants sont une extension des types simples dans laquelle les types peuvent dépendre de valeurs. Ils permettent par exemple de définir les vecteurs paramétrés par leur longueur. Le sous-typage par prédicat est une autre extension des types simples, dans laquelle les types peuvent être définis par des prédicats. Un sous-type défini par un prédicat, généralement noté { x : A | P(x) }, est habité par les éléments t de type A pour lesquels P(t) est vrai. Cette extension fournit un système de type très riche et intuitif, mais qui rend le typage indécidable.Cet ouvrage est dédié à l'encodage du sous-typage par prédicats dans Dedukti, un cadre logique avec des règles de calcul. On commence par encoder une version explicite du sous-typage par prédicats pour lequel un habitant de { x: A | P(x) } est syntaxiquement différent d'un habitant de A. On montre que tout jugement dérivable dans cette version du sous-typage par prédicat peut être encodé en un jugement dérivable du cadre logique.Le sous-typage par prédicat est souvent utilisé de manière implicite, sans différence syntaxique entre les habitants de A et les habitants de { x: A | P(x) }. On enrichit le cadre logique avec un système de raffinement des termes qui pourra ajouter ces marqueurs syntaxiques. Ce raffineur peut traduire des jugements typables avec du sous-typage par prédicat implicite en des jugements typable avec du sous-typage explicite.L'assistant à la preuve pvs utilise abondamment le sous-typage par prédicat. On montre comment sa bibliothèque standard peut être exportée vers Dedukti. Par ailleurs, PVS ne préserve que des traces de preuves. Dans la pénultième section, on décrit une procédure pour générer des preuves complètes à partir des traces laissées par PVS.La dernière section détaille une architecture pour l'entrepôt et l'échange de preuves formelles, afin de promouvoir l'interopérabilité.
Fichier principal
Vignette du fichier
117824_HONDET_2022_archivage.pdf (1.02 Mo) Télécharger le fichier
Origine Version validée par le jury (STAR)

Dates et versions

tel-03855351 , version 1 (16-11-2022)

Identifiants

  • HAL Id : tel-03855351 , version 1

Citer

Gabriel Hondet. Expressing predicate subtyping in computational logical frameworks. Logic in Computer Science [cs.LO]. Université Paris-Saclay, 2022. English. ⟨NNT : 2022UPASG070⟩. ⟨tel-03855351⟩
270 Consultations
263 Téléchargements

Partager

More