ELAN pour la r´ ecurrence en Coq E. Deplagne, C. Kirchner, A. Martins-Moreira, F. Nahon et H. Nguyen Motivation • Automatisation de preuves par r´ecurrence • Int´egration de techniques de r´ecurrence par r´e´ecriture au Coq • La preuve est – recherch´ee en ELAN – v´erifi´ee en Coq ELAN pour la r´ecurrence en Coq 2/?? Plan • Sch´ema de coop´eration • La r´ecurrence en Coq • Sch´ema d’instanciation en ELAN ELAN pour la r´ecurrence en Coq 3/?? Sch´ ema de coop´ eration Eric Deplagne Type inductif Coq Inductive le type : Set := ··· (* le type le type le type le type *) is defined ind is defined rec is defined rect is defined ELAN pour la r´ecurrence en Coq 5/?? Sch´ ema de r´ ecurrence structurelle • le type ind, le type rec et le type rect correspondent au sch´ema de r´ecurrence structurelle, formul´e sur Prop, Set et Type respectivement. • nat ind: (P : (nat−>P rop))(P O)−>((n : nat)(P n)−>(P (S n)))−>(n : nat)(P n) ELAN pour la r´ecurrence en Coq 6/?? D´ efinitions et but • · · · (* R : d´efinitions de fonctions avec Parameter (ou autrement) *) • Goal (x:le type)(G x). – (* π : (x:le type)(G x) *) ELAN pour la r´ecurrence en Coq 7/?? Premi` eres ´ etapes • Intro x. • Pattern x. – (* ([x0:le type](G x0) x) *) • Apply le type ind. – (* π = [x:le type](le type ind [x0:le type](G x0) (π1 x) · · · (πn x) x)*) – (* πi: Gi *) ELAN pour la r´ecurrence en Coq 8/?? Simplification des sous-buts • (* Gi= le type −> (x1. . . xm) Hrec1 −> · · · −> Hrecm0 −> (G ti) *) – Hrecj = (G t0j ) avec t0j <ti. • Clear x. – (* G0i= (x1. . . xm) Hrec1 −> · · · −> Hrecm0 −> (G ti) *) – (* π = [x:le type](le type ind [x0:le type](G x0) π10 · · · πn0 x) – (* πi0 : G0i *) ELAN pour la r´ecurrence en Coq 9/?? Simplification des sous-buts (suite) • Intros. – (* πi0 = [X1 . . . Xm; Hrec1. . . Hrecm0 ](πi00 X1 · · · Xm Hrec1 · · · Hrecm0 ) – (* πi00: G0i *) ELAN pour la r´ecurrence en Coq 10/?? Simplification des sous-buts (ELAN) • −→ R • −→ X1 −→ . . . −→ Xm • −→ Hrec1 −→ . . . −→ Hrecm • −→ (G ti) • .. • ←− πi00 ELAN pour la r´ecurrence en Coq 11/?? Perspectives • Faire construire directement π par ELAN. – En se basant sur le type ind. – Librement (autre type de r´ecurrence). ELAN pour la r´ecurrence en Coq 12/?? La r´ ecurrence en Coq Nguyen Quang Huy Preuve par r´ ecurrence : plusieurs choix ind´ ecidables 1. Les variables de r´ecurrence 2. Un principe de r´ecurrence (a.k.a. induction rule) • sch´ema d’instanciation • un ordre noeth´erien ELAN pour la r´ecurrence en Coq 14/?? Preuve par r´ ecurrence en Coq • Variable de r´ecurrence – du type inductif – fournie par l’utlisateur • Principe de r´ecurrence par d´efaut – sch´ema d’instanciation se base sur les constructeurs de type de la variable – ordre de sous-terme strict nat_ind : (P:(nat->Prop))(P O)->((n:nat)(P n)->(P (S n)))->(n:nat)(P n) • Tactique Elim g´en`ere deux sous-buts correspondant aux cas de base et cas de r´ecurrence • Le terme de preuve final comporte le principe de r´ecurrence, les variables de r´ecurrence et les preuves de ces deux cas ELAN pour la r´ecurrence en Coq 15/?? Sch´ ema d’instanciation • D´emontrer un nouveau principe de r´ecurrence en Coq Par exemple : la r´ecurrence double nat_ind2 : (P:(nat->Prop)) (P O)->(P (S O))->((n:nat)(P n)->(P (S (S n))))->(n:nat)(P n) • Utiliser ce principe dans la preuve Elim x using nat ind2 ELAN pour la r´ecurrence en Coq 16/?? Ordre noeth´ erien • Utiliser un autre ordre noeth´erien dans le principe de r´ecurrence – d´efinir l’ordre – d´emontrer sa propri´et´e noeth´erienne • Utiliser ce principe dans la preuve Elim x using (well founded ind type R). o` u R est une relation noeth´erienne sur le domaine type well_founded_ind: (A:Set; R:(A->A->Prop)) (well_founded A R) ->(P:(A->Prop))((x:A)((y:A)(R y x)->(P y))->(P x))->(a:A)(P a) ELAN pour la r´ecurrence en Coq 17/?? Preuve de la propri´ et´ e noeth´ erienne • Propri´et´e d’accessibilit´e : x est accessible pour la relation R ssi tous ses pr´ed´ecesseurs le sont. Inductive Acc [A : Set; R : A->A->Prop] : A->Prop := Acc_intro : (x:A)((y:A)(R y x)->(Acc A R y))->(Acc A R x) • Propri´et´e noeth´erienne : R est noeth´erienne sur le type A ssi tous les ´el´ements de A sont accessibles pour R. well_founded = [A:Set; R:(A->A->Prop)](a:A)(Acc A R a) : (A:Set)(A->A->Prop)->Prop ELAN pour la r´ecurrence en Coq 18/?? Construction d’un ordre noeth´ erien Coq fournit des constructions pour construire des ordres noeth´eriens : • wf clos trans : la clˆ oture transitive d’un ordre noeth´erien est aussi noeth´erien • wf inverse image • wf disjoint sum • wf union • ... ELAN pour la r´ecurrence en Coq 19/?? D´ emo Vers une tactique ElanInduction • Version semi-automatique : N th machine – ElanInduction X R πR – ElanInduction X P th machine ∗ X : liste de variables de r´ecurrence ∗ P : principe de r´ecurrence ∗ R : ordre noeth´erien N ∗ πR : preuve de la propri´et´e noeth´erienne de R ∗ th : syst`eme de r´e´ecriture ∗ machine : nom de machine o` u le serveur ELAN est lanc´e Par exemple : ElanInduction x lt lt wf peano 00localhost00. ou bien : ElanInduction x nat ind2 peano 00localhost00. • Version automatique : ElanInduction th machine ELAN pour la r´ecurrence en Coq 21/?? Coop´ eration Coq/ELAN • Coq – Preuve du nouveau principe de r´ecurrence – Preuve de la propri´et´e noeth´erienne du nouvel ordre • ELAN – Preuve des cas de base et cas de r´ecurrence – Recherche de principe et des variables de r´ecurrence (pour la version automatique) ELAN pour la r´ecurrence en Coq 22/?? Sch´ ema d’instanciation en ELAN Anamaria Martins-Moreira Application du sch´ ema d’instantiation en ELAN Pour prouver un th´eor`eme th avec un syst`eme de r`egles R par induction sur une variable v de type inductif type avec un sch´ema d’instantiation compos´e de • k cas de base, Ci, i = 1..k, identifi´es par v = ci, i = 1..k, o` u chaque ci est un terme clos1 du type type. • l pas d’induction Pi, i = 1..l, identifi´es par v = pi(v 0), i = 1..k, o` u chaque pi(v 0) est un terme qui correspond `a la construction de la valeur de v `a partir d’une nouvelle variable v 0 (ou d’un ensemble de nouvelles variables). 1 est-ce que ¸ca pourrait ˆetre relax´e? ELAN pour la r´ecurrence en Coq 24/?? Application du sch´ ema d’instantiation en ELAN - cont. Pour chaque cas de base: d´efinir la substitution σCi = {v 7→ ci} et l’appliquer au th´eor`eme th, obtenant une instance thCi `a prouver par r´e´ecriture avec R. thCi = σCi (th) ELAN pour la r´ecurrence en Coq 25/?? Application du sch´ ema d’instantiation en ELAN - cont. Pour chaque pas d’induction: d´efinir les substitutions σPi = {v 7→ pi(v 0)} et σHi = {v 7→ v 0} et les appliquer au th´eor`eme th, obtenant une instance thPi `a prouver par r´e´ecriture et une r`egle thHi `a ajouter au syst`eme R thPi = σPi (th) et thHi = σHi (th) R´e´ecrire thPi avec R ∪ {thHi } (orient´e de gauche `a droite, comme d’habitude)2, en consid´erant v 0 comme une constante (la signature est donc aussi chang´ee). 2 flexibilisable? ELAN pour la r´ecurrence en Coq 26/?? Intuition pour la constante v 0 L’´elimination de la variable v : type est faite en consid´erant que ∀v : type.( k _ v = ci) ∨ ( i=1 l _ ∃v 0 : type.v = pi(v 0)) i=1 ou ∀v : type.∃v 0 : type.( k _ i=1 v = ci) ∨ ( l _ v = pi(v 0)) i=1 NOTE: la validit´e de cette formule ne suffit pas pour la validit´e du principe d’induction, mais suffit pour la d´efinition des cas d’une preuve par cas. Sans le principe d’induction, on n’aurait pas le droit d’utiliser les thHi dans la preuve de thPi . Le reste continuerait valide. ELAN pour la r´ecurrence en Coq 27/?? Exemple L’´elimination de la variable v : nat: ∀v : nat.v = 0 ∨ ∃v 0 : nat.v = (Sv 0) Donc, pour th : (x : nat)(nat plus 0 x) = x on a • σ0 = {x 7→ 0} et th0 = σ0(th) = (nat plus 0 0) = 0. • σHS = {x 7→ x0} et thHS = σHS (th) = (nat plus 0 x0) = x0. • σPS = {x 7→ (Sx0)} et thPS = σPS (th) = (nat plus 0 (Sx0)) = (Sx0). ELAN pour la r´ecurrence en Coq 28/?? Exemple 2 Inductive list: Set := nil:list | cons: nat -> list -> list. Parameter sum_nil : (sum nil) = O. Parameter sum_cons: (x:nat)(l:list) (sum (cons x l)) = (nat_plus x (sum l)). ∀v : list.v = nil ∨ ∃n : nat, v 0 : list.v = (cons n v 0) Donc, pour th : (l : list)(sum(cons 0 l)) = (sum l) on a • σnil = {l 7→ nil} et thnil = σnil(th) = (sum(cons 0 nil)) = (sum nil) • σHcons = {l 7→ l0} et thHcons = (sum(cons 0 l0)) = (sum l0) • σPcons = {l 7→ (cons n l0)} et thPcons = (sum(cons 0 (cons n l0))) = (sum(cons n l0)) ELAN pour la r´ecurrence en Coq 29/?? Exemple 3 Inductive list: Set := [_]: nat -> list | app: list -> list -> list. Parameter sum_[] : (x:nat) (sum [x]) = x. Parameter sum_app: (l1,l2:list) (sum (app l1 l2)) = (nat_plus (sum l1) (sum l2)). ∀v : list.∃n : nat.v = [n] ∨ ∃v 0, v 00 : list.v = (app v 0 v 00) Donc, pour th : (l : list)(sum(app [0] l)) = (sum l) on a • σ[] = {l 7→ [n]} et th[] = σ[](th) = (sum(app [0] [n])) = (sum [n]) • σHapp = {l 7→ l0} et thHapp = (sum(app [0] l0)) = (sum l0) • σPapp = {l 7→ (app l00 l0)} et thPapp = (sum(app [0] (app l00 l0))) = (sum(app l00 l0)) ELAN pour la r´ecurrence en Coq 30/?? .spc Inductive sort (e.g. nat ::= 0 | S x) Induction Schema (e.g. nat_ind) COQ theory (defined operators and rules) Elan Induction x nat_ind theory theorem .eln pi ELAN pour la r´ecurrence en Coq 31/??
© Copyright 2024