\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*.161}%
\contentsline {subsection}{\numberline {2.1.5}Conversion rules}{16}{subsection.2.1.5}%
\contentsline {subsubsection}{α\sphinxhyphen {}conversion}{17}{subsubsection*.174}%
\contentsline {subsubsection}{β\sphinxhyphen {}reduction}{17}{subsubsection*.176}%
\contentsline {subsubsection}{ι\sphinxhyphen {}reduction}{17}{subsubsection*.177}%
\contentsline {subsubsection}{δ\sphinxhyphen {}reduction}{17}{subsubsection*.178}%
\contentsline {subsubsection}{ζ\sphinxhyphen {}reduction}{17}{subsubsection*.181}%
\contentsline {subsubsection}{η\sphinxhyphen {}expansion}{18}{subsubsection*.183}%
\contentsline {subsubsection}{Proof Irrelevance}{18}{subsubsection*.184}%
\contentsline {subsubsection}{Convertibility}{18}{subsubsection*.185}%
\contentsline {subsection}{\numberline {2.1.6}Typing rules}{19}{subsection.2.1.6}%
\contentsline {subsubsection}{The terms}{19}{subsubsection*.187}%
\contentsline {subsubsection}{Typing rules}{20}{subsubsection*.191}%
\contentsline {subsubsection}{Subtyping rules}{23}{subsubsection*.213}%
\contentsline {subsubsection}{Admissible rules for global environments}{24}{subsubsection*.216}%
\contentsline {subsubsection}{The Calculus of Inductive Constructions with impredicative Set}{25}{subsubsection*.225}%
\contentsline {subsection}{\numberline {2.1.7}Variants and the \sphinxstyleliteralintitle {\sphinxupquote {match}} construct}{25}{subsection.2.1.7}%
\contentsline {subsubsection}{Variants}{25}{subsubsection*.229}%
\contentsline {paragraph}{Private (matching) inductive types}{26}{paragraph*.234}%
\contentsline {subsubsection}{Definition by cases: match}{26}{subsubsection*.237}%
\contentsline {subsection}{\numberline {2.1.8}Record types}{29}{subsection.2.1.8}%
\contentsline {subsubsection}{Primitive Projections}{32}{subsubsection*.277}%
\contentsline {paragraph}{Primitive Record Types}{33}{paragraph*.280}%
\contentsline {paragraph}{Reduction}{33}{paragraph*.281}%
\contentsline {paragraph}{Compatibility Projections and \sphinxstyleliteralintitle {\sphinxupquote {match}}}{33}{paragraph*.282}%
\contentsline {subsection}{\numberline {2.1.9}Inductive types and recursive functions}{33}{subsection.2.1.9}%
\contentsline {subsubsection}{Inductive types}{33}{subsubsection*.283}%
\contentsline {paragraph}{Simple inductive types}{35}{paragraph*.293}%
\contentsline {paragraph}{Simple annotated inductive types}{35}{paragraph*.294}%
\contentsline {paragraph}{Parameterized inductive types}{36}{paragraph*.295}%
\contentsline {paragraph}{Mutually defined inductive types}{38}{paragraph*.297}%
\contentsline {subsubsection}{Recursive functions: fix}{39}{subsubsection*.298}%
\contentsline {subsubsection}{Top\sphinxhyphen {}level recursive functions}{40}{subsubsection*.305}%
\contentsline {subsubsection}{Theory of inductive definitions}{42}{subsubsection*.310}%
\contentsline {paragraph}{Types of inductive objects}{43}{paragraph*.311}%
\contentsline {paragraph}{Well\sphinxhyphen {}formed inductive definitions}{44}{paragraph*.314}%
\contentsline {subparagraph}{Arity of a given sort}{44}{subparagraph*.315}%
\contentsline {subparagraph}{Arity}{44}{subparagraph*.316}%
\contentsline {subparagraph}{Type of constructor}{44}{subparagraph*.317}%
\contentsline {subparagraph}{Positivity Condition}{45}{subparagraph*.318}%
\contentsline {subparagraph}{Strict positivity}{45}{subparagraph*.319}%
\contentsline {subparagraph}{Nested Positivity}{45}{subparagraph*.320}%
\contentsline {subparagraph}{Correctness rules}{46}{subparagraph*.321}%
\contentsline {subparagraph}{Template polymorphism}{49}{subparagraph*.323}%
\contentsline {paragraph}{Destructors}{51}{paragraph*.331}%
\contentsline {subparagraph}{The match ... with ... end construction}{52}{subparagraph*.332}%
\contentsline {paragraph}{Fixpoint definitions}{56}{paragraph*.346}%
\contentsline {subparagraph}{Typing rule}{56}{subparagraph*.347}%
\contentsline {subparagraph}{Reduction rule}{59}{subparagraph*.349}%
\contentsline {subsection}{\numberline {2.1.10}Co\sphinxhyphen {}inductive types and co\sphinxhyphen {}recursive functions}{59}{subsection.2.1.10}%
\contentsline {subsubsection}{Co\sphinxhyphen {}inductive types}{59}{subsubsection*.351}%
\contentsline {paragraph}{Caveat}{60}{paragraph*.353}%
\contentsline {subsubsection}{Co\sphinxhyphen {}recursive functions: cofix}{61}{subsubsection*.354}%
\contentsline {subsubsection}{Top\sphinxhyphen {}level definitions of co\sphinxhyphen {}recursive functions}{61}{subsubsection*.359}%
\contentsline {subsection}{\numberline {2.1.11}Section mechanism}{62}{subsection.2.1.11}%
\contentsline {subsection}{\numberline {2.1.12}The Module System}{64}{subsection.2.1.12}%
\contentsline {subsubsection}{Modules and module types}{64}{subsubsection*.372}%
\contentsline {subsubsection}{Using modules}{64}{subsubsection*.373}%
\contentsline {paragraph}{Examples}{69}{paragraph*.408}%
\contentsline {subsubsection}{Typing Modules}{71}{subsubsection*.411}%
\contentsline {subsubsection}{Libraries and qualified names}{75}{subsubsection*.453}%
\contentsline {paragraph}{Names of libraries}{75}{paragraph*.454}%
\contentsline {paragraph}{Qualified identifiers}{76}{paragraph*.455}%
\contentsline {paragraph}{Libraries and filesystem}{77}{paragraph*.460}%
\contentsline {subsubsection}{Controlling the scope of commands with locality attributes}{78}{subsubsection*.461}%
\contentsline {subsection}{\numberline {2.1.13}Primitive objects}{79}{subsection.2.1.13}%
\contentsline {subsubsection}{Primitive Integers}{79}{subsubsection*.465}%
\contentsline {subsubsection}{Primitive Floats}{79}{subsubsection*.466}%
\contentsline {subsubsection}{Primitive Arrays}{80}{subsubsection*.467}%
\contentsline {subsection}{\numberline {2.1.14}Polymorphic Universes}{81}{subsection.2.1.14}%
\contentsline {subsubsection}{General Presentation}{81}{subsubsection*.468}%
\contentsline {subsubsection}{Polymorphic, Monomorphic}{83}{subsubsection*.469}%
\contentsline {subsubsection}{Cumulative, NonCumulative}{83}{subsubsection*.475}%
\contentsline {paragraph}{Specifying cumulativity}{85}{paragraph*.482}%
\contentsline {paragraph}{An example of a proof using cumulativity}{85}{paragraph*.483}%
\contentsline {paragraph}{Cumulativity Weak Constraints}{86}{paragraph*.484}%
\contentsline {subsubsection}{Global and local universes}{86}{subsubsection*.486}%
\contentsline {subsubsection}{Conversion and unification}{86}{subsubsection*.487}%
\contentsline {subsubsection}{Minimization}{86}{subsubsection*.488}%
\contentsline {subsubsection}{Explicit Universes}{87}{subsubsection*.490}%
\contentsline {subsubsection}{Printing universes}{88}{subsubsection*.509}%
\contentsline {paragraph}{Polymorphic definitions}{88}{paragraph*.512}%
\contentsline {subsubsection}{Universe polymorphism and sections}{91}{subsubsection*.515}%
\contentsline {subsection}{\numberline {2.1.15}SProp (proof irrelevant propositions)}{92}{subsection.2.1.15}%
\contentsline {subsubsection}{Basic constructs}{92}{subsubsection*.518}%
\contentsline {subsubsection}{Encodings for strict propositions}{94}{subsubsection*.519}%
\contentsline {subsubsection}{Definitional UIP}{95}{subsubsection*.520}%
\contentsline {paragraph}{Non Termination with UIP}{95}{paragraph*.522}%
\contentsline {subsubsection}{Issues with non\sphinxhyphen {}cumulativity}{96}{subsubsection*.523}%
\contentsline {section}{\numberline {2.2}Language extensions}{97}{section.2.2}%
\contentsline {subsection}{\numberline {2.2.1}Existential variables}{97}{subsection.2.2.1}%
\contentsline {subsubsection}{Inferable subterms}{98}{subsubsection*.530}%
\contentsline {subsubsection}{Explicit displaying of existential instances for pretty\sphinxhyphen {}printing}{98}{subsubsection*.531}%
\contentsline {subsubsection}{Solving existential variables using tactics}{99}{subsubsection*.533}%
\contentsline {subsection}{\numberline {2.2.2}Implicit arguments}{99}{subsection.2.2.2}%
\contentsline {subsubsection}{The different kinds of implicit arguments}{99}{subsubsection*.534}%
\contentsline {paragraph}{Implicit arguments inferable from the knowledge of other arguments of a function}{99}{paragraph*.535}%
\contentsline {paragraph}{Implicit arguments inferable by resolution}{100}{paragraph*.536}%
\contentsline {subsubsection}{Maximal and non\sphinxhyphen {}maximal insertion of implicit arguments}{101}{subsubsection*.537}%
\contentsline {paragraph}{Trailing Implicit Arguments}{101}{paragraph*.538}%
\contentsline {subsubsection}{Casual use of implicit arguments}{101}{subsubsection*.540}%
\contentsline {subsubsection}{Declaration of implicit arguments}{101}{subsubsection*.542}%
\contentsline {paragraph}{Implicit Argument Binders}{101}{paragraph*.543}%
\contentsline {paragraph}{Mode for automatic declaration of implicit arguments}{104}{paragraph*.548}%
\contentsline {paragraph}{Controlling strict implicit arguments}{104}{paragraph*.550}%
\contentsline {paragraph}{Controlling contextual implicit arguments}{104}{paragraph*.553}%
\contentsline {paragraph}{Controlling reversible\sphinxhyphen {}pattern implicit arguments}{104}{paragraph*.555}%
\contentsline {paragraph}{Controlling the insertion of implicit arguments not followed by explicit arguments}{104}{paragraph*.557}%
\contentsline {paragraph}{Combining manual declaration and automatic declaration}{104}{paragraph*.559}%
\contentsline {subsubsection}{Explicit applications}{105}{subsubsection*.560}%
\contentsline {subsubsection}{Displaying implicit arguments}{106}{subsubsection*.561}%
\contentsline {subsubsection}{Displaying implicit arguments when pretty\sphinxhyphen {}printing}{106}{subsubsection*.563}%
\contentsline {subsubsection}{Interaction with subtyping}{106}{subsubsection*.566}%
\contentsline {subsubsection}{Deactivation of implicit arguments for parsing}{107}{subsubsection*.567}%
\contentsline {subsubsection}{Implicit types of variables}{108}{subsubsection*.571}%
\contentsline {subsubsection}{Implicit generalization}{109}{subsubsection*.579}%
\contentsline {subsection}{\numberline {2.2.3}Extended pattern matching}{111}{subsection.2.2.3}%
\contentsline {subsubsection}{Variants and extensions of \sphinxstyleliteralintitle {\sphinxupquote {match}}}{111}{subsubsection*.587}%
\contentsline {paragraph}{Multiple and nested pattern matching}{111}{paragraph*.588}%
\contentsline {paragraph}{Pattern\sphinxhyphen {}matching on boolean values: the if expression}{111}{paragraph*.589}%
\contentsline {paragraph}{Irrefutable patterns: the destructuring let variants}{112}{paragraph*.592}%
\contentsline {subparagraph}{First destructuring let syntax}{112}{subparagraph*.595}%
\contentsline {subparagraph}{Second destructuring let syntax}{113}{subparagraph*.596}%
\contentsline {paragraph}{Controlling pretty\sphinxhyphen {}printing of match expressions}{113}{paragraph*.597}%
\contentsline {subparagraph}{Printing nested patterns}{113}{subparagraph*.598}%
\contentsline {subparagraph}{Factorization of clauses with same right\sphinxhyphen {}hand side}{113}{subparagraph*.600}%
\contentsline {subparagraph}{Use of a default clause}{114}{subparagraph*.602}%
\contentsline {subparagraph}{Printing of wildcard patterns}{114}{subparagraph*.604}%
\contentsline {subparagraph}{Printing of the elimination predicate}{114}{subparagraph*.606}%
\contentsline {subparagraph}{Printing matching on irrefutable patterns}{114}{subparagraph*.608}%
\contentsline {subparagraph}{Printing matching on booleans}{114}{subparagraph*.610}%
\contentsline {paragraph}{Conventions about unused pattern\sphinxhyphen {}matching variables}{115}{paragraph*.612}%
\contentsline {subsubsection}{Patterns}{116}{subsubsection*.614}%
\contentsline {subsubsection}{Multiple patterns}{116}{subsubsection*.615}%
\contentsline {subsubsection}{Aliasing subpatterns}{117}{subsubsection*.616}%
\contentsline {subsubsection}{Nested patterns}{117}{subsubsection*.617}%
\contentsline {subsubsection}{Disjunctive patterns}{118}{subsubsection*.618}%
\contentsline {subsubsection}{About patterns of parametric types}{119}{subsubsection*.619}%
\contentsline {paragraph}{Parameters in patterns}{119}{paragraph*.620}%
\contentsline {subsubsection}{Implicit arguments in patterns}{120}{subsubsection*.622}%
\contentsline {subsubsection}{Matching objects of dependent types}{120}{subsubsection*.623}%
\contentsline {subsubsection}{Understanding dependencies in patterns}{120}{subsubsection*.624}%
\contentsline {subsubsection}{When the elimination predicate must be provided}{121}{subsubsection*.625}%
\contentsline {paragraph}{Dependent pattern matching}{121}{paragraph*.626}%
\contentsline {paragraph}{Multiple dependent pattern matching}{121}{paragraph*.627}%
\contentsline {paragraph}{Patterns in \sphinxstyleliteralintitle {\sphinxupquote {in}}}{122}{paragraph*.628}%
\contentsline {subsubsection}{Using pattern matching to write proofs}{122}{subsubsection*.629}%
\contentsline {subsubsection}{Pattern\sphinxhyphen {}matching on inductive objects involving local definitions}{123}{subsubsection*.630}%
\contentsline {subsubsection}{Pattern\sphinxhyphen {}matching and coercions}{123}{subsubsection*.631}%
\contentsline {subsubsection}{When does the expansion strategy fail?}{124}{subsubsection*.632}%
\contentsline {subsection}{\numberline {2.2.4}Syntax extensions and notation scopes}{124}{subsection.2.2.4}%
\contentsline {subsubsection}{Notations}{125}{subsubsection*.640}%
\contentsline {paragraph}{Basic notations}{125}{paragraph*.641}%
\contentsline {paragraph}{Precedences and associativity}{125}{paragraph*.643}%
\contentsline {paragraph}{Complex notations}{126}{paragraph*.644}%
\contentsline {paragraph}{Simple factorization rules}{127}{paragraph*.645}%
\contentsline {paragraph}{Use of notations for printing}{127}{paragraph*.646}%
\contentsline {paragraph}{The Infix command}{129}{paragraph*.647}%
\contentsline {paragraph}{Reserving notations}{129}{paragraph*.649}%
\contentsline {paragraph}{Simultaneous definition of terms and notations}{130}{paragraph*.652}%
\contentsline {paragraph}{Displaying information about notations}{130}{paragraph*.657}%
\contentsline {paragraph}{Locating notations}{132}{paragraph*.661}%
\contentsline {paragraph}{Inheritance of the properties of arguments of constants bound to a notation}{133}{paragraph*.662}%
\contentsline {paragraph}{Notations and binders}{133}{paragraph*.663}%
\contentsline {subparagraph}{Binders bound in the notation and parsed as identifiers}{133}{subparagraph*.664}%
\contentsline {subparagraph}{Binders bound in the notation and parsed as patterns}{133}{subparagraph*.665}%
\contentsline {subparagraph}{Binders bound in the notation and parsed as terms}{134}{subparagraph*.666}%
\contentsline {subparagraph}{Binders bound in the notation and parsed as general binders}{135}{subparagraph*.667}%
\contentsline {subparagraph}{Binders not bound in the notation}{135}{subparagraph*.668}%
\contentsline {subparagraph}{Notations with expressions used both as binder and term}{135}{subparagraph*.669}%
\contentsline {paragraph}{Notations with recursive patterns}{136}{paragraph*.670}%
\contentsline {paragraph}{Notations with recursive patterns involving binders}{137}{paragraph*.671}%
\contentsline {paragraph}{Predefined entries}{138}{paragraph*.672}%
\contentsline {paragraph}{Custom entries}{138}{paragraph*.673}%
\contentsline {paragraph}{Syntax}{141}{paragraph*.676}%
\contentsline {subsubsection}{Notation scopes}{142}{subsubsection*.686}%
\contentsline {paragraph}{Global interpretation rules for notations}{143}{paragraph*.694}%
\contentsline {paragraph}{Local interpretation rules for notations}{143}{paragraph*.697}%
\contentsline {subparagraph}{Opening a notation scope locally}{143}{subparagraph*.698}%
\contentsline {subparagraph}{Binding types or coercion classes to a notation scope}{144}{subparagraph*.703}%
\contentsline {paragraph}{The \sphinxstyleliteralintitle {\sphinxupquote {type\_scope}} notation scope}{144}{paragraph*.705}%
\contentsline {paragraph}{The \sphinxstyleliteralintitle {\sphinxupquote {function\_scope}} notation scope}{145}{paragraph*.706}%
\contentsline {paragraph}{Notation scopes used in the standard library of Coq}{145}{paragraph*.707}%
\contentsline {paragraph}{Displaying information about scopes}{146}{paragraph*.708}%
\contentsline {subsubsection}{Abbreviations}{146}{subsubsection*.712}%
\contentsline {subsubsection}{Numbers and strings}{147}{subsubsection*.714}%
\contentsline {paragraph}{Number notations}{147}{paragraph*.717}%
\contentsline {paragraph}{String notations}{150}{paragraph*.737}%
\contentsline {subsubsection}{Tactic Notations}{155}{subsubsection*.756}%
\contentsline {subsection}{\numberline {2.2.5}Setting properties of a function's arguments}{157}{subsection.2.2.5}%
\contentsline {subsubsection}{Manual declaration of implicit arguments}{159}{subsubsection*.776}%
\contentsline {subsubsection}{Automatic declaration of implicit arguments}{160}{subsubsection*.778}%
\contentsline {subsubsection}{Renaming implicit arguments}{162}{subsubsection*.779}%
\contentsline {subsubsection}{Binding arguments to a scope}{162}{subsubsection*.780}%
\contentsline {subsubsection}{Effects of \sphinxstyleliteralintitle {\sphinxupquote {Arguments}} on unfolding}{163}{subsubsection*.781}%
\contentsline {subsubsection}{Bidirectionality hints}{164}{subsubsection*.782}%
\contentsline {subsection}{\numberline {2.2.6}Implicit Coercions}{165}{subsection.2.2.6}%
\contentsline {subsubsection}{General Presentation}{165}{subsubsection*.783}%
\contentsline {subsubsection}{Classes}{165}{subsubsection*.784}%
\contentsline {subsubsection}{Coercions}{166}{subsubsection*.787}%
\contentsline {subsubsection}{Identity Coercions}{166}{subsubsection*.788}%
\contentsline {subsubsection}{Inheritance Graph}{167}{subsubsection*.789}%
\contentsline {subsubsection}{Declaring Coercions}{167}{subsubsection*.790}%
\contentsline {subsubsection}{Displaying Available Coercions}{168}{subsubsection*.805}%
\contentsline {subsubsection}{Activating the Printing of Coercions}{168}{subsubsection*.810}%
\contentsline {subsubsection}{Classes as Records}{168}{subsubsection*.813}%
\contentsline {subsubsection}{Coercions and Sections}{169}{subsubsection*.814}%
\contentsline {subsubsection}{Coercions and Modules}{169}{subsubsection*.815}%
\contentsline {subsubsection}{Examples}{169}{subsubsection*.816}%
\contentsline {paragraph}{Coercion at function application}{169}{paragraph*.817}%
\contentsline {paragraph}{Coercion to a type}{171}{paragraph*.818}%
\contentsline {paragraph}{Coercion to a function}{172}{paragraph*.819}%
\contentsline {subsection}{\numberline {2.2.7}Typeclasses}{173}{subsection.2.2.7}%
\contentsline {subsubsection}{Class and Instance declarations}{173}{subsubsection*.820}%
\contentsline {subsubsection}{Binding classes}{174}{subsubsection*.821}%
\contentsline {subsubsection}{Parameterized Instances}{175}{subsubsection*.822}%
\contentsline {subsubsection}{Sections and contexts}{175}{subsubsection*.823}%
\contentsline {subsubsection}{Building hierarchies}{176}{subsubsection*.824}%
\contentsline {paragraph}{Superclasses}{176}{paragraph*.825}%
\contentsline {paragraph}{Substructures}{176}{paragraph*.826}%
\contentsline {subsubsection}{Summary of the commands}{177}{subsubsection*.828}%
\contentsline {paragraph}{Typeclasses Transparent, Typeclasses Opaque}{179}{paragraph*.844}%
\contentsline {paragraph}{Settings}{180}{paragraph*.847}%
\contentsline {paragraph}{Typeclasses eauto}{181}{paragraph*.859}%
\contentsline {subsection}{\numberline {2.2.8}Canonical Structures}{181}{subsection.2.2.8}%
\contentsline {subsubsection}{Declaration of canonical structures}{181}{subsubsection*.861}%
\contentsline {subsubsection}{Notation overloading}{183}{subsubsection*.866}%
\contentsline {paragraph}{Derived Canonical Structures}{185}{paragraph*.867}%
\contentsline {subsubsection}{Hierarchy of structures}{185}{subsubsection*.868}%
\contentsline {paragraph}{Compact declaration of Canonical Structures}{191}{paragraph*.869}%
\contentsline {subsection}{\numberline {2.2.9}Program}{193}{subsection.2.2.9}%
\contentsline {subsubsection}{Elaborating programs}{193}{subsubsection*.870}%
\contentsline {paragraph}{Syntactic control over equalities}{194}{paragraph*.876}%
\contentsline {paragraph}{Program Definition}{195}{paragraph*.877}%
\contentsline {paragraph}{Program Fixpoint}{195}{paragraph*.878}%
\contentsline {paragraph}{Program Lemma}{196}{paragraph*.879}%
\contentsline {subsubsection}{Solving obligations}{196}{subsubsection*.880}%
\contentsline {subsubsection}{Frequently Asked Questions}{197}{subsubsection*.892}%
\contentsline {subsection}{\numberline {2.2.10}Commands}{198}{subsection.2.2.10}%
\contentsline {subsubsection}{Displaying}{198}{subsubsection*.894}%
\contentsline {subsubsection}{Query commands}{198}{subsubsection*.905}%
\contentsline {subsubsection}{Requests to the environment}{206}{subsubsection*.931}%
\contentsline {subsubsection}{Printing flags}{207}{subsubsection*.944}%
\contentsline {subsubsection}{Loading files}{207}{subsubsection*.946}%
\contentsline {subsubsection}{Compiled files}{208}{subsubsection*.951}%
\contentsline {subsubsection}{Loadpath}{209}{subsubsection*.966}%
\contentsline {subsubsection}{Backtracking}{210}{subsubsection*.977}%
\contentsline {subsubsection}{Quitting and debugging}{210}{subsubsection*.984}%
\contentsline {subsubsection}{Controlling display}{211}{subsubsection*.994}%
\contentsline {subsubsection}{Printing constructions in full}{212}{subsubsection*.1002}%
\contentsline {subsubsection}{Controlling the reduction strategies and the conversion algorithm}{212}{subsubsection*.1004}%
\contentsline {subsubsection}{Controlling Typing Flags}{214}{subsubsection*.1018}%
\contentsline {subsubsection}{Internal registration commands}{216}{subsubsection*.1026}%
\contentsline {paragraph}{Exposing constants to OCaml libraries}{216}{paragraph*.1027}%
\contentsline {paragraph}{Inlining hints for the fast reduction machines}{216}{paragraph*.1029}%
\contentsline {paragraph}{Registering primitive operations}{216}{paragraph*.1031}%
\contentsline {chapter}{\numberline {3}Proofs}{217}{chapter.3}%
\contentsline {section}{\numberline {3.1}Basic proof writing}{217}{section.3.1}%
\contentsline {subsection}{\numberline {3.1.1}Proof mode}{217}{subsection.3.1.1}%
\contentsline {subsubsection}{Proof State}{217}{subsubsection*.1035}%
\contentsline {subsubsection}{Entering and exiting proof mode}{219}{subsubsection*.1044}%
\contentsline {paragraph}{Proof using options}{222}{paragraph*.1066}%
\contentsline {paragraph}{Name a set of section hypotheses for \sphinxstyleliteralintitle {\sphinxupquote {Proof using}}}{222}{paragraph*.1069}%
\contentsline {subsubsection}{Proof modes}{223}{subsubsection*.1073}%
\contentsline {subsubsection}{Navigation in the proof tree}{223}{subsubsection*.1075}%
\contentsline {paragraph}{Bullets}{226}{paragraph*.1089}%
\contentsline {subparagraph}{Mandatory Bullets}{230}{subparagraph*.1095}%
\contentsline {subparagraph}{Set Bullet Behavior}{230}{subparagraph*.1096}%
\contentsline {paragraph}{Modifying the order of goals}{230}{paragraph*.1098}%
\contentsline {paragraph}{Postponing the proof of some goals}{233}{paragraph*.1102}%
\contentsline {subsubsection}{Requesting information}{234}{subsubsection*.1110}%
\contentsline {subsubsection}{Showing differences between proof steps}{235}{subsubsection*.1124}%
\contentsline {paragraph}{How to enable diffs}{236}{paragraph*.1125}%
\contentsline {paragraph}{How diffs are calculated}{236}{paragraph*.1127}%
\contentsline {paragraph}{"Show Proof" differences}{237}{paragraph*.1128}%
\contentsline {subsubsection}{Controlling proof mode}{237}{subsubsection*.1129}%
\contentsline {subsubsection}{Controlling memory usage}{238}{subsubsection*.1133}%
\contentsline {subsection}{\numberline {3.1.2}Tactics}{238}{subsection.3.1.2}%
\contentsline {subsubsection}{Common elements of tactics}{239}{subsubsection*.1139}%
\contentsline {paragraph}{Reserved keywords}{239}{paragraph*.1140}%
\contentsline {paragraph}{Invocation of tactics}{239}{paragraph*.1141}%
\contentsline {paragraph}{Bindings}{239}{paragraph*.1146}%
\contentsline {paragraph}{Intro patterns}{240}{paragraph*.1151}%
\contentsline {paragraph}{Occurrence clauses}{246}{paragraph*.1180}%
\contentsline {subsubsection}{Applying theorems}{247}{subsubsection*.1196}%
\contentsline {subsubsection}{Managing the local context}{254}{subsubsection*.1245}%
\contentsline {subsubsection}{Controlling the proof flow}{261}{subsubsection*.1286}%
\contentsline {subsubsection}{Case analysis and induction}{264}{subsubsection*.1312}%
\contentsline {subsubsection}{Checking properties of terms}{280}{subsubsection*.1357}%
\contentsline {subsubsection}{Equality}{281}{subsubsection*.1372}%
\contentsline {subsubsection}{Equality and inductive sets}{282}{subsubsection*.1379}%
\contentsline {subsubsection}{Classical tactics}{283}{subsubsection*.1387}%
\contentsline {subsubsection}{Delaying solving unification constraints}{283}{subsubsection*.1390}%
\contentsline {subsubsection}{Proof maintenance}{283}{subsubsection*.1393}%
\contentsline {subsubsection}{Performance\sphinxhyphen {}oriented tactic variants}{283}{subsubsection*.1396}%
\contentsline {subsection}{\numberline {3.1.3}Reasoning with equalities}{285}{subsection.3.1.3}%
\contentsline {subsubsection}{Rewriting with Leibniz and setoid equality}{285}{subsubsection*.1407}%
\contentsline {subsubsection}{Rewriting with definitional equality}{289}{subsubsection*.1438}%
\contentsline {subsubsection}{Performing computations}{291}{subsubsection*.1445}%
\contentsline {paragraph}{Conversion tactics applied to hypotheses}{300}{paragraph*.1482}%
\contentsline {subsection}{\numberline {3.1.4}The SSReflect proof language}{300}{subsection.3.1.4}%
\contentsline {subsubsection}{Introduction}{300}{subsubsection*.1483}%
\contentsline {paragraph}{Acknowledgments}{301}{paragraph*.1484}%
\contentsline {subsubsection}{Usage}{301}{subsubsection*.1485}%
\contentsline {paragraph}{Getting started}{301}{paragraph*.1486}%
\contentsline {paragraph}{Compatibility issues}{301}{paragraph*.1487}%
\contentsline {subsubsection}{Gallina extensions}{302}{subsubsection*.1490}%
\contentsline {paragraph}{Pattern assignment}{302}{paragraph*.1491}%
\contentsline {paragraph}{Pattern conditional}{303}{paragraph*.1496}%
\contentsline {paragraph}{Parametric polymorphism}{304}{paragraph*.1503}%
\contentsline {paragraph}{Anonymous arguments}{305}{paragraph*.1505}%
\contentsline {paragraph}{Wildcards}{306}{paragraph*.1508}%
\contentsline {paragraph}{Definitions}{306}{paragraph*.1509}%
\contentsline {paragraph}{Abbreviations}{307}{paragraph*.1511}%
\contentsline {subparagraph}{Matching}{308}{subparagraph*.1515}%
\contentsline {subparagraph}{Occurrence selection}{310}{subparagraph*.1516}%
\contentsline {paragraph}{Basic localization}{312}{paragraph*.1517}%
\contentsline {subsubsection}{Basic tactics}{313}{subsubsection*.1518}%
\contentsline {paragraph}{Bookkeeping}{314}{paragraph*.1519}%
\contentsline {paragraph}{The defective tactics}{317}{paragraph*.1520}%
\contentsline {subparagraph}{The move tactic.}{317}{subparagraph*.1521}%
\contentsline {subparagraph}{The case tactic}{317}{subparagraph*.1523}%
\contentsline {subparagraph}{The elim tactic}{318}{subparagraph*.1526}%
\contentsline {subparagraph}{The apply tactic}{318}{subparagraph*.1528}%
\contentsline {paragraph}{Discharge}{319}{paragraph*.1530}%
\contentsline {subparagraph}{Clear rules}{321}{subparagraph*.1536}%
\contentsline {subparagraph}{Matching for apply and exact}{321}{subparagraph*.1537}%
\contentsline {subparagraph}{The abstract tactic}{322}{subparagraph*.1538}%
\contentsline {paragraph}{Introduction in the context}{322}{paragraph*.1540}%
\contentsline {subparagraph}{Simplification items}{323}{subparagraph*.1552}%
\contentsline {subparagraph}{Views}{323}{subparagraph*.1553}%
\contentsline {subparagraph}{Intro patterns}{323}{subparagraph*.1554}%
\contentsline {subparagraph}{Clear switch}{325}{subparagraph*.1555}%
\contentsline {subparagraph}{Branching and destructuring}{325}{subparagraph*.1556}%
\contentsline {subparagraph}{Block introduction}{326}{subparagraph*.1557}%
\contentsline {paragraph}{Generation of equations}{326}{paragraph*.1558}%
\contentsline {paragraph}{Type families}{328}{paragraph*.1559}%
\contentsline {subsubsection}{Control flow}{331}{subsubsection*.1560}%
\contentsline {paragraph}{Indentation and bullets}{331}{paragraph*.1561}%
\contentsline {paragraph}{Terminators}{331}{paragraph*.1562}%
\contentsline {paragraph}{Selectors}{333}{paragraph*.1565}%
\contentsline {paragraph}{Iteration}{334}{paragraph*.1571}%
\contentsline {paragraph}{Localization}{335}{paragraph*.1575}%
\contentsline {paragraph}{Structure}{336}{paragraph*.1577}%
\contentsline {subparagraph}{The have tactic.}{336}{subparagraph*.1578}%
\contentsline {subparagraph}{Generating let in context entries with have}{340}{subparagraph*.1581}%
\contentsline {subparagraph}{The have tactic and typeclass resolution}{342}{subparagraph*.1582}%
\contentsline {subparagraph}{Variants: the suff and wlog tactics}{343}{subparagraph*.1584}%
\contentsline {subparagraph}{Advanced generalization}{345}{subparagraph*.1587}%
\contentsline {subsubsection}{Rewriting}{347}{subsubsection*.1588}%
\contentsline {paragraph}{An extended rewrite tactic}{347}{paragraph*.1589}%
\contentsline {paragraph}{Remarks and examples}{349}{paragraph*.1600}%
\contentsline {subparagraph}{Rewrite redex selection}{349}{subparagraph*.1601}%
\contentsline {subparagraph}{Chained rewrite steps}{350}{subparagraph*.1602}%
\contentsline {subparagraph}{Explicit redex switches are matched first}{351}{subparagraph*.1603}%
\contentsline {subparagraph}{Occurrence switches and redex switches}{351}{subparagraph*.1604}%
\contentsline {subparagraph}{Occurrence selection and repetition}{352}{subparagraph*.1605}%
\contentsline {subparagraph}{Multi\sphinxhyphen {}rule rewriting}{353}{subparagraph*.1606}%
\contentsline {subparagraph}{Wildcards vs abstractions}{356}{subparagraph*.1607}%
\contentsline {subparagraph}{When SSReflect rewrite fails on standard Coq licit rewrite}{357}{subparagraph*.1608}%
\contentsline {subparagraph}{Existential metavariables and rewriting}{358}{subparagraph*.1609}%
\contentsline {paragraph}{Rewriting under binders}{359}{paragraph*.1610}%
\contentsline {subparagraph}{The under tactic}{361}{subparagraph*.1611}%
\contentsline {subparagraph}{Interactive mode}{361}{subparagraph*.1614}%
\contentsline {subparagraph}{The over tactic}{362}{subparagraph*.1615}%
\contentsline {subparagraph}{One\sphinxhyphen {}liner mode}{363}{subparagraph*.1617}%
\contentsline {paragraph}{Locking, unlocking}{364}{paragraph*.1618}%
\contentsline {paragraph}{Congruence}{366}{paragraph*.1620}%
\contentsline {subsubsection}{Contextual patterns}{369}{subsubsection*.1622}%
\contentsline {paragraph}{Syntax}{369}{paragraph*.1623}%
\contentsline {paragraph}{Matching contextual patterns}{370}{paragraph*.1624}%
\contentsline {paragraph}{Examples}{370}{paragraph*.1625}%
\contentsline {subparagraph}{Contextual pattern in set and the : tactical}{370}{subparagraph*.1626}%
\contentsline {subparagraph}{Contextual patterns in rewrite}{371}{subparagraph*.1627}%
\contentsline {paragraph}{Patterns for recurrent contexts}{373}{paragraph*.1628}%
\contentsline {subsubsection}{Views and reflection}{373}{subsubsection*.1629}%
\contentsline {paragraph}{Interpreting eliminations}{373}{paragraph*.1630}%
\contentsline {paragraph}{Interpreting assumptions}{377}{paragraph*.1631}%
\contentsline {subparagraph}{Specializing assumptions}{380}{subparagraph*.1632}%
\contentsline {paragraph}{Interpreting goals}{380}{paragraph*.1633}%
\contentsline {paragraph}{Boolean reflection}{381}{paragraph*.1634}%
\contentsline {paragraph}{The reflect predicate}{382}{paragraph*.1635}%
\contentsline {paragraph}{General mechanism for interpreting goals and assumptions}{384}{paragraph*.1636}%
\contentsline {subparagraph}{Specializing assumptions}{384}{subparagraph*.1637}%
\contentsline {subparagraph}{Interpreting assumptions}{384}{subparagraph*.1638}%
\contentsline {paragraph}{Interpreting equivalences}{386}{paragraph*.1639}%
\contentsline {paragraph}{Declaring new Hint Views}{387}{paragraph*.1640}%
\contentsline {paragraph}{Multiple views}{388}{paragraph*.1643}%
\contentsline {subsubsection}{SSReflect searching tool}{389}{subsubsection*.1644}%
\contentsline {subsubsection}{Synopsis and Index}{390}{subsubsection*.1646}%
\contentsline {paragraph}{Parameters}{390}{paragraph*.1647}%
\contentsline {paragraph}{Items and switches}{391}{paragraph*.1656}%
\contentsline {paragraph}{Tactics}{392}{paragraph*.1693}%
\contentsline {paragraph}{Tacticals}{394}{paragraph*.1708}%
\contentsline {paragraph}{Commands}{394}{paragraph*.1723}%
\contentsline {paragraph}{Settings}{395}{paragraph*.1727}%
\contentsline {subsection}{\numberline {3.1.5}Detailed examples of tactics}{395}{subsection.3.1.5}%
\contentsline {subsubsection}{dependent induction}{395}{subsubsection*.1730}%
\contentsline {paragraph}{A larger example}{397}{paragraph*.1731}%
\contentsline {subsubsection}{autorewrite}{400}{subsubsection*.1732}%
\contentsline {subsection}{\numberline {3.1.6}Proof schemes}{402}{subsection.3.1.6}%
\contentsline {subsubsection}{Generation of induction principles with \sphinxstyleliteralintitle {\sphinxupquote {Scheme}}}{402}{subsubsection*.1733}%
\contentsline {paragraph}{Automatic declaration of schemes}{404}{paragraph*.1739}%
\contentsline {paragraph}{Combined Scheme}{404}{paragraph*.1746}%
\contentsline {subsubsection}{Generation of inversion principles with \sphinxstyleliteralintitle {\sphinxupquote {Derive}} \sphinxstyleliteralintitle {\sphinxupquote {Inversion}}}{405}{subsubsection*.1748}%
\contentsline {section}{\numberline {3.2}Automatic solvers and programmable tactics}{407}{section.3.2}%
\contentsline {subsection}{\numberline {3.2.1}Solvers for logic and equality}{407}{subsection.3.2.1}%
\contentsline {subsection}{\numberline {3.2.2}Omega: a (deprecated) solver for arithmetic}{411}{subsection.3.2.2}%
\contentsline {subsubsection}{Description of \sphinxstyleliteralintitle {\sphinxupquote {omega}}}{411}{subsubsection*.1771}%
\contentsline {subsubsection}{Arithmetical goals recognized by \sphinxstyleliteralintitle {\sphinxupquote {omega}}}{412}{subsubsection*.1773}%
\contentsline {subsubsection}{Messages from \sphinxstyleliteralintitle {\sphinxupquote {omega}}}{412}{subsubsection*.1774}%
\contentsline {subsubsection}{Using \sphinxstyleliteralintitle {\sphinxupquote {omega}}}{412}{subsubsection*.1783}%
\contentsline {subsubsection}{Options}{413}{subsubsection*.1784}%
\contentsline {subsubsection}{Technical data}{414}{subsubsection*.1789}%
\contentsline {paragraph}{Overview of the tactic}{414}{paragraph*.1790}%
\contentsline {paragraph}{Overview of the OMEGA decision procedure}{414}{paragraph*.1791}%
\contentsline {subsubsection}{Bugs}{414}{subsubsection*.1792}%
\contentsline {subsection}{\numberline {3.2.3}Micromega: solvers for arithmetic goals over ordered rings}{414}{subsection.3.2.3}%
\contentsline {subsubsection}{Short description of the tactics}{415}{subsubsection*.1793}%
\contentsline {subsubsection}{\sphinxstyleemphasis {Positivstellensatz} refutations}{416}{subsubsection*.1806}%
\contentsline {subsubsection}{\sphinxstyleliteralintitle {\sphinxupquote {lra}}: a decision procedure for linear real and rational arithmetic}{416}{subsubsection*.1808}%
\contentsline {subsubsection}{\sphinxstyleliteralintitle {\sphinxupquote {lia}}: a tactic for linear integer arithmetic}{417}{subsubsection*.1810}%
\contentsline {paragraph}{High level view of \sphinxstyleliteralintitle {\sphinxupquote {lia}}}{417}{paragraph*.1812}%
\contentsline {paragraph}{Cutting plane proofs}{417}{paragraph*.1813}%
\contentsline {paragraph}{Case split}{417}{paragraph*.1816}%
\contentsline {subsubsection}{\sphinxstyleliteralintitle {\sphinxupquote {nra}}: a proof procedure for non\sphinxhyphen {}linear arithmetic}{418}{subsubsection*.1818}%
\contentsline {subsubsection}{\sphinxstyleliteralintitle {\sphinxupquote {nia}}: a proof procedure for non\sphinxhyphen {}linear integer arithmetic}{418}{subsubsection*.1820}%
\contentsline {subsubsection}{\sphinxstyleliteralintitle {\sphinxupquote {psatz}}: a proof procedure for non\sphinxhyphen {}linear arithmetic}{418}{subsubsection*.1822}%
\contentsline {subsubsection}{\sphinxstyleliteralintitle {\sphinxupquote {zify}}: pre\sphinxhyphen {}processing of arithmetic goals}{418}{subsubsection*.1824}%
\contentsline {subsection}{\numberline {3.2.4}ring and field: solvers for polynomial and rational equations}{420}{subsection.3.2.4}%
\contentsline {subsubsection}{What does this tactic do?}{420}{subsubsection*.1844}%
\contentsline {subsubsection}{The variables map}{420}{subsubsection*.1845}%
\contentsline {subsubsection}{Is it automatic?}{421}{subsubsection*.1846}%
\contentsline {subsubsection}{Concrete usage in Coq}{421}{subsubsection*.1847}%
\contentsline {subsubsection}{Adding a ring structure}{422}{subsubsection*.1855}%
\contentsline {subsubsection}{How does it work?}{425}{subsubsection*.1862}%
\contentsline {subsubsection}{Dealing with fields}{426}{subsubsection*.1863}%
\contentsline {subsubsection}{Adding a new field structure}{428}{subsubsection*.1867}%
\contentsline {subsubsection}{History of ring}{429}{subsubsection*.1871}%
\contentsline {subsubsection}{Discussion}{430}{subsubsection*.1872}%
\contentsline {subsection}{\numberline {3.2.5}Nsatz: a solver for equalities in integral domains}{430}{subsection.3.2.5}%
\contentsline {subsubsection}{More about \sphinxstyleliteralintitle {\sphinxupquote {nsatz}}}{431}{subsubsection*.1874}%
\contentsline {subsection}{\numberline {3.2.6}Programmable proof search}{432}{subsection.3.2.6}%
\contentsline {subsubsection}{The hints databases for auto and eauto}{434}{subsubsection*.1900}%
\contentsline {subsubsection}{Creating Hint databases}{435}{subsubsection*.1901}%
\contentsline {subsubsection}{Creating Hints}{435}{subsubsection*.1903}%
\contentsline {subsubsection}{Hint databases defined in the Coq standard library}{439}{subsubsection*.1930}%
\contentsline {subsubsection}{Hint locality}{440}{subsubsection*.1931}%
\contentsline {subsubsection}{Setting implicit automation tactics}{440}{subsubsection*.1933}%
\contentsline {subsection}{\numberline {3.2.7}Generalized rewriting}{440}{subsection.3.2.7}%
\contentsline {subsubsection}{Introduction to generalized rewriting}{441}{subsubsection*.1935}%
\contentsline {paragraph}{Relations and morphisms}{441}{paragraph*.1936}%
\contentsline {paragraph}{Adding new relations and morphisms}{443}{paragraph*.1937}%
\contentsline {paragraph}{Rewriting and non reflexive relations}{445}{paragraph*.1941}%
\contentsline {paragraph}{Rewriting and non symmetric relations}{445}{paragraph*.1942}%
\contentsline {paragraph}{Rewriting in ambiguous setoid contexts}{446}{paragraph*.1943}%
\contentsline {subsubsection}{Commands and tactics}{446}{subsubsection*.1944}%
\contentsline {paragraph}{First class setoids and morphisms}{446}{paragraph*.1945}%
\contentsline {paragraph}{Tactics enabled on user provided relations}{448}{paragraph*.1946}%
\contentsline {paragraph}{Printing relations and morphisms}{448}{paragraph*.1955}%
\contentsline {paragraph}{Deprecated syntax and backward incompatibilities}{448}{paragraph*.1956}%
\contentsline {subsubsection}{Extensions}{449}{subsubsection*.1961}%
\contentsline {paragraph}{Rewriting under binders}{449}{paragraph*.1962}%
\contentsline {paragraph}{Subrelations}{450}{paragraph*.1963}%
\contentsline {paragraph}{Constant unfolding}{450}{paragraph*.1964}%
\contentsline {subsubsection}{Strategies for rewriting}{450}{subsubsection*.1965}%
\contentsline {paragraph}{Usage}{450}{paragraph*.1966}%
\contentsline {paragraph}{Definitions}{451}{paragraph*.1971}%
\contentsline {section}{\numberline {3.3}Creating new tactics}{453}{section.3.3}%
\contentsline {subsection}{\numberline {3.3.1}Ltac}{453}{subsection.3.3.1}%
\contentsline {subsubsection}{Syntax}{454}{subsubsection*.1975}%
\contentsline {subsubsection}{Semantics}{455}{subsubsection*.2002}%
\contentsline {paragraph}{Types of values}{455}{paragraph*.2003}%
\contentsline {paragraph}{Syntactic values}{455}{paragraph*.2004}%
\contentsline {paragraph}{Tactics in terms}{456}{paragraph*.2008}%
\contentsline {paragraph}{Substitution}{456}{paragraph*.2011}%
\contentsline {paragraph}{Sequence: ;}{457}{paragraph*.2012}%
\contentsline {paragraph}{Local application of tactics: {[}> ... {]}}{457}{paragraph*.2014}%
\contentsline {paragraph}{Goal selectors}{458}{paragraph*.2021}%
\contentsline {paragraph}{Processing multiple goals}{459}{paragraph*.2032}%
\contentsline {paragraph}{Do loop}{460}{paragraph*.2033}%
\contentsline {paragraph}{Repeat loop}{460}{paragraph*.2035}%
\contentsline {paragraph}{Catching errors: try}{460}{paragraph*.2037}%
\contentsline {paragraph}{Detecting progress}{460}{paragraph*.2039}%
\contentsline {paragraph}{Branching and backtracking}{461}{paragraph*.2042}%
\contentsline {paragraph}{Branching with backtracking: +}{461}{paragraph*.2047}%
\contentsline {paragraph}{First tactic to succeed}{462}{paragraph*.2049}%
\contentsline {paragraph}{Solving}{463}{paragraph*.2052}%
\contentsline {paragraph}{First tactic to make progress: ||}{463}{paragraph*.2054}%
\contentsline {paragraph}{Conditional branching: tryif}{463}{paragraph*.2056}%
\contentsline {paragraph}{Soft cut: once}{464}{paragraph*.2058}%
\contentsline {paragraph}{Checking for a single success: exactly\_once}{464}{paragraph*.2060}%
\contentsline {paragraph}{Checking for failure: assert\_fails}{464}{paragraph*.2063}%
\contentsline {paragraph}{Checking for success: assert\_succeeds}{465}{paragraph*.2066}%
\contentsline {paragraph}{Print/identity tactic: idtac}{465}{paragraph*.2069}%
\contentsline {paragraph}{Failing}{465}{paragraph*.2071}%
\contentsline {paragraph}{Timeout}{468}{paragraph*.2077}%
\contentsline {paragraph}{Timing a tactic}{468}{paragraph*.2079}%
\contentsline {paragraph}{Timing a tactic that evaluates to a term: time\_constr}{468}{paragraph*.2081}%
\contentsline {paragraph}{Local definitions: let}{469}{paragraph*.2085}%
\contentsline {paragraph}{Function construction and application}{469}{paragraph*.2089}%
\contentsline {paragraph}{Pattern matching on terms: match}{470}{paragraph*.2091}%
\contentsline {paragraph}{Pattern matching on goals and hypotheses: match goal}{473}{paragraph*.2109}%
\contentsline {paragraph}{Filling a term context}{476}{paragraph*.2121}%
\contentsline {paragraph}{Generating fresh hypothesis names}{477}{paragraph*.2125}%
\contentsline {paragraph}{Computing in a term: eval}{477}{paragraph*.2127}%
\contentsline {paragraph}{Getting the type of a term}{478}{paragraph*.2129}%
\contentsline {paragraph}{Manipulating untyped terms: type\_term}{478}{paragraph*.2131}%
\contentsline {paragraph}{Counting goals: numgoals}{478}{paragraph*.2133}%
\contentsline {paragraph}{Testing boolean expressions: guard}{478}{paragraph*.2135}%
\contentsline {paragraph}{Proving a subgoal as a separate lemma: abstract}{479}{paragraph*.2142}%
\contentsline {subsubsection}{Tactic toplevel definitions}{480}{subsubsection*.2146}%
\contentsline {paragraph}{Defining \sphinxstyleliteralintitle {\sphinxupquote {L}}$_{\text {tac}}$ symbols}{480}{paragraph*.2147}%
\contentsline {paragraph}{Printing \sphinxstyleliteralintitle {\sphinxupquote {L}}$_{\text {tac}}$ tactics}{480}{paragraph*.2153}%
\contentsline {subsubsection}{Examples of using \sphinxstyleliteralintitle {\sphinxupquote {L}}$_{\text {tac}}$}{481}{subsubsection*.2156}%
\contentsline {paragraph}{Proof that the natural numbers have at least two elements}{481}{paragraph*.2157}%
\contentsline {paragraph}{Proving that a list is a permutation of a second list}{482}{paragraph*.2158}%
\contentsline {paragraph}{Deciding intuitionistic propositional logic}{484}{paragraph*.2159}%
\contentsline {paragraph}{Deciding type isomorphisms}{485}{paragraph*.2160}%
\contentsline {subsubsection}{Debugging \sphinxstyleliteralintitle {\sphinxupquote {L}}$_{\text {tac}}$ tactics}{487}{subsubsection*.2161}%
\contentsline {paragraph}{Backtraces}{487}{paragraph*.2162}%
\contentsline {paragraph}{Tracing execution}{487}{paragraph*.2164}%
\contentsline {paragraph}{Interactive debugger}{488}{paragraph*.2167}%
\contentsline {paragraph}{Profiling \sphinxstyleliteralintitle {\sphinxupquote {L}}$_{\text {tac}}$ tactics}{488}{paragraph*.2171}%
\contentsline {paragraph}{Run\sphinxhyphen {}time optimization tactic}{491}{paragraph*.2180}%
\contentsline {subsection}{\numberline {3.3.2}Ltac2}{491}{subsection.3.3.2}%
\contentsline {subsubsection}{General design}{492}{subsubsection*.2183}%
\contentsline {subsubsection}{ML component}{492}{subsubsection*.2184}%
\contentsline {paragraph}{Overview}{492}{paragraph*.2185}%
\contentsline {paragraph}{Type Syntax}{493}{paragraph*.2186}%
\contentsline {paragraph}{Type declarations}{493}{paragraph*.2197}%
\contentsline {paragraph}{APIs}{495}{paragraph*.2210}%
\contentsline {paragraph}{Term Syntax}{495}{paragraph*.2211}%
\contentsline {paragraph}{Ltac2 Definitions}{496}{paragraph*.2231}%
\contentsline {paragraph}{Reduction}{497}{paragraph*.2236}%
\contentsline {paragraph}{Typing}{498}{paragraph*.2237}%
\contentsline {paragraph}{Effects}{498}{paragraph*.2238}%
\contentsline {subparagraph}{Standard IO}{498}{subparagraph*.2239}%
\contentsline {subparagraph}{Fatal errors}{498}{subparagraph*.2240}%
\contentsline {subparagraph}{Backtracking}{499}{subparagraph*.2241}%
\contentsline {subparagraph}{Goals}{499}{subparagraph*.2242}%
\contentsline {subsubsection}{Meta\sphinxhyphen {}programming}{500}{subsubsection*.2243}%
\contentsline {paragraph}{Overview}{500}{paragraph*.2244}%
\contentsline {paragraph}{Quotations}{500}{paragraph*.2245}%
\contentsline {subparagraph}{Built\sphinxhyphen {}in quotations}{500}{subparagraph*.2246}%
\contentsline {subparagraph}{Strict vs. non\sphinxhyphen {}strict mode}{501}{subparagraph*.2251}%
\contentsline {paragraph}{Term Antiquotations}{501}{paragraph*.2252}%
\contentsline {subparagraph}{Syntax}{501}{subparagraph*.2253}%
\contentsline {subparagraph}{Semantics}{501}{subparagraph*.2256}%
\contentsline {subparagraph}{Static semantics}{501}{subparagraph*.2257}%
\contentsline {subparagraph}{Dynamic semantics}{502}{subparagraph*.2258}%
\contentsline {paragraph}{Match over terms}{503}{paragraph*.2261}%
\contentsline {paragraph}{Match over goals}{506}{paragraph*.2278}%
\contentsline {paragraph}{Match on values}{508}{paragraph*.2293}%
\contentsline {subsubsection}{Notations}{509}{subsubsection*.2304}%
\contentsline {paragraph}{Abbreviations}{510}{paragraph*.2306}%
\contentsline {paragraph}{Defining tactics}{511}{paragraph*.2308}%
\contentsline {paragraph}{Syntactic classes}{511}{paragraph*.2309}%
\contentsline {subsubsection}{Evaluation}{515}{subsubsection*.2392}%
\contentsline {subsubsection}{Debug}{516}{subsubsection*.2394}%
\contentsline {subsubsection}{Compatibility layer with Ltac1}{516}{subsubsection*.2396}%
\contentsline {paragraph}{Ltac1 from Ltac2}{516}{paragraph*.2397}%
\contentsline {subparagraph}{Simple API}{516}{subparagraph*.2398}%
\contentsline {subparagraph}{Low\sphinxhyphen {}level API}{516}{subparagraph*.2399}%
\contentsline {paragraph}{Ltac2 from Ltac1}{516}{paragraph*.2400}%
\contentsline {paragraph}{Switching between Ltac languages}{517}{paragraph*.2403}%
\contentsline {subsubsection}{Transition from Ltac1}{517}{subsubsection*.2404}%
\contentsline {paragraph}{Syntax changes}{518}{paragraph*.2405}%
\contentsline {paragraph}{Tactic delay}{518}{paragraph*.2406}%
\contentsline {paragraph}{Variable binding}{518}{paragraph*.2407}%
\contentsline {subparagraph}{In Ltac expressions}{519}{subparagraph*.2408}%
\contentsline {subparagraph}{In quotations}{519}{subparagraph*.2410}%
\contentsline {paragraph}{Exception catching}{519}{paragraph*.2412}%
\contentsline {chapter}{\numberline {4}Using Coq}{520}{chapter.4}%
\contentsline {section}{\numberline {4.1}Libraries and plugins}{520}{section.4.1}%
\contentsline {subsection}{\numberline {4.1.1}The Coq library}{520}{subsection.4.1.1}%
\contentsline {subsubsection}{The prelude}{520}{subsubsection*.2415}%
\contentsline {paragraph}{Notations}{521}{paragraph*.2416}%
\contentsline {paragraph}{Logic}{521}{paragraph*.2417}%
\contentsline {subparagraph}{Propositional Connectives}{522}{subparagraph*.2419}%
\contentsline {subparagraph}{Quantifiers}{522}{subparagraph*.2420}%
\contentsline {subparagraph}{Equality}{523}{subparagraph*.2421}%
\contentsline {subparagraph}{Lemmas}{523}{subparagraph*.2422}%
\contentsline {paragraph}{Datatypes}{524}{paragraph*.2424}%
\contentsline {subparagraph}{Programming}{524}{subparagraph*.2426}%
\contentsline {paragraph}{Specification}{525}{paragraph*.2429}%
\contentsline {paragraph}{Basic Arithmetic}{526}{paragraph*.2437}%
\contentsline {paragraph}{Well\sphinxhyphen {}founded recursion}{527}{paragraph*.2439}%
\contentsline {paragraph}{Accessing the Type level}{528}{paragraph*.2442}%
\contentsline {paragraph}{Tactics}{528}{paragraph*.2445}%
\contentsline {subsubsection}{The standard library}{529}{subsubsection*.2446}%
\contentsline {paragraph}{Survey}{529}{paragraph*.2447}%
\contentsline {paragraph}{Peano’s arithmetic (nat)}{529}{paragraph*.2448}%
\contentsline {paragraph}{Notations for integer arithmetic}{530}{paragraph*.2449}%
\contentsline {paragraph}{Real numbers library}{531}{paragraph*.2450}%
\contentsline {subparagraph}{Notations for real numbers}{531}{subparagraph*.2451}%
\contentsline {subparagraph}{Some tactics for real numbers}{532}{subparagraph*.2452}%
\contentsline {paragraph}{List library}{533}{paragraph*.2456}%
\contentsline {paragraph}{Floats library}{534}{paragraph*.2457}%
\contentsline {subsubsection}{Users’ contributions}{536}{subsubsection*.2460}%
\contentsline {subsection}{\numberline {4.1.2}Program extraction}{537}{subsection.4.1.2}%
\contentsline {subsubsection}{Generating ML Code}{537}{subsubsection*.2461}%
\contentsline {subsubsection}{Extraction Options}{538}{subsubsection*.2469}%
\contentsline {paragraph}{Setting the target language}{538}{paragraph*.2470}%
\contentsline {paragraph}{Inlining and optimizations}{538}{paragraph*.2474}%
\contentsline {paragraph}{Extra elimination of useless arguments}{539}{paragraph*.2483}%
\contentsline {paragraph}{Realizing axioms}{540}{paragraph*.2486}%
\contentsline {paragraph}{Realizing inductive types}{541}{paragraph*.2489}%
\contentsline {paragraph}{Avoiding conflicts with existing filenames}{542}{paragraph*.2491}%
\contentsline {paragraph}{Additional settings}{542}{paragraph*.2495}%
\contentsline {subsubsection}{Differences between Coq and ML type systems}{543}{subsubsection*.2499}%
\contentsline {subsubsection}{Some examples}{543}{subsubsection*.2500}%
\contentsline {paragraph}{A detailed example: Euclidean division}{544}{paragraph*.2501}%
\contentsline {paragraph}{Extraction's horror museum}{545}{paragraph*.2502}%
\contentsline {paragraph}{Users' Contributions}{545}{paragraph*.2503}%
\contentsline {subsection}{\numberline {4.1.3}Program derivation}{546}{subsection.4.1.3}%
\contentsline {subsection}{\numberline {4.1.4}Functional induction}{548}{subsection.4.1.4}%
\contentsline {subsubsection}{Advanced recursive functions}{548}{subsubsection*.2505}%
\contentsline {subsubsection}{Tactics}{550}{subsubsection*.2513}%
\contentsline {subsubsection}{Generation of induction principles with \sphinxstyleliteralintitle {\sphinxupquote {Functional}} \sphinxstyleliteralintitle {\sphinxupquote {Scheme}}}{552}{subsubsection*.2520}%
\contentsline {subsection}{\numberline {4.1.5}Writing Coq libraries and plugins}{556}{subsection.4.1.5}%
\contentsline {subsubsection}{Deprecating library objects or tactics}{556}{subsubsection*.2524}%
\contentsline {section}{\numberline {4.2}Command\sphinxhyphen {}line and graphical tools}{558}{section.4.2}%
\contentsline {subsection}{\numberline {4.2.1}The Coq commands}{558}{subsection.4.2.1}%
\contentsline {subsubsection}{Interactive use (coqtop)}{558}{subsubsection*.2530}%
\contentsline {subsubsection}{Batch compilation (coqc)}{558}{subsubsection*.2532}%
\contentsline {subsubsection}{Customization at launch time}{559}{subsubsection*.2533}%
\contentsline {paragraph}{By resource file}{559}{paragraph*.2534}%
\contentsline {paragraph}{By environment variables}{559}{paragraph*.2535}%
\contentsline {paragraph}{By command line options}{559}{paragraph*.2538}%
\contentsline {subsubsection}{Compiled interfaces (produced using \sphinxstyleliteralintitle {\sphinxupquote {\sphinxhyphen {}vos}})}{562}{subsubsection*.2541}%
\contentsline {subsubsection}{Compiled libraries checker (coqchk)}{564}{subsubsection*.2543}%
\contentsline {subsection}{\numberline {4.2.2}Utilities}{565}{subsection.4.2.2}%
\contentsline {subsubsection}{Using Coq as a library}{565}{subsubsection*.2544}%
\contentsline {subsubsection}{Building a Coq project}{565}{subsubsection*.2545}%
\contentsline {paragraph}{Building a Coq project with coq\_makefile}{565}{paragraph*.2546}%
\contentsline {subparagraph}{CoqMakefile.local}{567}{subparagraph*.2547}%
\contentsline {subparagraph}{Timing targets and performance testing}{568}{subparagraph*.2548}%
\contentsline {subparagraph}{Building a subset of the targets with \sphinxstyleliteralintitle {\sphinxupquote {\sphinxhyphen {}j}}}{572}{subparagraph*.2549}%
\contentsline {subparagraph}{Precompiling for \sphinxstyleliteralintitle {\sphinxupquote {native\_compute}}}{572}{subparagraph*.2550}%
\contentsline {paragraph}{Building a Coq project with Dune}{573}{paragraph*.2551}%
\contentsline {subsubsection}{Computing Module dependencies}{574}{subsubsection*.2552}%
\contentsline {subsubsection}{Embedded Coq phrases inside LaTeX documents}{574}{subsubsection*.2553}%
\contentsline {subsubsection}{Man pages}{574}{subsubsection*.2554}%
\contentsline {subsection}{\numberline {4.2.3}Documenting Coq files with coqdoc}{575}{subsection.4.2.3}%
\contentsline {subsubsection}{Principles}{575}{subsubsection*.2555}%
\contentsline {paragraph}{Coq material inside documentation.}{575}{paragraph*.2556}%
\contentsline {paragraph}{Pretty\sphinxhyphen {}printing.}{575}{paragraph*.2557}%
\contentsline {paragraph}{Sections}{576}{paragraph*.2558}%
\contentsline {paragraph}{Lists.}{576}{paragraph*.2559}%
\contentsline {paragraph}{Rules.}{576}{paragraph*.2560}%
\contentsline {paragraph}{Emphasis.}{577}{paragraph*.2561}%
\contentsline {paragraph}{Escaping to LaTeX and HTML.}{577}{paragraph*.2562}%
\contentsline {paragraph}{Verbatim}{577}{paragraph*.2563}%
\contentsline {paragraph}{Hyperlinks}{577}{paragraph*.2564}%
\contentsline {paragraph}{Hiding / Showing parts of the source}{578}{paragraph*.2565}%
\contentsline {subsubsection}{Usage}{578}{subsubsection*.2566}%
\contentsline {paragraph}{Command line options}{579}{paragraph*.2567}%
\contentsline {subsubsection}{The coqdoc LaTeX style file}{581}{subsubsection*.2568}%
\contentsline {subsection}{\numberline {4.2.4}Coq Integrated Development Environment}{582}{subsection.4.2.4}%
\contentsline {subsubsection}{Managing files and buffers, basic editing}{582}{subsubsection*.2570}%
\contentsline {subsubsection}{Interactive navigation into Coq scripts}{583}{subsubsection*.2571}%
\contentsline {subsubsection}{Commands and templates}{584}{subsubsection*.2572}%
\contentsline {subsubsection}{Queries}{584}{subsubsection*.2573}%
\contentsline {subsubsection}{Compilation}{585}{subsubsection*.2574}%
\contentsline {subsubsection}{Customizations}{585}{subsubsection*.2575}%
\contentsline {subsubsection}{Using Unicode symbols}{586}{subsubsection*.2576}%
\contentsline {paragraph}{Displaying Unicode symbols}{586}{paragraph*.2577}%
\contentsline {paragraph}{Bindings for input of Unicode symbols}{586}{paragraph*.2578}%
\contentsline {paragraph}{Adding custom bindings}{586}{paragraph*.2579}%
\contentsline {paragraph}{Character encoding for saved files}{587}{paragraph*.2580}%
\contentsline {subsection}{\numberline {4.2.5}Asynchronous and Parallel Proof Processing}{587}{subsection.4.2.5}%
\contentsline {subsubsection}{Proof annotations}{588}{subsubsection*.2581}%
\contentsline {paragraph}{Automatic suggestion of proof annotations}{588}{paragraph*.2582}%
\contentsline {subsubsection}{Proof blocks and error resilience}{588}{subsubsection*.2583}%
\contentsline {paragraph}{Caveats}{589}{paragraph*.2584}%
\contentsline {subsubsection}{Interactive mode}{589}{subsubsection*.2585}%
\contentsline {paragraph}{Caveats}{589}{paragraph*.2586}%
\contentsline {subsubsection}{Batch mode}{590}{subsubsection*.2587}%
\contentsline {subsubsection}{Limiting the number of parallel workers}{591}{subsubsection*.2588}%
\contentsline {chapter}{\numberline {5}Appendix}{592}{chapter.5}%
\contentsline {section}{\numberline {5.1}History and recent changes}{592}{section.5.1}%
\contentsline {subsection}{\numberline {5.1.1}Early history of Coq}{592}{subsection.5.1.1}%
\contentsline {subsubsection}{Historical roots}{592}{subsubsection*.2589}%
\contentsline {subsubsection}{Versions 1 to 5}{593}{subsubsection*.2590}%
\contentsline {paragraph}{Version 1}{595}{paragraph*.2591}%
\contentsline {paragraph}{Version 2}{595}{paragraph*.2592}%
\contentsline {paragraph}{Version 3}{596}{paragraph*.2593}%
\contentsline {paragraph}{Version 4}{596}{paragraph*.2594}%
\contentsline {paragraph}{Version 5}{598}{paragraph*.2595}%
\contentsline {subsubsection}{Versions 6}{598}{subsubsection*.2596}%
\contentsline {paragraph}{Version 6.1}{598}{paragraph*.2597}%
\contentsline {paragraph}{Version 6.2}{599}{paragraph*.2598}%
\contentsline {paragraph}{Version 6.3}{599}{paragraph*.2599}%
\contentsline {subsubsection}{Versions 7}{600}{subsubsection*.2600}%
\contentsline {paragraph}{Summary of changes}{600}{paragraph*.2601}%
\contentsline {paragraph}{Details of changes in 7.0 and 7.1}{601}{paragraph*.2602}%
\contentsline {subparagraph}{Main novelties}{601}{subparagraph*.2603}%
\contentsline {subparagraph}{Details of changes}{602}{subparagraph*.2604}%
\contentsline {subparagraph}{Language: new "let\sphinxhyphen {}in" construction}{602}{subparagraph*.2605}%
\contentsline {subparagraph}{Language: long names}{602}{subparagraph*.2606}%
\contentsline {subparagraph}{Language: miscellaneous}{602}{subparagraph*.2607}%
\contentsline {subparagraph}{Language: Cases}{602}{subparagraph*.2608}%
\contentsline {subparagraph}{Reduction}{603}{subparagraph*.2609}%
\contentsline {subparagraph}{New tactics}{603}{subparagraph*.2610}%
\contentsline {subparagraph}{Changes in existing tactics}{603}{subparagraph*.2611}%
\contentsline {subparagraph}{Efficiency}{604}{subparagraph*.2612}%
\contentsline {subparagraph}{Concrete syntax of constructions}{604}{subparagraph*.2613}%
\contentsline {subparagraph}{Parsing and grammar extension}{604}{subparagraph*.2614}%
\contentsline {subparagraph}{New commands}{605}{subparagraph*.2615}%
\contentsline {subparagraph}{Changes in existing commands}{605}{subparagraph*.2616}%
\contentsline {subparagraph}{Tools}{605}{subparagraph*.2617}%
\contentsline {subparagraph}{Extraction}{606}{subparagraph*.2618}%
\contentsline {subparagraph}{Standard library}{606}{subparagraph*.2619}%
\contentsline {subparagraph}{New user contributions}{606}{subparagraph*.2620}%
\contentsline {paragraph}{Details of changes in 7.2}{606}{paragraph*.2621}%
\contentsline {paragraph}{Details of changes in 7.3}{608}{paragraph*.2622}%
\contentsline {subparagraph}{Changes in 7.3.1}{609}{subparagraph*.2623}%
\contentsline {paragraph}{Details of changes in 7.4}{610}{paragraph*.2624}%
\contentsline {subsection}{\numberline {5.1.2}Recent changes}{612}{subsection.5.1.2}%
\contentsline {subsubsection}{Version 8.13}{612}{subsubsection*.2625}%
\contentsline {paragraph}{Summary of changes}{612}{paragraph*.2626}%
\contentsline {paragraph}{Changes in 8.13+beta1}{614}{paragraph*.2627}%
\contentsline {subparagraph}{Kernel}{614}{subparagraph*.2639}%
\contentsline {subparagraph}{Specification language, type inference}{615}{subparagraph*.2642}%
\contentsline {subparagraph}{Notations}{616}{subparagraph*.2647}%
\contentsline {subparagraph}{Tactics}{618}{subparagraph*.2648}%
\contentsline {subparagraph}{Tactic language}{619}{subparagraph*.2649}%
\contentsline {subparagraph}{SSReflect}{619}{subparagraph*.2650}%
\contentsline {subparagraph}{Commands and options}{619}{subparagraph*.2651}%
\contentsline {subparagraph}{Tools}{620}{subparagraph*.2653}%
\contentsline {subparagraph}{CoqIDE}{620}{subparagraph*.2654}%
\contentsline {subparagraph}{Standard library}{621}{subparagraph*.2655}%
\contentsline {subparagraph}{Infrastructure and dependencies}{622}{subparagraph*.2656}%
\contentsline {paragraph}{Changes in 8.13.0}{622}{paragraph*.2657}%
\contentsline {subparagraph}{Commands and options}{622}{subparagraph*.2658}%
\contentsline {paragraph}{Changes in 8.13.1}{622}{paragraph*.2659}%
\contentsline {subparagraph}{Kernel}{622}{subparagraph*.2660}%
\contentsline {subparagraph}{CoqIDE}{622}{subparagraph*.2661}%
\contentsline {paragraph}{Changes in 8.13.2}{622}{paragraph*.2662}%
\contentsline {subparagraph}{Kernel}{622}{subparagraph*.2663}%
\contentsline {subparagraph}{Tactic language}{623}{subparagraph*.2664}%
\contentsline {subsubsection}{Version 8.12}{623}{subsubsection*.2665}%
\contentsline {paragraph}{Summary of changes}{623}{paragraph*.2666}%
\contentsline {paragraph}{Changes in 8.12+beta1}{624}{paragraph*.2667}%
\contentsline {subparagraph}{Kernel}{625}{subparagraph*.2683}%
\contentsline {subparagraph}{Specification language, type inference}{625}{subparagraph*.2684}%
\contentsline {subparagraph}{Notations}{626}{subparagraph*.2688}%
\contentsline {subparagraph}{Tactics}{627}{subparagraph*.2689}%
\contentsline {subparagraph}{Tactic language}{629}{subparagraph*.2690}%
\contentsline {subparagraph}{SSReflect}{630}{subparagraph*.2691}%
\contentsline {subparagraph}{Flags, options and attributes}{630}{subparagraph*.2693}%
\contentsline {subparagraph}{Commands}{631}{subparagraph*.2694}%
\contentsline {subparagraph}{Tools}{632}{subparagraph*.2697}%
\contentsline {subparagraph}{CoqIDE}{634}{subparagraph*.2698}%
\contentsline {subparagraph}{Standard library}{634}{subparagraph*.2699}%
\contentsline {subparagraph}{Reals library}{637}{subparagraph*.2700}%
\contentsline {subparagraph}{Extraction}{638}{subparagraph*.2701}%
\contentsline {subparagraph}{Reference manual}{638}{subparagraph*.2702}%
\contentsline {subparagraph}{Infrastructure and dependencies}{639}{subparagraph*.2703}%
\contentsline {paragraph}{Changes in 8.12.0}{639}{paragraph*.2704}%
\contentsline {paragraph}{Changes in 8.12.1}{640}{paragraph*.2705}%
\contentsline {paragraph}{Changes in 8.12.2}{642}{paragraph*.2706}%
\contentsline {subsubsection}{Version 8.11}{642}{subsubsection*.2707}%
\contentsline {paragraph}{Summary of changes}{642}{paragraph*.2708}%
\contentsline {paragraph}{Changes in 8.11+beta1}{644}{paragraph*.2709}%
\contentsline {paragraph}{Changes in 8.11.0}{649}{paragraph*.2720}%
\contentsline {paragraph}{Changes in 8.11.1}{651}{paragraph*.2721}%
\contentsline {paragraph}{Changes in 8.11.2}{652}{paragraph*.2722}%
\contentsline {subsubsection}{Version 8.10}{652}{subsubsection*.2723}%
\contentsline {paragraph}{Summary of changes}{652}{paragraph*.2724}%
\contentsline {paragraph}{Other changes in 8.10+beta1}{655}{paragraph*.2725}%
\contentsline {paragraph}{Changes in 8.10+beta2}{661}{paragraph*.2726}%
\contentsline {paragraph}{Changes in 8.10+beta3}{661}{paragraph*.2727}%
\contentsline {paragraph}{Changes in 8.10.0}{662}{paragraph*.2728}%
\contentsline {paragraph}{Changes in 8.10.1}{662}{paragraph*.2729}%
\contentsline {paragraph}{Changes in 8.10.2}{663}{paragraph*.2730}%
\contentsline {subsubsection}{Version 8.9}{664}{subsubsection*.2731}%
\contentsline {paragraph}{Summary of changes}{664}{paragraph*.2732}%
\contentsline {paragraph}{Details of changes in 8.9+beta1}{666}{paragraph*.2733}%
\contentsline {paragraph}{Changes in 8.8.0}{668}{paragraph*.2734}%
\contentsline {paragraph}{Changes in 8.8.1}{669}{paragraph*.2735}%
\contentsline {subsubsection}{Version 8.8}{669}{subsubsection*.2736}%
\contentsline {paragraph}{Summary of changes}{669}{paragraph*.2737}%
\contentsline {paragraph}{Details of changes in 8.8+beta1}{670}{paragraph*.2738}%
\contentsline {paragraph}{Details of changes in 8.8.0}{673}{paragraph*.2739}%
\contentsline {paragraph}{Details of changes in 8.8.1}{673}{paragraph*.2740}%
\contentsline {paragraph}{Details of changes in 8.8.2}{674}{paragraph*.2741}%
\contentsline {subsubsection}{Version 8.7}{674}{subsubsection*.2742}%
\contentsline {paragraph}{Summary of changes}{674}{paragraph*.2743}%
\contentsline {paragraph}{Potential compatibility issues}{676}{paragraph*.2744}%
\contentsline {paragraph}{Details of changes in 8.7+beta1}{676}{paragraph*.2745}%
\contentsline {paragraph}{Details of changes in 8.7+beta2}{678}{paragraph*.2746}%
\contentsline {paragraph}{Details of changes in 8.7.0}{679}{paragraph*.2747}%
\contentsline {paragraph}{Details of changes in 8.7.1}{679}{paragraph*.2748}%
\contentsline {paragraph}{Details of changes in 8.7.2}{679}{paragraph*.2749}%
\contentsline {subsubsection}{Version 8.6}{679}{subsubsection*.2750}%
\contentsline {paragraph}{Summary of changes}{679}{paragraph*.2751}%
\contentsline {paragraph}{Potential sources of incompatibilities}{681}{paragraph*.2752}%
\contentsline {paragraph}{Details of changes in 8.6beta1}{681}{paragraph*.2753}%
\contentsline {paragraph}{Details of changes in 8.6}{683}{paragraph*.2754}%
\contentsline {paragraph}{Details of changes in 8.6.1}{683}{paragraph*.2755}%
\contentsline {subsubsection}{Version 8.5}{685}{subsubsection*.2756}%
\contentsline {paragraph}{Summary of changes}{685}{paragraph*.2757}%
\contentsline {paragraph}{Potential sources of incompatibilities}{687}{paragraph*.2758}%
\contentsline {paragraph}{Details of changes in 8.5beta1}{688}{paragraph*.2759}%
\contentsline {paragraph}{Details of changes in 8.5beta2}{695}{paragraph*.2760}%
\contentsline {paragraph}{Details of changes in 8.5beta3}{695}{paragraph*.2761}%
\contentsline {paragraph}{Details of changes in 8.5}{697}{paragraph*.2762}%
\contentsline {paragraph}{Details of changes in 8.5pl1}{697}{paragraph*.2763}%
\contentsline {paragraph}{Details of changes in 8.5pl2}{699}{paragraph*.2764}%
\contentsline {paragraph}{Details of changes in 8.5pl3}{700}{paragraph*.2765}%
\contentsline {subsubsection}{Version 8.4}{701}{subsubsection*.2766}%
\contentsline {paragraph}{Summary of changes}{701}{paragraph*.2767}%
\contentsline {paragraph}{Potential sources of incompatibilities}{703}{paragraph*.2768}%
\contentsline {paragraph}{Details of changes in 8.4beta}{704}{paragraph*.2769}%
\contentsline {paragraph}{Details of changes in 8.4beta2}{708}{paragraph*.2770}%
\contentsline {paragraph}{Details of changes in 8.4}{709}{paragraph*.2771}%
\contentsline {subsubsection}{Version 8.3}{709}{subsubsection*.2772}%
\contentsline {paragraph}{Summary of changes}{709}{paragraph*.2773}%
\contentsline {paragraph}{Details of changes}{710}{paragraph*.2774}%
\contentsline {subsubsection}{Version 8.2}{716}{subsubsection*.2775}%
\contentsline {paragraph}{Summary of changes}{716}{paragraph*.2776}%
\contentsline {paragraph}{Details of changes}{717}{paragraph*.2777}%
\contentsline {subsubsection}{Version 8.1}{725}{subsubsection*.2778}%
\contentsline {paragraph}{Summary of changes}{725}{paragraph*.2779}%
\contentsline {paragraph}{Details of changes in 8.1beta}{726}{paragraph*.2780}%
\contentsline {paragraph}{Details of changes in 8.1gamma}{729}{paragraph*.2781}%
\contentsline {paragraph}{Details of changes in 8.1}{730}{paragraph*.2782}%
\contentsline {subsubsection}{Version 8.0}{731}{subsubsection*.2783}%
\contentsline {paragraph}{Summary of changes}{731}{paragraph*.2784}%
\contentsline {paragraph}{Details of changes in 8.0beta old syntax}{732}{paragraph*.2785}%
\contentsline {paragraph}{Details of changes in 8.0beta new syntax}{735}{paragraph*.2786}%
\contentsline {paragraph}{Details of changes in 8.0}{736}{paragraph*.2787}%
\contentsline {chapter}{Bibliography}{738}{chapter*.2789}%
\contentsline {chapter}{Glossary}{742}{section*.2790}%
\contentsline {chapter}{Command Index}{743}{section*.2791}%
\contentsline {chapter}{Tactic Index}{747}{section*.2792}%
\contentsline {chapter}{Flags, options and Tables Index}{751}{section*.2793}%
\contentsline {chapter}{Gallina Index}{753}{section*.2794}%
\contentsline {chapter}{Errors and Warnings Index}{754}{section*.2795}%
\contentsline {chapter}{Attribute Index}{760}{section*.2796}%
\contentsline {chapter}{Index}{761}{section*.2797}%
