430 likes | 603 Views
PROOF WEAVING. Anne Mulhern Computer Sciences Department University of Wisconsin-Madison Madison, WI USA mulhern@cs.wisc.edu www.cs.wisc.edu/~mulhern. Modifying Proofs. I’ll use tacticals to make my scripts more robust. must add new, dissimilar constructor. I could modify
E N D
PROOF WEAVING Anne Mulhern Computer Sciences Department University of Wisconsin-Madison Madison, WI USA mulhern@cs.wisc.edu www.cs.wisc.edu/~mulhern
Modifying Proofs I’ll use tacticals to make my scripts more robust must add new, dissimilar constructor I could modify the proof objects I will not ever graduate doing this I’ll write a special purpose tactic But they are very big and complex and structured must fix broken scripts must add new constructor Done! Proof Weaving
Mutual Antagonism • Modular and incremental approaches are ubiquitous in computer science • Theorem provers do not readily support certain kinds of modular or incremental proof development • Transparent dependencies invalidate existing proofs when underlying structures are changed Proof Weaving
Proof Weaving • A technique for combining • Separate proof objects • Of the same theorem • On different underlying structures • And forming • A single proof object • Of the same theorem • On a combination of the underlying structures Proof Weaving
Disclaimer • There is no implementation • Demo: me typing Proof Weaving
Dependencies • If L1 and L2 are two identifiers denoting definitions, lemmas, functions, or types, a dependency between L1 and L2 exists when L1 is a free identifier occurring in the -term associated with L2. [Proof Reuse with Extended Inductive Types, Boite, 2004] Proof Weaving
Dependencies on term • Forall lists of terms, either the length of the list is zero or the length of the list is greater than zero • TmTrue, which is a term, is a value • Equality on terms is decidable Proof Weaving
Dependencies • An object L has a transparent dependency with an inductive type I, if L has a dependency with an induction principle of I, or if a case analysis on type I is performed in the -term representing L. • An object L has an opaque dependency with an inductive type I, if its dependency with I is not transparent. [Proof Reuse with Extended Inductive Types, Boite, 2004] Proof Weaving
Transparent Dependencies Bad • If a constructor C is added to an inductive type I, wherever there is a transparent dependency on I the object that contains the transparent dependency must be updated to accommodate C. • Match case added • Additional argument passed to induction principle Proof Weaving
Quiz: Transparent or Opaque? Forall lists of terms, either the length of the list is zero or the length of the list is greater than zero Opaque! Proof Weaving
Quiz: Transparent or Opaque? TmTrue, which is a term, is a value Opaque! Proof Weaving
Quiz: Transparent or Opaque? Equality on terms is decidable Transparent! Proof Weaving
Inductive term : Set := | TmTrue : term | TmFalse : term . Lemma eq_dec : forall (t t’ : term), {t = t’} + {t <> t’}. Inductive term : Set := | TmTrue : term | TmFalse : term . Lemma eq_dec : forall (t t’ : term), {t = t’} + {t <> t’}. decide equality. Qed. Inductive term : Set := | TmTrue : term | TmFalse : term . induction t. intro t’.case t’. left. reflexivity. right. discriminate. intro t’. case t’. right. discriminate. left. reflexivity. Qed. Proof Weaving
Transparent Dependency on term Proof Weaving
Transparent Dependency on term Proof Weaving
Transparent dependency on term Proof Weaving
Transparent dependency on term induction t. intro t’.case t’. left. reflexivity. right. discriminate. intro t’. case t’. right.discriminate. left. reflexivity. Qed. induction t. intro t’.case t’. left. reflexivity. right. discriminate. right. discriminate. intro t’. case t’. right. discriminate. left. reflexivity. Qed. induction t. intro t’.case t’. left. reflexivity. right. discriminate. intro t’. case t’. right.discriminate. left. reflexivity. Qed. Proof Weaving
False Transparent Dependencies • Some transparent dependencies are false transparent dependencies • A case analysis is performed • Most constructors are irrelevant • False transparent dependencies are removable Proof Weaving
Outline • False Transparent Dependencies • True Transparent Dependencies Proof Weaving
Outline • False Transparent Dependencies • True Transparent Dependencies Proof Weaving
Transparent Dependency Proof Weaving
Transparent Dependencies Proof Weaving
(Type Environment) eq_ind : forall (A : Type) (x : A) (P : A -> Prop), P x -> forall y : A, x = y -> P y term : Set TmTrue : term TmFalse : term TmIf : term -> term -> term -> term True : Prop False : Prop I : True H1 : TmTrue = TmIf tm1 tm2 tm3 False Transparent Dependencies (@eq_ind term TmTrue (fun e : term => match e with | TmTrue => True | TmFalse => False | TmIf _ _ _ => False end) I (TmIf tm1 tm2 tm3) H1) Proof Weaving
forall (A : Type) (x : A) (P : A -> Prop), P x -> forall y : A, x = y -> P y forall (x : term) (P : term -> Prop), P x -> forall y : term, x = y -> P y F TmTrue -> forall y : term, TmTrue = y -> F y forall y : term, TmTrue = y -> F y TmTrue = (TmIf tm1 tm2 tm3) -> F (TmIf tm1 tm2 tm3) forall (P : term -> Prop), P TmTrue -> forall y : term, TmTrue = y -> P y F F (TmIf tm1 tm2 tm3) False False Transparent Dependencies (@eq_ind term TmTrue (fun e : term => match e with | TmTrue => True | TmFalse => False | TmIf _ _ _ => False end) I (TmIf tm1 tm2 tm3) H1) Proof Weaving
False Transparent Dependencies (fun e : term => match e with | TmTrue => True | TmFalse => False | TmIf _ _ _ => False end) (fun e : term => match e with | TmTrue => True | TmIf _ _ _ => False | _ => 0 = 1 end) (fun e : term => match e with | TmTrue => True (fun e : term => match e with | TmTrue => True | TmIf _ _ _ => False Proof Weaving
False Transparent Dependencies Proof Weaving
False Transparent Dependencies • Easily identified • Fixable Proof Weaving
Outline • False Transparent Dependencies • True Transparent Dependencies Proof Weaving
Outline • False Transparent Dependencies • True Transparent Dependencies • Syntactically similar subterms Proof Weaving
Syntactically Similar Subterms Proof Weaving
Template Extraction match H0 in (typeof t t0) return (t = TmIf tm1 tm2 tm3 -> t0 = x -> exists x0 : term, eval (TmIf tm1 tm2 tm3) x0) with | TTrue => fun (H1 : TmTrue = TmIf tm1 tm2 tm3) (H2 : TyBool = x) => False_ind (TyBool = x -> exists x0 : term, eval (TmIf tm1 tm2 tm3) x0) (@eq_ind term TmTrue (fun e : term => match e with | TmTrue => True | TmIf _ _ _ => False | _ => 0 = 1 end) I (TmIf tm1 tm2 tm3) H1) H2 Proof Weaving
Template Extraction template (H0 : typeof t t0) => H0 => fun (H1 : t = TmIf tm1 tm2 tm3) (H2 : t0 = x) => False_ind (t0 = x -> exists x0 : term, eval (TmIf tm1 tm2 tm3) x0) (@eq_ind term t (fun e : term => match e with | t => True | TmIf _ _ _ => False | _ => 0 = 1 end) I (TmIf tm1 tm2 tm3) H1) H2 Proof Weaving
Term Reconstruction Proof Weaving
The if statement can be further evaluated. False The if statement can be further evaluated. False t1 : Bool t2 : T t3 : T if t1 then t2 else t3 : T The if statement can be further evaluated. Example: if If an if statement is well typed then it can be further evaluated. true : Bool false : Bool Proof Weaving
Observation • Falsetransparent dependencies and truetransparent dependencies withsyntactically similarsubterms • Arise frequently • Are easily identified • Are tractable Proof Weaving
To Weave Proof Objects… • Remove false dependencies in each proof object • For each proof object • Reconstruct proof subterms corresponding to the constructors in the other proof object • Reject those terms that are not well-typed • Weave subterms from each proof together Proof Weaving
How is this technique working? • Algorithm performed by hand • Numerous small examples • References + if statements • Each separate proof has several hundred lines of code • Six subgoals presented to refine tactic • Must move to implementation Proof Weaving
Could this technique be useful? • Yes • Size of proof is roughly polynomial in number of constructors • “Developer effort” linear? Proof Weaving
Related Work • Proof Reuse with Extended Inductive Types [Olivier Boite, TPHOLS 2004] • Generating Generic Functions [Johan Jeuring, Alexey Rodrigues, Gideon Smeding, WGP 2006] • Plagiator - A learning prover [Thomas Kolbe and Jurgen Brauburger, CADE-14 1997] Proof Weaving
Topics Not Covered • Mapping generated proof to proof script • Simplifying proof terms for easier template extraction • Removing or changing (rather than adding) constructors • Changing the proof statement Proof Weaving
Future Work • Implementation • Requires Coq infrastructure • Typechecker • Tools for manipulating AST • Supporting refactorings Proof Weaving
Conclusion • Proof Weaving • Addresses the drawbacks of tactic reuse and specialized tactics • Is a general technique • Especially suitable for proofs of programming language properties • Preliminary results are encouraging Proof Weaving
PROOF WEAVING Anne Mulhern Computer Sciences Department University of Wisconsin-Madison Madison, WI USA mulhern@cs.wisc.edu www.cs.wisc.edu/~mulhern