\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}{13}{subsubsection*.124}%
\contentsline {subsubsection}{Assumptions}{13}{subsubsection*.129}%
\contentsline {subsection}{\numberline {2.1.4}Definitions}{14}{subsection.2.1.4}%
\contentsline {subsubsection}{Let\sphinxhyphen {}in definitions}{14}{subsubsection*.151}%
\contentsline {subsubsection}{Type cast}{14}{subsubsection*.154}%
\contentsline {subsubsection}{Top\sphinxhyphen {}level definitions}{15}{subsubsection*.157}%
\contentsline {subsubsection}{Assertions and proofs}{15}{subsubsection*.168}%
\contentsline {subsection}{\numberline {2.1.5}Conversion rules}{17}{subsection.2.1.5}%
\contentsline {subsubsection}{α\sphinxhyphen {}conversion}{18}{subsubsection*.184}%
\contentsline {subsubsection}{β\sphinxhyphen {}reduction}{18}{subsubsection*.186}%
\contentsline {subsubsection}{δ\sphinxhyphen {}reduction}{18}{subsubsection*.190}%
\contentsline {subsubsection}{ι\sphinxhyphen {}reduction}{19}{subsubsection*.197}%
\contentsline {subsubsection}{ζ\sphinxhyphen {}reduction}{19}{subsubsection*.199}%
\contentsline {subsubsection}{η\sphinxhyphen {}expansion}{19}{subsubsection*.202}%
\contentsline {subsubsection}{Examples}{19}{subsubsection*.204}%
\contentsline {subsubsection}{Proof Irrelevance}{21}{subsubsection*.205}%
\contentsline {subsubsection}{Convertibility}{21}{subsubsection*.206}%
\contentsline {subsection}{\numberline {2.1.6}Typing rules}{22}{subsection.2.1.6}%
\contentsline {subsubsection}{The terms}{22}{subsubsection*.209}%
\contentsline {subsubsection}{Typing rules}{23}{subsubsection*.213}%
\contentsline {subsubsection}{Subtyping rules}{26}{subsubsection*.235}%
\contentsline {subsubsection}{Admissible rules for global environments}{27}{subsubsection*.238}%
\contentsline {subsubsection}{The Calculus of Inductive Constructions with impredicative Set}{28}{subsubsection*.247}%
\contentsline {subsection}{\numberline {2.1.7}Variants and the \sphinxstyleliteralintitle {\sphinxupquote {match}} construct}{28}{subsection.2.1.7}%
\contentsline {subsubsection}{Variants}{28}{subsubsection*.251}%
\contentsline {paragraph}{Private (matching) inductive types}{29}{paragraph*.256}%
\contentsline {subsubsection}{Definition by cases: match}{29}{subsubsection*.259}%
\contentsline {subsection}{\numberline {2.1.8}Record types}{32}{subsection.2.1.8}%
\contentsline {subsubsection}{Primitive Projections}{35}{subsubsection*.299}%
\contentsline {paragraph}{Reduction}{36}{paragraph*.303}%
\contentsline {paragraph}{Compatibility Projections and \sphinxstyleliteralintitle {\sphinxupquote {match}}}{36}{paragraph*.304}%
\contentsline {subsection}{\numberline {2.1.9}Inductive types and recursive functions}{36}{subsection.2.1.9}%
\contentsline {subsubsection}{Inductive types}{37}{subsubsection*.305}%
\contentsline {paragraph}{Simple inductive types}{38}{paragraph*.316}%
\contentsline {paragraph}{Simple annotated inductive types}{38}{paragraph*.317}%
\contentsline {paragraph}{Parameterized inductive types}{39}{paragraph*.318}%
\contentsline {paragraph}{Mutually defined inductive types}{41}{paragraph*.320}%
\contentsline {subsubsection}{Recursive functions: fix}{42}{subsubsection*.321}%
\contentsline {subsubsection}{Top\sphinxhyphen {}level recursive functions}{43}{subsubsection*.328}%
\contentsline {subsubsection}{Theory of inductive definitions}{45}{subsubsection*.333}%
\contentsline {paragraph}{Types of inductive objects}{46}{paragraph*.334}%
\contentsline {paragraph}{Well\sphinxhyphen {}formed inductive definitions}{47}{paragraph*.337}%
\contentsline {subparagraph}{Arity of a given sort}{47}{subparagraph*.338}%
\contentsline {subparagraph}{Arity}{47}{subparagraph*.339}%
\contentsline {subparagraph}{Type of constructor}{47}{subparagraph*.340}%
\contentsline {subparagraph}{Positivity Condition}{48}{subparagraph*.341}%
\contentsline {subparagraph}{Strict positivity}{48}{subparagraph*.342}%
\contentsline {subparagraph}{Nested Positivity}{48}{subparagraph*.343}%
\contentsline {subparagraph}{Correctness rules}{49}{subparagraph*.344}%
\contentsline {subparagraph}{Template polymorphism}{52}{subparagraph*.346}%
\contentsline {paragraph}{Destructors}{54}{paragraph*.353}%
\contentsline {subparagraph}{The match ... with ... end construction}{55}{subparagraph*.354}%
\contentsline {paragraph}{Fixpoint definitions}{59}{paragraph*.368}%
\contentsline {subparagraph}{Typing rule}{59}{subparagraph*.369}%
\contentsline {subparagraph}{Reduction rule}{62}{subparagraph*.371}%
\contentsline {subsection}{\numberline {2.1.10}Coinductive types and corecursive functions}{62}{subsection.2.1.10}%
\contentsline {subsubsection}{Coinductive types}{62}{subsubsection*.373}%
\contentsline {paragraph}{Caveat}{63}{paragraph*.375}%
\contentsline {subsubsection}{Co\sphinxhyphen {}recursive functions: cofix}{64}{subsubsection*.376}%
\contentsline {subsubsection}{Top\sphinxhyphen {}level definitions of corecursive functions}{64}{subsubsection*.381}%
\contentsline {subsection}{\numberline {2.1.11}Section mechanism}{65}{subsection.2.1.11}%
\contentsline {subsection}{\numberline {2.1.12}The Module System}{67}{subsection.2.1.12}%
\contentsline {subsubsection}{Modules and module types}{67}{subsubsection*.394}%
\contentsline {subsubsection}{Using modules}{67}{subsubsection*.395}%
\contentsline {paragraph}{Examples}{72}{paragraph*.433}%
\contentsline {subsubsection}{Typing Modules}{74}{subsubsection*.436}%
\contentsline {subsubsection}{Libraries and qualified names}{79}{subsubsection*.478}%
\contentsline {paragraph}{Names of libraries}{79}{paragraph*.479}%
\contentsline {paragraph}{Qualified identifiers}{79}{paragraph*.480}%
\contentsline {paragraph}{Libraries and filesystem}{80}{paragraph*.485}%
\contentsline {subsubsection}{Controlling the scope of commands with locality attributes}{81}{subsubsection*.486}%
\contentsline {subsection}{\numberline {2.1.13}Primitive objects}{82}{subsection.2.1.13}%
\contentsline {subsubsection}{Primitive Integers}{82}{subsubsection*.490}%
\contentsline {subsubsection}{Primitive Floats}{83}{subsubsection*.491}%
\contentsline {subsubsection}{Primitive Arrays}{83}{subsubsection*.492}%
\contentsline {subsection}{\numberline {2.1.14}Polymorphic Universes}{84}{subsection.2.1.14}%
\contentsline {subsubsection}{General Presentation}{84}{subsubsection*.493}%
\contentsline {subsubsection}{Polymorphic, Monomorphic}{86}{subsubsection*.494}%
\contentsline {subsubsection}{Cumulative, NonCumulative}{86}{subsubsection*.499}%
\contentsline {paragraph}{Specifying cumulativity}{88}{paragraph*.505}%
\contentsline {paragraph}{An example of a proof using cumulativity}{88}{paragraph*.506}%
\contentsline {paragraph}{Cumulativity Weak Constraints}{89}{paragraph*.507}%
\contentsline {subsubsection}{Global and local universes}{89}{subsubsection*.509}%
\contentsline {subsubsection}{Conversion and unification}{89}{subsubsection*.510}%
\contentsline {subsubsection}{Minimization}{89}{subsubsection*.511}%
\contentsline {subsubsection}{Explicit Universes}{90}{subsubsection*.513}%
\contentsline {subsubsection}{Printing universes}{91}{subsubsection*.532}%
\contentsline {paragraph}{Polymorphic definitions}{91}{paragraph*.535}%
\contentsline {subsubsection}{Universe polymorphism and sections}{94}{subsubsection*.538}%
\contentsline {subsection}{\numberline {2.1.15}SProp (proof irrelevant propositions)}{95}{subsection.2.1.15}%
\contentsline {subsubsection}{Basic constructs}{95}{subsubsection*.541}%
\contentsline {subsubsection}{Encodings for strict propositions}{97}{subsubsection*.542}%
\contentsline {subsubsection}{Definitional UIP}{98}{subsubsection*.543}%
\contentsline {paragraph}{Non Termination with UIP}{98}{paragraph*.545}%
\contentsline {subsubsection}{Issues with non\sphinxhyphen {}cumulativity}{99}{subsubsection*.546}%
\contentsline {section}{\numberline {2.2}Language extensions}{100}{section.2.2}%
\contentsline {subsection}{\numberline {2.2.1}Existential variables}{100}{subsection.2.2.1}%
\contentsline {subsubsection}{Inferable subterms}{101}{subsubsection*.553}%
\contentsline {subsubsection}{Explicit displaying of existential instances for pretty\sphinxhyphen {}printing}{101}{subsubsection*.554}%
\contentsline {subsubsection}{Solving existential variables using tactics}{102}{subsubsection*.556}%
\contentsline {subsection}{\numberline {2.2.2}Implicit arguments}{102}{subsection.2.2.2}%
\contentsline {subsubsection}{The different kinds of implicit arguments}{102}{subsubsection*.557}%
\contentsline {paragraph}{Implicit arguments inferable from the knowledge of other arguments of a function}{102}{paragraph*.558}%
\contentsline {paragraph}{Implicit arguments inferable by resolution}{103}{paragraph*.559}%
\contentsline {subsubsection}{Maximal and non\sphinxhyphen {}maximal insertion of implicit arguments}{104}{subsubsection*.560}%
\contentsline {paragraph}{Trailing Implicit Arguments}{104}{paragraph*.561}%
\contentsline {subsubsection}{Casual use of implicit arguments}{104}{subsubsection*.563}%
\contentsline {subsubsection}{Declaration of implicit arguments}{104}{subsubsection*.565}%
\contentsline {paragraph}{Implicit Argument Binders}{104}{paragraph*.566}%
\contentsline {paragraph}{Mode for automatic declaration of implicit arguments}{107}{paragraph*.571}%
\contentsline {paragraph}{Controlling strict implicit arguments}{107}{paragraph*.573}%
\contentsline {paragraph}{Controlling contextual implicit arguments}{107}{paragraph*.576}%
\contentsline {paragraph}{Controlling reversible\sphinxhyphen {}pattern implicit arguments}{107}{paragraph*.578}%
\contentsline {paragraph}{Controlling the insertion of implicit arguments not followed by explicit arguments}{107}{paragraph*.580}%
\contentsline {paragraph}{Combining manual declaration and automatic declaration}{107}{paragraph*.582}%
\contentsline {subsubsection}{Explicit applications}{108}{subsubsection*.583}%
\contentsline {subsubsection}{Displaying implicit arguments}{109}{subsubsection*.590}%
\contentsline {subsubsection}{Displaying implicit arguments when pretty\sphinxhyphen {}printing}{109}{subsubsection*.592}%
\contentsline {subsubsection}{Interaction with subtyping}{110}{subsubsection*.595}%
\contentsline {subsubsection}{Deactivation of implicit arguments for parsing}{110}{subsubsection*.596}%
\contentsline {subsubsection}{Implicit types of variables}{111}{subsubsection*.600}%
\contentsline {subsubsection}{Implicit generalization}{112}{subsubsection*.608}%
\contentsline {subsection}{\numberline {2.2.3}Extended pattern matching}{114}{subsection.2.2.3}%
\contentsline {subsubsection}{Variants and extensions of \sphinxstyleliteralintitle {\sphinxupquote {match}}}{114}{subsubsection*.616}%
\contentsline {paragraph}{Multiple and nested pattern matching}{114}{paragraph*.617}%
\contentsline {paragraph}{Pattern\sphinxhyphen {}matching on boolean values: the if expression}{114}{paragraph*.618}%
\contentsline {paragraph}{Irrefutable patterns: the destructuring let variants}{115}{paragraph*.621}%
\contentsline {subparagraph}{First destructuring let syntax}{115}{subparagraph*.624}%
\contentsline {subparagraph}{Second destructuring let syntax}{116}{subparagraph*.625}%
\contentsline {paragraph}{Controlling pretty\sphinxhyphen {}printing of match expressions}{116}{paragraph*.626}%
\contentsline {subparagraph}{Printing nested patterns}{116}{subparagraph*.627}%
\contentsline {subparagraph}{Factorization of clauses with same right\sphinxhyphen {}hand side}{116}{subparagraph*.629}%
\contentsline {subparagraph}{Use of a default clause}{117}{subparagraph*.631}%
\contentsline {subparagraph}{Printing of wildcard patterns}{117}{subparagraph*.633}%
\contentsline {subparagraph}{Printing of the elimination predicate}{117}{subparagraph*.635}%
\contentsline {subparagraph}{Printing matching on irrefutable patterns}{117}{subparagraph*.637}%
\contentsline {subparagraph}{Printing matching on booleans}{117}{subparagraph*.639}%
\contentsline {paragraph}{Conventions about unused pattern\sphinxhyphen {}matching variables}{118}{paragraph*.641}%
\contentsline {subsubsection}{Patterns}{119}{subsubsection*.643}%
\contentsline {subsubsection}{Multiple patterns}{119}{subsubsection*.644}%
\contentsline {subsubsection}{Aliasing subpatterns}{120}{subsubsection*.645}%
\contentsline {subsubsection}{Nested patterns}{120}{subsubsection*.646}%
\contentsline {subsubsection}{Disjunctive patterns}{121}{subsubsection*.647}%
\contentsline {subsubsection}{About patterns of parametric types}{122}{subsubsection*.648}%
\contentsline {paragraph}{Parameters in patterns}{122}{paragraph*.649}%
\contentsline {subsubsection}{Implicit arguments in patterns}{123}{subsubsection*.651}%
\contentsline {subsubsection}{Matching objects of dependent types}{123}{subsubsection*.652}%
\contentsline {subsubsection}{Understanding dependencies in patterns}{123}{subsubsection*.653}%
\contentsline {subsubsection}{When the elimination predicate must be provided}{124}{subsubsection*.654}%
\contentsline {paragraph}{Dependent pattern matching}{124}{paragraph*.655}%
\contentsline {paragraph}{Multiple dependent pattern matching}{124}{paragraph*.656}%
\contentsline {paragraph}{Patterns in \sphinxstyleliteralintitle {\sphinxupquote {in}}}{125}{paragraph*.657}%
\contentsline {subsubsection}{Using pattern matching to write proofs}{125}{subsubsection*.658}%
\contentsline {subsubsection}{Pattern\sphinxhyphen {}matching on inductive objects involving local definitions}{126}{subsubsection*.659}%
\contentsline {subsubsection}{Pattern\sphinxhyphen {}matching and coercions}{126}{subsubsection*.660}%
\contentsline {subsubsection}{When does the expansion strategy fail?}{127}{subsubsection*.661}%
\contentsline {subsection}{\numberline {2.2.4}Syntax extensions and notation scopes}{127}{subsection.2.2.4}%
\contentsline {subsubsection}{Notations}{128}{subsubsection*.669}%
\contentsline {paragraph}{Basic notations}{128}{paragraph*.670}%
\contentsline {paragraph}{Precedences and associativity}{128}{paragraph*.672}%
\contentsline {paragraph}{Complex notations}{129}{paragraph*.673}%
\contentsline {paragraph}{Simple factorization rules}{130}{paragraph*.674}%
\contentsline {paragraph}{Use of notations for printing}{130}{paragraph*.675}%
\contentsline {paragraph}{The Infix command}{132}{paragraph*.676}%
\contentsline {paragraph}{Reserving notations}{132}{paragraph*.678}%
\contentsline {paragraph}{Simultaneous definition of terms and notations}{133}{paragraph*.681}%
\contentsline {paragraph}{Displaying information about notations}{133}{paragraph*.686}%
\contentsline {paragraph}{Locating notations}{135}{paragraph*.691}%
\contentsline {paragraph}{Inheritance of the properties of arguments of constants bound to a notation}{136}{paragraph*.692}%
\contentsline {paragraph}{Notations and binders}{136}{paragraph*.693}%
\contentsline {subparagraph}{Binders bound in the notation and parsed as identifiers}{136}{subparagraph*.694}%
\contentsline {subparagraph}{Binders bound in the notation and parsed as patterns}{136}{subparagraph*.695}%
\contentsline {subparagraph}{Binders bound in the notation and parsed as terms}{137}{subparagraph*.696}%
\contentsline {subparagraph}{Binders bound in the notation and parsed as general binders}{138}{subparagraph*.697}%
\contentsline {subparagraph}{Binders not bound in the notation}{138}{subparagraph*.698}%
\contentsline {subparagraph}{Notations with expressions used both as binder and term}{138}{subparagraph*.699}%
\contentsline {paragraph}{Notations with recursive patterns}{139}{paragraph*.700}%
\contentsline {paragraph}{Notations with recursive patterns involving binders}{140}{paragraph*.701}%
\contentsline {paragraph}{Predefined entries}{141}{paragraph*.702}%
\contentsline {paragraph}{Custom entries}{141}{paragraph*.703}%
\contentsline {paragraph}{Syntax}{144}{paragraph*.706}%
\contentsline {subsubsection}{Notation scopes}{145}{subsubsection*.716}%
\contentsline {paragraph}{Global interpretation rules for notations}{146}{paragraph*.724}%
\contentsline {paragraph}{Local interpretation rules for notations}{146}{paragraph*.727}%
\contentsline {subparagraph}{Opening a notation scope locally}{146}{subparagraph*.728}%
\contentsline {subparagraph}{Binding types or coercion classes to a notation scope}{147}{subparagraph*.733}%
\contentsline {paragraph}{The \sphinxstyleliteralintitle {\sphinxupquote {type\_scope}} notation scope}{147}{paragraph*.735}%
\contentsline {paragraph}{The \sphinxstyleliteralintitle {\sphinxupquote {function\_scope}} notation scope}{148}{paragraph*.736}%
\contentsline {paragraph}{Notation scopes used in the standard library of Coq}{148}{paragraph*.737}%
\contentsline {paragraph}{Displaying information about scopes}{149}{paragraph*.738}%
\contentsline {subsubsection}{Abbreviations}{149}{subsubsection*.742}%
\contentsline {subsubsection}{Numbers and strings}{150}{subsubsection*.744}%
\contentsline {paragraph}{Number notations}{151}{paragraph*.747}%
\contentsline {paragraph}{String notations}{154}{paragraph*.766}%
\contentsline {subsubsection}{Tactic Notations}{159}{subsubsection*.786}%
\contentsline {subsection}{\numberline {2.2.5}Setting properties of a function's arguments}{161}{subsection.2.2.5}%
\contentsline {subsubsection}{Manual declaration of implicit arguments}{163}{subsubsection*.807}%
\contentsline {subsubsection}{Automatic declaration of implicit arguments}{164}{subsubsection*.809}%
\contentsline {subsubsection}{Renaming implicit arguments}{166}{subsubsection*.810}%
\contentsline {subsubsection}{Binding arguments to a scope}{166}{subsubsection*.811}%
\contentsline {subsubsection}{Effects of \sphinxstyleliteralintitle {\sphinxupquote {Arguments}} on unfolding}{167}{subsubsection*.812}%
\contentsline {subsubsection}{Bidirectionality hints}{168}{subsubsection*.813}%
\contentsline {subsection}{\numberline {2.2.6}Implicit Coercions}{169}{subsection.2.2.6}%
\contentsline {subsubsection}{General Presentation}{169}{subsubsection*.814}%
\contentsline {subsubsection}{Classes}{169}{subsubsection*.815}%
\contentsline {subsubsection}{Coercions}{169}{subsubsection*.818}%
\contentsline {subsubsection}{Identity Coercions}{170}{subsubsection*.819}%
\contentsline {subsubsection}{Inheritance Graph}{170}{subsubsection*.820}%
\contentsline {subsubsection}{Declaring Coercions}{170}{subsubsection*.821}%
\contentsline {subsubsection}{Displaying Available Coercions}{172}{subsubsection*.836}%
\contentsline {subsubsection}{Activating the Printing of Coercions}{172}{subsubsection*.841}%
\contentsline {subsubsection}{Classes as Records}{172}{subsubsection*.844}%
\contentsline {subsubsection}{Coercions and Sections}{172}{subsubsection*.845}%
\contentsline {subsubsection}{Coercions and Modules}{172}{subsubsection*.846}%
\contentsline {subsubsection}{Examples}{172}{subsubsection*.847}%
\contentsline {paragraph}{Coercion at function application}{173}{paragraph*.848}%
\contentsline {paragraph}{Coercion to a type}{175}{paragraph*.849}%
\contentsline {paragraph}{Coercion to a function}{176}{paragraph*.850}%
\contentsline {subsection}{\numberline {2.2.7}Typeclasses}{177}{subsection.2.2.7}%
\contentsline {subsubsection}{Class and Instance declarations}{177}{subsubsection*.851}%
\contentsline {subsubsection}{Binding classes}{178}{subsubsection*.852}%
\contentsline {subsubsection}{Parameterized Instances}{179}{subsubsection*.853}%
\contentsline {subsubsection}{Sections and contexts}{179}{subsubsection*.854}%
\contentsline {subsubsection}{Building hierarchies}{180}{subsubsection*.855}%
\contentsline {paragraph}{Superclasses}{180}{paragraph*.856}%
\contentsline {paragraph}{Substructures}{180}{paragraph*.857}%
\contentsline {subsubsection}{Summary of the commands}{181}{subsubsection*.859}%
\contentsline {paragraph}{Typeclasses Transparent, Typeclasses Opaque}{183}{paragraph*.875}%
\contentsline {paragraph}{Settings}{184}{paragraph*.878}%
\contentsline {paragraph}{Typeclasses eauto}{185}{paragraph*.890}%
\contentsline {subsection}{\numberline {2.2.8}Canonical Structures}{185}{subsection.2.2.8}%
\contentsline {subsubsection}{Declaration of canonical structures}{185}{subsubsection*.892}%
\contentsline {subsubsection}{Notation overloading}{188}{subsubsection*.897}%
\contentsline {paragraph}{Derived Canonical Structures}{190}{paragraph*.898}%
\contentsline {subsubsection}{Hierarchy of structures}{190}{subsubsection*.899}%
\contentsline {paragraph}{Compact declaration of Canonical Structures}{196}{paragraph*.900}%
\contentsline {subsection}{\numberline {2.2.9}Program}{198}{subsection.2.2.9}%
\contentsline {subsubsection}{Elaborating programs}{198}{subsubsection*.901}%
\contentsline {paragraph}{Syntactic control over equalities}{199}{paragraph*.907}%
\contentsline {paragraph}{Program Definition}{200}{paragraph*.908}%
\contentsline {paragraph}{Program Fixpoint}{200}{paragraph*.909}%
\contentsline {paragraph}{Program Lemma}{201}{paragraph*.910}%
\contentsline {subsubsection}{Solving obligations}{201}{subsubsection*.911}%
\contentsline {subsubsection}{Frequently Asked Questions}{202}{subsubsection*.922}%
\contentsline {subsection}{\numberline {2.2.10}Commands}{203}{subsection.2.2.10}%
\contentsline {subsubsection}{Displaying}{203}{subsubsection*.924}%
\contentsline {subsubsection}{Query commands}{203}{subsubsection*.935}%
\contentsline {subsubsection}{Requests to the environment}{210}{subsubsection*.958}%
\contentsline {subsubsection}{Printing flags}{211}{subsubsection*.971}%
\contentsline {subsubsection}{Loading files}{211}{subsubsection*.973}%
\contentsline {subsubsection}{Compiled files}{212}{subsubsection*.978}%
\contentsline {subsubsection}{Loadpath}{213}{subsubsection*.994}%
\contentsline {subsubsection}{Backtracking}{214}{subsubsection*.1005}%
\contentsline {subsubsection}{Quitting and debugging}{215}{subsubsection*.1012}%
\contentsline {subsubsection}{Controlling display}{216}{subsubsection*.1023}%
\contentsline {subsubsection}{Printing constructions in full}{216}{subsubsection*.1032}%
\contentsline {subsubsection}{Controlling Typing Flags}{217}{subsubsection*.1034}%
\contentsline {subsubsection}{Internal registration commands}{218}{subsubsection*.1042}%
\contentsline {paragraph}{Exposing constants to OCaml libraries}{219}{paragraph*.1043}%
\contentsline {paragraph}{Inlining hints for the fast reduction machines}{219}{paragraph*.1045}%
\contentsline {paragraph}{Registering primitive operations}{219}{paragraph*.1047}%
\contentsline {chapter}{\numberline {3}Proofs}{220}{chapter.3}%
\contentsline {section}{\numberline {3.1}Basic proof writing}{220}{section.3.1}%
\contentsline {subsection}{\numberline {3.1.1}Proof mode}{220}{subsection.3.1.1}%
\contentsline {subsubsection}{Proof State}{220}{subsubsection*.1051}%
\contentsline {subsubsection}{Entering and exiting proof mode}{222}{subsubsection*.1062}%
\contentsline {paragraph}{Proof using options}{225}{paragraph*.1086}%
\contentsline {paragraph}{Name a set of section hypotheses for \sphinxstyleliteralintitle {\sphinxupquote {Proof using}}}{225}{paragraph*.1089}%
\contentsline {subsubsection}{Proof modes}{226}{subsubsection*.1094}%
\contentsline {subsubsection}{Navigation in the proof tree}{226}{subsubsection*.1096}%
\contentsline {paragraph}{Bullets}{229}{paragraph*.1110}%
\contentsline {subparagraph}{Mandatory Bullets}{233}{subparagraph*.1116}%
\contentsline {subparagraph}{Set Bullet Behavior}{233}{subparagraph*.1117}%
\contentsline {paragraph}{Modifying the order of goals}{233}{paragraph*.1119}%
\contentsline {paragraph}{Postponing the proof of some goals}{236}{paragraph*.1123}%
\contentsline {subsubsection}{Requesting information}{237}{subsubsection*.1131}%
\contentsline {subsubsection}{Showing differences between proof steps}{239}{subsubsection*.1145}%
\contentsline {paragraph}{How to enable diffs}{239}{paragraph*.1146}%
\contentsline {paragraph}{How diffs are calculated}{240}{paragraph*.1148}%
\contentsline {paragraph}{"Show Proof" differences}{240}{paragraph*.1149}%
\contentsline {subsubsection}{Delaying solving unification constraints}{241}{subsubsection*.1150}%
\contentsline {subsubsection}{Proof maintenance}{241}{subsubsection*.1153}%
\contentsline {subsubsection}{Controlling proof mode}{241}{subsubsection*.1157}%
\contentsline {subsubsection}{Controlling memory usage}{242}{subsubsection*.1161}%
\contentsline {subsection}{\numberline {3.1.2}Tactics}{242}{subsection.3.1.2}%
\contentsline {subsubsection}{Common elements of tactics}{243}{subsubsection*.1167}%
\contentsline {paragraph}{Reserved keywords}{243}{paragraph*.1168}%
\contentsline {paragraph}{Invocation of tactics}{243}{paragraph*.1169}%
\contentsline {paragraph}{Bindings}{243}{paragraph*.1174}%
\contentsline {paragraph}{Intro patterns}{244}{paragraph*.1179}%
\contentsline {paragraph}{Occurrence clauses}{250}{paragraph*.1201}%
\contentsline {subsubsection}{Applying theorems}{251}{subsubsection*.1219}%
\contentsline {subsubsection}{Managing the local context}{257}{subsubsection*.1252}%
\contentsline {subsubsection}{Controlling the proof flow}{264}{subsubsection*.1293}%
\contentsline {subsubsection}{Classical tactics}{267}{subsubsection*.1319}%
\contentsline {subsubsection}{Performance\sphinxhyphen {}oriented tactic variants}{268}{subsubsection*.1322}%
\contentsline {subsection}{\numberline {3.1.3}Reasoning with equalities}{269}{subsection.3.1.3}%
\contentsline {subsubsection}{Tactics for simple equalities}{269}{subsubsection*.1333}%
\contentsline {subsubsection}{Rewriting with Leibniz and setoid equality}{270}{subsubsection*.1342}%
\contentsline {subsubsection}{Rewriting with definitional equality}{274}{subsubsection*.1373}%
\contentsline {subsubsection}{Applying conversion rules}{276}{subsubsection*.1379}%
\contentsline {paragraph}{Fast reduction tactics: vm\_compute and native\_compute}{282}{paragraph*.1409}%
\contentsline {paragraph}{Computing in a term: eval and Eval}{283}{paragraph*.1415}%
\contentsline {subsubsection}{Controlling reduction strategies and the conversion algorithm}{284}{subsubsection*.1422}%
\contentsline {subsection}{\numberline {3.1.4}Reasoning with inductive types}{287}{subsection.3.1.4}%
\contentsline {subsubsection}{Applying constructors}{287}{subsubsection*.1436}%
\contentsline {subsubsection}{Case analysis}{289}{subsubsection*.1452}%
\contentsline {subsubsection}{Induction}{292}{subsubsection*.1466}%
\contentsline {subsubsection}{Equality of inductive types}{296}{subsubsection*.1482}%
\contentsline {paragraph}{Helper tactics}{305}{paragraph*.1510}%
\contentsline {subsubsection}{Generation of induction principles with \sphinxstyleliteralintitle {\sphinxupquote {Scheme}}}{305}{subsubsection*.1514}%
\contentsline {paragraph}{Automatic declaration of schemes}{307}{paragraph*.1520}%
\contentsline {paragraph}{Combined Scheme}{307}{paragraph*.1527}%
\contentsline {subsubsection}{Generation of inversion principles with \sphinxstyleliteralintitle {\sphinxupquote {Derive}} \sphinxstyleliteralintitle {\sphinxupquote {Inversion}}}{309}{subsubsection*.1529}%
\contentsline {subsubsection}{Examples of \sphinxstyleliteralintitle {\sphinxupquote {dependent destruction}} / \sphinxstyleliteralintitle {\sphinxupquote {dependent induction}}}{310}{subsubsection*.1534}%
\contentsline {paragraph}{A larger example}{312}{paragraph*.1535}%
\contentsline {subsection}{\numberline {3.1.5}The SSReflect proof language}{315}{subsection.3.1.5}%
\contentsline {subsubsection}{Introduction}{315}{subsubsection*.1536}%
\contentsline {paragraph}{Acknowledgments}{316}{paragraph*.1537}%
\contentsline {subsubsection}{Usage}{316}{subsubsection*.1538}%
\contentsline {paragraph}{Getting started}{316}{paragraph*.1539}%
\contentsline {paragraph}{Compatibility issues}{317}{paragraph*.1540}%
\contentsline {subsubsection}{Gallina extensions}{318}{subsubsection*.1543}%
\contentsline {paragraph}{Pattern assignment}{318}{paragraph*.1544}%
\contentsline {paragraph}{Pattern conditional}{319}{paragraph*.1549}%
\contentsline {paragraph}{Parametric polymorphism}{320}{paragraph*.1556}%
\contentsline {paragraph}{Anonymous arguments}{321}{paragraph*.1558}%
\contentsline {paragraph}{Wildcards}{321}{paragraph*.1561}%
\contentsline {paragraph}{Definitions}{321}{paragraph*.1562}%
\contentsline {paragraph}{Abbreviations}{323}{paragraph*.1564}%
\contentsline {subparagraph}{Matching}{324}{subparagraph*.1568}%
\contentsline {subparagraph}{Occurrence selection}{326}{subparagraph*.1569}%
\contentsline {paragraph}{Basic localization}{328}{paragraph*.1570}%
\contentsline {subsubsection}{Basic tactics}{329}{subsubsection*.1571}%
\contentsline {paragraph}{Bookkeeping}{329}{paragraph*.1572}%
\contentsline {paragraph}{The defective tactics}{332}{paragraph*.1573}%
\contentsline {subparagraph}{The move tactic.}{332}{subparagraph*.1574}%
\contentsline {subparagraph}{The case tactic}{333}{subparagraph*.1576}%
\contentsline {subparagraph}{The elim tactic}{333}{subparagraph*.1579}%
\contentsline {subparagraph}{The apply tactic}{334}{subparagraph*.1581}%
\contentsline {paragraph}{Discharge}{335}{paragraph*.1583}%
\contentsline {subparagraph}{Clear rules}{336}{subparagraph*.1589}%
\contentsline {subparagraph}{Matching for apply and exact}{336}{subparagraph*.1590}%
\contentsline {subparagraph}{The abstract tactic}{337}{subparagraph*.1591}%
\contentsline {paragraph}{Introduction in the context}{338}{paragraph*.1593}%
\contentsline {subparagraph}{Simplification items}{338}{subparagraph*.1605}%
\contentsline {subparagraph}{Views}{339}{subparagraph*.1606}%
\contentsline {subparagraph}{Intro patterns}{339}{subparagraph*.1607}%
\contentsline {subparagraph}{Clear switch}{340}{subparagraph*.1608}%
\contentsline {subparagraph}{Branching and destructuring}{341}{subparagraph*.1609}%
\contentsline {subparagraph}{Block introduction}{341}{subparagraph*.1610}%
\contentsline {paragraph}{Generation of equations}{342}{paragraph*.1611}%
\contentsline {paragraph}{Type families}{344}{paragraph*.1612}%
\contentsline {subsubsection}{Control flow}{347}{subsubsection*.1613}%
\contentsline {paragraph}{Indentation and bullets}{347}{paragraph*.1614}%
\contentsline {paragraph}{Terminators}{347}{paragraph*.1615}%
\contentsline {paragraph}{Selectors}{349}{paragraph*.1618}%
\contentsline {paragraph}{Iteration}{350}{paragraph*.1624}%
\contentsline {paragraph}{Localization}{351}{paragraph*.1628}%
\contentsline {paragraph}{Structure}{352}{paragraph*.1630}%
\contentsline {subparagraph}{The have tactic.}{352}{subparagraph*.1631}%
\contentsline {subparagraph}{Generating let in context entries with have}{356}{subparagraph*.1634}%
\contentsline {subparagraph}{The have tactic and typeclass resolution}{358}{subparagraph*.1635}%
\contentsline {subparagraph}{Variants: the suff and wlog tactics}{359}{subparagraph*.1637}%
\contentsline {subparagraph}{Advanced generalization}{361}{subparagraph*.1640}%
\contentsline {subsubsection}{Rewriting}{363}{subsubsection*.1641}%
\contentsline {paragraph}{An extended rewrite tactic}{363}{paragraph*.1642}%
\contentsline {paragraph}{Remarks and examples}{365}{paragraph*.1653}%
\contentsline {subparagraph}{Rewrite redex selection}{365}{subparagraph*.1654}%
\contentsline {subparagraph}{Chained rewrite steps}{366}{subparagraph*.1655}%
\contentsline {subparagraph}{Explicit redex switches are matched first}{367}{subparagraph*.1656}%
\contentsline {subparagraph}{Occurrence switches and redex switches}{367}{subparagraph*.1657}%
\contentsline {subparagraph}{Occurrence selection and repetition}{368}{subparagraph*.1658}%
\contentsline {subparagraph}{Multi\sphinxhyphen {}rule rewriting}{369}{subparagraph*.1659}%
\contentsline {subparagraph}{Wildcards vs abstractions}{372}{subparagraph*.1660}%
\contentsline {subparagraph}{When SSReflect rewrite fails on standard Coq licit rewrite}{373}{subparagraph*.1661}%
\contentsline {subparagraph}{Existential metavariables and rewriting}{374}{subparagraph*.1662}%
\contentsline {paragraph}{Rewriting under binders}{375}{paragraph*.1663}%
\contentsline {subparagraph}{The under tactic}{377}{subparagraph*.1664}%
\contentsline {subparagraph}{Interactive mode}{377}{subparagraph*.1667}%
\contentsline {subparagraph}{The over tactic}{378}{subparagraph*.1668}%
\contentsline {subparagraph}{One\sphinxhyphen {}liner mode}{379}{subparagraph*.1670}%
\contentsline {paragraph}{Locking, unlocking}{380}{paragraph*.1671}%
\contentsline {paragraph}{Congruence}{382}{paragraph*.1673}%
\contentsline {subsubsection}{Contextual patterns}{384}{subsubsection*.1675}%
\contentsline {paragraph}{Syntax}{385}{paragraph*.1676}%
\contentsline {paragraph}{Matching contextual patterns}{385}{paragraph*.1677}%
\contentsline {paragraph}{Examples}{386}{paragraph*.1678}%
\contentsline {subparagraph}{Contextual pattern in set and the : tactical}{386}{subparagraph*.1679}%
\contentsline {subparagraph}{Contextual patterns in rewrite}{387}{subparagraph*.1680}%
\contentsline {paragraph}{Patterns for recurrent contexts}{388}{paragraph*.1681}%
\contentsline {subsubsection}{Views and reflection}{389}{subsubsection*.1682}%
\contentsline {paragraph}{Interpreting eliminations}{389}{paragraph*.1683}%
\contentsline {paragraph}{Interpreting assumptions}{393}{paragraph*.1684}%
\contentsline {subparagraph}{Specializing assumptions}{395}{subparagraph*.1685}%
\contentsline {paragraph}{Interpreting goals}{396}{paragraph*.1686}%
\contentsline {paragraph}{Boolean reflection}{397}{paragraph*.1687}%
\contentsline {paragraph}{The reflect predicate}{398}{paragraph*.1688}%
\contentsline {paragraph}{General mechanism for interpreting goals and assumptions}{400}{paragraph*.1689}%
\contentsline {subparagraph}{Specializing assumptions}{400}{subparagraph*.1690}%
\contentsline {subparagraph}{Interpreting assumptions}{400}{subparagraph*.1691}%
\contentsline {paragraph}{Interpreting equivalences}{402}{paragraph*.1692}%
\contentsline {paragraph}{Declaring new Hint Views}{403}{paragraph*.1693}%
\contentsline {paragraph}{Multiple views}{403}{paragraph*.1696}%
\contentsline {subsubsection}{Synopsis and Index}{404}{subsubsection*.1697}%
\contentsline {paragraph}{Parameters}{404}{paragraph*.1698}%
\contentsline {paragraph}{Items and switches}{405}{paragraph*.1707}%
\contentsline {paragraph}{Tactics}{406}{paragraph*.1744}%
\contentsline {paragraph}{Tacticals}{408}{paragraph*.1759}%
\contentsline {paragraph}{Commands}{408}{paragraph*.1774}%
\contentsline {paragraph}{Settings}{409}{paragraph*.1778}%
\contentsline {section}{\numberline {3.2}Automatic solvers and programmable tactics}{409}{section.3.2}%
\contentsline {subsection}{\numberline {3.2.1}Solvers for logic and equality}{409}{subsection.3.2.1}%
\contentsline {subsection}{\numberline {3.2.2}Micromega: solvers for arithmetic goals over ordered rings}{413}{subsection.3.2.2}%
\contentsline {subsubsection}{Short description of the tactics}{413}{subsubsection*.1799}%
\contentsline {subsubsection}{\sphinxstyleemphasis {Positivstellensatz} refutations}{415}{subsubsection*.1812}%
\contentsline {subsubsection}{\sphinxstyleliteralintitle {\sphinxupquote {lra}}: a decision procedure for linear real and rational arithmetic}{415}{subsubsection*.1814}%
\contentsline {subsubsection}{\sphinxstyleliteralintitle {\sphinxupquote {lia}}: a tactic for linear integer arithmetic}{415}{subsubsection*.1816}%
\contentsline {paragraph}{High level view of \sphinxstyleliteralintitle {\sphinxupquote {lia}}}{415}{paragraph*.1818}%
\contentsline {paragraph}{Cutting plane proofs}{416}{paragraph*.1819}%
\contentsline {paragraph}{Case split}{416}{paragraph*.1822}%
\contentsline {subsubsection}{\sphinxstyleliteralintitle {\sphinxupquote {nra}}: a proof procedure for non\sphinxhyphen {}linear arithmetic}{416}{subsubsection*.1824}%
\contentsline {subsubsection}{\sphinxstyleliteralintitle {\sphinxupquote {nia}}: a proof procedure for non\sphinxhyphen {}linear integer arithmetic}{416}{subsubsection*.1826}%
\contentsline {subsubsection}{\sphinxstyleliteralintitle {\sphinxupquote {psatz}}: a proof procedure for non\sphinxhyphen {}linear arithmetic}{417}{subsubsection*.1828}%
\contentsline {subsubsection}{\sphinxstyleliteralintitle {\sphinxupquote {zify}}: pre\sphinxhyphen {}processing of arithmetic goals}{417}{subsubsection*.1830}%
\contentsline {subsection}{\numberline {3.2.3}ring and field: solvers for polynomial and rational equations}{418}{subsection.3.2.3}%
\contentsline {subsubsection}{What does this tactic do?}{418}{subsubsection*.1838}%
\contentsline {subsubsection}{The variables map}{419}{subsubsection*.1839}%
\contentsline {subsubsection}{Is it automatic?}{419}{subsubsection*.1840}%
\contentsline {subsubsection}{Concrete usage in Coq}{419}{subsubsection*.1841}%
\contentsline {subsubsection}{Adding a ring structure}{421}{subsubsection*.1849}%
\contentsline {subsubsection}{How does it work?}{424}{subsubsection*.1856}%
\contentsline {subsubsection}{Dealing with fields}{425}{subsubsection*.1857}%
\contentsline {subsubsection}{Adding a new field structure}{427}{subsubsection*.1861}%
\contentsline {subsubsection}{History of ring}{428}{subsubsection*.1865}%
\contentsline {subsubsection}{Discussion}{428}{subsubsection*.1866}%
\contentsline {subsection}{\numberline {3.2.4}Nsatz: a solver for equalities in integral domains}{429}{subsection.3.2.4}%
\contentsline {subsubsection}{More about \sphinxstyleliteralintitle {\sphinxupquote {nsatz}}}{430}{subsubsection*.1868}%
\contentsline {subsection}{\numberline {3.2.5}Programmable proof search}{430}{subsection.3.2.5}%
\contentsline {subsubsection}{Hint databases}{434}{subsubsection*.1894}%
\contentsline {subsubsection}{Creating Hint databases}{434}{subsubsection*.1895}%
\contentsline {subsubsection}{Creating Hints}{434}{subsubsection*.1897}%
\contentsline {subsubsection}{Hint databases defined in the Coq standard library}{439}{subsubsection*.1926}%
\contentsline {subsubsection}{Hint locality}{439}{subsubsection*.1927}%
\contentsline {subsubsection}{Setting implicit automation tactics}{440}{subsubsection*.1929}%
\contentsline {subsection}{\numberline {3.2.6}Generalized rewriting}{440}{subsection.3.2.6}%
\contentsline {subsubsection}{Introduction to generalized rewriting}{440}{subsubsection*.1931}%
\contentsline {paragraph}{Relations and morphisms}{440}{paragraph*.1932}%
\contentsline {paragraph}{Adding new relations and morphisms}{442}{paragraph*.1933}%
\contentsline {paragraph}{Rewriting and nonreflexive relations}{444}{paragraph*.1937}%
\contentsline {paragraph}{Rewriting and nonsymmetric relations}{445}{paragraph*.1938}%
\contentsline {paragraph}{Rewriting in ambiguous setoid contexts}{445}{paragraph*.1939}%
\contentsline {subsubsection}{Commands and tactics}{446}{subsubsection*.1940}%
\contentsline {paragraph}{First class setoids and morphisms}{446}{paragraph*.1941}%
\contentsline {paragraph}{Tactics enabled on user provided relations}{447}{paragraph*.1942}%
\contentsline {paragraph}{Printing relations and morphisms}{448}{paragraph*.1951}%
\contentsline {paragraph}{Deprecated syntax and backward incompatibilities}{448}{paragraph*.1952}%
\contentsline {subsubsection}{Extensions}{448}{subsubsection*.1957}%
\contentsline {paragraph}{Rewriting under binders}{448}{paragraph*.1958}%
\contentsline {paragraph}{Subrelations}{449}{paragraph*.1959}%
\contentsline {paragraph}{Constant unfolding}{450}{paragraph*.1960}%
\contentsline {subsubsection}{Strategies for rewriting}{450}{subsubsection*.1961}%
\contentsline {paragraph}{Usage}{450}{paragraph*.1962}%
\contentsline {paragraph}{Definitions}{450}{paragraph*.1967}%
\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*.1971}%
\contentsline {subsubsection}{Semantics}{455}{subsubsection*.1998}%
\contentsline {paragraph}{Types of values}{455}{paragraph*.1999}%
\contentsline {paragraph}{Syntactic values}{455}{paragraph*.2000}%
\contentsline {paragraph}{Tactics in terms}{456}{paragraph*.2004}%
\contentsline {paragraph}{Substitution}{456}{paragraph*.2007}%
\contentsline {paragraph}{Sequence: ;}{457}{paragraph*.2008}%
\contentsline {paragraph}{Local application of tactics: {[}> ... {]}}{457}{paragraph*.2010}%
\contentsline {paragraph}{Goal selectors}{458}{paragraph*.2017}%
\contentsline {paragraph}{Processing multiple goals}{459}{paragraph*.2028}%
\contentsline {paragraph}{Do loop}{460}{paragraph*.2029}%
\contentsline {paragraph}{Repeat loop}{460}{paragraph*.2031}%
\contentsline {paragraph}{Catching errors: try}{460}{paragraph*.2033}%
\contentsline {paragraph}{Detecting progress}{460}{paragraph*.2035}%
\contentsline {paragraph}{Branching and backtracking}{461}{paragraph*.2038}%
\contentsline {paragraph}{Branching with backtracking: +}{461}{paragraph*.2043}%
\contentsline {paragraph}{First tactic to succeed}{462}{paragraph*.2045}%
\contentsline {paragraph}{Solving}{463}{paragraph*.2048}%
\contentsline {paragraph}{First tactic to make progress: ||}{463}{paragraph*.2050}%
\contentsline {paragraph}{Conditional branching: tryif}{463}{paragraph*.2052}%
\contentsline {paragraph}{Soft cut: once}{464}{paragraph*.2054}%
\contentsline {paragraph}{Checking for a single success: exactly\_once}{464}{paragraph*.2056}%
\contentsline {paragraph}{Checking for failure: assert\_fails}{464}{paragraph*.2059}%
\contentsline {paragraph}{Checking for success: assert\_succeeds}{465}{paragraph*.2062}%
\contentsline {paragraph}{Print/identity tactic: idtac}{465}{paragraph*.2065}%
\contentsline {paragraph}{Failing}{465}{paragraph*.2067}%
\contentsline {paragraph}{Timeout}{468}{paragraph*.2073}%
\contentsline {paragraph}{Timing a tactic}{468}{paragraph*.2075}%
\contentsline {paragraph}{Timing a tactic that evaluates to a term: time\_constr}{468}{paragraph*.2077}%
\contentsline {paragraph}{Local definitions: let}{469}{paragraph*.2081}%
\contentsline {paragraph}{Function construction and application}{469}{paragraph*.2085}%
\contentsline {paragraph}{Pattern matching on terms: match}{470}{paragraph*.2087}%
\contentsline {paragraph}{Pattern matching on goals and hypotheses: match goal}{473}{paragraph*.2105}%
\contentsline {paragraph}{Filling a term context}{476}{paragraph*.2117}%
\contentsline {paragraph}{Generating fresh hypothesis names}{476}{paragraph*.2121}%
\contentsline {paragraph}{Computing in a term: eval}{477}{paragraph*.2123}%
\contentsline {paragraph}{Getting the type of a term}{477}{paragraph*.2124}%
\contentsline {paragraph}{Manipulating untyped terms: type\_term}{477}{paragraph*.2126}%
\contentsline {paragraph}{Counting goals: numgoals}{478}{paragraph*.2128}%
\contentsline {paragraph}{Testing boolean expressions: guard}{478}{paragraph*.2130}%
\contentsline {subsubsection}{Checking properties of terms}{479}{subsubsection*.2137}%
\contentsline {paragraph}{Proving a subgoal as a separate lemma: abstract}{480}{paragraph*.2166}%
\contentsline {subsubsection}{Tactic toplevel definitions}{481}{subsubsection*.2170}%
\contentsline {paragraph}{Defining \sphinxstyleliteralintitle {\sphinxupquote {L}}$_{\text {tac}}$ symbols}{481}{paragraph*.2171}%
\contentsline {paragraph}{Printing \sphinxstyleliteralintitle {\sphinxupquote {L}}$_{\text {tac}}$ tactics}{482}{paragraph*.2177}%
\contentsline {subsubsection}{Examples of using \sphinxstyleliteralintitle {\sphinxupquote {L}}$_{\text {tac}}$}{482}{subsubsection*.2180}%
\contentsline {paragraph}{Proof that the natural numbers have at least two elements}{482}{paragraph*.2181}%
\contentsline {paragraph}{Proving that a list is a permutation of a second list}{484}{paragraph*.2182}%
\contentsline {paragraph}{Deciding intuitionistic propositional logic}{485}{paragraph*.2183}%
\contentsline {paragraph}{Deciding type isomorphisms}{486}{paragraph*.2184}%
\contentsline {subsubsection}{Debugging \sphinxstyleliteralintitle {\sphinxupquote {L}}$_{\text {tac}}$ tactics}{489}{subsubsection*.2185}%
\contentsline {paragraph}{Backtraces}{489}{paragraph*.2186}%
\contentsline {paragraph}{Tracing execution}{489}{paragraph*.2188}%
\contentsline {paragraph}{Interactive debugger}{490}{paragraph*.2191}%
\contentsline {paragraph}{Profiling \sphinxstyleliteralintitle {\sphinxupquote {L}}$_{\text {tac}}$ tactics}{490}{paragraph*.2195}%
\contentsline {paragraph}{Run\sphinxhyphen {}time optimization tactic}{492}{paragraph*.2204}%
\contentsline {subsection}{\numberline {3.3.2}Ltac2}{492}{subsection.3.3.2}%
\contentsline {subsubsection}{General design}{493}{subsubsection*.2207}%
\contentsline {subsubsection}{ML component}{494}{subsubsection*.2208}%
\contentsline {paragraph}{Overview}{494}{paragraph*.2209}%
\contentsline {paragraph}{Type Syntax}{494}{paragraph*.2210}%
\contentsline {paragraph}{Type declarations}{495}{paragraph*.2221}%
\contentsline {paragraph}{APIs}{496}{paragraph*.2234}%
\contentsline {paragraph}{Term Syntax}{496}{paragraph*.2235}%
\contentsline {paragraph}{Ltac2 Definitions}{497}{paragraph*.2255}%
\contentsline {paragraph}{Reduction}{498}{paragraph*.2260}%
\contentsline {paragraph}{Typing}{499}{paragraph*.2261}%
\contentsline {paragraph}{Effects}{499}{paragraph*.2262}%
\contentsline {subparagraph}{Standard IO}{499}{subparagraph*.2263}%
\contentsline {subparagraph}{Fatal errors}{499}{subparagraph*.2264}%
\contentsline {subparagraph}{Backtracking}{500}{subparagraph*.2265}%
\contentsline {subparagraph}{Goals}{500}{subparagraph*.2266}%
\contentsline {subsubsection}{Meta\sphinxhyphen {}programming}{501}{subsubsection*.2267}%
\contentsline {paragraph}{Overview}{501}{paragraph*.2268}%
\contentsline {paragraph}{Quotations}{501}{paragraph*.2269}%
\contentsline {subparagraph}{Built\sphinxhyphen {}in quotations}{501}{subparagraph*.2270}%
\contentsline {subparagraph}{Strict vs. non\sphinxhyphen {}strict mode}{502}{subparagraph*.2275}%
\contentsline {paragraph}{Term Antiquotations}{502}{paragraph*.2276}%
\contentsline {subparagraph}{Syntax}{502}{subparagraph*.2277}%
\contentsline {subparagraph}{Semantics}{502}{subparagraph*.2280}%
\contentsline {subparagraph}{Static semantics}{502}{subparagraph*.2281}%
\contentsline {subparagraph}{Dynamic semantics}{504}{subparagraph*.2282}%
\contentsline {paragraph}{Match over terms}{504}{paragraph*.2285}%
\contentsline {paragraph}{Match over goals}{507}{paragraph*.2302}%
\contentsline {paragraph}{Match on values}{510}{paragraph*.2317}%
\contentsline {subsubsection}{Notations}{510}{subsubsection*.2328}%
\contentsline {paragraph}{Abbreviations}{512}{paragraph*.2331}%
\contentsline {paragraph}{Defining tactics}{512}{paragraph*.2333}%
\contentsline {paragraph}{Syntactic classes}{513}{paragraph*.2334}%
\contentsline {subsubsection}{Evaluation}{517}{subsubsection*.2417}%
\contentsline {subsubsection}{Debug}{517}{subsubsection*.2419}%
\contentsline {subsubsection}{Compatibility layer with Ltac1}{517}{subsubsection*.2421}%
\contentsline {paragraph}{Ltac1 from Ltac2}{517}{paragraph*.2422}%
\contentsline {subparagraph}{Simple API}{517}{subparagraph*.2423}%
\contentsline {subparagraph}{Low\sphinxhyphen {}level API}{518}{subparagraph*.2424}%
\contentsline {paragraph}{Ltac2 from Ltac1}{518}{paragraph*.2425}%
\contentsline {paragraph}{Switching between Ltac languages}{519}{paragraph*.2428}%
\contentsline {subsubsection}{Transition from Ltac1}{519}{subsubsection*.2429}%
\contentsline {paragraph}{Syntax changes}{519}{paragraph*.2430}%
\contentsline {paragraph}{Tactic delay}{519}{paragraph*.2431}%
\contentsline {paragraph}{Variable binding}{520}{paragraph*.2432}%
\contentsline {subparagraph}{In Ltac expressions}{520}{subparagraph*.2433}%
\contentsline {subparagraph}{In quotations}{520}{subparagraph*.2435}%
\contentsline {paragraph}{Exception catching}{520}{paragraph*.2437}%
\contentsline {chapter}{\numberline {4}Using Coq}{521}{chapter.4}%
\contentsline {section}{\numberline {4.1}Libraries and plugins}{521}{section.4.1}%
\contentsline {subsection}{\numberline {4.1.1}The Coq library}{521}{subsection.4.1.1}%
\contentsline {subsubsection}{The prelude}{521}{subsubsection*.2440}%
\contentsline {paragraph}{Notations}{522}{paragraph*.2441}%
\contentsline {paragraph}{Logic}{522}{paragraph*.2442}%
\contentsline {subparagraph}{Propositional Connectives}{523}{subparagraph*.2444}%
\contentsline {subparagraph}{Quantifiers}{523}{subparagraph*.2445}%
\contentsline {subparagraph}{Equality}{524}{subparagraph*.2446}%
\contentsline {subparagraph}{Lemmas}{524}{subparagraph*.2447}%
\contentsline {paragraph}{Datatypes}{525}{paragraph*.2449}%
\contentsline {subparagraph}{Programming}{525}{subparagraph*.2451}%
\contentsline {paragraph}{Specification}{526}{paragraph*.2454}%
\contentsline {paragraph}{Basic Arithmetic}{527}{paragraph*.2462}%
\contentsline {paragraph}{Well\sphinxhyphen {}founded recursion}{528}{paragraph*.2464}%
\contentsline {paragraph}{Accessing the Type level}{529}{paragraph*.2467}%
\contentsline {paragraph}{Tactics}{529}{paragraph*.2470}%
\contentsline {subsubsection}{The standard library}{530}{subsubsection*.2471}%
\contentsline {paragraph}{Survey}{530}{paragraph*.2472}%
\contentsline {paragraph}{Peano’s arithmetic (nat)}{530}{paragraph*.2473}%
\contentsline {paragraph}{Notations for integer arithmetic}{531}{paragraph*.2474}%
\contentsline {paragraph}{Real numbers library}{532}{paragraph*.2475}%
\contentsline {subparagraph}{Notations for real numbers}{532}{subparagraph*.2476}%
\contentsline {subparagraph}{Some tactics for real numbers}{533}{subparagraph*.2477}%
\contentsline {paragraph}{List library}{534}{paragraph*.2481}%
\contentsline {paragraph}{Floats library}{535}{paragraph*.2482}%
\contentsline {subsubsection}{Users’ contributions}{537}{subsubsection*.2485}%
\contentsline {subsection}{\numberline {4.1.2}Program extraction}{538}{subsection.4.1.2}%
\contentsline {subsubsection}{Generating ML Code}{538}{subsubsection*.2486}%
\contentsline {subsubsection}{Extraction Options}{539}{subsubsection*.2494}%
\contentsline {paragraph}{Setting the target language}{539}{paragraph*.2495}%
\contentsline {paragraph}{Inlining and optimizations}{539}{paragraph*.2499}%
\contentsline {paragraph}{Extra elimination of useless arguments}{540}{paragraph*.2508}%
\contentsline {paragraph}{Realizing axioms}{541}{paragraph*.2511}%
\contentsline {paragraph}{Realizing inductive types}{542}{paragraph*.2514}%
\contentsline {paragraph}{Avoiding conflicts with existing filenames}{543}{paragraph*.2516}%
\contentsline {paragraph}{Additional settings}{543}{paragraph*.2520}%
\contentsline {subsubsection}{Differences between Coq and ML type systems}{544}{subsubsection*.2524}%
\contentsline {subsubsection}{Some examples}{544}{subsubsection*.2525}%
\contentsline {paragraph}{A detailed example: Euclidean division}{545}{paragraph*.2526}%
\contentsline {paragraph}{Extraction's horror museum}{546}{paragraph*.2527}%
\contentsline {paragraph}{Users' Contributions}{546}{paragraph*.2528}%
\contentsline {subsection}{\numberline {4.1.3}Program derivation}{547}{subsection.4.1.3}%
\contentsline {subsection}{\numberline {4.1.4}Functional induction}{549}{subsection.4.1.4}%
\contentsline {subsubsection}{Advanced recursive functions}{549}{subsubsection*.2530}%
\contentsline {subsubsection}{Tactics}{551}{subsubsection*.2538}%
\contentsline {subsubsection}{Generation of induction principles with \sphinxstyleliteralintitle {\sphinxupquote {Functional}} \sphinxstyleliteralintitle {\sphinxupquote {Scheme}}}{553}{subsubsection*.2545}%
\contentsline {subsection}{\numberline {4.1.5}Writing Coq libraries and plugins}{557}{subsection.4.1.5}%
\contentsline {subsubsection}{Deprecating library objects or tactics}{557}{subsubsection*.2549}%
\contentsline {section}{\numberline {4.2}Command\sphinxhyphen {}line and graphical tools}{559}{section.4.2}%
\contentsline {subsection}{\numberline {4.2.1}The Coq commands}{559}{subsection.4.2.1}%
\contentsline {subsubsection}{Interactive use (coqtop)}{559}{subsubsection*.2558}%
\contentsline {subsubsection}{Batch compilation (coqc)}{559}{subsubsection*.2560}%
\contentsline {subsubsection}{Customization at launch time}{560}{subsubsection*.2561}%
\contentsline {paragraph}{By resource file}{560}{paragraph*.2562}%
\contentsline {paragraph}{By environment variables}{560}{paragraph*.2563}%
\contentsline {paragraph}{By command line options}{561}{paragraph*.2566}%
\contentsline {subsubsection}{Compiled interfaces (produced using \sphinxstyleliteralintitle {\sphinxupquote {\sphinxhyphen {}vos}})}{564}{subsubsection*.2569}%
\contentsline {subsubsection}{Compiled libraries checker (coqchk)}{566}{subsubsection*.2571}%
\contentsline {subsection}{\numberline {4.2.2}Utilities}{566}{subsection.4.2.2}%
\contentsline {subsubsection}{Using Coq as a library}{567}{subsubsection*.2572}%
\contentsline {subsubsection}{Building a Coq project}{567}{subsubsection*.2573}%
\contentsline {paragraph}{Building a Coq project with coq\_makefile}{567}{paragraph*.2574}%
\contentsline {subparagraph}{Comments}{569}{subparagraph*.2575}%
\contentsline {subparagraph}{Quoting arguments to coqc}{569}{subparagraph*.2576}%
\contentsline {subparagraph}{Forbidden filenames}{570}{subparagraph*.2577}%
\contentsline {subparagraph}{Warning: No common logical root}{570}{subparagraph*.2578}%
\contentsline {subparagraph}{CoqMakefile.local}{570}{subparagraph*.2579}%
\contentsline {subparagraph}{CoqMakefile.local\sphinxhyphen {}late}{571}{subparagraph*.2580}%
\contentsline {subparagraph}{Timing targets and performance testing}{572}{subparagraph*.2581}%
\contentsline {subparagraph}{Building a subset of the targets with \sphinxstyleliteralintitle {\sphinxupquote {\sphinxhyphen {}j}}}{575}{subparagraph*.2582}%
\contentsline {subparagraph}{Precompiling for \sphinxstyleliteralintitle {\sphinxupquote {native\_compute}}}{576}{subparagraph*.2583}%
\contentsline {subparagraph}{The grammar of \_CoqProject}{576}{subparagraph*.2584}%
\contentsline {paragraph}{Building a Coq project with Dune}{577}{paragraph*.2595}%
\contentsline {subsubsection}{Computing Module dependencies}{578}{subsubsection*.2596}%
\contentsline {subsubsection}{Split compilation of native computation files}{578}{subsubsection*.2597}%
\contentsline {subsubsection}{Embedded Coq phrases inside LaTeX documents}{579}{subsubsection*.2598}%
\contentsline {subsubsection}{Man pages}{579}{subsubsection*.2599}%
\contentsline {subsection}{\numberline {4.2.3}Documenting Coq files with coqdoc}{579}{subsection.4.2.3}%
\contentsline {subsubsection}{Principles}{579}{subsubsection*.2600}%
\contentsline {paragraph}{Coq material inside documentation.}{579}{paragraph*.2601}%
\contentsline {paragraph}{Pretty\sphinxhyphen {}printing.}{580}{paragraph*.2602}%
\contentsline {paragraph}{Sections}{580}{paragraph*.2603}%
\contentsline {paragraph}{Lists.}{581}{paragraph*.2604}%
\contentsline {paragraph}{Rules.}{581}{paragraph*.2605}%
\contentsline {paragraph}{Emphasis.}{581}{paragraph*.2606}%
\contentsline {paragraph}{Escaping to LaTeX and HTML.}{581}{paragraph*.2607}%
\contentsline {paragraph}{Verbatim}{582}{paragraph*.2608}%
\contentsline {paragraph}{Hyperlinks}{582}{paragraph*.2609}%
\contentsline {paragraph}{Hiding / Showing parts of the source}{582}{paragraph*.2610}%
\contentsline {subsubsection}{Usage}{583}{subsubsection*.2611}%
\contentsline {paragraph}{Command line options}{583}{paragraph*.2612}%
\contentsline {subsubsection}{The coqdoc LaTeX style file}{586}{subsubsection*.2613}%
\contentsline {subsection}{\numberline {4.2.4}Coq Integrated Development Environment}{586}{subsection.4.2.4}%
\contentsline {subsubsection}{Managing files and buffers, basic editing}{587}{subsubsection*.2615}%
\contentsline {subsubsection}{Interactive navigation into Coq scripts}{588}{subsubsection*.2616}%
\contentsline {subsubsection}{Commands and templates}{589}{subsubsection*.2617}%
\contentsline {subsubsection}{Queries}{589}{subsubsection*.2618}%
\contentsline {subsubsection}{Compilation}{590}{subsubsection*.2619}%
\contentsline {subsubsection}{Customizations}{590}{subsubsection*.2620}%
\contentsline {subsubsection}{Using Unicode symbols}{591}{subsubsection*.2621}%
\contentsline {paragraph}{Displaying Unicode symbols}{591}{paragraph*.2622}%
\contentsline {paragraph}{Bindings for input of Unicode symbols}{591}{paragraph*.2623}%
\contentsline {paragraph}{Adding custom bindings}{591}{paragraph*.2624}%
\contentsline {paragraph}{Character encoding for saved files}{592}{paragraph*.2625}%
\contentsline {subsubsection}{Debugger}{592}{subsubsection*.2626}%
\contentsline {paragraph}{Breakpoints}{593}{paragraph*.2627}%
\contentsline {paragraph}{Call Stack and Variables}{594}{paragraph*.2628}%
\contentsline {paragraph}{Supported use cases}{595}{paragraph*.2629}%
\contentsline {subsection}{\numberline {4.2.5}Asynchronous and Parallel Proof Processing}{595}{subsection.4.2.5}%
\contentsline {subsubsection}{Proof annotations}{596}{subsubsection*.2630}%
\contentsline {paragraph}{Automatic suggestion of proof annotations}{596}{paragraph*.2631}%
\contentsline {subsubsection}{Proof blocks and error resilience}{596}{subsubsection*.2632}%
\contentsline {paragraph}{Caveats}{596}{paragraph*.2633}%
\contentsline {subsubsection}{Interactive mode}{597}{subsubsection*.2634}%
\contentsline {paragraph}{Caveats}{597}{paragraph*.2635}%
\contentsline {subsubsection}{Batch mode}{597}{subsubsection*.2636}%
\contentsline {subsubsection}{Limiting the number of parallel workers}{598}{subsubsection*.2637}%
\contentsline {chapter}{\numberline {5}Appendix}{599}{chapter.5}%
\contentsline {section}{\numberline {5.1}History and recent changes}{599}{section.5.1}%
\contentsline {subsection}{\numberline {5.1.1}Early history of Coq}{599}{subsection.5.1.1}%
\contentsline {subsubsection}{Historical roots}{599}{subsubsection*.2638}%
\contentsline {subsubsection}{Versions 1 to 5}{600}{subsubsection*.2639}%
\contentsline {paragraph}{Version 1}{602}{paragraph*.2640}%
\contentsline {paragraph}{Version 2}{602}{paragraph*.2641}%
\contentsline {paragraph}{Version 3}{603}{paragraph*.2642}%
\contentsline {paragraph}{Version 4}{603}{paragraph*.2643}%
\contentsline {paragraph}{Version 5}{605}{paragraph*.2644}%
\contentsline {subsubsection}{Versions 6}{605}{subsubsection*.2645}%
\contentsline {paragraph}{Version 6.1}{605}{paragraph*.2646}%
\contentsline {paragraph}{Version 6.2}{606}{paragraph*.2647}%
\contentsline {paragraph}{Version 6.3}{606}{paragraph*.2648}%
\contentsline {subsubsection}{Versions 7}{607}{subsubsection*.2649}%
\contentsline {paragraph}{Summary of changes}{607}{paragraph*.2650}%
\contentsline {paragraph}{Details of changes in 7.0 and 7.1}{608}{paragraph*.2651}%
\contentsline {subparagraph}{Main novelties}{608}{subparagraph*.2652}%
\contentsline {subparagraph}{Details of changes}{609}{subparagraph*.2653}%
\contentsline {subparagraph}{Language: new "let\sphinxhyphen {}in" construction}{609}{subparagraph*.2654}%
\contentsline {subparagraph}{Language: long names}{609}{subparagraph*.2655}%
\contentsline {subparagraph}{Language: miscellaneous}{609}{subparagraph*.2656}%
\contentsline {subparagraph}{Language: Cases}{609}{subparagraph*.2657}%
\contentsline {subparagraph}{Reduction}{610}{subparagraph*.2658}%
\contentsline {subparagraph}{New tactics}{610}{subparagraph*.2659}%
\contentsline {subparagraph}{Changes in existing tactics}{610}{subparagraph*.2660}%
\contentsline {subparagraph}{Efficiency}{611}{subparagraph*.2661}%
\contentsline {subparagraph}{Concrete syntax of constructions}{611}{subparagraph*.2662}%
\contentsline {subparagraph}{Parsing and grammar extension}{611}{subparagraph*.2663}%
\contentsline {subparagraph}{New commands}{612}{subparagraph*.2664}%
\contentsline {subparagraph}{Changes in existing commands}{612}{subparagraph*.2665}%
\contentsline {subparagraph}{Tools}{612}{subparagraph*.2666}%
\contentsline {subparagraph}{Extraction}{613}{subparagraph*.2667}%
\contentsline {subparagraph}{Standard library}{613}{subparagraph*.2668}%
\contentsline {subparagraph}{New user contributions}{613}{subparagraph*.2669}%
\contentsline {paragraph}{Details of changes in 7.2}{613}{paragraph*.2670}%
\contentsline {paragraph}{Details of changes in 7.3}{615}{paragraph*.2671}%
\contentsline {subparagraph}{Changes in 7.3.1}{616}{subparagraph*.2672}%
\contentsline {paragraph}{Details of changes in 7.4}{617}{paragraph*.2673}%
\contentsline {subsection}{\numberline {5.1.2}Recent changes}{619}{subsection.5.1.2}%
\contentsline {subsubsection}{Version 8.15}{619}{subsubsection*.2674}%
\contentsline {paragraph}{Summary of changes}{619}{paragraph*.2675}%
\contentsline {paragraph}{Changes in 8.15.0}{621}{paragraph*.2676}%
\contentsline {subparagraph}{Kernel}{621}{subparagraph*.2689}%
\contentsline {subparagraph}{Specification language, type inference}{621}{subparagraph*.2690}%
\contentsline {subparagraph}{Notations}{622}{subparagraph*.2691}%
\contentsline {subparagraph}{Tactics}{623}{subparagraph*.2692}%
\contentsline {subparagraph}{Tactic language}{625}{subparagraph*.2696}%
\contentsline {subparagraph}{SSReflect}{625}{subparagraph*.2697}%
\contentsline {subparagraph}{Commands and options}{626}{subparagraph*.2698}%
\contentsline {subparagraph}{Command\sphinxhyphen {}line tools}{627}{subparagraph*.2701}%
\contentsline {subparagraph}{CoqIDE}{628}{subparagraph*.2702}%
\contentsline {subparagraph}{Standard library}{628}{subparagraph*.2704}%
\contentsline {subparagraph}{Infrastructure and dependencies}{629}{subparagraph*.2705}%
\contentsline {subparagraph}{Extraction}{630}{subparagraph*.2706}%
\contentsline {subsubsection}{Version 8.14}{630}{subsubsection*.2707}%
\contentsline {paragraph}{Summary of changes}{630}{paragraph*.2708}%
\contentsline {paragraph}{Changes in 8.14.0}{632}{paragraph*.2709}%
\contentsline {subparagraph}{Kernel}{632}{subparagraph*.2723}%
\contentsline {subparagraph}{Specification language, type inference}{633}{subparagraph*.2725}%
\contentsline {subparagraph}{Notations}{633}{subparagraph*.2727}%
\contentsline {subparagraph}{Tactics}{634}{subparagraph*.2729}%
\contentsline {subparagraph}{Tactic language}{636}{subparagraph*.2731}%
\contentsline {subparagraph}{SSReflect}{637}{subparagraph*.2733}%
\contentsline {subparagraph}{Commands and options}{637}{subparagraph*.2734}%
\contentsline {subparagraph}{Command\sphinxhyphen {}line tools}{638}{subparagraph*.2735}%
\contentsline {subparagraph}{Native Compilation}{639}{subparagraph*.2736}%
\contentsline {subparagraph}{CoqIDE}{639}{subparagraph*.2738}%
\contentsline {subparagraph}{Standard library}{639}{subparagraph*.2740}%
\contentsline {subparagraph}{Infrastructure and dependencies}{642}{subparagraph*.2742}%
\contentsline {subparagraph}{Miscellaneous}{642}{subparagraph*.2744}%
\contentsline {paragraph}{Changes in 8.14.1}{643}{paragraph*.2745}%
\contentsline {subparagraph}{Kernel}{643}{subparagraph*.2746}%
\contentsline {subparagraph}{Specification language, type inference}{643}{subparagraph*.2747}%
\contentsline {subparagraph}{Tactics}{643}{subparagraph*.2748}%
\contentsline {subparagraph}{Commands and options}{643}{subparagraph*.2749}%
\contentsline {subsubsection}{Version 8.13}{643}{subsubsection*.2750}%
\contentsline {paragraph}{Summary of changes}{643}{paragraph*.2751}%
\contentsline {paragraph}{Changes in 8.13+beta1}{645}{paragraph*.2752}%
\contentsline {subparagraph}{Kernel}{645}{subparagraph*.2764}%
\contentsline {subparagraph}{Specification language, type inference}{646}{subparagraph*.2767}%
\contentsline {subparagraph}{Notations}{647}{subparagraph*.2772}%
\contentsline {subparagraph}{Tactics}{649}{subparagraph*.2773}%
\contentsline {subparagraph}{Tactic language}{650}{subparagraph*.2774}%
\contentsline {subparagraph}{SSReflect}{650}{subparagraph*.2775}%
\contentsline {subparagraph}{Commands and options}{650}{subparagraph*.2776}%
\contentsline {subparagraph}{Tools}{651}{subparagraph*.2778}%
\contentsline {subparagraph}{CoqIDE}{651}{subparagraph*.2779}%
\contentsline {subparagraph}{Standard library}{652}{subparagraph*.2780}%
\contentsline {subparagraph}{Infrastructure and dependencies}{653}{subparagraph*.2781}%
\contentsline {paragraph}{Changes in 8.13.0}{653}{paragraph*.2782}%
\contentsline {subparagraph}{Commands and options}{653}{subparagraph*.2783}%
\contentsline {paragraph}{Changes in 8.13.1}{653}{paragraph*.2784}%
\contentsline {subparagraph}{Kernel}{653}{subparagraph*.2785}%
\contentsline {subparagraph}{CoqIDE}{653}{subparagraph*.2786}%
\contentsline {paragraph}{Changes in 8.13.2}{653}{paragraph*.2787}%
\contentsline {subparagraph}{Kernel}{653}{subparagraph*.2788}%
\contentsline {subparagraph}{Tactic language}{654}{subparagraph*.2789}%
\contentsline {subsubsection}{Version 8.12}{654}{subsubsection*.2790}%
\contentsline {paragraph}{Summary of changes}{654}{paragraph*.2791}%
\contentsline {paragraph}{Changes in 8.12+beta1}{655}{paragraph*.2792}%
\contentsline {subparagraph}{Kernel}{656}{subparagraph*.2808}%
\contentsline {subparagraph}{Specification language, type inference}{656}{subparagraph*.2809}%
\contentsline {subparagraph}{Notations}{657}{subparagraph*.2813}%
\contentsline {subparagraph}{Tactics}{658}{subparagraph*.2814}%
\contentsline {subparagraph}{Tactic language}{660}{subparagraph*.2815}%
\contentsline {subparagraph}{SSReflect}{661}{subparagraph*.2816}%
\contentsline {subparagraph}{Flags, options and attributes}{661}{subparagraph*.2818}%
\contentsline {subparagraph}{Commands}{662}{subparagraph*.2819}%
\contentsline {subparagraph}{Tools}{663}{subparagraph*.2822}%
\contentsline {subparagraph}{CoqIDE}{665}{subparagraph*.2823}%
\contentsline {subparagraph}{Standard library}{665}{subparagraph*.2824}%
\contentsline {subparagraph}{Reals library}{668}{subparagraph*.2825}%
\contentsline {subparagraph}{Extraction}{669}{subparagraph*.2826}%
\contentsline {subparagraph}{Reference manual}{669}{subparagraph*.2827}%
\contentsline {subparagraph}{Infrastructure and dependencies}{670}{subparagraph*.2828}%
\contentsline {paragraph}{Changes in 8.12.0}{670}{paragraph*.2829}%
\contentsline {paragraph}{Changes in 8.12.1}{671}{paragraph*.2830}%
\contentsline {paragraph}{Changes in 8.12.2}{673}{paragraph*.2831}%
\contentsline {subsubsection}{Version 8.11}{673}{subsubsection*.2832}%
\contentsline {paragraph}{Summary of changes}{673}{paragraph*.2833}%
\contentsline {paragraph}{Changes in 8.11+beta1}{675}{paragraph*.2834}%
\contentsline {paragraph}{Changes in 8.11.0}{680}{paragraph*.2845}%
\contentsline {paragraph}{Changes in 8.11.1}{682}{paragraph*.2846}%
\contentsline {paragraph}{Changes in 8.11.2}{683}{paragraph*.2847}%
\contentsline {subsubsection}{Version 8.10}{683}{subsubsection*.2848}%
\contentsline {paragraph}{Summary of changes}{683}{paragraph*.2849}%
\contentsline {paragraph}{Other changes in 8.10+beta1}{686}{paragraph*.2850}%
\contentsline {paragraph}{Changes in 8.10+beta2}{692}{paragraph*.2851}%
\contentsline {paragraph}{Changes in 8.10+beta3}{692}{paragraph*.2852}%
\contentsline {paragraph}{Changes in 8.10.0}{693}{paragraph*.2853}%
\contentsline {paragraph}{Changes in 8.10.1}{693}{paragraph*.2854}%
\contentsline {paragraph}{Changes in 8.10.2}{694}{paragraph*.2855}%
\contentsline {subsubsection}{Version 8.9}{695}{subsubsection*.2856}%
\contentsline {paragraph}{Summary of changes}{695}{paragraph*.2857}%
\contentsline {paragraph}{Details of changes in 8.9+beta1}{697}{paragraph*.2858}%
\contentsline {paragraph}{Changes in 8.8.0}{699}{paragraph*.2859}%
\contentsline {paragraph}{Changes in 8.8.1}{700}{paragraph*.2860}%
\contentsline {subsubsection}{Version 8.8}{700}{subsubsection*.2861}%
\contentsline {paragraph}{Summary of changes}{700}{paragraph*.2862}%
\contentsline {paragraph}{Details of changes in 8.8+beta1}{701}{paragraph*.2863}%
\contentsline {paragraph}{Details of changes in 8.8.0}{704}{paragraph*.2864}%
\contentsline {paragraph}{Details of changes in 8.8.1}{704}{paragraph*.2865}%
\contentsline {paragraph}{Details of changes in 8.8.2}{705}{paragraph*.2866}%
\contentsline {subsubsection}{Version 8.7}{705}{subsubsection*.2867}%
\contentsline {paragraph}{Summary of changes}{705}{paragraph*.2868}%
\contentsline {paragraph}{Potential compatibility issues}{707}{paragraph*.2869}%
\contentsline {paragraph}{Details of changes in 8.7+beta1}{707}{paragraph*.2870}%
\contentsline {paragraph}{Details of changes in 8.7+beta2}{709}{paragraph*.2871}%
\contentsline {paragraph}{Details of changes in 8.7.0}{710}{paragraph*.2872}%
\contentsline {paragraph}{Details of changes in 8.7.1}{710}{paragraph*.2873}%
\contentsline {paragraph}{Details of changes in 8.7.2}{710}{paragraph*.2874}%
\contentsline {subsubsection}{Version 8.6}{710}{subsubsection*.2875}%
\contentsline {paragraph}{Summary of changes}{710}{paragraph*.2876}%
\contentsline {paragraph}{Potential sources of incompatibilities}{712}{paragraph*.2877}%
\contentsline {paragraph}{Details of changes in 8.6beta1}{712}{paragraph*.2878}%
\contentsline {paragraph}{Details of changes in 8.6}{714}{paragraph*.2879}%
\contentsline {paragraph}{Details of changes in 8.6.1}{714}{paragraph*.2880}%
\contentsline {subsubsection}{Version 8.5}{716}{subsubsection*.2881}%
\contentsline {paragraph}{Summary of changes}{716}{paragraph*.2882}%
\contentsline {paragraph}{Potential sources of incompatibilities}{718}{paragraph*.2883}%
\contentsline {paragraph}{Details of changes in 8.5beta1}{719}{paragraph*.2884}%
\contentsline {paragraph}{Details of changes in 8.5beta2}{726}{paragraph*.2885}%
\contentsline {paragraph}{Details of changes in 8.5beta3}{726}{paragraph*.2886}%
\contentsline {paragraph}{Details of changes in 8.5}{728}{paragraph*.2887}%
\contentsline {paragraph}{Details of changes in 8.5pl1}{728}{paragraph*.2888}%
\contentsline {paragraph}{Details of changes in 8.5pl2}{730}{paragraph*.2889}%
\contentsline {paragraph}{Details of changes in 8.5pl3}{731}{paragraph*.2890}%
\contentsline {subsubsection}{Version 8.4}{732}{subsubsection*.2891}%
\contentsline {paragraph}{Summary of changes}{732}{paragraph*.2892}%
\contentsline {paragraph}{Potential sources of incompatibilities}{734}{paragraph*.2893}%
\contentsline {paragraph}{Details of changes in 8.4beta}{735}{paragraph*.2894}%
\contentsline {paragraph}{Details of changes in 8.4beta2}{739}{paragraph*.2895}%
\contentsline {paragraph}{Details of changes in 8.4}{740}{paragraph*.2896}%
\contentsline {subsubsection}{Version 8.3}{740}{subsubsection*.2897}%
\contentsline {paragraph}{Summary of changes}{740}{paragraph*.2898}%
\contentsline {paragraph}{Details of changes}{741}{paragraph*.2899}%
\contentsline {subsubsection}{Version 8.2}{747}{subsubsection*.2900}%
\contentsline {paragraph}{Summary of changes}{747}{paragraph*.2901}%
\contentsline {paragraph}{Details of changes}{748}{paragraph*.2902}%
\contentsline {subsubsection}{Version 8.1}{756}{subsubsection*.2903}%
\contentsline {paragraph}{Summary of changes}{756}{paragraph*.2904}%
\contentsline {paragraph}{Details of changes in 8.1beta}{757}{paragraph*.2905}%
\contentsline {paragraph}{Details of changes in 8.1gamma}{760}{paragraph*.2906}%
\contentsline {paragraph}{Details of changes in 8.1}{761}{paragraph*.2907}%
\contentsline {subsubsection}{Version 8.0}{762}{subsubsection*.2908}%
\contentsline {paragraph}{Summary of changes}{762}{paragraph*.2909}%
\contentsline {paragraph}{Details of changes in 8.0beta old syntax}{763}{paragraph*.2910}%
\contentsline {paragraph}{Details of changes in 8.0beta new syntax}{766}{paragraph*.2911}%
\contentsline {paragraph}{Details of changes in 8.0}{767}{paragraph*.2912}%
\contentsline {chapter}{Bibliography}{769}{chapter*.2914}%
\contentsline {chapter}{Glossary}{773}{section*.2915}%
\contentsline {chapter}{Command Index}{775}{section*.2916}%
\contentsline {chapter}{Tactic Index}{779}{section*.2917}%
\contentsline {chapter}{Flags, options and Tables Index}{783}{section*.2918}%
\contentsline {chapter}{Gallina Index}{785}{section*.2919}%
\contentsline {chapter}{Errors and Warnings Index}{786}{section*.2920}%
\contentsline {chapter}{Attribute Index}{793}{section*.2921}%
\contentsline {chapter}{Index}{794}{section*.2922}%
