\selectlanguage *{english}
\contentsline {chapter}{\numberline {1}Introduction}{1}{chapter.1}%
\contentsline {chapter}{\numberline {2}Specification language}{3}{chapter.2}%
\contentsline {section}{\numberline {2.1}Core language}{3}{section.2.1}%
\contentsline {subsection}{\numberline {2.1.1}Basic notions and conventions}{3}{subsection.2.1.1}%
\contentsline {subsubsection}{Syntax and lexical conventions}{3}{subsubsection*.4}%
\contentsline {paragraph}{Syntax conventions}{3}{paragraph*.5}%
\contentsline {paragraph}{Lexical conventions}{4}{paragraph*.6}%
\contentsline {subsubsection}{Essential vocabulary}{6}{subsubsection*.34}%
\contentsline {subsubsection}{Settings}{8}{subsubsection*.66}%
\contentsline {paragraph}{Attributes}{8}{paragraph*.67}%
\contentsline {paragraph}{Flags, Options and Tables}{9}{paragraph*.79}%
\contentsline {subparagraph}{Locality attributes supported by \sphinxstyleliteralintitle {\sphinxupquote {Set}} and \sphinxstyleliteralintitle {\sphinxupquote {Unset}}}{10}{subparagraph*.97}%
\contentsline {subsection}{\numberline {2.1.2}Sorts}{10}{subsection.2.1.2}%
\contentsline {subsection}{\numberline {2.1.3}Functions and assumptions}{11}{subsection.2.1.3}%
\contentsline {subsubsection}{Binders}{11}{subsubsection*.109}%
\contentsline {subsubsection}{Functions (fun) and function types (forall)}{12}{subsubsection*.116}%
\contentsline {subsubsection}{Function application}{12}{subsubsection*.119}%
\contentsline {subsubsection}{Assumptions}{13}{subsubsection*.124}%
\contentsline {subsection}{\numberline {2.1.4}Definitions}{14}{subsection.2.1.4}%
\contentsline {subsubsection}{Let\sphinxhyphen {}in definitions}{14}{subsubsection*.146}%
\contentsline {subsubsection}{Type cast}{14}{subsubsection*.149}%
\contentsline {subsubsection}{Top\sphinxhyphen {}level definitions}{14}{subsubsection*.152}%
\contentsline {subsubsection}{Assertions and proofs}{15}{subsubsection*.163}%
\contentsline {subsection}{\numberline {2.1.5}Conversion rules}{16}{subsection.2.1.5}%
\contentsline {subsubsection}{α\sphinxhyphen {}conversion}{17}{subsubsection*.179}%
\contentsline {subsubsection}{β\sphinxhyphen {}reduction}{17}{subsubsection*.181}%
\contentsline {subsubsection}{δ\sphinxhyphen {}reduction}{18}{subsubsection*.185}%
\contentsline {subsubsection}{ι\sphinxhyphen {}reduction}{18}{subsubsection*.192}%
\contentsline {subsubsection}{ζ\sphinxhyphen {}reduction}{18}{subsubsection*.194}%
\contentsline {subsubsection}{η\sphinxhyphen {}expansion}{18}{subsubsection*.197}%
\contentsline {subsubsection}{Examples}{19}{subsubsection*.199}%
\contentsline {subsubsection}{Proof Irrelevance}{21}{subsubsection*.200}%
\contentsline {subsubsection}{Convertibility}{21}{subsubsection*.201}%
\contentsline {subsection}{\numberline {2.1.6}Typing rules}{22}{subsection.2.1.6}%
\contentsline {subsubsection}{The terms}{22}{subsubsection*.204}%
\contentsline {subsubsection}{Typing rules}{23}{subsubsection*.208}%
\contentsline {subsubsection}{Subtyping rules}{25}{subsubsection*.230}%
\contentsline {subsubsection}{Admissible rules for global environments}{26}{subsubsection*.233}%
\contentsline {subsubsection}{The Calculus of Inductive Constructions with impredicative Set}{27}{subsubsection*.242}%
\contentsline {subsection}{\numberline {2.1.7}Variants and the \sphinxstyleliteralintitle {\sphinxupquote {match}} construct}{28}{subsection.2.1.7}%
\contentsline {subsubsection}{Variants}{28}{subsubsection*.246}%
\contentsline {paragraph}{Private (matching) inductive types}{28}{paragraph*.251}%
\contentsline {subsubsection}{Definition by cases: match}{29}{subsubsection*.254}%
\contentsline {subsection}{\numberline {2.1.8}Record types}{31}{subsection.2.1.8}%
\contentsline {subsubsection}{Primitive Projections}{35}{subsubsection*.294}%
\contentsline {paragraph}{Primitive Record Types}{35}{paragraph*.297}%
\contentsline {paragraph}{Reduction}{35}{paragraph*.298}%
\contentsline {paragraph}{Compatibility Projections and \sphinxstyleliteralintitle {\sphinxupquote {match}}}{36}{paragraph*.299}%
\contentsline {subsection}{\numberline {2.1.9}Inductive types and recursive functions}{36}{subsection.2.1.9}%
\contentsline {subsubsection}{Inductive types}{36}{subsubsection*.300}%
\contentsline {paragraph}{Simple inductive types}{37}{paragraph*.310}%
\contentsline {paragraph}{Simple annotated inductive types}{38}{paragraph*.311}%
\contentsline {paragraph}{Parameterized inductive types}{38}{paragraph*.312}%
\contentsline {paragraph}{Mutually defined inductive types}{41}{paragraph*.314}%
\contentsline {subsubsection}{Recursive functions: fix}{42}{subsubsection*.315}%
\contentsline {subsubsection}{Top\sphinxhyphen {}level recursive functions}{42}{subsubsection*.322}%
\contentsline {subsubsection}{Theory of inductive definitions}{45}{subsubsection*.327}%
\contentsline {paragraph}{Types of inductive objects}{46}{paragraph*.328}%
\contentsline {paragraph}{Well\sphinxhyphen {}formed inductive definitions}{46}{paragraph*.331}%
\contentsline {subparagraph}{Arity of a given sort}{46}{subparagraph*.332}%
\contentsline {subparagraph}{Arity}{47}{subparagraph*.333}%
\contentsline {subparagraph}{Type of constructor}{47}{subparagraph*.334}%
\contentsline {subparagraph}{Positivity Condition}{47}{subparagraph*.335}%
\contentsline {subparagraph}{Strict positivity}{47}{subparagraph*.336}%
\contentsline {subparagraph}{Nested Positivity}{48}{subparagraph*.337}%
\contentsline {subparagraph}{Correctness rules}{48}{subparagraph*.338}%
\contentsline {subparagraph}{Template polymorphism}{51}{subparagraph*.340}%
\contentsline {paragraph}{Destructors}{54}{paragraph*.348}%
\contentsline {subparagraph}{The match ... with ... end construction}{55}{subparagraph*.349}%
\contentsline {paragraph}{Fixpoint definitions}{59}{paragraph*.363}%
\contentsline {subparagraph}{Typing rule}{59}{subparagraph*.364}%
\contentsline {subparagraph}{Reduction rule}{61}{subparagraph*.366}%
\contentsline {subsection}{\numberline {2.1.10}Co\sphinxhyphen {}inductive types and co\sphinxhyphen {}recursive functions}{61}{subsection.2.1.10}%
\contentsline {subsubsection}{Co\sphinxhyphen {}inductive types}{61}{subsubsection*.368}%
\contentsline {paragraph}{Caveat}{62}{paragraph*.370}%
\contentsline {subsubsection}{Co\sphinxhyphen {}recursive functions: cofix}{63}{subsubsection*.371}%
\contentsline {subsubsection}{Top\sphinxhyphen {}level definitions of co\sphinxhyphen {}recursive functions}{63}{subsubsection*.376}%
\contentsline {subsection}{\numberline {2.1.11}Section mechanism}{64}{subsection.2.1.11}%
\contentsline {subsection}{\numberline {2.1.12}The Module System}{66}{subsection.2.1.12}%
\contentsline {subsubsection}{Modules and module types}{66}{subsubsection*.389}%
\contentsline {subsubsection}{Using modules}{67}{subsubsection*.390}%
\contentsline {paragraph}{Examples}{71}{paragraph*.425}%
\contentsline {subsubsection}{Typing Modules}{73}{subsubsection*.428}%
\contentsline {subsubsection}{Libraries and qualified names}{78}{subsubsection*.470}%
\contentsline {paragraph}{Names of libraries}{78}{paragraph*.471}%
\contentsline {paragraph}{Qualified identifiers}{78}{paragraph*.472}%
\contentsline {paragraph}{Libraries and filesystem}{79}{paragraph*.477}%
\contentsline {subsubsection}{Controlling the scope of commands with locality attributes}{80}{subsubsection*.478}%
\contentsline {subsection}{\numberline {2.1.13}Primitive objects}{81}{subsection.2.1.13}%
\contentsline {subsubsection}{Primitive Integers}{81}{subsubsection*.482}%
\contentsline {subsubsection}{Primitive Floats}{82}{subsubsection*.483}%
\contentsline {subsubsection}{Primitive Arrays}{82}{subsubsection*.484}%
\contentsline {subsection}{\numberline {2.1.14}Polymorphic Universes}{83}{subsection.2.1.14}%
\contentsline {subsubsection}{General Presentation}{83}{subsubsection*.485}%
\contentsline {subsubsection}{Polymorphic, Monomorphic}{85}{subsubsection*.486}%
\contentsline {subsubsection}{Cumulative, NonCumulative}{85}{subsubsection*.492}%
\contentsline {paragraph}{Specifying cumulativity}{87}{paragraph*.499}%
\contentsline {paragraph}{An example of a proof using cumulativity}{87}{paragraph*.500}%
\contentsline {paragraph}{Cumulativity Weak Constraints}{88}{paragraph*.501}%
\contentsline {subsubsection}{Global and local universes}{88}{subsubsection*.503}%
\contentsline {subsubsection}{Conversion and unification}{88}{subsubsection*.504}%
\contentsline {subsubsection}{Minimization}{88}{subsubsection*.505}%
\contentsline {subsubsection}{Explicit Universes}{89}{subsubsection*.507}%
\contentsline {subsubsection}{Printing universes}{90}{subsubsection*.526}%
\contentsline {paragraph}{Polymorphic definitions}{90}{paragraph*.529}%
\contentsline {subsubsection}{Universe polymorphism and sections}{93}{subsubsection*.532}%
\contentsline {subsection}{\numberline {2.1.15}SProp (proof irrelevant propositions)}{94}{subsection.2.1.15}%
\contentsline {subsubsection}{Basic constructs}{94}{subsubsection*.535}%
\contentsline {subsubsection}{Encodings for strict propositions}{96}{subsubsection*.536}%
\contentsline {subsubsection}{Definitional UIP}{97}{subsubsection*.537}%
\contentsline {paragraph}{Non Termination with UIP}{97}{paragraph*.539}%
\contentsline {subsubsection}{Issues with non\sphinxhyphen {}cumulativity}{98}{subsubsection*.540}%
\contentsline {section}{\numberline {2.2}Language extensions}{99}{section.2.2}%
\contentsline {subsection}{\numberline {2.2.1}Existential variables}{99}{subsection.2.2.1}%
\contentsline {subsubsection}{Inferable subterms}{100}{subsubsection*.547}%
\contentsline {subsubsection}{Explicit displaying of existential instances for pretty\sphinxhyphen {}printing}{100}{subsubsection*.548}%
\contentsline {subsubsection}{Solving existential variables using tactics}{101}{subsubsection*.550}%
\contentsline {subsection}{\numberline {2.2.2}Implicit arguments}{101}{subsection.2.2.2}%
\contentsline {subsubsection}{The different kinds of implicit arguments}{101}{subsubsection*.551}%
\contentsline {paragraph}{Implicit arguments inferable from the knowledge of other arguments of a function}{101}{paragraph*.552}%
\contentsline {paragraph}{Implicit arguments inferable by resolution}{102}{paragraph*.553}%
\contentsline {subsubsection}{Maximal and non\sphinxhyphen {}maximal insertion of implicit arguments}{103}{subsubsection*.554}%
\contentsline {paragraph}{Trailing Implicit Arguments}{103}{paragraph*.555}%
\contentsline {subsubsection}{Casual use of implicit arguments}{103}{subsubsection*.557}%
\contentsline {subsubsection}{Declaration of implicit arguments}{103}{subsubsection*.559}%
\contentsline {paragraph}{Implicit Argument Binders}{103}{paragraph*.560}%
\contentsline {paragraph}{Mode for automatic declaration of implicit arguments}{106}{paragraph*.565}%
\contentsline {paragraph}{Controlling strict implicit arguments}{106}{paragraph*.567}%
\contentsline {paragraph}{Controlling contextual implicit arguments}{106}{paragraph*.570}%
\contentsline {paragraph}{Controlling reversible\sphinxhyphen {}pattern implicit arguments}{106}{paragraph*.572}%
\contentsline {paragraph}{Controlling the insertion of implicit arguments not followed by explicit arguments}{106}{paragraph*.574}%
\contentsline {paragraph}{Combining manual declaration and automatic declaration}{106}{paragraph*.576}%
\contentsline {subsubsection}{Explicit applications}{107}{subsubsection*.577}%
\contentsline {subsubsection}{Displaying implicit arguments}{108}{subsubsection*.578}%
\contentsline {subsubsection}{Displaying implicit arguments when pretty\sphinxhyphen {}printing}{108}{subsubsection*.580}%
\contentsline {subsubsection}{Interaction with subtyping}{108}{subsubsection*.583}%
\contentsline {subsubsection}{Deactivation of implicit arguments for parsing}{109}{subsubsection*.584}%
\contentsline {subsubsection}{Implicit types of variables}{110}{subsubsection*.588}%
\contentsline {subsubsection}{Implicit generalization}{111}{subsubsection*.596}%
\contentsline {subsection}{\numberline {2.2.3}Extended pattern matching}{113}{subsection.2.2.3}%
\contentsline {subsubsection}{Variants and extensions of \sphinxstyleliteralintitle {\sphinxupquote {match}}}{113}{subsubsection*.604}%
\contentsline {paragraph}{Multiple and nested pattern matching}{113}{paragraph*.605}%
\contentsline {paragraph}{Pattern\sphinxhyphen {}matching on boolean values: the if expression}{113}{paragraph*.606}%
\contentsline {paragraph}{Irrefutable patterns: the destructuring let variants}{114}{paragraph*.609}%
\contentsline {subparagraph}{First destructuring let syntax}{114}{subparagraph*.612}%
\contentsline {subparagraph}{Second destructuring let syntax}{115}{subparagraph*.613}%
\contentsline {paragraph}{Controlling pretty\sphinxhyphen {}printing of match expressions}{115}{paragraph*.614}%
\contentsline {subparagraph}{Printing nested patterns}{115}{subparagraph*.615}%
\contentsline {subparagraph}{Factorization of clauses with same right\sphinxhyphen {}hand side}{115}{subparagraph*.617}%
\contentsline {subparagraph}{Use of a default clause}{116}{subparagraph*.619}%
\contentsline {subparagraph}{Printing of wildcard patterns}{116}{subparagraph*.621}%
\contentsline {subparagraph}{Printing of the elimination predicate}{116}{subparagraph*.623}%
\contentsline {subparagraph}{Printing matching on irrefutable patterns}{116}{subparagraph*.625}%
\contentsline {subparagraph}{Printing matching on booleans}{116}{subparagraph*.627}%
\contentsline {paragraph}{Conventions about unused pattern\sphinxhyphen {}matching variables}{117}{paragraph*.629}%
\contentsline {subsubsection}{Patterns}{118}{subsubsection*.631}%
\contentsline {subsubsection}{Multiple patterns}{118}{subsubsection*.632}%
\contentsline {subsubsection}{Aliasing subpatterns}{119}{subsubsection*.633}%
\contentsline {subsubsection}{Nested patterns}{119}{subsubsection*.634}%
\contentsline {subsubsection}{Disjunctive patterns}{120}{subsubsection*.635}%
\contentsline {subsubsection}{About patterns of parametric types}{121}{subsubsection*.636}%
\contentsline {paragraph}{Parameters in patterns}{121}{paragraph*.637}%
\contentsline {subsubsection}{Implicit arguments in patterns}{122}{subsubsection*.639}%
\contentsline {subsubsection}{Matching objects of dependent types}{122}{subsubsection*.640}%
\contentsline {subsubsection}{Understanding dependencies in patterns}{122}{subsubsection*.641}%
\contentsline {subsubsection}{When the elimination predicate must be provided}{123}{subsubsection*.642}%
\contentsline {paragraph}{Dependent pattern matching}{123}{paragraph*.643}%
\contentsline {paragraph}{Multiple dependent pattern matching}{123}{paragraph*.644}%
\contentsline {paragraph}{Patterns in \sphinxstyleliteralintitle {\sphinxupquote {in}}}{124}{paragraph*.645}%
\contentsline {subsubsection}{Using pattern matching to write proofs}{124}{subsubsection*.646}%
\contentsline {subsubsection}{Pattern\sphinxhyphen {}matching on inductive objects involving local definitions}{125}{subsubsection*.647}%
\contentsline {subsubsection}{Pattern\sphinxhyphen {}matching and coercions}{125}{subsubsection*.648}%
\contentsline {subsubsection}{When does the expansion strategy fail?}{126}{subsubsection*.649}%
\contentsline {subsection}{\numberline {2.2.4}Syntax extensions and notation scopes}{126}{subsection.2.2.4}%
\contentsline {subsubsection}{Notations}{127}{subsubsection*.657}%
\contentsline {paragraph}{Basic notations}{127}{paragraph*.658}%
\contentsline {paragraph}{Precedences and associativity}{127}{paragraph*.660}%
\contentsline {paragraph}{Complex notations}{128}{paragraph*.661}%
\contentsline {paragraph}{Simple factorization rules}{129}{paragraph*.662}%
\contentsline {paragraph}{Use of notations for printing}{129}{paragraph*.663}%
\contentsline {paragraph}{The Infix command}{131}{paragraph*.664}%
\contentsline {paragraph}{Reserving notations}{131}{paragraph*.666}%
\contentsline {paragraph}{Simultaneous definition of terms and notations}{132}{paragraph*.669}%
\contentsline {paragraph}{Displaying information about notations}{132}{paragraph*.674}%
\contentsline {paragraph}{Locating notations}{134}{paragraph*.679}%
\contentsline {paragraph}{Inheritance of the properties of arguments of constants bound to a notation}{135}{paragraph*.680}%
\contentsline {paragraph}{Notations and binders}{135}{paragraph*.681}%
\contentsline {subparagraph}{Binders bound in the notation and parsed as identifiers}{135}{subparagraph*.682}%
\contentsline {subparagraph}{Binders bound in the notation and parsed as patterns}{135}{subparagraph*.683}%
\contentsline {subparagraph}{Binders bound in the notation and parsed as terms}{136}{subparagraph*.684}%
\contentsline {subparagraph}{Binders bound in the notation and parsed as general binders}{137}{subparagraph*.685}%
\contentsline {subparagraph}{Binders not bound in the notation}{137}{subparagraph*.686}%
\contentsline {subparagraph}{Notations with expressions used both as binder and term}{137}{subparagraph*.687}%
\contentsline {paragraph}{Notations with recursive patterns}{138}{paragraph*.688}%
\contentsline {paragraph}{Notations with recursive patterns involving binders}{139}{paragraph*.689}%
\contentsline {paragraph}{Predefined entries}{140}{paragraph*.690}%
\contentsline {paragraph}{Custom entries}{140}{paragraph*.691}%
\contentsline {paragraph}{Syntax}{143}{paragraph*.694}%
\contentsline {subsubsection}{Notation scopes}{144}{subsubsection*.704}%
\contentsline {paragraph}{Global interpretation rules for notations}{145}{paragraph*.712}%
\contentsline {paragraph}{Local interpretation rules for notations}{145}{paragraph*.715}%
\contentsline {subparagraph}{Opening a notation scope locally}{145}{subparagraph*.716}%
\contentsline {subparagraph}{Binding types or coercion classes to a notation scope}{146}{subparagraph*.721}%
\contentsline {paragraph}{The \sphinxstyleliteralintitle {\sphinxupquote {type\_scope}} notation scope}{146}{paragraph*.723}%
\contentsline {paragraph}{The \sphinxstyleliteralintitle {\sphinxupquote {function\_scope}} notation scope}{147}{paragraph*.724}%
\contentsline {paragraph}{Notation scopes used in the standard library of Coq}{147}{paragraph*.725}%
\contentsline {paragraph}{Displaying information about scopes}{148}{paragraph*.726}%
\contentsline {subsubsection}{Abbreviations}{148}{subsubsection*.730}%
\contentsline {subsubsection}{Numbers and strings}{149}{subsubsection*.732}%
\contentsline {paragraph}{Number notations}{150}{paragraph*.735}%
\contentsline {paragraph}{String notations}{153}{paragraph*.754}%
\contentsline {subsubsection}{Tactic Notations}{158}{subsubsection*.774}%
\contentsline {subsection}{\numberline {2.2.5}Setting properties of a function's arguments}{160}{subsection.2.2.5}%
\contentsline {subsubsection}{Manual declaration of implicit arguments}{162}{subsubsection*.794}%
\contentsline {subsubsection}{Automatic declaration of implicit arguments}{163}{subsubsection*.796}%
\contentsline {subsubsection}{Renaming implicit arguments}{165}{subsubsection*.797}%
\contentsline {subsubsection}{Binding arguments to a scope}{165}{subsubsection*.798}%
\contentsline {subsubsection}{Effects of \sphinxstyleliteralintitle {\sphinxupquote {Arguments}} on unfolding}{166}{subsubsection*.799}%
\contentsline {subsubsection}{Bidirectionality hints}{167}{subsubsection*.800}%
\contentsline {subsection}{\numberline {2.2.6}Implicit Coercions}{168}{subsection.2.2.6}%
\contentsline {subsubsection}{General Presentation}{168}{subsubsection*.801}%
\contentsline {subsubsection}{Classes}{168}{subsubsection*.802}%
\contentsline {subsubsection}{Coercions}{168}{subsubsection*.805}%
\contentsline {subsubsection}{Identity Coercions}{169}{subsubsection*.806}%
\contentsline {subsubsection}{Inheritance Graph}{169}{subsubsection*.807}%
\contentsline {subsubsection}{Declaring Coercions}{169}{subsubsection*.808}%
\contentsline {subsubsection}{Displaying Available Coercions}{171}{subsubsection*.823}%
\contentsline {subsubsection}{Activating the Printing of Coercions}{171}{subsubsection*.828}%
\contentsline {subsubsection}{Classes as Records}{171}{subsubsection*.831}%
\contentsline {subsubsection}{Coercions and Sections}{171}{subsubsection*.832}%
\contentsline {subsubsection}{Coercions and Modules}{171}{subsubsection*.833}%
\contentsline {subsubsection}{Examples}{171}{subsubsection*.834}%
\contentsline {paragraph}{Coercion at function application}{172}{paragraph*.835}%
\contentsline {paragraph}{Coercion to a type}{174}{paragraph*.836}%
\contentsline {paragraph}{Coercion to a function}{175}{paragraph*.837}%
\contentsline {subsection}{\numberline {2.2.7}Typeclasses}{176}{subsection.2.2.7}%
\contentsline {subsubsection}{Class and Instance declarations}{176}{subsubsection*.838}%
\contentsline {subsubsection}{Binding classes}{177}{subsubsection*.839}%
\contentsline {subsubsection}{Parameterized Instances}{178}{subsubsection*.840}%
\contentsline {subsubsection}{Sections and contexts}{178}{subsubsection*.841}%
\contentsline {subsubsection}{Building hierarchies}{179}{subsubsection*.842}%
\contentsline {paragraph}{Superclasses}{179}{paragraph*.843}%
\contentsline {paragraph}{Substructures}{179}{paragraph*.844}%
\contentsline {subsubsection}{Summary of the commands}{180}{subsubsection*.846}%
\contentsline {paragraph}{Typeclasses Transparent, Typeclasses Opaque}{182}{paragraph*.862}%
\contentsline {paragraph}{Settings}{183}{paragraph*.865}%
\contentsline {paragraph}{Typeclasses eauto}{184}{paragraph*.877}%
\contentsline {subsection}{\numberline {2.2.8}Canonical Structures}{184}{subsection.2.2.8}%
\contentsline {subsubsection}{Declaration of canonical structures}{184}{subsubsection*.879}%
\contentsline {subsubsection}{Notation overloading}{187}{subsubsection*.884}%
\contentsline {paragraph}{Derived Canonical Structures}{188}{paragraph*.885}%
\contentsline {subsubsection}{Hierarchy of structures}{189}{subsubsection*.886}%
\contentsline {paragraph}{Compact declaration of Canonical Structures}{195}{paragraph*.887}%
\contentsline {subsection}{\numberline {2.2.9}Program}{197}{subsection.2.2.9}%
\contentsline {subsubsection}{Elaborating programs}{197}{subsubsection*.888}%
\contentsline {paragraph}{Syntactic control over equalities}{198}{paragraph*.894}%
\contentsline {paragraph}{Program Definition}{199}{paragraph*.895}%
\contentsline {paragraph}{Program Fixpoint}{199}{paragraph*.896}%
\contentsline {paragraph}{Program Lemma}{200}{paragraph*.897}%
\contentsline {subsubsection}{Solving obligations}{200}{subsubsection*.898}%
\contentsline {subsubsection}{Frequently Asked Questions}{201}{subsubsection*.909}%
\contentsline {subsection}{\numberline {2.2.10}Commands}{201}{subsection.2.2.10}%
\contentsline {subsubsection}{Displaying}{201}{subsubsection*.911}%
\contentsline {subsubsection}{Query commands}{202}{subsubsection*.922}%
\contentsline {subsubsection}{Requests to the environment}{209}{subsubsection*.945}%
\contentsline {subsubsection}{Printing flags}{210}{subsubsection*.958}%
\contentsline {subsubsection}{Loading files}{210}{subsubsection*.960}%
\contentsline {subsubsection}{Compiled files}{211}{subsubsection*.965}%
\contentsline {subsubsection}{Loadpath}{212}{subsubsection*.980}%
\contentsline {subsubsection}{Backtracking}{213}{subsubsection*.991}%
\contentsline {subsubsection}{Quitting and debugging}{213}{subsubsection*.998}%
\contentsline {subsubsection}{Controlling display}{214}{subsubsection*.1008}%
\contentsline {subsubsection}{Printing constructions in full}{215}{subsubsection*.1017}%
\contentsline {subsubsection}{Controlling Typing Flags}{215}{subsubsection*.1019}%
\contentsline {subsubsection}{Internal registration commands}{217}{subsubsection*.1027}%
\contentsline {paragraph}{Exposing constants to OCaml libraries}{217}{paragraph*.1028}%
\contentsline {paragraph}{Inlining hints for the fast reduction machines}{218}{paragraph*.1030}%
\contentsline {paragraph}{Registering primitive operations}{218}{paragraph*.1032}%
\contentsline {chapter}{\numberline {3}Proofs}{219}{chapter.3}%
\contentsline {section}{\numberline {3.1}Basic proof writing}{219}{section.3.1}%
\contentsline {subsection}{\numberline {3.1.1}Proof mode}{219}{subsection.3.1.1}%
\contentsline {subsubsection}{Proof State}{219}{subsubsection*.1036}%
\contentsline {subsubsection}{Entering and exiting proof mode}{221}{subsubsection*.1045}%
\contentsline {paragraph}{Proof using options}{224}{paragraph*.1067}%
\contentsline {paragraph}{Name a set of section hypotheses for \sphinxstyleliteralintitle {\sphinxupquote {Proof using}}}{224}{paragraph*.1070}%
\contentsline {subsubsection}{Proof modes}{225}{subsubsection*.1074}%
\contentsline {subsubsection}{Navigation in the proof tree}{225}{subsubsection*.1076}%
\contentsline {paragraph}{Bullets}{228}{paragraph*.1090}%
\contentsline {subparagraph}{Mandatory Bullets}{232}{subparagraph*.1096}%
\contentsline {subparagraph}{Set Bullet Behavior}{232}{subparagraph*.1097}%
\contentsline {paragraph}{Modifying the order of goals}{232}{paragraph*.1099}%
\contentsline {paragraph}{Postponing the proof of some goals}{235}{paragraph*.1103}%
\contentsline {subsubsection}{Requesting information}{236}{subsubsection*.1111}%
\contentsline {subsubsection}{Showing differences between proof steps}{237}{subsubsection*.1125}%
\contentsline {paragraph}{How to enable diffs}{238}{paragraph*.1126}%
\contentsline {paragraph}{How diffs are calculated}{238}{paragraph*.1128}%
\contentsline {paragraph}{"Show Proof" differences}{239}{paragraph*.1129}%
\contentsline {subsubsection}{Controlling proof mode}{239}{subsubsection*.1130}%
\contentsline {subsubsection}{Controlling memory usage}{240}{subsubsection*.1134}%
\contentsline {subsection}{\numberline {3.1.2}Tactics}{240}{subsection.3.1.2}%
\contentsline {subsubsection}{Common elements of tactics}{241}{subsubsection*.1140}%
\contentsline {paragraph}{Reserved keywords}{241}{paragraph*.1141}%
\contentsline {paragraph}{Invocation of tactics}{241}{paragraph*.1142}%
\contentsline {paragraph}{Bindings}{241}{paragraph*.1147}%
\contentsline {paragraph}{Intro patterns}{242}{paragraph*.1152}%
\contentsline {paragraph}{Occurrence clauses}{248}{paragraph*.1180}%
\contentsline {subsubsection}{Applying theorems}{249}{subsubsection*.1198}%
\contentsline {subsubsection}{Managing the local context}{255}{subsubsection*.1231}%
\contentsline {subsubsection}{Controlling the proof flow}{262}{subsubsection*.1272}%
\contentsline {subsubsection}{Checking properties of terms}{265}{subsubsection*.1298}%
\contentsline {subsubsection}{Classical tactics}{266}{subsubsection*.1313}%
\contentsline {subsubsection}{Delaying solving unification constraints}{266}{subsubsection*.1316}%
\contentsline {subsubsection}{Proof maintenance}{267}{subsubsection*.1319}%
\contentsline {subsubsection}{Performance\sphinxhyphen {}oriented tactic variants}{267}{subsubsection*.1322}%
\contentsline {subsection}{\numberline {3.1.3}Reasoning with equalities}{268}{subsection.3.1.3}%
\contentsline {subsubsection}{Tactics for simple equalities}{269}{subsubsection*.1333}%
\contentsline {subsubsection}{Rewriting with Leibniz and setoid equality}{269}{subsubsection*.1342}%
\contentsline {subsubsection}{Rewriting with definitional equality}{273}{subsubsection*.1373}%
\contentsline {subsubsection}{Applying conversion rules}{275}{subsubsection*.1379}%
\contentsline {paragraph}{Fast reduction tactics: vm\_compute and native\_compute}{280}{paragraph*.1408}%
\contentsline {paragraph}{Computing in a term: eval and Eval}{282}{paragraph*.1414}%
\contentsline {subsubsection}{Controlling reduction strategies and the conversion algorithm}{283}{subsubsection*.1421}%
\contentsline {subsection}{\numberline {3.1.4}Reasoning with inductive types}{286}{subsection.3.1.4}%
\contentsline {subsubsection}{Applying constructors}{286}{subsubsection*.1435}%
\contentsline {subsubsection}{Case analysis and induction}{288}{subsubsection*.1450}%
\contentsline {subsubsection}{Equality and inductive sets}{304}{subsubsection*.1496}%
\contentsline {subsubsection}{Generation of induction principles with \sphinxstyleliteralintitle {\sphinxupquote {Scheme}}}{305}{subsubsection*.1504}%
\contentsline {paragraph}{Automatic declaration of schemes}{307}{paragraph*.1510}%
\contentsline {paragraph}{Combined Scheme}{307}{paragraph*.1517}%
\contentsline {subsubsection}{Generation of inversion principles with \sphinxstyleliteralintitle {\sphinxupquote {Derive}} \sphinxstyleliteralintitle {\sphinxupquote {Inversion}}}{308}{subsubsection*.1519}%
\contentsline {subsubsection}{Examples of dependent destruction / dependent induction}{310}{subsubsection*.1524}%
\contentsline {paragraph}{A larger example}{312}{paragraph*.1525}%
\contentsline {subsection}{\numberline {3.1.5}The SSReflect proof language}{315}{subsection.3.1.5}%
\contentsline {subsubsection}{Introduction}{315}{subsubsection*.1526}%
\contentsline {paragraph}{Acknowledgments}{316}{paragraph*.1527}%
\contentsline {subsubsection}{Usage}{316}{subsubsection*.1528}%
\contentsline {paragraph}{Getting started}{316}{paragraph*.1529}%
\contentsline {paragraph}{Compatibility issues}{316}{paragraph*.1530}%
\contentsline {subsubsection}{Gallina extensions}{318}{subsubsection*.1533}%
\contentsline {paragraph}{Pattern assignment}{318}{paragraph*.1534}%
\contentsline {paragraph}{Pattern conditional}{319}{paragraph*.1539}%
\contentsline {paragraph}{Parametric polymorphism}{320}{paragraph*.1546}%
\contentsline {paragraph}{Anonymous arguments}{321}{paragraph*.1548}%
\contentsline {paragraph}{Wildcards}{321}{paragraph*.1551}%
\contentsline {paragraph}{Definitions}{321}{paragraph*.1552}%
\contentsline {paragraph}{Abbreviations}{323}{paragraph*.1554}%
\contentsline {subparagraph}{Matching}{324}{subparagraph*.1558}%
\contentsline {subparagraph}{Occurrence selection}{326}{subparagraph*.1559}%
\contentsline {paragraph}{Basic localization}{328}{paragraph*.1560}%
\contentsline {subsubsection}{Basic tactics}{329}{subsubsection*.1561}%
\contentsline {paragraph}{Bookkeeping}{329}{paragraph*.1562}%
\contentsline {paragraph}{The defective tactics}{332}{paragraph*.1563}%
\contentsline {subparagraph}{The move tactic.}{332}{subparagraph*.1564}%
\contentsline {subparagraph}{The case tactic}{333}{subparagraph*.1566}%
\contentsline {subparagraph}{The elim tactic}{333}{subparagraph*.1569}%
\contentsline {subparagraph}{The apply tactic}{334}{subparagraph*.1571}%
\contentsline {paragraph}{Discharge}{335}{paragraph*.1573}%
\contentsline {subparagraph}{Clear rules}{336}{subparagraph*.1579}%
\contentsline {subparagraph}{Matching for apply and exact}{337}{subparagraph*.1580}%
\contentsline {subparagraph}{The abstract tactic}{337}{subparagraph*.1581}%
\contentsline {paragraph}{Introduction in the context}{338}{paragraph*.1583}%
\contentsline {subparagraph}{Simplification items}{338}{subparagraph*.1595}%
\contentsline {subparagraph}{Views}{339}{subparagraph*.1596}%
\contentsline {subparagraph}{Intro patterns}{339}{subparagraph*.1597}%
\contentsline {subparagraph}{Clear switch}{340}{subparagraph*.1598}%
\contentsline {subparagraph}{Branching and destructuring}{341}{subparagraph*.1599}%
\contentsline {subparagraph}{Block introduction}{341}{subparagraph*.1600}%
\contentsline {paragraph}{Generation of equations}{342}{paragraph*.1601}%
\contentsline {paragraph}{Type families}{344}{paragraph*.1602}%
\contentsline {subsubsection}{Control flow}{347}{subsubsection*.1603}%
\contentsline {paragraph}{Indentation and bullets}{347}{paragraph*.1604}%
\contentsline {paragraph}{Terminators}{347}{paragraph*.1605}%
\contentsline {paragraph}{Selectors}{349}{paragraph*.1608}%
\contentsline {paragraph}{Iteration}{350}{paragraph*.1614}%
\contentsline {paragraph}{Localization}{351}{paragraph*.1618}%
\contentsline {paragraph}{Structure}{352}{paragraph*.1620}%
\contentsline {subparagraph}{The have tactic.}{352}{subparagraph*.1621}%
\contentsline {subparagraph}{Generating let in context entries with have}{356}{subparagraph*.1624}%
\contentsline {subparagraph}{The have tactic and typeclass resolution}{358}{subparagraph*.1625}%
\contentsline {subparagraph}{Variants: the suff and wlog tactics}{359}{subparagraph*.1627}%
\contentsline {subparagraph}{Advanced generalization}{361}{subparagraph*.1630}%
\contentsline {subsubsection}{Rewriting}{363}{subsubsection*.1631}%
\contentsline {paragraph}{An extended rewrite tactic}{363}{paragraph*.1632}%
\contentsline {paragraph}{Remarks and examples}{365}{paragraph*.1643}%
\contentsline {subparagraph}{Rewrite redex selection}{365}{subparagraph*.1644}%
\contentsline {subparagraph}{Chained rewrite steps}{366}{subparagraph*.1645}%
\contentsline {subparagraph}{Explicit redex switches are matched first}{367}{subparagraph*.1646}%
\contentsline {subparagraph}{Occurrence switches and redex switches}{367}{subparagraph*.1647}%
\contentsline {subparagraph}{Occurrence selection and repetition}{368}{subparagraph*.1648}%
\contentsline {subparagraph}{Multi\sphinxhyphen {}rule rewriting}{369}{subparagraph*.1649}%
\contentsline {subparagraph}{Wildcards vs abstractions}{372}{subparagraph*.1650}%
\contentsline {subparagraph}{When SSReflect rewrite fails on standard Coq licit rewrite}{373}{subparagraph*.1651}%
\contentsline {subparagraph}{Existential metavariables and rewriting}{374}{subparagraph*.1652}%
\contentsline {paragraph}{Rewriting under binders}{375}{paragraph*.1653}%
\contentsline {subparagraph}{The under tactic}{377}{subparagraph*.1654}%
\contentsline {subparagraph}{Interactive mode}{377}{subparagraph*.1657}%
\contentsline {subparagraph}{The over tactic}{378}{subparagraph*.1658}%
\contentsline {subparagraph}{One\sphinxhyphen {}liner mode}{379}{subparagraph*.1660}%
\contentsline {paragraph}{Locking, unlocking}{380}{paragraph*.1661}%
\contentsline {paragraph}{Congruence}{382}{paragraph*.1663}%
\contentsline {subsubsection}{Contextual patterns}{385}{subsubsection*.1665}%
\contentsline {paragraph}{Syntax}{385}{paragraph*.1666}%
\contentsline {paragraph}{Matching contextual patterns}{386}{paragraph*.1667}%
\contentsline {paragraph}{Examples}{386}{paragraph*.1668}%
\contentsline {subparagraph}{Contextual pattern in set and the : tactical}{386}{subparagraph*.1669}%
\contentsline {subparagraph}{Contextual patterns in rewrite}{387}{subparagraph*.1670}%
\contentsline {paragraph}{Patterns for recurrent contexts}{389}{paragraph*.1671}%
\contentsline {subsubsection}{Views and reflection}{389}{subsubsection*.1672}%
\contentsline {paragraph}{Interpreting eliminations}{389}{paragraph*.1673}%
\contentsline {paragraph}{Interpreting assumptions}{393}{paragraph*.1674}%
\contentsline {subparagraph}{Specializing assumptions}{396}{subparagraph*.1675}%
\contentsline {paragraph}{Interpreting goals}{396}{paragraph*.1676}%
\contentsline {paragraph}{Boolean reflection}{397}{paragraph*.1677}%
\contentsline {paragraph}{The reflect predicate}{398}{paragraph*.1678}%
\contentsline {paragraph}{General mechanism for interpreting goals and assumptions}{400}{paragraph*.1679}%
\contentsline {subparagraph}{Specializing assumptions}{400}{subparagraph*.1680}%
\contentsline {subparagraph}{Interpreting assumptions}{400}{subparagraph*.1681}%
\contentsline {paragraph}{Interpreting equivalences}{402}{paragraph*.1682}%
\contentsline {paragraph}{Declaring new Hint Views}{403}{paragraph*.1683}%
\contentsline {paragraph}{Multiple views}{404}{paragraph*.1686}%
\contentsline {subsubsection}{SSReflect searching tool}{405}{subsubsection*.1687}%
\contentsline {subsubsection}{Synopsis and Index}{406}{subsubsection*.1689}%
\contentsline {paragraph}{Parameters}{406}{paragraph*.1690}%
\contentsline {paragraph}{Items and switches}{407}{paragraph*.1699}%
\contentsline {paragraph}{Tactics}{408}{paragraph*.1736}%
\contentsline {paragraph}{Tacticals}{410}{paragraph*.1751}%
\contentsline {paragraph}{Commands}{410}{paragraph*.1766}%
\contentsline {paragraph}{Settings}{411}{paragraph*.1770}%
\contentsline {section}{\numberline {3.2}Automatic solvers and programmable tactics}{411}{section.3.2}%
\contentsline {subsection}{\numberline {3.2.1}Solvers for logic and equality}{411}{subsection.3.2.1}%
\contentsline {subsection}{\numberline {3.2.2}Micromega: solvers for arithmetic goals over ordered rings}{415}{subsection.3.2.2}%
\contentsline {subsubsection}{Short description of the tactics}{415}{subsubsection*.1790}%
\contentsline {subsubsection}{\sphinxstyleemphasis {Positivstellensatz} refutations}{417}{subsubsection*.1803}%
\contentsline {subsubsection}{\sphinxstyleliteralintitle {\sphinxupquote {lra}}: a decision procedure for linear real and rational arithmetic}{417}{subsubsection*.1805}%
\contentsline {subsubsection}{\sphinxstyleliteralintitle {\sphinxupquote {lia}}: a tactic for linear integer arithmetic}{417}{subsubsection*.1807}%
\contentsline {paragraph}{High level view of \sphinxstyleliteralintitle {\sphinxupquote {lia}}}{417}{paragraph*.1809}%
\contentsline {paragraph}{Cutting plane proofs}{418}{paragraph*.1810}%
\contentsline {paragraph}{Case split}{418}{paragraph*.1813}%
\contentsline {subsubsection}{\sphinxstyleliteralintitle {\sphinxupquote {nra}}: a proof procedure for non\sphinxhyphen {}linear arithmetic}{418}{subsubsection*.1815}%
\contentsline {subsubsection}{\sphinxstyleliteralintitle {\sphinxupquote {nia}}: a proof procedure for non\sphinxhyphen {}linear integer arithmetic}{418}{subsubsection*.1817}%
\contentsline {subsubsection}{\sphinxstyleliteralintitle {\sphinxupquote {psatz}}: a proof procedure for non\sphinxhyphen {}linear arithmetic}{419}{subsubsection*.1819}%
\contentsline {subsubsection}{\sphinxstyleliteralintitle {\sphinxupquote {zify}}: pre\sphinxhyphen {}processing of arithmetic goals}{419}{subsubsection*.1821}%
\contentsline {subsection}{\numberline {3.2.3}ring and field: solvers for polynomial and rational equations}{420}{subsection.3.2.3}%
\contentsline {subsubsection}{What does this tactic do?}{420}{subsubsection*.1829}%
\contentsline {subsubsection}{The variables map}{421}{subsubsection*.1830}%
\contentsline {subsubsection}{Is it automatic?}{421}{subsubsection*.1831}%
\contentsline {subsubsection}{Concrete usage in Coq}{421}{subsubsection*.1832}%
\contentsline {subsubsection}{Adding a ring structure}{423}{subsubsection*.1840}%
\contentsline {subsubsection}{How does it work?}{426}{subsubsection*.1847}%
\contentsline {subsubsection}{Dealing with fields}{427}{subsubsection*.1848}%
\contentsline {subsubsection}{Adding a new field structure}{429}{subsubsection*.1852}%
\contentsline {subsubsection}{History of ring}{430}{subsubsection*.1856}%
\contentsline {subsubsection}{Discussion}{430}{subsubsection*.1857}%
\contentsline {subsection}{\numberline {3.2.4}Nsatz: a solver for equalities in integral domains}{431}{subsection.3.2.4}%
\contentsline {subsubsection}{More about \sphinxstyleliteralintitle {\sphinxupquote {nsatz}}}{432}{subsubsection*.1859}%
\contentsline {subsection}{\numberline {3.2.5}Programmable proof search}{432}{subsection.3.2.5}%
\contentsline {subsubsection}{The hints databases for auto and eauto}{436}{subsubsection*.1885}%
\contentsline {subsubsection}{Creating Hint databases}{436}{subsubsection*.1886}%
\contentsline {subsubsection}{Creating Hints}{436}{subsubsection*.1888}%
\contentsline {subsubsection}{Hint databases defined in the Coq standard library}{441}{subsubsection*.1916}%
\contentsline {subsubsection}{Hint locality}{441}{subsubsection*.1917}%
\contentsline {subsubsection}{Setting implicit automation tactics}{442}{subsubsection*.1919}%
\contentsline {subsection}{\numberline {3.2.6}Generalized rewriting}{442}{subsection.3.2.6}%
\contentsline {subsubsection}{Introduction to generalized rewriting}{442}{subsubsection*.1921}%
\contentsline {paragraph}{Relations and morphisms}{442}{paragraph*.1922}%
\contentsline {paragraph}{Adding new relations and morphisms}{444}{paragraph*.1923}%
\contentsline {paragraph}{Rewriting and non reflexive relations}{446}{paragraph*.1927}%
\contentsline {paragraph}{Rewriting and non symmetric relations}{447}{paragraph*.1928}%
\contentsline {paragraph}{Rewriting in ambiguous setoid contexts}{447}{paragraph*.1929}%
\contentsline {subsubsection}{Commands and tactics}{448}{subsubsection*.1930}%
\contentsline {paragraph}{First class setoids and morphisms}{448}{paragraph*.1931}%
\contentsline {paragraph}{Tactics enabled on user provided relations}{449}{paragraph*.1932}%
\contentsline {paragraph}{Printing relations and morphisms}{450}{paragraph*.1941}%
\contentsline {paragraph}{Deprecated syntax and backward incompatibilities}{450}{paragraph*.1942}%
\contentsline {subsubsection}{Extensions}{450}{subsubsection*.1947}%
\contentsline {paragraph}{Rewriting under binders}{450}{paragraph*.1948}%
\contentsline {paragraph}{Subrelations}{451}{paragraph*.1949}%
\contentsline {paragraph}{Constant unfolding}{452}{paragraph*.1950}%
\contentsline {subsubsection}{Strategies for rewriting}{452}{subsubsection*.1951}%
\contentsline {paragraph}{Usage}{452}{paragraph*.1952}%
\contentsline {paragraph}{Definitions}{452}{paragraph*.1957}%
\contentsline {section}{\numberline {3.3}Creating new tactics}{455}{section.3.3}%
\contentsline {subsection}{\numberline {3.3.1}Ltac}{455}{subsection.3.3.1}%
\contentsline {subsubsection}{Syntax}{456}{subsubsection*.1961}%
\contentsline {subsubsection}{Semantics}{457}{subsubsection*.1988}%
\contentsline {paragraph}{Types of values}{457}{paragraph*.1989}%
\contentsline {paragraph}{Syntactic values}{457}{paragraph*.1990}%
\contentsline {paragraph}{Tactics in terms}{458}{paragraph*.1994}%
\contentsline {paragraph}{Substitution}{458}{paragraph*.1997}%
\contentsline {paragraph}{Sequence: ;}{459}{paragraph*.1998}%
\contentsline {paragraph}{Local application of tactics: {[}> ... {]}}{459}{paragraph*.2000}%
\contentsline {paragraph}{Goal selectors}{460}{paragraph*.2007}%
\contentsline {paragraph}{Processing multiple goals}{461}{paragraph*.2018}%
\contentsline {paragraph}{Do loop}{462}{paragraph*.2019}%
\contentsline {paragraph}{Repeat loop}{462}{paragraph*.2021}%
\contentsline {paragraph}{Catching errors: try}{462}{paragraph*.2023}%
\contentsline {paragraph}{Detecting progress}{462}{paragraph*.2025}%
\contentsline {paragraph}{Branching and backtracking}{463}{paragraph*.2028}%
\contentsline {paragraph}{Branching with backtracking: +}{463}{paragraph*.2033}%
\contentsline {paragraph}{First tactic to succeed}{464}{paragraph*.2035}%
\contentsline {paragraph}{Solving}{465}{paragraph*.2038}%
\contentsline {paragraph}{First tactic to make progress: ||}{465}{paragraph*.2040}%
\contentsline {paragraph}{Conditional branching: tryif}{465}{paragraph*.2042}%
\contentsline {paragraph}{Soft cut: once}{466}{paragraph*.2044}%
\contentsline {paragraph}{Checking for a single success: exactly\_once}{466}{paragraph*.2046}%
\contentsline {paragraph}{Checking for failure: assert\_fails}{466}{paragraph*.2049}%
\contentsline {paragraph}{Checking for success: assert\_succeeds}{467}{paragraph*.2052}%
\contentsline {paragraph}{Print/identity tactic: idtac}{467}{paragraph*.2055}%
\contentsline {paragraph}{Failing}{467}{paragraph*.2057}%
\contentsline {paragraph}{Timeout}{470}{paragraph*.2063}%
\contentsline {paragraph}{Timing a tactic}{470}{paragraph*.2065}%
\contentsline {paragraph}{Timing a tactic that evaluates to a term: time\_constr}{470}{paragraph*.2067}%
\contentsline {paragraph}{Local definitions: let}{471}{paragraph*.2071}%
\contentsline {paragraph}{Function construction and application}{471}{paragraph*.2075}%
\contentsline {paragraph}{Pattern matching on terms: match}{472}{paragraph*.2077}%
\contentsline {paragraph}{Pattern matching on goals and hypotheses: match goal}{475}{paragraph*.2095}%
\contentsline {paragraph}{Filling a term context}{478}{paragraph*.2107}%
\contentsline {paragraph}{Generating fresh hypothesis names}{479}{paragraph*.2111}%
\contentsline {paragraph}{Computing in a term: eval}{479}{paragraph*.2113}%
\contentsline {paragraph}{Getting the type of a term}{480}{paragraph*.2114}%
\contentsline {paragraph}{Manipulating untyped terms: type\_term}{480}{paragraph*.2116}%
\contentsline {paragraph}{Counting goals: numgoals}{480}{paragraph*.2118}%
\contentsline {paragraph}{Testing boolean expressions: guard}{480}{paragraph*.2120}%
\contentsline {paragraph}{Proving a subgoal as a separate lemma: abstract}{481}{paragraph*.2127}%
\contentsline {subsubsection}{Tactic toplevel definitions}{482}{subsubsection*.2131}%
\contentsline {paragraph}{Defining \sphinxstyleliteralintitle {\sphinxupquote {L}}$_{\text {tac}}$ symbols}{482}{paragraph*.2132}%
\contentsline {paragraph}{Printing \sphinxstyleliteralintitle {\sphinxupquote {L}}$_{\text {tac}}$ tactics}{482}{paragraph*.2138}%
\contentsline {subsubsection}{Examples of using \sphinxstyleliteralintitle {\sphinxupquote {L}}$_{\text {tac}}$}{483}{subsubsection*.2141}%
\contentsline {paragraph}{Proof that the natural numbers have at least two elements}{483}{paragraph*.2142}%
\contentsline {paragraph}{Proving that a list is a permutation of a second list}{484}{paragraph*.2143}%
\contentsline {paragraph}{Deciding intuitionistic propositional logic}{486}{paragraph*.2144}%
\contentsline {paragraph}{Deciding type isomorphisms}{487}{paragraph*.2145}%
\contentsline {subsubsection}{Debugging \sphinxstyleliteralintitle {\sphinxupquote {L}}$_{\text {tac}}$ tactics}{489}{subsubsection*.2146}%
\contentsline {paragraph}{Backtraces}{489}{paragraph*.2147}%
\contentsline {paragraph}{Tracing execution}{489}{paragraph*.2149}%
\contentsline {paragraph}{Interactive debugger}{490}{paragraph*.2152}%
\contentsline {paragraph}{Profiling \sphinxstyleliteralintitle {\sphinxupquote {L}}$_{\text {tac}}$ tactics}{490}{paragraph*.2156}%
\contentsline {paragraph}{Run\sphinxhyphen {}time optimization tactic}{493}{paragraph*.2165}%
\contentsline {subsection}{\numberline {3.3.2}Ltac2}{493}{subsection.3.3.2}%
\contentsline {subsubsection}{General design}{494}{subsubsection*.2168}%
\contentsline {subsubsection}{ML component}{494}{subsubsection*.2169}%
\contentsline {paragraph}{Overview}{494}{paragraph*.2170}%
\contentsline {paragraph}{Type Syntax}{495}{paragraph*.2171}%
\contentsline {paragraph}{Type declarations}{495}{paragraph*.2182}%
\contentsline {paragraph}{APIs}{497}{paragraph*.2195}%
\contentsline {paragraph}{Term Syntax}{497}{paragraph*.2196}%
\contentsline {paragraph}{Ltac2 Definitions}{498}{paragraph*.2216}%
\contentsline {paragraph}{Reduction}{499}{paragraph*.2221}%
\contentsline {paragraph}{Typing}{500}{paragraph*.2222}%
\contentsline {paragraph}{Effects}{500}{paragraph*.2223}%
\contentsline {subparagraph}{Standard IO}{500}{subparagraph*.2224}%
\contentsline {subparagraph}{Fatal errors}{500}{subparagraph*.2225}%
\contentsline {subparagraph}{Backtracking}{501}{subparagraph*.2226}%
\contentsline {subparagraph}{Goals}{501}{subparagraph*.2227}%
\contentsline {subsubsection}{Meta\sphinxhyphen {}programming}{502}{subsubsection*.2228}%
\contentsline {paragraph}{Overview}{502}{paragraph*.2229}%
\contentsline {paragraph}{Quotations}{502}{paragraph*.2230}%
\contentsline {subparagraph}{Built\sphinxhyphen {}in quotations}{502}{subparagraph*.2231}%
\contentsline {subparagraph}{Strict vs. non\sphinxhyphen {}strict mode}{503}{subparagraph*.2236}%
\contentsline {paragraph}{Term Antiquotations}{503}{paragraph*.2237}%
\contentsline {subparagraph}{Syntax}{503}{subparagraph*.2238}%
\contentsline {subparagraph}{Semantics}{503}{subparagraph*.2241}%
\contentsline {subparagraph}{Static semantics}{503}{subparagraph*.2242}%
\contentsline {subparagraph}{Dynamic semantics}{505}{subparagraph*.2243}%
\contentsline {paragraph}{Match over terms}{505}{paragraph*.2246}%
\contentsline {paragraph}{Match over goals}{508}{paragraph*.2263}%
\contentsline {paragraph}{Match on values}{511}{paragraph*.2278}%
\contentsline {subsubsection}{Notations}{511}{subsubsection*.2289}%
\contentsline {paragraph}{Abbreviations}{513}{paragraph*.2292}%
\contentsline {paragraph}{Defining tactics}{513}{paragraph*.2294}%
\contentsline {paragraph}{Syntactic classes}{514}{paragraph*.2295}%
\contentsline {subsubsection}{Evaluation}{518}{subsubsection*.2378}%
\contentsline {subsubsection}{Debug}{518}{subsubsection*.2380}%
\contentsline {subsubsection}{Compatibility layer with Ltac1}{518}{subsubsection*.2382}%
\contentsline {paragraph}{Ltac1 from Ltac2}{518}{paragraph*.2383}%
\contentsline {subparagraph}{Simple API}{518}{subparagraph*.2384}%
\contentsline {subparagraph}{Low\sphinxhyphen {}level API}{519}{subparagraph*.2385}%
\contentsline {paragraph}{Ltac2 from Ltac1}{519}{paragraph*.2386}%
\contentsline {paragraph}{Switching between Ltac languages}{520}{paragraph*.2389}%
\contentsline {subsubsection}{Transition from Ltac1}{520}{subsubsection*.2390}%
\contentsline {paragraph}{Syntax changes}{520}{paragraph*.2391}%
\contentsline {paragraph}{Tactic delay}{520}{paragraph*.2392}%
\contentsline {paragraph}{Variable binding}{521}{paragraph*.2393}%
\contentsline {subparagraph}{In Ltac expressions}{521}{subparagraph*.2394}%
\contentsline {subparagraph}{In quotations}{521}{subparagraph*.2396}%
\contentsline {paragraph}{Exception catching}{521}{paragraph*.2398}%
\contentsline {chapter}{\numberline {4}Using Coq}{522}{chapter.4}%
\contentsline {section}{\numberline {4.1}Libraries and plugins}{522}{section.4.1}%
\contentsline {subsection}{\numberline {4.1.1}The Coq library}{522}{subsection.4.1.1}%
\contentsline {subsubsection}{The prelude}{522}{subsubsection*.2401}%
\contentsline {paragraph}{Notations}{523}{paragraph*.2402}%
\contentsline {paragraph}{Logic}{523}{paragraph*.2403}%
\contentsline {subparagraph}{Propositional Connectives}{524}{subparagraph*.2405}%
\contentsline {subparagraph}{Quantifiers}{524}{subparagraph*.2406}%
\contentsline {subparagraph}{Equality}{525}{subparagraph*.2407}%
\contentsline {subparagraph}{Lemmas}{525}{subparagraph*.2408}%
\contentsline {paragraph}{Datatypes}{526}{paragraph*.2410}%
\contentsline {subparagraph}{Programming}{526}{subparagraph*.2412}%
\contentsline {paragraph}{Specification}{527}{paragraph*.2415}%
\contentsline {paragraph}{Basic Arithmetic}{528}{paragraph*.2423}%
\contentsline {paragraph}{Well\sphinxhyphen {}founded recursion}{529}{paragraph*.2425}%
\contentsline {paragraph}{Accessing the Type level}{530}{paragraph*.2428}%
\contentsline {paragraph}{Tactics}{530}{paragraph*.2431}%
\contentsline {subsubsection}{The standard library}{531}{subsubsection*.2432}%
\contentsline {paragraph}{Survey}{531}{paragraph*.2433}%
\contentsline {paragraph}{Peano’s arithmetic (nat)}{531}{paragraph*.2434}%
\contentsline {paragraph}{Notations for integer arithmetic}{532}{paragraph*.2435}%
\contentsline {paragraph}{Real numbers library}{533}{paragraph*.2436}%
\contentsline {subparagraph}{Notations for real numbers}{533}{subparagraph*.2437}%
\contentsline {subparagraph}{Some tactics for real numbers}{534}{subparagraph*.2438}%
\contentsline {paragraph}{List library}{535}{paragraph*.2442}%
\contentsline {paragraph}{Floats library}{536}{paragraph*.2443}%
\contentsline {subsubsection}{Users’ contributions}{538}{subsubsection*.2446}%
\contentsline {subsection}{\numberline {4.1.2}Program extraction}{539}{subsection.4.1.2}%
\contentsline {subsubsection}{Generating ML Code}{539}{subsubsection*.2447}%
\contentsline {subsubsection}{Extraction Options}{540}{subsubsection*.2455}%
\contentsline {paragraph}{Setting the target language}{540}{paragraph*.2456}%
\contentsline {paragraph}{Inlining and optimizations}{540}{paragraph*.2460}%
\contentsline {paragraph}{Extra elimination of useless arguments}{541}{paragraph*.2469}%
\contentsline {paragraph}{Realizing axioms}{542}{paragraph*.2472}%
\contentsline {paragraph}{Realizing inductive types}{543}{paragraph*.2475}%
\contentsline {paragraph}{Avoiding conflicts with existing filenames}{544}{paragraph*.2477}%
\contentsline {paragraph}{Additional settings}{544}{paragraph*.2481}%
\contentsline {subsubsection}{Differences between Coq and ML type systems}{545}{subsubsection*.2485}%
\contentsline {subsubsection}{Some examples}{545}{subsubsection*.2486}%
\contentsline {paragraph}{A detailed example: Euclidean division}{546}{paragraph*.2487}%
\contentsline {paragraph}{Extraction's horror museum}{547}{paragraph*.2488}%
\contentsline {paragraph}{Users' Contributions}{547}{paragraph*.2489}%
\contentsline {subsection}{\numberline {4.1.3}Program derivation}{548}{subsection.4.1.3}%
\contentsline {subsection}{\numberline {4.1.4}Functional induction}{550}{subsection.4.1.4}%
\contentsline {subsubsection}{Advanced recursive functions}{550}{subsubsection*.2491}%
\contentsline {subsubsection}{Tactics}{552}{subsubsection*.2499}%
\contentsline {subsubsection}{Generation of induction principles with \sphinxstyleliteralintitle {\sphinxupquote {Functional}} \sphinxstyleliteralintitle {\sphinxupquote {Scheme}}}{554}{subsubsection*.2506}%
\contentsline {subsection}{\numberline {4.1.5}Writing Coq libraries and plugins}{558}{subsection.4.1.5}%
\contentsline {subsubsection}{Deprecating library objects or tactics}{558}{subsubsection*.2510}%
\contentsline {section}{\numberline {4.2}Command\sphinxhyphen {}line and graphical tools}{560}{section.4.2}%
\contentsline {subsection}{\numberline {4.2.1}The Coq commands}{560}{subsection.4.2.1}%
\contentsline {subsubsection}{Interactive use (coqtop)}{560}{subsubsection*.2519}%
\contentsline {subsubsection}{Batch compilation (coqc)}{560}{subsubsection*.2521}%
\contentsline {subsubsection}{Customization at launch time}{561}{subsubsection*.2522}%
\contentsline {paragraph}{By resource file}{561}{paragraph*.2523}%
\contentsline {paragraph}{By environment variables}{561}{paragraph*.2524}%
\contentsline {paragraph}{By command line options}{562}{paragraph*.2527}%
\contentsline {subsubsection}{Compiled interfaces (produced using \sphinxstyleliteralintitle {\sphinxupquote {\sphinxhyphen {}vos}})}{565}{subsubsection*.2530}%
\contentsline {subsubsection}{Compiled libraries checker (coqchk)}{567}{subsubsection*.2532}%
\contentsline {subsection}{\numberline {4.2.2}Utilities}{567}{subsection.4.2.2}%
\contentsline {subsubsection}{Using Coq as a library}{568}{subsubsection*.2533}%
\contentsline {subsubsection}{Building a Coq project}{568}{subsubsection*.2534}%
\contentsline {paragraph}{Building a Coq project with coq\_makefile}{568}{paragraph*.2535}%
\contentsline {subparagraph}{CoqMakefile.local}{570}{subparagraph*.2536}%
\contentsline {subparagraph}{CoqMakefile.local\sphinxhyphen {}late}{571}{subparagraph*.2537}%
\contentsline {subparagraph}{Timing targets and performance testing}{572}{subparagraph*.2538}%
\contentsline {subparagraph}{Building a subset of the targets with \sphinxstyleliteralintitle {\sphinxupquote {\sphinxhyphen {}j}}}{575}{subparagraph*.2539}%
\contentsline {subparagraph}{Precompiling for \sphinxstyleliteralintitle {\sphinxupquote {native\_compute}}}{576}{subparagraph*.2540}%
\contentsline {paragraph}{Building a Coq project with Dune}{576}{paragraph*.2541}%
\contentsline {subsubsection}{Computing Module dependencies}{578}{subsubsection*.2542}%
\contentsline {subsubsection}{Split compilation of native computation files}{578}{subsubsection*.2543}%
\contentsline {subsubsection}{Embedded Coq phrases inside LaTeX documents}{578}{subsubsection*.2544}%
\contentsline {subsubsection}{Man pages}{579}{subsubsection*.2545}%
\contentsline {subsection}{\numberline {4.2.3}Documenting Coq files with coqdoc}{579}{subsection.4.2.3}%
\contentsline {subsubsection}{Principles}{579}{subsubsection*.2546}%
\contentsline {paragraph}{Coq material inside documentation.}{579}{paragraph*.2547}%
\contentsline {paragraph}{Pretty\sphinxhyphen {}printing.}{579}{paragraph*.2548}%
\contentsline {paragraph}{Sections}{580}{paragraph*.2549}%
\contentsline {paragraph}{Lists.}{580}{paragraph*.2550}%
\contentsline {paragraph}{Rules.}{581}{paragraph*.2551}%
\contentsline {paragraph}{Emphasis.}{581}{paragraph*.2552}%
\contentsline {paragraph}{Escaping to LaTeX and HTML.}{581}{paragraph*.2553}%
\contentsline {paragraph}{Verbatim}{581}{paragraph*.2554}%
\contentsline {paragraph}{Hyperlinks}{582}{paragraph*.2555}%
\contentsline {paragraph}{Hiding / Showing parts of the source}{582}{paragraph*.2556}%
\contentsline {subsubsection}{Usage}{582}{subsubsection*.2557}%
\contentsline {paragraph}{Command line options}{583}{paragraph*.2558}%
\contentsline {subsubsection}{The coqdoc LaTeX style file}{585}{subsubsection*.2559}%
\contentsline {subsection}{\numberline {4.2.4}Coq Integrated Development Environment}{586}{subsection.4.2.4}%
\contentsline {subsubsection}{Managing files and buffers, basic editing}{586}{subsubsection*.2561}%
\contentsline {subsubsection}{Interactive navigation into Coq scripts}{587}{subsubsection*.2562}%
\contentsline {subsubsection}{Commands and templates}{588}{subsubsection*.2563}%
\contentsline {subsubsection}{Queries}{588}{subsubsection*.2564}%
\contentsline {subsubsection}{Compilation}{589}{subsubsection*.2565}%
\contentsline {subsubsection}{Customizations}{589}{subsubsection*.2566}%
\contentsline {subsubsection}{Using Unicode symbols}{590}{subsubsection*.2567}%
\contentsline {paragraph}{Displaying Unicode symbols}{590}{paragraph*.2568}%
\contentsline {paragraph}{Bindings for input of Unicode symbols}{590}{paragraph*.2569}%
\contentsline {paragraph}{Adding custom bindings}{590}{paragraph*.2570}%
\contentsline {paragraph}{Character encoding for saved files}{591}{paragraph*.2571}%
\contentsline {subsection}{\numberline {4.2.5}Asynchronous and Parallel Proof Processing}{591}{subsection.4.2.5}%
\contentsline {subsubsection}{Proof annotations}{592}{subsubsection*.2572}%
\contentsline {paragraph}{Automatic suggestion of proof annotations}{592}{paragraph*.2573}%
\contentsline {subsubsection}{Proof blocks and error resilience}{592}{subsubsection*.2574}%
\contentsline {paragraph}{Caveats}{593}{paragraph*.2575}%
\contentsline {subsubsection}{Interactive mode}{593}{subsubsection*.2576}%
\contentsline {paragraph}{Caveats}{593}{paragraph*.2577}%
\contentsline {subsubsection}{Batch mode}{594}{subsubsection*.2578}%
\contentsline {subsubsection}{Limiting the number of parallel workers}{595}{subsubsection*.2579}%
\contentsline {chapter}{\numberline {5}Appendix}{596}{chapter.5}%
\contentsline {section}{\numberline {5.1}History and recent changes}{596}{section.5.1}%
\contentsline {subsection}{\numberline {5.1.1}Early history of Coq}{596}{subsection.5.1.1}%
\contentsline {subsubsection}{Historical roots}{596}{subsubsection*.2580}%
\contentsline {subsubsection}{Versions 1 to 5}{597}{subsubsection*.2581}%
\contentsline {paragraph}{Version 1}{599}{paragraph*.2582}%
\contentsline {paragraph}{Version 2}{599}{paragraph*.2583}%
\contentsline {paragraph}{Version 3}{600}{paragraph*.2584}%
\contentsline {paragraph}{Version 4}{600}{paragraph*.2585}%
\contentsline {paragraph}{Version 5}{602}{paragraph*.2586}%
\contentsline {subsubsection}{Versions 6}{602}{subsubsection*.2587}%
\contentsline {paragraph}{Version 6.1}{602}{paragraph*.2588}%
\contentsline {paragraph}{Version 6.2}{603}{paragraph*.2589}%
\contentsline {paragraph}{Version 6.3}{603}{paragraph*.2590}%
\contentsline {subsubsection}{Versions 7}{604}{subsubsection*.2591}%
\contentsline {paragraph}{Summary of changes}{604}{paragraph*.2592}%
\contentsline {paragraph}{Details of changes in 7.0 and 7.1}{605}{paragraph*.2593}%
\contentsline {subparagraph}{Main novelties}{605}{subparagraph*.2594}%
\contentsline {subparagraph}{Details of changes}{606}{subparagraph*.2595}%
\contentsline {subparagraph}{Language: new "let\sphinxhyphen {}in" construction}{606}{subparagraph*.2596}%
\contentsline {subparagraph}{Language: long names}{606}{subparagraph*.2597}%
\contentsline {subparagraph}{Language: miscellaneous}{606}{subparagraph*.2598}%
\contentsline {subparagraph}{Language: Cases}{606}{subparagraph*.2599}%
\contentsline {subparagraph}{Reduction}{607}{subparagraph*.2600}%
\contentsline {subparagraph}{New tactics}{607}{subparagraph*.2601}%
\contentsline {subparagraph}{Changes in existing tactics}{607}{subparagraph*.2602}%
\contentsline {subparagraph}{Efficiency}{608}{subparagraph*.2603}%
\contentsline {subparagraph}{Concrete syntax of constructions}{608}{subparagraph*.2604}%
\contentsline {subparagraph}{Parsing and grammar extension}{608}{subparagraph*.2605}%
\contentsline {subparagraph}{New commands}{609}{subparagraph*.2606}%
\contentsline {subparagraph}{Changes in existing commands}{609}{subparagraph*.2607}%
\contentsline {subparagraph}{Tools}{609}{subparagraph*.2608}%
\contentsline {subparagraph}{Extraction}{610}{subparagraph*.2609}%
\contentsline {subparagraph}{Standard library}{610}{subparagraph*.2610}%
\contentsline {subparagraph}{New user contributions}{610}{subparagraph*.2611}%
\contentsline {paragraph}{Details of changes in 7.2}{610}{paragraph*.2612}%
\contentsline {paragraph}{Details of changes in 7.3}{612}{paragraph*.2613}%
\contentsline {subparagraph}{Changes in 7.3.1}{613}{subparagraph*.2614}%
\contentsline {paragraph}{Details of changes in 7.4}{614}{paragraph*.2615}%
\contentsline {subsection}{\numberline {5.1.2}Recent changes}{616}{subsection.5.1.2}%
\contentsline {subsubsection}{Version 8.14}{616}{subsubsection*.2616}%
\contentsline {paragraph}{Summary of changes}{616}{paragraph*.2617}%
\contentsline {paragraph}{Changes in 8.14.0}{618}{paragraph*.2618}%
\contentsline {subparagraph}{Kernel}{618}{subparagraph*.2632}%
\contentsline {subparagraph}{Specification language, type inference}{619}{subparagraph*.2634}%
\contentsline {subparagraph}{Notations}{619}{subparagraph*.2636}%
\contentsline {subparagraph}{Tactics}{620}{subparagraph*.2638}%
\contentsline {subparagraph}{Tactic language}{622}{subparagraph*.2640}%
\contentsline {subparagraph}{SSReflect}{623}{subparagraph*.2642}%
\contentsline {subparagraph}{Commands and options}{623}{subparagraph*.2643}%
\contentsline {subparagraph}{Command\sphinxhyphen {}line tools}{624}{subparagraph*.2644}%
\contentsline {subparagraph}{Native Compilation}{625}{subparagraph*.2645}%
\contentsline {subparagraph}{CoqIDE}{625}{subparagraph*.2647}%
\contentsline {subparagraph}{Standard library}{625}{subparagraph*.2649}%
\contentsline {subparagraph}{Infrastructure and dependencies}{628}{subparagraph*.2651}%
\contentsline {subparagraph}{Miscellaneous}{628}{subparagraph*.2653}%
\contentsline {paragraph}{Changes in 8.14.1}{628}{paragraph*.2654}%
\contentsline {subparagraph}{Kernel}{628}{subparagraph*.2655}%
\contentsline {subparagraph}{Specification language, type inference}{629}{subparagraph*.2656}%
\contentsline {subparagraph}{Tactics}{629}{subparagraph*.2657}%
\contentsline {subparagraph}{Commands and options}{629}{subparagraph*.2658}%
\contentsline {subsubsection}{Version 8.13}{629}{subsubsection*.2659}%
\contentsline {paragraph}{Summary of changes}{629}{paragraph*.2660}%
\contentsline {paragraph}{Changes in 8.13+beta1}{631}{paragraph*.2661}%
\contentsline {subparagraph}{Kernel}{631}{subparagraph*.2673}%
\contentsline {subparagraph}{Specification language, type inference}{632}{subparagraph*.2676}%
\contentsline {subparagraph}{Notations}{633}{subparagraph*.2681}%
\contentsline {subparagraph}{Tactics}{635}{subparagraph*.2682}%
\contentsline {subparagraph}{Tactic language}{636}{subparagraph*.2683}%
\contentsline {subparagraph}{SSReflect}{636}{subparagraph*.2684}%
\contentsline {subparagraph}{Commands and options}{636}{subparagraph*.2685}%
\contentsline {subparagraph}{Tools}{637}{subparagraph*.2687}%
\contentsline {subparagraph}{CoqIDE}{637}{subparagraph*.2688}%
\contentsline {subparagraph}{Standard library}{638}{subparagraph*.2689}%
\contentsline {subparagraph}{Infrastructure and dependencies}{639}{subparagraph*.2690}%
\contentsline {paragraph}{Changes in 8.13.0}{639}{paragraph*.2691}%
\contentsline {subparagraph}{Commands and options}{639}{subparagraph*.2692}%
\contentsline {paragraph}{Changes in 8.13.1}{639}{paragraph*.2693}%
\contentsline {subparagraph}{Kernel}{639}{subparagraph*.2694}%
\contentsline {subparagraph}{CoqIDE}{639}{subparagraph*.2695}%
\contentsline {paragraph}{Changes in 8.13.2}{639}{paragraph*.2696}%
\contentsline {subparagraph}{Kernel}{639}{subparagraph*.2697}%
\contentsline {subparagraph}{Tactic language}{640}{subparagraph*.2698}%
\contentsline {subsubsection}{Version 8.12}{640}{subsubsection*.2699}%
\contentsline {paragraph}{Summary of changes}{640}{paragraph*.2700}%
\contentsline {paragraph}{Changes in 8.12+beta1}{641}{paragraph*.2701}%
\contentsline {subparagraph}{Kernel}{642}{subparagraph*.2717}%
\contentsline {subparagraph}{Specification language, type inference}{642}{subparagraph*.2718}%
\contentsline {subparagraph}{Notations}{643}{subparagraph*.2722}%
\contentsline {subparagraph}{Tactics}{644}{subparagraph*.2723}%
\contentsline {subparagraph}{Tactic language}{646}{subparagraph*.2724}%
\contentsline {subparagraph}{SSReflect}{647}{subparagraph*.2725}%
\contentsline {subparagraph}{Flags, options and attributes}{647}{subparagraph*.2727}%
\contentsline {subparagraph}{Commands}{648}{subparagraph*.2728}%
\contentsline {subparagraph}{Tools}{649}{subparagraph*.2731}%
\contentsline {subparagraph}{CoqIDE}{651}{subparagraph*.2732}%
\contentsline {subparagraph}{Standard library}{651}{subparagraph*.2733}%
\contentsline {subparagraph}{Reals library}{654}{subparagraph*.2734}%
\contentsline {subparagraph}{Extraction}{655}{subparagraph*.2735}%
\contentsline {subparagraph}{Reference manual}{655}{subparagraph*.2736}%
\contentsline {subparagraph}{Infrastructure and dependencies}{656}{subparagraph*.2737}%
\contentsline {paragraph}{Changes in 8.12.0}{656}{paragraph*.2738}%
\contentsline {paragraph}{Changes in 8.12.1}{657}{paragraph*.2739}%
\contentsline {paragraph}{Changes in 8.12.2}{659}{paragraph*.2740}%
\contentsline {subsubsection}{Version 8.11}{659}{subsubsection*.2741}%
\contentsline {paragraph}{Summary of changes}{659}{paragraph*.2742}%
\contentsline {paragraph}{Changes in 8.11+beta1}{661}{paragraph*.2743}%
\contentsline {paragraph}{Changes in 8.11.0}{666}{paragraph*.2754}%
\contentsline {paragraph}{Changes in 8.11.1}{668}{paragraph*.2755}%
\contentsline {paragraph}{Changes in 8.11.2}{669}{paragraph*.2756}%
\contentsline {subsubsection}{Version 8.10}{669}{subsubsection*.2757}%
\contentsline {paragraph}{Summary of changes}{669}{paragraph*.2758}%
\contentsline {paragraph}{Other changes in 8.10+beta1}{672}{paragraph*.2759}%
\contentsline {paragraph}{Changes in 8.10+beta2}{678}{paragraph*.2760}%
\contentsline {paragraph}{Changes in 8.10+beta3}{678}{paragraph*.2761}%
\contentsline {paragraph}{Changes in 8.10.0}{679}{paragraph*.2762}%
\contentsline {paragraph}{Changes in 8.10.1}{679}{paragraph*.2763}%
\contentsline {paragraph}{Changes in 8.10.2}{680}{paragraph*.2764}%
\contentsline {subsubsection}{Version 8.9}{681}{subsubsection*.2765}%
\contentsline {paragraph}{Summary of changes}{681}{paragraph*.2766}%
\contentsline {paragraph}{Details of changes in 8.9+beta1}{683}{paragraph*.2767}%
\contentsline {paragraph}{Changes in 8.8.0}{685}{paragraph*.2768}%
\contentsline {paragraph}{Changes in 8.8.1}{686}{paragraph*.2769}%
\contentsline {subsubsection}{Version 8.8}{686}{subsubsection*.2770}%
\contentsline {paragraph}{Summary of changes}{686}{paragraph*.2771}%
\contentsline {paragraph}{Details of changes in 8.8+beta1}{687}{paragraph*.2772}%
\contentsline {paragraph}{Details of changes in 8.8.0}{690}{paragraph*.2773}%
\contentsline {paragraph}{Details of changes in 8.8.1}{690}{paragraph*.2774}%
\contentsline {paragraph}{Details of changes in 8.8.2}{691}{paragraph*.2775}%
\contentsline {subsubsection}{Version 8.7}{691}{subsubsection*.2776}%
\contentsline {paragraph}{Summary of changes}{691}{paragraph*.2777}%
\contentsline {paragraph}{Potential compatibility issues}{693}{paragraph*.2778}%
\contentsline {paragraph}{Details of changes in 8.7+beta1}{693}{paragraph*.2779}%
\contentsline {paragraph}{Details of changes in 8.7+beta2}{695}{paragraph*.2780}%
\contentsline {paragraph}{Details of changes in 8.7.0}{696}{paragraph*.2781}%
\contentsline {paragraph}{Details of changes in 8.7.1}{696}{paragraph*.2782}%
\contentsline {paragraph}{Details of changes in 8.7.2}{696}{paragraph*.2783}%
\contentsline {subsubsection}{Version 8.6}{696}{subsubsection*.2784}%
\contentsline {paragraph}{Summary of changes}{696}{paragraph*.2785}%
\contentsline {paragraph}{Potential sources of incompatibilities}{698}{paragraph*.2786}%
\contentsline {paragraph}{Details of changes in 8.6beta1}{698}{paragraph*.2787}%
\contentsline {paragraph}{Details of changes in 8.6}{700}{paragraph*.2788}%
\contentsline {paragraph}{Details of changes in 8.6.1}{700}{paragraph*.2789}%
\contentsline {subsubsection}{Version 8.5}{702}{subsubsection*.2790}%
\contentsline {paragraph}{Summary of changes}{702}{paragraph*.2791}%
\contentsline {paragraph}{Potential sources of incompatibilities}{704}{paragraph*.2792}%
\contentsline {paragraph}{Details of changes in 8.5beta1}{705}{paragraph*.2793}%
\contentsline {paragraph}{Details of changes in 8.5beta2}{712}{paragraph*.2794}%
\contentsline {paragraph}{Details of changes in 8.5beta3}{712}{paragraph*.2795}%
\contentsline {paragraph}{Details of changes in 8.5}{714}{paragraph*.2796}%
\contentsline {paragraph}{Details of changes in 8.5pl1}{714}{paragraph*.2797}%
\contentsline {paragraph}{Details of changes in 8.5pl2}{716}{paragraph*.2798}%
\contentsline {paragraph}{Details of changes in 8.5pl3}{717}{paragraph*.2799}%
\contentsline {subsubsection}{Version 8.4}{718}{subsubsection*.2800}%
\contentsline {paragraph}{Summary of changes}{718}{paragraph*.2801}%
\contentsline {paragraph}{Potential sources of incompatibilities}{720}{paragraph*.2802}%
\contentsline {paragraph}{Details of changes in 8.4beta}{721}{paragraph*.2803}%
\contentsline {paragraph}{Details of changes in 8.4beta2}{725}{paragraph*.2804}%
\contentsline {paragraph}{Details of changes in 8.4}{726}{paragraph*.2805}%
\contentsline {subsubsection}{Version 8.3}{726}{subsubsection*.2806}%
\contentsline {paragraph}{Summary of changes}{726}{paragraph*.2807}%
\contentsline {paragraph}{Details of changes}{727}{paragraph*.2808}%
\contentsline {subsubsection}{Version 8.2}{733}{subsubsection*.2809}%
\contentsline {paragraph}{Summary of changes}{733}{paragraph*.2810}%
\contentsline {paragraph}{Details of changes}{734}{paragraph*.2811}%
\contentsline {subsubsection}{Version 8.1}{742}{subsubsection*.2812}%
\contentsline {paragraph}{Summary of changes}{742}{paragraph*.2813}%
\contentsline {paragraph}{Details of changes in 8.1beta}{743}{paragraph*.2814}%
\contentsline {paragraph}{Details of changes in 8.1gamma}{746}{paragraph*.2815}%
\contentsline {paragraph}{Details of changes in 8.1}{747}{paragraph*.2816}%
\contentsline {subsubsection}{Version 8.0}{748}{subsubsection*.2817}%
\contentsline {paragraph}{Summary of changes}{748}{paragraph*.2818}%
\contentsline {paragraph}{Details of changes in 8.0beta old syntax}{749}{paragraph*.2819}%
\contentsline {paragraph}{Details of changes in 8.0beta new syntax}{752}{paragraph*.2820}%
\contentsline {paragraph}{Details of changes in 8.0}{753}{paragraph*.2821}%
\contentsline {chapter}{Bibliography}{755}{chapter*.2823}%
\contentsline {chapter}{Glossary}{759}{section*.2824}%
\contentsline {chapter}{Command Index}{761}{section*.2825}%
\contentsline {chapter}{Tactic Index}{765}{section*.2826}%
\contentsline {chapter}{Flags, options and Tables Index}{769}{section*.2827}%
\contentsline {chapter}{Gallina Index}{771}{section*.2828}%
\contentsline {chapter}{Errors and Warnings Index}{772}{section*.2829}%
\contentsline {chapter}{Attribute Index}{778}{section*.2830}%
\contentsline {chapter}{Index}{779}{section*.2831}%
