\select@language {english}
\contentsline {chapter}{\numberline {1}Introduction}{1}{chapter.1}% 
\contentsline {section}{\numberline {1.1}How to read this book}{1}{section.1.1}% 
\contentsline {section}{\numberline {1.2}List of additional documentation}{2}{section.1.2}% 
\contentsline {section}{\numberline {1.3}License}{2}{section.1.3}% 
\contentsline {chapter}{\numberline {2}Credits}{3}{chapter.2}% 
\contentsline {section}{\numberline {2.1}Credits: addendum for version 6.1}{5}{section.2.1}% 
\contentsline {section}{\numberline {2.2}Credits: addendum for version 6.2}{5}{section.2.2}% 
\contentsline {section}{\numberline {2.3}Credits: addendum for version 6.3}{6}{section.2.3}% 
\contentsline {section}{\numberline {2.4}Credits: versions 7}{7}{section.2.4}% 
\contentsline {section}{\numberline {2.5}Credits: version 8.0}{8}{section.2.5}% 
\contentsline {section}{\numberline {2.6}Credits: version 8.1}{9}{section.2.6}% 
\contentsline {section}{\numberline {2.7}Credits: version 8.2}{10}{section.2.7}% 
\contentsline {section}{\numberline {2.8}Credits: version 8.3}{11}{section.2.8}% 
\contentsline {section}{\numberline {2.9}Credits: version 8.4}{12}{section.2.9}% 
\contentsline {section}{\numberline {2.10}Credits: version 8.5}{14}{section.2.10}% 
\contentsline {section}{\numberline {2.11}Credits: version 8.6}{15}{section.2.11}% 
\contentsline {section}{\numberline {2.12}Credits: version 8.7}{17}{section.2.12}% 
\contentsline {section}{\numberline {2.13}Credits: version 8.8}{19}{section.2.13}% 
\contentsline {section}{\numberline {2.14}Credits: version 8.9}{20}{section.2.14}% 
\contentsline {chapter}{\numberline {3}The language}{23}{chapter.3}% 
\contentsline {section}{\numberline {3.1}The Gallina specification language}{23}{section.3.1}% 
\contentsline {subsection}{\numberline {3.1.1}About the grammars in the manual}{23}{subsection.3.1.1}% 
\contentsline {subsection}{\numberline {3.1.2}Lexical conventions}{23}{subsection.3.1.2}% 
\contentsline {subsection}{\numberline {3.1.3}Terms}{24}{subsection.3.1.3}% 
\contentsline {subsubsection}{Syntax of terms}{24}{subsubsection*.11}% 
\contentsline {subsubsection}{Types}{26}{subsubsection*.31}% 
\contentsline {subsubsection}{Qualified identifiers and simple identifiers}{26}{subsubsection*.33}% 
\contentsline {subsubsection}{Numerals}{26}{subsubsection*.34}% 
\contentsline {subsubsection}{Sorts}{26}{subsubsection*.35}% 
\contentsline {subsubsection}{Binders}{26}{subsubsection*.38}% 
\contentsline {subsubsection}{Abstractions}{27}{subsubsection*.39}% 
\contentsline {subsubsection}{Products}{27}{subsubsection*.40}% 
\contentsline {subsubsection}{Applications}{27}{subsubsection*.41}% 
\contentsline {subsubsection}{Type cast}{27}{subsubsection*.42}% 
\contentsline {subsubsection}{Inferable subterms}{27}{subsubsection*.43}% 
\contentsline {subsubsection}{Let-in definitions}{27}{subsubsection*.44}% 
\contentsline {subsubsection}{Definition by case analysis}{28}{subsubsection*.45}% 
\contentsline {subsubsection}{Recursive functions}{29}{subsubsection*.46}% 
\contentsline {subsection}{\numberline {3.1.4}The Vernacular}{29}{subsection.3.1.4}% 
\contentsline {subsubsection}{Assumptions}{30}{subsubsection*.62}% 
\contentsline {subsubsection}{Definitions}{31}{subsubsection*.77}% 
\contentsline {subsubsection}{Inductive definitions}{32}{subsubsection*.85}% 
\contentsline {paragraph}{Simple inductive types}{32}{paragraph*.86}% 
\contentsline {paragraph}{Simple annotated inductive types}{33}{paragraph*.90}% 
\contentsline {paragraph}{Parameterized inductive types}{34}{paragraph*.91}% 
\contentsline {paragraph}{Variants}{36}{paragraph*.93}% 
\contentsline {paragraph}{Mutually defined inductive types}{36}{paragraph*.96}% 
\contentsline {paragraph}{Co-inductive types}{37}{paragraph*.97}% 
\contentsline {subparagraph}{Caveat}{38}{subparagraph*.99}% 
\contentsline {subsubsection}{Definition of recursive functions}{39}{subsubsection*.100}% 
\contentsline {paragraph}{Definition of functions by recursion over inductive objects}{39}{paragraph*.101}% 
\contentsline {paragraph}{Definitions of recursive objects in co-inductive types}{41}{paragraph*.104}% 
\contentsline {subsubsection}{Assertions and proofs}{42}{subsubsection*.106}% 
\contentsline {subsubsection}{Attributes}{44}{subsubsection*.116}% 
\contentsline {section}{\numberline {3.2}Extensions of Gallina}{45}{section.3.2}% 
\contentsline {subsection}{\numberline {3.2.1}Record types}{45}{subsection.3.2.1}% 
\contentsline {subsubsection}{Primitive Projections}{48}{subsubsection*.137}% 
\contentsline {paragraph}{Primitive Record Types}{49}{paragraph*.141}% 
\contentsline {paragraph}{Reduction}{49}{paragraph*.142}% 
\contentsline {paragraph}{Compatibility Projections and \sphinxstyleliteralintitle {\sphinxupquote {match}}}{49}{paragraph*.143}% 
\contentsline {subsection}{\numberline {3.2.2}Variants and extensions of \sphinxstyleliteralintitle {\sphinxupquote {match}}}{50}{subsection.3.2.2}% 
\contentsline {subsubsection}{Multiple and nested pattern matching}{50}{subsubsection*.144}% 
\contentsline {subsubsection}{Pattern-matching on boolean values: the if expression}{50}{subsubsection*.145}% 
\contentsline {subsubsection}{Irrefutable patterns: the destructuring let variants}{51}{subsubsection*.146}% 
\contentsline {paragraph}{First destructuring let syntax}{51}{paragraph*.147}% 
\contentsline {paragraph}{Second destructuring let syntax}{51}{paragraph*.148}% 
\contentsline {subsubsection}{Controlling pretty-printing of match expressions}{52}{subsubsection*.149}% 
\contentsline {paragraph}{Printing nested patterns}{52}{paragraph*.150}% 
\contentsline {paragraph}{Factorization of clauses with same right-hand side}{52}{paragraph*.152}% 
\contentsline {paragraph}{Use of a default clause}{52}{paragraph*.154}% 
\contentsline {paragraph}{Printing of wildcard patterns}{52}{paragraph*.156}% 
\contentsline {paragraph}{Printing of the elimination predicate}{52}{paragraph*.158}% 
\contentsline {paragraph}{Printing matching on irrefutable patterns}{53}{paragraph*.160}% 
\contentsline {paragraph}{Printing matching on booleans}{53}{paragraph*.162}% 
\contentsline {subsection}{\numberline {3.2.3}Advanced recursive functions}{53}{subsection.3.2.3}% 
\contentsline {subsection}{\numberline {3.2.4}Section mechanism}{56}{subsection.3.2.4}% 
\contentsline {subsection}{\numberline {3.2.5}Module system}{58}{subsection.3.2.5}% 
\contentsline {subsubsection}{Reserved commands inside an interactive module}{59}{subsubsection*.189}% 
\contentsline {subsubsection}{Reserved commands inside an interactive module type:}{59}{subsubsection*.195}% 
\contentsline {subsection}{\numberline {3.2.6}Libraries and qualified names}{65}{subsection.3.2.6}% 
\contentsline {subsubsection}{Names of libraries}{65}{subsubsection*.207}% 
\contentsline {subsubsection}{Qualified names}{65}{subsubsection*.208}% 
\contentsline {subsubsection}{Libraries and filesystem}{66}{subsubsection*.209}% 
\contentsline {subsection}{\numberline {3.2.7}Implicit arguments}{67}{subsection.3.2.7}% 
\contentsline {subsubsection}{The different kinds of implicit arguments}{67}{subsubsection*.210}% 
\contentsline {paragraph}{Implicit arguments inferable from the knowledge of other arguments of a function}{67}{paragraph*.211}% 
\contentsline {paragraph}{Implicit arguments inferable by resolution}{68}{paragraph*.212}% 
\contentsline {subsubsection}{Maximal or non maximal insertion of implicit arguments}{68}{subsubsection*.213}% 
\contentsline {subsubsection}{Casual use of implicit arguments}{68}{subsubsection*.214}% 
\contentsline {subsubsection}{Declaration of implicit arguments}{68}{subsubsection*.216}% 
\contentsline {paragraph}{Implicit Argument Binders}{69}{paragraph*.217}% 
\contentsline {paragraph}{Declaring Implicit Arguments}{69}{paragraph*.218}% 
\contentsline {subsubsection}{Automatic declaration of implicit arguments}{71}{subsubsection*.221}% 
\contentsline {subsubsection}{Mode for automatic declaration of implicit arguments}{72}{subsubsection*.222}% 
\contentsline {subsubsection}{Controlling strict implicit arguments}{72}{subsubsection*.224}% 
\contentsline {subsubsection}{Controlling contextual implicit arguments}{73}{subsubsection*.227}% 
\contentsline {subsubsection}{Controlling reversible-pattern implicit arguments}{73}{subsubsection*.229}% 
\contentsline {subsubsection}{Controlling the insertion of implicit arguments not followed by explicit arguments}{73}{subsubsection*.231}% 
\contentsline {subsubsection}{Explicit applications}{73}{subsubsection*.233}% 
\contentsline {subsubsection}{Renaming implicit arguments}{74}{subsubsection*.237}% 
\contentsline {subsubsection}{Displaying what the implicit arguments are}{74}{subsubsection*.238}% 
\contentsline {subsubsection}{Explicit displaying of implicit arguments for pretty-printing}{74}{subsubsection*.240}% 
\contentsline {subsubsection}{Interaction with subtyping}{74}{subsubsection*.243}% 
\contentsline {subsubsection}{Deactivation of implicit arguments for parsing}{75}{subsubsection*.244}% 
\contentsline {subsubsection}{Canonical structures}{75}{subsubsection*.246}% 
\contentsline {subsubsection}{Implicit types of variables}{76}{subsubsection*.249}% 
\contentsline {subsubsection}{Implicit generalization}{77}{subsubsection*.251}% 
\contentsline {subsection}{\numberline {3.2.8}Coercions}{78}{subsection.3.2.8}% 
\contentsline {subsection}{\numberline {3.2.9}Printing constructions in full}{78}{subsection.3.2.9}% 
\contentsline {subsection}{\numberline {3.2.10}Printing universes}{79}{subsection.3.2.10}% 
\contentsline {subsection}{\numberline {3.2.11}Existential variables}{79}{subsection.3.2.11}% 
\contentsline {subsubsection}{Explicit displaying of existential instances for pretty-printing}{80}{subsubsection*.259}% 
\contentsline {subsubsection}{Solving existential variables using tactics}{80}{subsubsection*.261}% 
\contentsline {section}{\numberline {3.3}The Coq library}{80}{section.3.3}% 
\contentsline {subsection}{\numberline {3.3.1}The basic library}{81}{subsection.3.3.1}% 
\contentsline {subsubsection}{Notations}{81}{subsubsection*.262}% 
\contentsline {subsubsection}{Logic}{82}{subsubsection*.263}% 
\contentsline {paragraph}{Propositional Connectives}{82}{paragraph*.265}% 
\contentsline {paragraph}{Quantifiers}{82}{paragraph*.266}% 
\contentsline {paragraph}{Equality}{83}{paragraph*.267}% 
\contentsline {paragraph}{Lemmas}{83}{paragraph*.268}% 
\contentsline {subsubsection}{Datatypes}{84}{subsubsection*.270}% 
\contentsline {paragraph}{Programming}{84}{paragraph*.273}% 
\contentsline {subsubsection}{Specification}{84}{subsubsection*.276}% 
\contentsline {subsubsection}{Basic Arithmetics}{86}{subsubsection*.284}% 
\contentsline {subsubsection}{Well-founded recursion}{87}{subsubsection*.287}% 
\contentsline {subsubsection}{Accessing the Type level}{88}{subsubsection*.290}% 
\contentsline {subsubsection}{Tactics}{88}{subsubsection*.293}% 
\contentsline {subsection}{\numberline {3.3.2}The standard library}{88}{subsection.3.3.2}% 
\contentsline {subsubsection}{Survey}{88}{subsubsection*.294}% 
\contentsline {subsubsection}{Peano’s arithmetic (nat)}{89}{subsubsection*.295}% 
\contentsline {subsubsection}{Notations for integer arithmetics}{89}{subsubsection*.296}% 
\contentsline {subsubsection}{Real numbers library}{90}{subsubsection*.297}% 
\contentsline {paragraph}{Notations for real numbers}{90}{paragraph*.298}% 
\contentsline {paragraph}{Some tactics for real numbers}{91}{paragraph*.299}% 
\contentsline {subsubsection}{List library}{93}{subsubsection*.303}% 
\contentsline {subsection}{\numberline {3.3.3}Users’ contributions}{93}{subsection.3.3.3}% 
\contentsline {section}{\numberline {3.4}Calculus of Inductive Constructions}{93}{section.3.4}% 
\contentsline {subsection}{\numberline {3.4.1}The terms}{93}{subsection.3.4.1}% 
\contentsline {subsubsection}{Sorts}{94}{subsubsection*.304}% 
\contentsline {subsubsection}{Terms}{94}{subsubsection*.306}% 
\contentsline {subsection}{\numberline {3.4.2}Typing rules}{95}{subsection.3.4.2}% 
\contentsline {subsection}{\numberline {3.4.3}Conversion rules}{97}{subsection.3.4.3}% 
\contentsline {subsubsection}{β-reduction}{98}{subsubsection*.329}% 
\contentsline {subsubsection}{ι-reduction}{98}{subsubsection*.330}% 
\contentsline {subsubsection}{δ-reduction}{98}{subsubsection*.331}% 
\contentsline {subsubsection}{ζ-reduction}{98}{subsubsection*.334}% 
\contentsline {subsubsection}{η-expansion}{98}{subsubsection*.336}% 
\contentsline {subsubsection}{Convertibility}{99}{subsubsection*.337}% 
\contentsline {subsection}{\numberline {3.4.4}Subtyping rules}{100}{subsection.3.4.4}% 
\contentsline {subsection}{\numberline {3.4.5}Inductive Definitions}{101}{subsection.3.4.5}% 
\contentsline {subsubsection}{Types of inductive objects}{102}{subsubsection*.340}% 
\contentsline {subsubsection}{Well-formed inductive definitions}{102}{subsubsection*.343}% 
\contentsline {paragraph}{Arity of a given sort}{103}{paragraph*.344}% 
\contentsline {paragraph}{Arity}{103}{paragraph*.345}% 
\contentsline {paragraph}{Type of constructor}{103}{paragraph*.346}% 
\contentsline {paragraph}{Positivity Condition}{103}{paragraph*.347}% 
\contentsline {paragraph}{Strict positivity}{103}{paragraph*.348}% 
\contentsline {paragraph}{Nested Positivity}{104}{paragraph*.349}% 
\contentsline {paragraph}{Correctness rules}{104}{paragraph*.350}% 
\contentsline {paragraph}{Template polymorphism}{105}{paragraph*.352}% 
\contentsline {subsubsection}{Destructors}{107}{subsubsection*.354}% 
\contentsline {paragraph}{The match ... with ... end construction}{108}{paragraph*.355}% 
\contentsline {subsubsection}{Fixpoint definitions}{112}{subsubsection*.368}% 
\contentsline {paragraph}{Typing rule}{112}{paragraph*.369}% 
\contentsline {paragraph}{Reduction rule}{114}{paragraph*.371}% 
\contentsline {subsection}{\numberline {3.4.6}Admissible rules for global environments}{114}{subsection.3.4.6}% 
\contentsline {subsection}{\numberline {3.4.7}Co-inductive types}{115}{subsection.3.4.7}% 
\contentsline {subsection}{\numberline {3.4.8}The Calculus of Inductive Constructions with impredicative Set}{116}{subsection.3.4.8}% 
\contentsline {section}{\numberline {3.5}The Module System}{116}{section.3.5}% 
\contentsline {subsection}{\numberline {3.5.1}Modules and module types}{116}{subsection.3.5.1}% 
\contentsline {subsection}{\numberline {3.5.2}Typing Modules}{117}{subsection.3.5.2}% 
\contentsline {chapter}{\numberline {4}The proof engine}{123}{chapter.4}% 
\contentsline {section}{\numberline {4.1}Vernacular commands}{123}{section.4.1}% 
\contentsline {subsection}{\numberline {4.1.1}Displaying}{123}{subsection.4.1.1}% 
\contentsline {subsection}{\numberline {4.1.2}Flags, Options and Tables}{123}{subsection.4.1.2}% 
\contentsline {subsubsection}{Scope qualifiers for \sphinxstyleliteralintitle {\sphinxupquote {Set}} and \sphinxstyleliteralintitle {\sphinxupquote {Unset}}}{124}{subsubsection*.448}% 
\contentsline {subsection}{\numberline {4.1.3}Requests to the environment}{125}{subsection.4.1.3}% 
\contentsline {subsection}{\numberline {4.1.4}Loading files}{130}{subsection.4.1.4}% 
\contentsline {subsection}{\numberline {4.1.5}Compiled files}{130}{subsection.4.1.5}% 
\contentsline {subsection}{\numberline {4.1.6}Loadpath}{132}{subsection.4.1.6}% 
\contentsline {subsection}{\numberline {4.1.7}Backtracking}{133}{subsection.4.1.7}% 
\contentsline {subsection}{\numberline {4.1.8}Quitting and debugging}{134}{subsection.4.1.8}% 
\contentsline {subsection}{\numberline {4.1.9}Controlling display}{135}{subsection.4.1.9}% 
\contentsline {subsection}{\numberline {4.1.10}Controlling the reduction strategies and the conversion algorithm}{135}{subsection.4.1.10}% 
\contentsline {subsection}{\numberline {4.1.11}Controlling the locality of commands}{137}{subsection.4.1.11}% 
\contentsline {section}{\numberline {4.2}Proof handling}{137}{section.4.2}% 
\contentsline {subsection}{\numberline {4.2.1}Switching on/off the proof editing mode}{138}{subsection.4.2.1}% 
\contentsline {subsubsection}{Proof using options}{140}{subsubsection*.540}% 
\contentsline {subsubsection}{Name a set of section hypotheses for \sphinxstyleliteralintitle {\sphinxupquote {Proof using}}}{140}{subsubsection*.543}% 
\contentsline {subsection}{\numberline {4.2.2}Navigation in the proof tree}{141}{subsection.4.2.2}% 
\contentsline {subsubsection}{Bullets}{142}{subsubsection*.558}% 
\contentsline {subsubsection}{Set Bullet Behavior}{146}{subsubsection*.563}% 
\contentsline {subsection}{\numberline {4.2.3}Requesting information}{146}{subsection.4.2.3}% 
\contentsline {subsection}{\numberline {4.2.4}Showing differences between proof steps}{148}{subsection.4.2.4}% 
\contentsline {subsubsection}{How to enable diffs}{148}{subsubsection*.576}% 
\contentsline {subsubsection}{How diffs are calculated}{149}{subsubsection*.578}% 
\contentsline {subsection}{\numberline {4.2.5}Controlling the effect of proof editing commands}{149}{subsection.4.2.5}% 
\contentsline {subsection}{\numberline {4.2.6}Controlling memory usage}{150}{subsection.4.2.6}% 
\contentsline {section}{\numberline {4.3}Tactics}{150}{section.4.3}% 
\contentsline {subsection}{\numberline {4.3.1}Invocation of tactics}{150}{subsection.4.3.1}% 
\contentsline {subsubsection}{Bindings list}{151}{subsubsection*.587}% 
\contentsline {subsubsection}{Occurrence sets and occurrence clauses}{151}{subsubsection*.592}% 
\contentsline {subsection}{\numberline {4.3.2}Applying theorems}{152}{subsection.4.3.2}% 
\contentsline {subsection}{\numberline {4.3.3}Managing the local context}{158}{subsection.4.3.3}% 
\contentsline {subsection}{\numberline {4.3.4}Controlling the proof flow}{167}{subsection.4.3.4}% 
\contentsline {subsection}{\numberline {4.3.5}Case analysis and induction}{170}{subsection.4.3.5}% 
\contentsline {subsection}{\numberline {4.3.6}Rewriting expressions}{187}{subsection.4.3.6}% 
\contentsline {subsection}{\numberline {4.3.7}Performing computations}{190}{subsection.4.3.7}% 
\contentsline {subsubsection}{Conversion tactics applied to hypotheses}{196}{subsubsection*.769}% 
\contentsline {subsection}{\numberline {4.3.8}Automation}{197}{subsection.4.3.8}% 
\contentsline {subsection}{\numberline {4.3.9}Controlling automation}{200}{subsection.4.3.9}% 
\contentsline {subsubsection}{The hints databases for auto and eauto}{200}{subsubsection*.786}% 
\contentsline {paragraph}{Creating Hint databases}{200}{paragraph*.788}% 
\contentsline {subsubsection}{Hint databases defined in the Coq standard library}{203}{subsubsection*.805}% 
\contentsline {subsubsection}{Hint locality}{204}{subsubsection*.813}% 
\contentsline {subsubsection}{Setting implicit automation tactics}{205}{subsubsection*.815}% 
\contentsline {subsection}{\numberline {4.3.10}Decision procedures}{206}{subsection.4.3.10}% 
\contentsline {subsection}{\numberline {4.3.11}Checking properties of terms}{210}{subsection.4.3.11}% 
\contentsline {subsection}{\numberline {4.3.12}Equality}{211}{subsection.4.3.12}% 
\contentsline {subsection}{\numberline {4.3.13}Equality and inductive sets}{211}{subsection.4.3.13}% 
\contentsline {subsection}{\numberline {4.3.14}Inversion}{212}{subsection.4.3.14}% 
\contentsline {subsection}{\numberline {4.3.15}Classical tactics}{212}{subsection.4.3.15}% 
\contentsline {subsection}{\numberline {4.3.16}Automating}{213}{subsection.4.3.16}% 
\contentsline {subsection}{\numberline {4.3.17}Non-logical tactics}{214}{subsection.4.3.17}% 
\contentsline {subsection}{\numberline {4.3.18}Simple tactic macros}{218}{subsection.4.3.18}% 
\contentsline {section}{\numberline {4.4}The tactic language}{218}{section.4.4}% 
\contentsline {subsection}{\numberline {4.4.1}Syntax}{219}{subsection.4.4.1}% 
\contentsline {subsection}{\numberline {4.4.2}Semantics}{221}{subsection.4.4.2}% 
\contentsline {subsubsection}{Sequence}{221}{subsubsection*.897}% 
\contentsline {subsubsection}{Local application of tactics}{221}{subsubsection*.899}% 
\contentsline {subsubsection}{Goal selectors}{222}{subsubsection*.901}% 
\contentsline {subsubsection}{For loop}{223}{subsubsection*.907}% 
\contentsline {subsubsection}{Repeat loop}{223}{subsubsection*.909}% 
\contentsline {subsubsection}{Error catching}{223}{subsubsection*.911}% 
\contentsline {subsubsection}{Detecting progress}{223}{subsubsection*.913}% 
\contentsline {subsubsection}{Backtracking branching}{223}{subsubsection*.916}% 
\contentsline {subsubsection}{First tactic to work}{224}{subsubsection*.918}% 
\contentsline {subsubsection}{Left-biased branching}{224}{subsubsection*.921}% 
\contentsline {subsubsection}{Generalized biased branching}{224}{subsubsection*.923}% 
\contentsline {subsubsection}{Soft cut}{225}{subsubsection*.925}% 
\contentsline {subsubsection}{Checking the successes}{225}{subsubsection*.927}% 
\contentsline {subsubsection}{Checking the failure}{225}{subsubsection*.930}% 
\contentsline {subsubsection}{Checking the success}{225}{subsubsection*.932}% 
\contentsline {subsubsection}{Solving}{225}{subsubsection*.934}% 
\contentsline {subsubsection}{Identity}{226}{subsubsection*.937}% 
\contentsline {subsubsection}{Failing}{226}{subsubsection*.939}% 
\contentsline {subsubsection}{Timeout}{229}{subsubsection*.944}% 
\contentsline {subsubsection}{Timing a tactic}{229}{subsubsection*.946}% 
\contentsline {subsubsection}{Timing a tactic that evaluates to a term}{229}{subsubsection*.948}% 
\contentsline {subsubsection}{Local definitions}{230}{subsubsection*.952}% 
\contentsline {subsubsection}{Application}{230}{subsubsection*.954}% 
\contentsline {subsubsection}{Function construction}{231}{subsubsection*.955}% 
\contentsline {subsubsection}{Pattern matching on terms}{231}{subsubsection*.956}% 
\contentsline {subsubsection}{Pattern matching on goals}{232}{subsubsection*.959}% 
\contentsline {subsubsection}{Filling a term context}{233}{subsubsection*.962}% 
\contentsline {subsubsection}{Generating fresh hypothesis names}{233}{subsubsection*.965}% 
\contentsline {subsubsection}{Computing in a constr}{234}{subsubsection*.966}% 
\contentsline {subsubsection}{Recovering the type of a term}{234}{subsubsection*.967}% 
\contentsline {subsubsection}{Manipulating untyped terms}{234}{subsubsection*.968}% 
\contentsline {subsubsection}{Counting the goals}{234}{subsubsection*.969}% 
\contentsline {subsubsection}{Testing boolean expressions}{234}{subsubsection*.970}% 
\contentsline {subsubsection}{Proving a subgoal as a separate lemma}{235}{subsubsection*.973}% 
\contentsline {subsection}{\numberline {4.4.3}Tactic toplevel definitions}{235}{subsection.4.4.3}% 
\contentsline {subsubsection}{Defining \sphinxstyleliteralintitle {\sphinxupquote {L}}$_{\text {tac}}$ functions}{236}{subsubsection*.977}% 
\contentsline {subsubsection}{Printing \sphinxstyleliteralintitle {\sphinxupquote {L}}$_{\text {tac}}$ tactics}{236}{subsubsection*.979}% 
\contentsline {subsection}{\numberline {4.4.4}Debugging \sphinxstyleliteralintitle {\sphinxupquote {L}}$_{\text {tac}}$ tactics}{236}{subsection.4.4.4}% 
\contentsline {subsubsection}{Info trace}{236}{subsubsection*.982}% 
\contentsline {subsubsection}{Interactive debugger}{237}{subsubsection*.985}% 
\contentsline {subsubsection}{Profiling \sphinxstyleliteralintitle {\sphinxupquote {L}}$_{\text {tac}}$ tactics}{237}{subsubsection*.989}% 
\contentsline {subsubsection}{Run-time optimization tactic}{239}{subsubsection*.997}% 
\contentsline {section}{\numberline {4.5}Detailed examples of tactics}{239}{section.4.5}% 
\contentsline {subsection}{\numberline {4.5.1}dependent induction}{240}{subsection.4.5.1}% 
\contentsline {subsubsection}{A larger example}{242}{subsubsection*.999}% 
\contentsline {subsection}{\numberline {4.5.2}autorewrite}{245}{subsection.4.5.2}% 
\contentsline {subsection}{\numberline {4.5.3}quote}{246}{subsection.4.5.3}% 
\contentsline {subsubsection}{Introducing variables map}{247}{subsubsection*.1000}% 
\contentsline {subsubsection}{Combining variables and constants}{248}{subsubsection*.1001}% 
\contentsline {subsection}{\numberline {4.5.4}Using the tactic language}{250}{subsection.4.5.4}% 
\contentsline {subsubsection}{About the cardinality of the set of natural numbers}{250}{subsubsection*.1002}% 
\contentsline {subsubsection}{Permutations of lists}{250}{subsubsection*.1003}% 
\contentsline {subsubsection}{Deciding intuitionistic propositional logic}{252}{subsubsection*.1004}% 
\contentsline {subsubsection}{Deciding type isomorphisms}{253}{subsubsection*.1005}% 
\contentsline {section}{\numberline {4.6}The SSReflect proof language}{255}{section.4.6}% 
\contentsline {subsection}{\numberline {4.6.1}Introduction}{255}{subsection.4.6.1}% 
\contentsline {subsubsection}{Acknowledgments}{256}{subsubsection*.1006}% 
\contentsline {subsection}{\numberline {4.6.2}Usage}{256}{subsection.4.6.2}% 
\contentsline {subsubsection}{Getting started}{256}{subsubsection*.1007}% 
\contentsline {subsubsection}{Compatibility issues}{256}{subsubsection*.1008}% 
\contentsline {subsection}{\numberline {4.6.3}Gallina extensions}{257}{subsection.4.6.3}% 
\contentsline {subsubsection}{Pattern assignment}{257}{subsubsection*.1009}% 
\contentsline {subsubsection}{Pattern conditional}{258}{subsubsection*.1010}% 
\contentsline {subsubsection}{Parametric polymorphism}{259}{subsubsection*.1011}% 
\contentsline {subsubsection}{Anonymous arguments}{260}{subsubsection*.1013}% 
\contentsline {subsubsection}{Wildcards}{260}{subsubsection*.1014}% 
\contentsline {subsubsection}{Definitions}{261}{subsubsection*.1015}% 
\contentsline {subsubsection}{Abbreviations}{262}{subsubsection*.1017}% 
\contentsline {paragraph}{Matching}{263}{paragraph*.1020}% 
\contentsline {paragraph}{Occurrence selection}{265}{paragraph*.1021}% 
\contentsline {subsubsection}{Basic localization}{267}{subsubsection*.1022}% 
\contentsline {subsection}{\numberline {4.6.4}Basic tactics}{268}{subsection.4.6.4}% 
\contentsline {subsubsection}{Bookkeeping}{268}{subsubsection*.1023}% 
\contentsline {subsubsection}{The defective tactics}{271}{subsubsection*.1024}% 
\contentsline {paragraph}{The move tactic.}{272}{paragraph*.1025}% 
\contentsline {paragraph}{The case tactic}{272}{paragraph*.1027}% 
\contentsline {paragraph}{The elim tactic}{272}{paragraph*.1028}% 
\contentsline {paragraph}{The apply tactic}{273}{paragraph*.1030}% 
\contentsline {subsubsection}{Discharge}{274}{subsubsection*.1032}% 
\contentsline {paragraph}{Clear rules}{275}{paragraph*.1036}% 
\contentsline {paragraph}{Matching for apply and exact}{275}{paragraph*.1037}% 
\contentsline {paragraph}{The abstract tactic}{276}{paragraph*.1038}% 
\contentsline {subsubsection}{Introduction in the context}{277}{subsubsection*.1040}% 
\contentsline {subsubsection}{Generation of equations}{279}{subsubsection*.1045}% 
\contentsline {subsubsection}{Type families}{280}{subsubsection*.1046}% 
\contentsline {subsection}{\numberline {4.6.5}Control flow}{283}{subsection.4.6.5}% 
\contentsline {subsubsection}{Indentation and bullets}{283}{subsubsection*.1048}% 
\contentsline {subsubsection}{Terminators}{284}{subsubsection*.1049}% 
\contentsline {subsubsection}{Selectors}{285}{subsubsection*.1052}% 
\contentsline {subsubsection}{Iteration}{287}{subsubsection*.1057}% 
\contentsline {subsubsection}{Localization}{287}{subsubsection*.1060}% 
\contentsline {subsubsection}{Structure}{288}{subsubsection*.1062}% 
\contentsline {paragraph}{The have tactic.}{289}{paragraph*.1063}% 
\contentsline {paragraph}{Generating let in context entries with have}{292}{paragraph*.1065}% 
\contentsline {paragraph}{The have tactic and typeclass resolution}{295}{paragraph*.1066}% 
\contentsline {paragraph}{Variants: the suff and wlog tactics}{295}{paragraph*.1068}% 
\contentsline {subparagraph}{Advanced generalization}{298}{subparagraph*.1071}% 
\contentsline {subsection}{\numberline {4.6.6}Rewriting}{299}{subsection.4.6.6}% 
\contentsline {subsubsection}{An extended rewrite tactic}{299}{subsubsection*.1072}% 
\contentsline {subsubsection}{Remarks and examples}{301}{subsubsection*.1078}% 
\contentsline {paragraph}{Rewrite redex selection}{301}{paragraph*.1079}% 
\contentsline {paragraph}{Chained rewrite steps}{302}{paragraph*.1080}% 
\contentsline {paragraph}{Explicit redex switches are matched first}{303}{paragraph*.1081}% 
\contentsline {paragraph}{Occurrence switches and redex switches}{303}{paragraph*.1082}% 
\contentsline {paragraph}{Occurrence selection and repetition}{304}{paragraph*.1083}% 
\contentsline {paragraph}{Multi-rule rewriting}{305}{paragraph*.1084}% 
\contentsline {paragraph}{Wildcards vs abstractions}{308}{paragraph*.1085}% 
\contentsline {paragraph}{When SSReflect rewrite fails on standard Coq licit rewrite}{308}{paragraph*.1086}% 
\contentsline {paragraph}{Existential metavariables and rewriting}{310}{paragraph*.1087}% 
\contentsline {subsubsection}{Locking, unlocking}{311}{subsubsection*.1088}% 
\contentsline {subsubsection}{Congruence}{313}{subsubsection*.1090}% 
\contentsline {subsection}{\numberline {4.6.7}Contextual patterns}{316}{subsection.4.6.7}% 
\contentsline {subsubsection}{Syntax}{316}{subsubsection*.1092}% 
\contentsline {subsubsection}{Matching contextual patterns}{317}{subsubsection*.1093}% 
\contentsline {subsubsection}{Examples}{317}{subsubsection*.1094}% 
\contentsline {paragraph}{Contextual pattern in set and the : tactical}{317}{paragraph*.1095}% 
\contentsline {paragraph}{Contextual patterns in rewrite}{318}{paragraph*.1096}% 
\contentsline {subsubsection}{Patterns for recurrent contexts}{319}{subsubsection*.1097}% 
\contentsline {subsection}{\numberline {4.6.8}Views and reflection}{320}{subsection.4.6.8}% 
\contentsline {subsubsection}{Interpreting eliminations}{320}{subsubsection*.1098}% 
\contentsline {subsubsection}{Interpreting assumptions}{324}{subsubsection*.1099}% 
\contentsline {paragraph}{Specializing assumptions}{326}{paragraph*.1100}% 
\contentsline {subsubsection}{Interpreting goals}{327}{subsubsection*.1101}% 
\contentsline {subsubsection}{Boolean reflection}{328}{subsubsection*.1102}% 
\contentsline {subsubsection}{The reflect predicate}{329}{subsubsection*.1103}% 
\contentsline {subsubsection}{General mechanism for interpreting goals and assumptions}{331}{subsubsection*.1104}% 
\contentsline {paragraph}{Specializing assumptions}{331}{paragraph*.1105}% 
\contentsline {paragraph}{Interpreting assumptions}{331}{paragraph*.1106}% 
\contentsline {subsubsection}{Interpreting equivalences}{333}{subsubsection*.1107}% 
\contentsline {subsubsection}{Declaring new Hint Views}{334}{subsubsection*.1108}% 
\contentsline {subsubsection}{Multiple views}{335}{subsubsection*.1111}% 
\contentsline {subsection}{\numberline {4.6.9}SSReflect searching tool}{335}{subsection.4.6.9}% 
\contentsline {subsection}{\numberline {4.6.10}Synopsis and Index}{337}{subsection.4.6.10}% 
\contentsline {subsubsection}{Parameters}{337}{subsubsection*.1113}% 
\contentsline {subsubsection}{Items and switches}{337}{subsubsection*.1118}% 
\contentsline {subsubsection}{Tactics}{338}{subsubsection*.1125}% 
\contentsline {subsubsection}{Tacticals}{340}{subsubsection*.1129}% 
\contentsline {subsubsection}{Commands}{340}{subsubsection*.1130}% 
\contentsline {chapter}{\numberline {5}User extensions}{341}{chapter.5}% 
\contentsline {section}{\numberline {5.1}Syntax extensions and interpretation scopes}{341}{section.5.1}% 
\contentsline {subsection}{\numberline {5.1.1}Notations}{341}{subsection.5.1.1}% 
\contentsline {subsubsection}{Basic notations}{341}{subsubsection*.1132}% 
\contentsline {subsubsection}{Precedences and associativity}{342}{subsubsection*.1134}% 
\contentsline {subsubsection}{Complex notations}{342}{subsubsection*.1135}% 
\contentsline {subsubsection}{Simple factorization rules}{343}{subsubsection*.1136}% 
\contentsline {subsubsection}{Displaying symbolic notations}{343}{subsubsection*.1139}% 
\contentsline {subsubsection}{The Infix command}{345}{subsubsection*.1140}% 
\contentsline {subsubsection}{Reserving notations}{345}{subsubsection*.1142}% 
\contentsline {subsubsection}{Simultaneous definition of terms and notations}{345}{subsubsection*.1143}% 
\contentsline {subsubsection}{Displaying information about notations}{346}{subsubsection*.1144}% 
\contentsline {subsubsection}{Locating notations}{346}{subsubsection*.1146}% 
\contentsline {subsubsection}{Notations and binders}{346}{subsubsection*.1147}% 
\contentsline {paragraph}{Binders bound in the notation and parsed as identifiers}{346}{paragraph*.1148}% 
\contentsline {paragraph}{Binders bound in the notation and parsed as patterns}{347}{paragraph*.1149}% 
\contentsline {paragraph}{Binders bound in the notation and parsed as terms}{347}{paragraph*.1150}% 
\contentsline {paragraph}{Binders not bound in the notation}{348}{paragraph*.1151}% 
\contentsline {subsubsection}{Notations with recursive patterns}{348}{subsubsection*.1152}% 
\contentsline {subsubsection}{Notations with recursive patterns involving binders}{349}{subsubsection*.1153}% 
\contentsline {subsubsection}{Predefined entries}{350}{subsubsection*.1154}% 
\contentsline {subsubsection}{Custom entries}{350}{subsubsection*.1155}% 
\contentsline {subsubsection}{Summary}{352}{subsubsection*.1158}% 
\contentsline {paragraph}{Syntax of notations}{352}{paragraph*.1159}% 
\contentsline {paragraph}{Persistence of notations}{354}{paragraph*.1166}% 
\contentsline {subsection}{\numberline {5.1.2}Interpretation scopes}{354}{subsection.5.1.2}% 
\contentsline {subsubsection}{Global interpretation rules for notations}{354}{subsubsection*.1169}% 
\contentsline {subsubsection}{Local interpretation rules for notations}{355}{subsubsection*.1176}% 
\contentsline {paragraph}{Local opening of an interpretation scope}{355}{paragraph*.1177}% 
\contentsline {paragraph}{Binding arguments of a constant to an interpretation scope}{355}{paragraph*.1180}% 
\contentsline {paragraph}{Binding types of arguments to an interpretation scope}{356}{paragraph*.1182}% 
\contentsline {subsubsection}{The \sphinxstyleliteralintitle {\sphinxupquote {type\_scope}} interpretation scope}{357}{subsubsection*.1184}% 
\contentsline {subsubsection}{The \sphinxstyleliteralintitle {\sphinxupquote {function\_scope}} interpretation scope}{357}{subsubsection*.1185}% 
\contentsline {subsubsection}{Interpretation scopes used in the standard library of Coq}{357}{subsubsection*.1186}% 
\contentsline {subsubsection}{Displaying information about scopes}{358}{subsubsection*.1187}% 
\contentsline {subsection}{\numberline {5.1.3}Abbreviations}{359}{subsection.5.1.3}% 
\contentsline {subsection}{\numberline {5.1.4}Numeral notations}{359}{subsection.5.1.4}% 
\contentsline {subsection}{\numberline {5.1.5}Tactic Notations}{361}{subsection.5.1.5}% 
\contentsline {section}{\numberline {5.2}Proof schemes}{362}{section.5.2}% 
\contentsline {subsection}{\numberline {5.2.1}Generation of induction principles with \sphinxstyleliteralintitle {\sphinxupquote {Scheme}}}{362}{subsection.5.2.1}% 
\contentsline {subsubsection}{Automatic declaration of schemes}{364}{subsubsection*.1214}% 
\contentsline {subsubsection}{Combined Scheme}{365}{subsubsection*.1221}% 
\contentsline {subsection}{\numberline {5.2.2}Generation of induction principles with \sphinxstyleliteralintitle {\sphinxupquote {Functional}} \sphinxstyleliteralintitle {\sphinxupquote {Scheme}}}{365}{subsection.5.2.2}% 
\contentsline {subsection}{\numberline {5.2.3}Generation of inversion principles with \sphinxstyleliteralintitle {\sphinxupquote {Derive}} \sphinxstyleliteralintitle {\sphinxupquote {Inversion}}}{370}{subsection.5.2.3}% 
\contentsline {chapter}{\numberline {6}Practical tools}{372}{chapter.6}% 
\contentsline {section}{\numberline {6.1}The Coq commands}{372}{section.6.1}% 
\contentsline {subsection}{\numberline {6.1.1}Interactive use (coqtop)}{372}{subsection.6.1.1}% 
\contentsline {subsection}{\numberline {6.1.2}Batch compilation (coqc)}{372}{subsection.6.1.2}% 
\contentsline {subsection}{\numberline {6.1.3}Customization at launch time}{372}{subsection.6.1.3}% 
\contentsline {subsubsection}{By resource file}{373}{subsubsection*.1225}% 
\contentsline {subsubsection}{By environment variables}{373}{subsubsection*.1226}% 
\contentsline {subsubsection}{By command line options}{373}{subsubsection*.1228}% 
\contentsline {subsection}{\numberline {6.1.4}Compiled libraries checker (coqchk)}{375}{subsection.6.1.4}% 
\contentsline {section}{\numberline {6.2}Utilities}{376}{section.6.2}% 
\contentsline {subsection}{\numberline {6.2.1}Using Coq as a library}{376}{subsection.6.2.1}% 
\contentsline {subsection}{\numberline {6.2.2}Building a Coq project with coq\_makefile}{377}{subsection.6.2.2}% 
\contentsline {subsubsection}{CoqMakefile.local}{378}{subsubsection*.1229}% 
\contentsline {subsubsection}{Timing targets and performance testing}{379}{subsubsection*.1230}% 
\contentsline {subsubsection}{Reusing/extending the generated Makefile}{381}{subsubsection*.1231}% 
\contentsline {subsubsection}{Building a subset of the targets with \sphinxstyleliteralintitle {\sphinxupquote {-j}}}{382}{subsubsection*.1232}% 
\contentsline {subsection}{\numberline {6.2.3}Module dependencies}{382}{subsection.6.2.3}% 
\contentsline {subsection}{\numberline {6.2.4}Documenting Coq files with coqdoc}{383}{subsection.6.2.4}% 
\contentsline {subsubsection}{Principles}{383}{subsubsection*.1233}% 
\contentsline {paragraph}{Coq material inside documentation.}{383}{paragraph*.1234}% 
\contentsline {paragraph}{Pretty-printing.}{383}{paragraph*.1235}% 
\contentsline {paragraph}{Sections}{384}{paragraph*.1236}% 
\contentsline {paragraph}{Lists.}{384}{paragraph*.1237}% 
\contentsline {paragraph}{Rules.}{385}{paragraph*.1238}% 
\contentsline {paragraph}{Emphasis.}{385}{paragraph*.1239}% 
\contentsline {paragraph}{Escaping to LaTeX and HTML.}{385}{paragraph*.1240}% 
\contentsline {paragraph}{Verbatim}{385}{paragraph*.1241}% 
\contentsline {paragraph}{Hyperlinks}{385}{paragraph*.1242}% 
\contentsline {paragraph}{Hiding / Showing parts of the source.}{386}{paragraph*.1243}% 
\contentsline {subsubsection}{Usage}{386}{subsubsection*.1244}% 
\contentsline {paragraph}{Command line options}{386}{paragraph*.1245}% 
\contentsline {subsubsection}{The coqdoc LaTeX style file}{388}{subsubsection*.1246}% 
\contentsline {subsection}{\numberline {6.2.5}Embedded Coq phrases inside LaTeX documents}{389}{subsection.6.2.5}% 
\contentsline {subsection}{\numberline {6.2.6}Man pages}{389}{subsection.6.2.6}% 
\contentsline {section}{\numberline {6.3}Coq Integrated Development Environment}{389}{section.6.3}% 
\contentsline {subsection}{\numberline {6.3.1}Managing files and buffers, basic editing}{390}{subsection.6.3.1}% 
\contentsline {subsection}{\numberline {6.3.2}Interactive navigation into Coq scripts}{390}{subsection.6.3.2}% 
\contentsline {subsection}{\numberline {6.3.3}Trying tactics automatically}{391}{subsection.6.3.3}% 
\contentsline {subsection}{\numberline {6.3.4}Proof folding}{391}{subsection.6.3.4}% 
\contentsline {subsection}{\numberline {6.3.5}Vernacular commands, templates}{391}{subsection.6.3.5}% 
\contentsline {subsection}{\numberline {6.3.6}Queries}{392}{subsection.6.3.6}% 
\contentsline {subsection}{\numberline {6.3.7}Compilation}{392}{subsection.6.3.7}% 
\contentsline {subsection}{\numberline {6.3.8}Customizations}{393}{subsection.6.3.8}% 
\contentsline {subsection}{\numberline {6.3.9}Using Unicode symbols}{393}{subsection.6.3.9}% 
\contentsline {subsubsection}{Displaying Unicode symbols}{393}{subsubsection*.1248}% 
\contentsline {subsubsection}{Defining an input method for non-ASCII symbols}{394}{subsubsection*.1249}% 
\contentsline {subsubsection}{Character encoding for saved files}{394}{subsubsection*.1250}% 
\contentsline {chapter}{\numberline {7}Addendum}{395}{chapter.7}% 
\contentsline {section}{\numberline {7.1}Extended pattern matching}{395}{section.7.1}% 
\contentsline {subsection}{\numberline {7.1.1}Patterns}{395}{subsection.7.1.1}% 
\contentsline {subsection}{\numberline {7.1.2}Multiple patterns}{396}{subsection.7.1.2}% 
\contentsline {subsection}{\numberline {7.1.3}Aliasing subpatterns}{396}{subsection.7.1.3}% 
\contentsline {subsection}{\numberline {7.1.4}Nested patterns}{396}{subsection.7.1.4}% 
\contentsline {subsection}{\numberline {7.1.5}Disjunctive patterns}{398}{subsection.7.1.5}% 
\contentsline {subsection}{\numberline {7.1.6}About patterns of parametric types}{398}{subsection.7.1.6}% 
\contentsline {subsubsection}{Parameters in patterns}{398}{subsubsection*.1251}% 
\contentsline {subsection}{\numberline {7.1.7}Implicit arguments in patterns}{399}{subsection.7.1.7}% 
\contentsline {subsection}{\numberline {7.1.8}Matching objects of dependent types}{400}{subsection.7.1.8}% 
\contentsline {subsection}{\numberline {7.1.9}Understanding dependencies in patterns}{400}{subsection.7.1.9}% 
\contentsline {subsection}{\numberline {7.1.10}When the elimination predicate must be provided}{400}{subsection.7.1.10}% 
\contentsline {subsubsection}{Dependent pattern matching}{400}{subsubsection*.1253}% 
\contentsline {subsubsection}{Multiple dependent pattern matching}{401}{subsubsection*.1254}% 
\contentsline {subsubsection}{Patterns in \sphinxstyleliteralintitle {\sphinxupquote {in}}}{401}{subsubsection*.1255}% 
\contentsline {subsection}{\numberline {7.1.11}Using pattern matching to write proofs}{401}{subsection.7.1.11}% 
\contentsline {subsection}{\numberline {7.1.12}Pattern-matching on inductive objects involving local definitions}{402}{subsection.7.1.12}% 
\contentsline {subsection}{\numberline {7.1.13}Pattern-matching and coercions}{403}{subsection.7.1.13}% 
\contentsline {subsection}{\numberline {7.1.14}When does the expansion strategy fail?}{403}{subsection.7.1.14}% 
\contentsline {section}{\numberline {7.2}Implicit Coercions}{404}{section.7.2}% 
\contentsline {subsection}{\numberline {7.2.1}General Presentation}{404}{subsection.7.2.1}% 
\contentsline {subsection}{\numberline {7.2.2}Classes}{404}{subsection.7.2.2}% 
\contentsline {subsection}{\numberline {7.2.3}Coercions}{405}{subsection.7.2.3}% 
\contentsline {subsection}{\numberline {7.2.4}Identity Coercions}{405}{subsection.7.2.4}% 
\contentsline {subsection}{\numberline {7.2.5}Inheritance Graph}{405}{subsection.7.2.5}% 
\contentsline {subsection}{\numberline {7.2.6}Declaring Coercions}{406}{subsection.7.2.6}% 
\contentsline {subsection}{\numberline {7.2.7}Displaying Available Coercions}{407}{subsection.7.2.7}% 
\contentsline {subsection}{\numberline {7.2.8}Activating the Printing of Coercions}{407}{subsection.7.2.8}% 
\contentsline {subsection}{\numberline {7.2.9}Classes as Records}{407}{subsection.7.2.9}% 
\contentsline {subsection}{\numberline {7.2.10}Coercions and Sections}{408}{subsection.7.2.10}% 
\contentsline {subsection}{\numberline {7.2.11}Coercions and Modules}{408}{subsection.7.2.11}% 
\contentsline {subsection}{\numberline {7.2.12}Examples}{408}{subsection.7.2.12}% 
\contentsline {subsubsection}{Coercion at function application}{408}{subsubsection*.1290}% 
\contentsline {subsubsection}{Coercion to a type}{411}{subsubsection*.1291}% 
\contentsline {subsubsection}{Coercion to a function}{411}{subsubsection*.1292}% 
\contentsline {section}{\numberline {7.3}Canonical Structures}{412}{section.7.3}% 
\contentsline {subsection}{\numberline {7.3.1}Notation overloading}{412}{subsection.7.3.1}% 
\contentsline {subsubsection}{Derived Canonical Structures}{414}{subsubsection*.1293}% 
\contentsline {subsection}{\numberline {7.3.2}Hierarchy of structures}{414}{subsection.7.3.2}% 
\contentsline {subsubsection}{Compact declaration of Canonical Structures}{420}{subsubsection*.1294}% 
\contentsline {section}{\numberline {7.4}Typeclasses}{421}{section.7.4}% 
\contentsline {subsection}{\numberline {7.4.1}Class and Instance declarations}{421}{subsection.7.4.1}% 
\contentsline {subsection}{\numberline {7.4.2}Binding classes}{422}{subsection.7.4.2}% 
\contentsline {subsection}{\numberline {7.4.3}Parameterized Instances}{423}{subsection.7.4.3}% 
\contentsline {subsection}{\numberline {7.4.4}Sections and contexts}{423}{subsection.7.4.4}% 
\contentsline {subsection}{\numberline {7.4.5}Building hierarchies}{424}{subsection.7.4.5}% 
\contentsline {subsubsection}{Superclasses}{424}{subsubsection*.1295}% 
\contentsline {subsubsection}{Substructures}{425}{subsubsection*.1296}% 
\contentsline {subsection}{\numberline {7.4.6}Summary of the commands}{425}{subsection.7.4.6}% 
\contentsline {subsubsection}{Typeclasses Transparent, Typclasses Opaque}{427}{subsubsection*.1307}% 
\contentsline {subsubsection}{Options}{427}{subsubsection*.1310}% 
\contentsline {subsubsection}{Typeclasses eauto \sphinxstyleliteralintitle {\sphinxupquote {:=}}}{428}{subsubsection*.1321}% 
\contentsline {section}{\numberline {7.5}Omega: a solver for quantifier-free problems in Presburger Arithmetic}{429}{section.7.5}% 
\contentsline {subsection}{\numberline {7.5.1}Description of \sphinxstyleliteralintitle {\sphinxupquote {omega}}}{429}{subsection.7.5.1}% 
\contentsline {subsection}{\numberline {7.5.2}Arithmetical goals recognized by \sphinxstyleliteralintitle {\sphinxupquote {omega}}}{429}{subsection.7.5.2}% 
\contentsline {subsection}{\numberline {7.5.3}Messages from \sphinxstyleliteralintitle {\sphinxupquote {omega}}}{429}{subsection.7.5.3}% 
\contentsline {subsection}{\numberline {7.5.4}Using \sphinxstyleliteralintitle {\sphinxupquote {omega}}}{430}{subsection.7.5.4}% 
\contentsline {subsection}{\numberline {7.5.5}Options}{430}{subsection.7.5.5}% 
\contentsline {subsection}{\numberline {7.5.6}Technical data}{431}{subsection.7.5.6}% 
\contentsline {subsubsection}{Overview of the tactic}{431}{subsubsection*.1336}% 
\contentsline {subsubsection}{Overview of the OMEGA decision procedure}{431}{subsubsection*.1337}% 
\contentsline {subsection}{\numberline {7.5.7}Bugs}{431}{subsection.7.5.7}% 
\contentsline {section}{\numberline {7.6}Micromega: tactics for solving arithmetic goals over ordered rings}{432}{section.7.6}% 
\contentsline {subsection}{\numberline {7.6.1}Short description of the tactics}{432}{subsection.7.6.1}% 
\contentsline {subsection}{\numberline {7.6.2}\sphinxstyleemphasis {Positivstellensatz} refutations}{432}{subsection.7.6.2}% 
\contentsline {subsection}{\numberline {7.6.3}\sphinxstyleliteralintitle {\sphinxupquote {lra}}: a decision procedure for linear real and rational arithmetic}{433}{subsection.7.6.3}% 
\contentsline {subsection}{\numberline {7.6.4}\sphinxstyleliteralintitle {\sphinxupquote {lia}}: a tactic for linear integer arithmetic}{433}{subsection.7.6.4}% 
\contentsline {subsubsection}{High level view of \sphinxstyleliteralintitle {\sphinxupquote {lia}}}{433}{subsubsection*.1344}% 
\contentsline {subsubsection}{Cutting plane proofs}{434}{subsubsection*.1345}% 
\contentsline {subsubsection}{Case split}{434}{subsubsection*.1347}% 
\contentsline {subsection}{\numberline {7.6.5}\sphinxstyleliteralintitle {\sphinxupquote {nra}}: a proof procedure for non-linear arithmetic}{434}{subsection.7.6.5}% 
\contentsline {subsection}{\numberline {7.6.6}\sphinxstyleliteralintitle {\sphinxupquote {nia}}: a proof procedure for non-linear integer arithmetic}{434}{subsection.7.6.6}% 
\contentsline {subsection}{\numberline {7.6.7}\sphinxstyleliteralintitle {\sphinxupquote {psatz}}: a proof procedure for non-linear arithmetic}{434}{subsection.7.6.7}% 
\contentsline {section}{\numberline {7.7}Extraction of programs in OCaml and Haskell}{435}{section.7.7}% 
\contentsline {subsection}{\numberline {7.7.1}Generating ML Code}{435}{subsection.7.7.1}% 
\contentsline {subsection}{\numberline {7.7.2}Extraction Options}{436}{subsection.7.7.2}% 
\contentsline {subsubsection}{Setting the target language}{436}{subsubsection*.1358}% 
\contentsline {subsubsection}{Inlining and optimizations}{436}{subsubsection*.1360}% 
\contentsline {subsubsection}{Extra elimination of useless arguments}{437}{subsubsection*.1369}% 
\contentsline {subsubsection}{Realizing axioms}{438}{subsubsection*.1372}% 
\contentsline {subsubsection}{Realizing inductive types}{439}{subsubsection*.1375}% 
\contentsline {subsubsection}{Avoiding conflicts with existing filenames}{440}{subsubsection*.1377}% 
\contentsline {subsection}{\numberline {7.7.3}Differences between Coq and ML type systems}{440}{subsection.7.7.3}% 
\contentsline {subsection}{\numberline {7.7.4}Some examples}{441}{subsection.7.7.4}% 
\contentsline {subsubsection}{A detailed example: Euclidean division}{441}{subsubsection*.1381}% 
\contentsline {subsubsection}{Extraction's horror museum}{442}{subsubsection*.1382}% 
\contentsline {subsubsection}{Users' Contributions}{443}{subsubsection*.1383}% 
\contentsline {section}{\numberline {7.8}Program}{443}{section.7.8}% 
\contentsline {subsection}{\numberline {7.8.1}Elaborating programs}{444}{subsection.7.8.1}% 
\contentsline {subsubsection}{Syntactic control over equalities}{444}{subsubsection*.1386}% 
\contentsline {subsubsection}{Program Definition}{445}{subsubsection*.1387}% 
\contentsline {subsubsection}{Program Fixpoint}{445}{subsubsection*.1391}% 
\contentsline {subsubsection}{Program Lemma}{446}{subsubsection*.1394}% 
\contentsline {subsection}{\numberline {7.8.2}Solving obligations}{447}{subsection.7.8.2}% 
\contentsline {subsection}{\numberline {7.8.3}Frequently Asked Questions}{448}{subsection.7.8.3}% 
\contentsline {section}{\numberline {7.9}The ring and field tactic families}{448}{section.7.9}% 
\contentsline {subsection}{\numberline {7.9.1}What does this tactic do?}{448}{subsection.7.9.1}% 
\contentsline {subsection}{\numberline {7.9.2}The variables map}{449}{subsection.7.9.2}% 
\contentsline {subsection}{\numberline {7.9.3}Is it automatic?}{449}{subsection.7.9.3}% 
\contentsline {subsection}{\numberline {7.9.4}Concrete usage in Coq}{449}{subsection.7.9.4}% 
\contentsline {subsection}{\numberline {7.9.5}Adding a ring structure}{451}{subsection.7.9.5}% 
\contentsline {subsection}{\numberline {7.9.6}How does it work?}{453}{subsection.7.9.6}% 
\contentsline {subsection}{\numberline {7.9.7}Dealing with fields}{454}{subsection.7.9.7}% 
\contentsline {subsection}{\numberline {7.9.8}Adding a new field structure}{456}{subsection.7.9.8}% 
\contentsline {subsection}{\numberline {7.9.9}History of ring}{457}{subsection.7.9.9}% 
\contentsline {subsection}{\numberline {7.9.10}Discussion}{458}{subsection.7.9.10}% 
\contentsline {section}{\numberline {7.10}Nsatz: tactics for proving equalities in integral domains}{458}{section.7.10}% 
\contentsline {subsection}{\numberline {7.10.1}More about \sphinxstyleliteralintitle {\sphinxupquote {nsatz}}}{459}{subsection.7.10.1}% 
\contentsline {section}{\numberline {7.11}Generalized rewriting}{459}{section.7.11}% 
\contentsline {subsection}{\numberline {7.11.1}Introduction to generalized rewriting}{460}{subsection.7.11.1}% 
\contentsline {subsubsection}{Relations and morphisms}{460}{subsubsection*.1421}% 
\contentsline {subsubsection}{Adding new relations and morphisms}{462}{subsubsection*.1422}% 
\contentsline {subsubsection}{Rewriting and non reflexive relations}{464}{subsubsection*.1426}% 
\contentsline {subsubsection}{Rewriting and non symmetric relations}{464}{subsubsection*.1427}% 
\contentsline {subsubsection}{Rewriting in ambiguous setoid contexts}{465}{subsubsection*.1428}% 
\contentsline {subsection}{\numberline {7.11.2}Commands and tactics}{465}{subsection.7.11.2}% 
\contentsline {subsubsection}{First class setoids and morphisms}{465}{subsubsection*.1429}% 
\contentsline {subsubsection}{Tactics enabled on user provided relations}{466}{subsubsection*.1430}% 
\contentsline {subsubsection}{Printing relations and morphisms}{467}{subsubsection*.1436}% 
\contentsline {subsubsection}{Deprecated syntax and backward incompatibilities}{467}{subsubsection*.1438}% 
\contentsline {subsection}{\numberline {7.11.3}Extensions}{467}{subsection.7.11.3}% 
\contentsline {subsubsection}{Rewriting under binders}{467}{subsubsection*.1441}% 
\contentsline {subsubsection}{Subrelations}{468}{subsubsection*.1442}% 
\contentsline {subsubsection}{Constant unfolding}{469}{subsubsection*.1443}% 
\contentsline {subsection}{\numberline {7.11.4}Strategies for rewriting}{469}{subsection.7.11.4}% 
\contentsline {subsubsection}{Definitions}{469}{subsubsection*.1444}% 
\contentsline {subsubsection}{Usage}{470}{subsubsection*.1475}% 
\contentsline {section}{\numberline {7.12}Asynchronous and Parallel Proof Processing}{471}{section.7.12}% 
\contentsline {subsection}{\numberline {7.12.1}Proof annotations}{471}{subsection.7.12.1}% 
\contentsline {subsubsection}{Automatic suggestion of proof annotations}{471}{subsubsection*.1480}% 
\contentsline {subsection}{\numberline {7.12.2}Proof blocks and error resilience}{471}{subsection.7.12.2}% 
\contentsline {subsubsection}{Caveats}{472}{subsubsection*.1481}% 
\contentsline {subsection}{\numberline {7.12.3}Interactive mode}{472}{subsection.7.12.3}% 
\contentsline {subsubsection}{Caveats}{472}{subsubsection*.1482}% 
\contentsline {subsection}{\numberline {7.12.4}Batch mode}{473}{subsection.7.12.4}% 
\contentsline {subsection}{\numberline {7.12.5}Limiting the number of parallel workers}{473}{subsection.7.12.5}% 
\contentsline {section}{\numberline {7.13}Miscellaneous extensions}{474}{section.7.13}% 
\contentsline {subsection}{\numberline {7.13.1}Program derivation}{474}{subsection.7.13.1}% 
\contentsline {section}{\numberline {7.14}Polymorphic Universes}{475}{section.7.14}% 
\contentsline {subsection}{\numberline {7.14.1}General Presentation}{475}{subsection.7.14.1}% 
\contentsline {subsection}{\numberline {7.14.2}Polymorphic, Monomorphic}{477}{subsection.7.14.2}% 
\contentsline {subsection}{\numberline {7.14.3}Cumulative, NonCumulative}{477}{subsection.7.14.3}% 
\contentsline {subsubsection}{An example of a proof using cumulativity}{479}{subsubsection*.1490}% 
\contentsline {subsection}{\numberline {7.14.4}Cumulativity Weak Constraints}{479}{subsection.7.14.4}% 
\contentsline {subsection}{\numberline {7.14.5}Global and local universes}{479}{subsection.7.14.5}% 
\contentsline {subsection}{\numberline {7.14.6}Conversion and unification}{479}{subsection.7.14.6}% 
\contentsline {subsection}{\numberline {7.14.7}Minimization}{480}{subsection.7.14.7}% 
\contentsline {subsection}{\numberline {7.14.8}Explicit Universes}{480}{subsection.7.14.8}% 
\contentsline {subsubsection}{Polymorphic definitions}{480}{subsubsection*.1497}% 
\contentsline {chapter}{Bibliography}{483}{chapter*.1500}% 
\contentsline {chapter}{Command Index}{486}{section*.1501}% 
\contentsline {chapter}{Tactic Index}{490}{section*.1502}% 
\contentsline {chapter}{Flags, options and Tables Index}{493}{section*.1503}% 
\contentsline {chapter}{Errors and Warnings Index}{495}{section*.1504}% 
\contentsline {chapter}{Index}{499}{section*.1505}% 
