Coq with Classes Matthieu Sozeau Currently at the IAS, Princeton

Coq with Classes Matthieu Sozeau Currently at the IAS, Princeton

Coq with Classes Matthieu Sozeau Currently at the IAS, Princeton Advanced Martial Arts in Coq October 8th 2012 2 Project Team πr University of Pennsylvania, Philadelphia, INRIA Rocquencourt & PPS, Paris 7 University USA Type Classes 1 Type Classes in theory Motivation and setup Type Classes from Haskell Type Classes in Coq 2 Type Classes in practice Playing with numbers Instance Inference Dependent Classes A programming example: Generic exponentiation A structuring tool: Building hierarchies Logic programming: Reification 3 Summary Related and future work Matthieu Sozeau - Coq with Classes 2 Goal Enhancing type inference through overloading: I For generic programming with interfaces rather than concrete implementations. Akin to a first-class module system. I For generic proof scripts: refer to proofs by semantic concept rather than name. E.g. reflexivity of R instead of R refl. Proofs may be found using arbitrary search. In general, allows inference of arbitrary additional structure on a given type or value. Matthieu Sozeau - Coq with Classes 3 Existing paradigms: I Intersection types: closed overloading by declaring multiple signatures for a single constant (e.g. CDuce, Stardust). I Bounded quantification and class-based overloading. Overloading circumscribed by a subtyping relation (e.g. structural subtyping `ala OCaml, nominal subtyping in Java). Solution: Elaborate Type Classes, a kind of bounded quantification where the subtyping relation needs not be internalized. Solutions for overloading Context: I Modularity: separate definitions of the specializations. I Constrained by Coq: a fixed kernel language! Matthieu Sozeau - Coq with Classes 4 Solution: Elaborate Type Classes, a kind of bounded quantification where the subtyping relation needs not be internalized. Solutions for overloading Context: I Modularity: separate definitions of the specializations. I Constrained by Coq: a fixed kernel language! Existing paradigms: I Intersection types: closed overloading by declaring multiple signatures for a single constant (e.g. CDuce, Stardust). I Bounded quantification and class-based overloading. Overloading circumscribed by a subtyping relation (e.g. structural subtyping `ala OCaml, nominal subtyping in Java). Matthieu Sozeau - Coq with Classes 4 Solutions for overloading Context: I Modularity: separate definitions of the specializations. I Constrained by Coq: a fixed kernel language! Existing paradigms: I Intersection types: closed overloading by declaring multiple signatures for a single constant (e.g. CDuce, Stardust). I Bounded quantification and class-based overloading. Overloading circumscribed by a subtyping relation (e.g. structural subtyping `ala OCaml, nominal subtyping in Java). Solution: Elaborate Type Classes, a kind of bounded quantification where the subtyping relation needs not be internalized. Matthieu Sozeau - Coq with Classes 4 instance Eq Bool where x == y = if x then y else not y in :: Eq a ) a ! [a] ! Bool in x [] = False in x (y : ys) = x == y || in x ys Making ad-hoc polymorphism less ad hoc In Haskell, Wadler & Blott, POPL'89. In Isabelle, Nipkow & Snelting, FPCA'91. class Eq a where (==) :: a ! a ! Bool Matthieu Sozeau - Coq with Classes 5 in :: Eq a ) a ! [a] ! Bool in x [] = False in x (y : ys) = x == y || in x ys Making ad-hoc polymorphism less ad hoc In Haskell, Wadler & Blott, POPL'89. In Isabelle, Nipkow & Snelting, FPCA'91. class Eq a where (==) :: a ! a ! Bool instance Eq Bool where x == y = if x then y else not y Matthieu Sozeau - Coq with Classes 5 Making ad-hoc polymorphism less ad hoc In Haskell, Wadler & Blott, POPL'89. In Isabelle, Nipkow & Snelting, FPCA'91. class Eq a where (==) :: a ! a ! Bool instance Eq Bool where x == y = if x then y else not y in :: Eq a ) a ! [a] ! Bool in x [] = False in x (y : ys) = x == y || in x ys Matthieu Sozeau - Coq with Classes 5 Super-classes class Num a where (+) :: a ! a ! a ::: class (Num a) ) Fractional a where (=) :: a ! a ! a ::: Parametrized instances instance (Eq a) ) Eq[ a] where [] == [] = True (x : xs) == (y : ys) = x == y && xs == ys == = False Matthieu Sozeau - Coq with Classes 6 Parametrized instances instance (Eq a) ) Eq[ a] where [] == [] = True (x : xs) == (y : ys) = x == y && xs == ys == = False Super-classes class Num a where (+) :: a ! a ! a ::: class (Num a) ) Fractional a where (=) :: a ! a ! a ::: Matthieu Sozeau - Coq with Classes 6 Type Classes 1 Type Classes in theory Motivation and setup Type Classes from Haskell Type Classes in Coq 2 Type Classes in practice Playing with numbers Instance Inference Dependent Classes A programming example: Generic exponentiation A structuring tool: Building hierarchies Logic programming: Reification 3 Summary Related and future work Matthieu Sozeau - Coq with Classes 7 I A safer Haskell Proofs are part of instances. Class Eq A := f eqb : A ! A ! bool; eq eqb : 8 xy : A, x = y $ eqb xy = true g. I Types and values are unified Dependent types give new power to type classes. Class Reflexive A (R : relation A) := reflexive : 8 x, Rxx . Extension to Coq I Overloading of names in programs, specifications and proofs. Matthieu Sozeau - Coq with Classes 8 I Types and values are unified Dependent types give new power to type classes. Class Reflexive A (R : relation A) := reflexive : 8 x, Rxx . Extension to Coq I Overloading of names in programs, specifications and proofs. I A safer Haskell Proofs are part of instances. Class Eq A := f eqb : A ! A ! bool; eq eqb : 8 xy : A, x = y $ eqb xy = true g. Matthieu Sozeau - Coq with Classes 8 Extension to Coq I Overloading of names in programs, specifications and proofs. I A safer Haskell Proofs are part of instances. Class Eq A := f eqb : A ! A ! bool; eq eqb : 8 xy : A, x = y $ eqb xy = true g. I Types and values are unified Dependent types give new power to type classes. Class Reflexive A (R : relation A) := reflexive : 8 x, Rxx . Matthieu Sozeau - Coq with Classes 8 f g f g −! Instances are just definitions of conclusion Id tn . I Custom implicit arguments of projections −−−−! −! f1 : 8 αn : τn ; Id αn ! φ1 A cheap implementation I Parametrized dependent records Class Id (α1 : τ1) ··· (αn : τn) := ff1 : φ1 ; ··· ;f m : φmg. Matthieu Sozeau - Coq with Classes 9 f g f g −! Instances are just definitions of conclusion Id tn . I Custom implicit arguments of projections −−−−! −! f1 : 8 αn : τn ; Id αn ! φ1 A cheap implementation I Parametrized dependent records Record Id (α1 : τ1) ··· (αn : τn) := ff1 : φ1 ; ··· ;f m : φmg. Matthieu Sozeau - Coq with Classes 9 f g f g I Custom implicit arguments of projections −−−−! −! f1 : 8 αn : τn ; Id αn ! φ1 A cheap implementation I Parametrized dependent records Record Id (α1 : τ1) ··· (αn : τn) := ff1 : φ1 ; ··· ;f m : φmg. −! Instances are just definitions of conclusion Id tn . Matthieu Sozeau - Coq with Classes 9 f g f g A cheap implementation I Parametrized dependent records Record Id (α1 : τ1) ··· (αn : τn) := ff1 : φ1 ; ··· ;f m : φmg. −! Instances are just definitions of conclusion Id tn . I Custom implicit arguments of projections −−−−! −! f1 : 8 αn : τn ; Id αn ! φ1 Matthieu Sozeau - Coq with Classes 9 A cheap implementation I Parametrized dependent records Record Id (α1 : τ1) ··· (αn : τn) := ff1 : φ1 ; ··· ;f m : φmg. −! Instances are just definitions of conclusion Id tn . I Custom implicit arguments of projections −−−−! −! f1 : 8fαn : τng; fId αng ! φ1 Matthieu Sozeau - Coq with Classes 9 f Implicit arguments g λxy : bool.@eqb xy f Typing g λxy : bool.@eqb (?A : Type)(?eq : Eq ?A) xy f Unification g λxy : bool.@eqb bool( ?eq : Eq bool) xy f Proof search for Eq bool returns Eq bool g λxy : bool.@eqb bool Eq bool xy Elaboration with classes, an example λxy : bool. eqb xy Matthieu Sozeau - Coq with Classes 10 f Typing g λxy : bool.@eqb (?A : Type)(?eq : Eq ?A) xy f Unification g λxy : bool.@eqb bool( ?eq : Eq bool) xy f Proof search for Eq bool returns Eq bool g λxy : bool.@eqb bool Eq bool xy Elaboration with classes, an example λxy : bool. eqb xy f Implicit arguments g λxy : bool.@eqb xy Matthieu Sozeau - Coq with Classes 10 f Unification g λxy : bool.@eqb bool( ?eq : Eq bool) xy f Proof search for Eq bool returns Eq bool g λxy : bool.@eqb bool Eq bool xy Elaboration with classes, an example λxy : bool. eqb xy f Implicit arguments g λxy : bool.@eqb xy f Typing g λxy : bool.@eqb (?A : Type)(?eq : Eq ?A) xy Matthieu Sozeau - Coq with Classes 10 f Proof search for Eq bool returns Eq bool g λxy : bool.@eqb bool Eq bool xy Elaboration with classes, an example λxy : bool. eqb xy f Implicit arguments g λxy : bool.@eqb xy f Typing g λxy : bool.@eqb (?A : Type)(?eq : Eq ?A) xy f Unification g λxy : bool.@eqb bool( ?eq : Eq bool) xy Matthieu Sozeau - Coq with Classes 10 Elaboration with classes, an example λxy : bool. eqb xy f Implicit arguments g λxy : bool.@eqb xy f Typing g λxy : bool.@eqb (?A : Type)(?eq : Eq ?A) xy f Unification g λxy : bool.@eqb bool( ?eq : Eq bool) xy f Proof search for Eq bool returns Eq bool g λxy : bool.@eqb bool Eq bool xy Matthieu Sozeau - Coq with Classes 10 Type Class resolution Proof-search tactic with instances as lemmas: A : Type, eqa : Eq A ` ?: Eq(list A) I Simple depth-first search with higher-order unification { Returns the first solution only + Extensible through Ltac Matthieu Sozeau - Coq with Classes 11 Type Classes 1 Type Classes in theory Motivation and setup Type Classes from Haskell Type Classes in Coq 2 Type Classes in practice Playing with numbers Instance Inference Dependent Classes A programming example: Generic exponentiation A structuring tool: Building hierarchies Logic programming: Reification 3 Summary Related and future work Matthieu Sozeau - Coq with Classes 12 Instance nat num : Num nat := f zero := 0%nat ; one := 1%nat ; plus := Peano.plus g.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    93 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us