\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 {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}{6}{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}{12}{section.2.8}
\contentsline {section}{\numberline {2.9}Credits: version 8.4}{13}{section.2.9}
\contentsline {section}{\numberline {2.10}Credits: version 8.5}{15}{section.2.10}
\contentsline {section}{\numberline {2.11}Credits: version 8.6}{17}{section.2.11}
\contentsline {section}{\numberline {2.12}Credits: version 8.7}{18}{section.2.12}
\contentsline {section}{\numberline {2.13}Credits: version 8.8}{20}{section.2.13}
\contentsline {chapter}{\numberline {3}License}{22}{chapter.3}
\contentsline {chapter}{\numberline {4}The language}{23}{chapter.4}
\contentsline {section}{\numberline {4.1}The Gallina specification language}{23}{section.4.1}
\contentsline {subsection}{\numberline {4.1.1}About the grammars in the manual}{23}{subsection.4.1.1}
\contentsline {subsection}{\numberline {4.1.2}Lexical conventions}{23}{subsection.4.1.2}
\contentsline {subsection}{\numberline {4.1.3}Terms}{24}{subsection.4.1.3}
\contentsline {subsubsection}{Syntax of terms}{24}{subsubsection*.12}
\contentsline {subsubsection}{Types}{26}{subsubsection*.32}
\contentsline {subsubsection}{Qualified identifiers and simple identifiers}{26}{subsubsection*.34}
\contentsline {subsubsection}{Numerals}{26}{subsubsection*.35}
\contentsline {subsubsection}{Sorts}{26}{subsubsection*.36}
\contentsline {subsubsection}{Binders}{26}{subsubsection*.39}
\contentsline {subsubsection}{Abstractions}{27}{subsubsection*.40}
\contentsline {subsubsection}{Products}{27}{subsubsection*.41}
\contentsline {subsubsection}{Applications}{27}{subsubsection*.42}
\contentsline {subsubsection}{Type cast}{27}{subsubsection*.43}
\contentsline {subsubsection}{Inferable subterms}{27}{subsubsection*.44}
\contentsline {subsubsection}{Let-in definitions}{27}{subsubsection*.45}
\contentsline {subsubsection}{Definition by case analysis}{28}{subsubsection*.46}
\contentsline {subsubsection}{Recursive functions}{29}{subsubsection*.47}
\contentsline {subsection}{\numberline {4.1.4}The Vernacular}{29}{subsection.4.1.4}
\contentsline {subsubsection}{Assumptions}{30}{subsubsection*.59}
\contentsline {subsubsection}{Definitions}{31}{subsubsection*.74}
\contentsline {subsubsection}{Inductive definitions}{32}{subsubsection*.84}
\contentsline {paragraph}{Simple inductive types}{33}{paragraph*.85}
\contentsline {paragraph}{Simple annotated inductive types}{34}{paragraph*.89}
\contentsline {paragraph}{Parametrized inductive types}{34}{paragraph*.90}
\contentsline {paragraph}{Variants}{36}{paragraph*.91}
\contentsline {paragraph}{Mutually defined inductive types}{36}{paragraph*.94}
\contentsline {paragraph}{Co-inductive types}{37}{paragraph*.95}
\contentsline {subsubsection}{Definition of recursive functions}{38}{subsubsection*.97}
\contentsline {paragraph}{Definition of functions by recursion over inductive objects}{38}{paragraph*.98}
\contentsline {paragraph}{Definitions of recursive objects in co-inductive types}{41}{paragraph*.101}
\contentsline {subsubsection}{Assertions and proofs}{42}{subsubsection*.103}
\contentsline {section}{\numberline {4.2}Extensions of Gallina}{43}{section.4.2}
\contentsline {subsection}{\numberline {4.2.1}Record types}{43}{subsection.4.2.1}
\contentsline {subsubsection}{Primitive Projections}{47}{subsubsection*.129}
\contentsline {paragraph}{Primitive Record Types}{47}{paragraph*.133}
\contentsline {paragraph}{Reduction}{47}{paragraph*.134}
\contentsline {paragraph}{Compatibility Projections and \sphinxstyleliteralintitle {\sphinxupquote {match}}}{48}{paragraph*.135}
\contentsline {subsection}{\numberline {4.2.2}Variants and extensions of \sphinxstyleliteralintitle {\sphinxupquote {match}}}{48}{subsection.4.2.2}
\contentsline {subsubsection}{Multiple and nested pattern matching}{48}{subsubsection*.136}
\contentsline {subsubsection}{Pattern-matching on boolean values: the if expression}{48}{subsubsection*.137}
\contentsline {subsubsection}{Irrefutable patterns: the destructuring let variants}{49}{subsubsection*.138}
\contentsline {paragraph}{First destructuring let syntax}{49}{paragraph*.139}
\contentsline {paragraph}{Second destructuring let syntax}{50}{paragraph*.140}
\contentsline {subsubsection}{Controlling pretty-printing of match expressions}{50}{subsubsection*.141}
\contentsline {paragraph}{Printing nested patterns}{50}{paragraph*.142}
\contentsline {paragraph}{Factorization of clauses with same right-hand side}{50}{paragraph*.144}
\contentsline {paragraph}{Use of a default clause}{51}{paragraph*.146}
\contentsline {paragraph}{Printing of wildcard patterns}{51}{paragraph*.148}
\contentsline {paragraph}{Printing of the elimination predicate}{51}{paragraph*.150}
\contentsline {paragraph}{Printing matching on irrefutable patterns}{51}{paragraph*.152}
\contentsline {paragraph}{Printing matching on booleans}{51}{paragraph*.154}
\contentsline {subsection}{\numberline {4.2.3}Advanced recursive functions}{52}{subsection.4.2.3}
\contentsline {subsection}{\numberline {4.2.4}Section mechanism}{55}{subsection.4.2.4}
\contentsline {subsection}{\numberline {4.2.5}Module system}{56}{subsection.4.2.5}
\contentsline {subsubsection}{Reserved commands inside an interactive module}{57}{subsubsection*.171}
\contentsline {subsubsection}{Reserved commands inside an interactive module type:}{57}{subsubsection*.177}
\contentsline {subsection}{\numberline {4.2.6}Libraries and qualified names}{63}{subsection.4.2.6}
\contentsline {subsubsection}{Names of libraries}{63}{subsubsection*.189}
\contentsline {subsubsection}{Qualified names}{63}{subsubsection*.190}
\contentsline {subsubsection}{Libraries and filesystem}{64}{subsubsection*.191}
\contentsline {subsection}{\numberline {4.2.7}Implicit arguments}{65}{subsection.4.2.7}
\contentsline {subsubsection}{The different kinds of implicit arguments}{65}{subsubsection*.192}
\contentsline {paragraph}{Implicit arguments inferable from the knowledge of other arguments of a function}{65}{paragraph*.193}
\contentsline {paragraph}{Implicit arguments inferable by resolution}{66}{paragraph*.194}
\contentsline {subsubsection}{Maximal or non maximal insertion of implicit arguments}{66}{subsubsection*.195}
\contentsline {subsubsection}{Casual use of implicit arguments}{67}{subsubsection*.196}
\contentsline {subsubsection}{Declaration of implicit arguments}{67}{subsubsection*.198}
\contentsline {paragraph}{Implicit Argument Binders}{67}{paragraph*.199}
\contentsline {paragraph}{Declaring Implicit Arguments}{68}{paragraph*.200}
\contentsline {subsubsection}{Automatic declaration of implicit arguments}{69}{subsubsection*.203}
\contentsline {subsubsection}{Mode for automatic declaration of implicit arguments}{71}{subsubsection*.204}
\contentsline {subsubsection}{Controlling strict implicit arguments}{71}{subsubsection*.206}
\contentsline {subsubsection}{Controlling contextual implicit arguments}{72}{subsubsection*.209}
\contentsline {subsubsection}{Controlling reversible-pattern implicit arguments}{72}{subsubsection*.211}
\contentsline {subsubsection}{Controlling the insertion of implicit arguments not followed by explicit arguments}{72}{subsubsection*.213}
\contentsline {subsubsection}{Explicit applications}{72}{subsubsection*.215}
\contentsline {subsubsection}{Renaming implicit arguments}{73}{subsubsection*.219}
\contentsline {subsubsection}{Displaying what the implicit arguments are}{73}{subsubsection*.220}
\contentsline {subsubsection}{Explicit displaying of implicit arguments for pretty-printing}{73}{subsubsection*.222}
\contentsline {subsubsection}{Interaction with subtyping}{73}{subsubsection*.225}
\contentsline {subsubsection}{Deactivation of implicit arguments for parsing}{74}{subsubsection*.226}
\contentsline {subsubsection}{Canonical structures}{74}{subsubsection*.228}
\contentsline {subsubsection}{Implicit types of variables}{75}{subsubsection*.231}
\contentsline {subsubsection}{Implicit generalization}{76}{subsubsection*.233}
\contentsline {subsection}{\numberline {4.2.8}Coercions}{77}{subsection.4.2.8}
\contentsline {subsection}{\numberline {4.2.9}Printing constructions in full}{77}{subsection.4.2.9}
\contentsline {subsection}{\numberline {4.2.10}Printing universes}{78}{subsection.4.2.10}
\contentsline {subsection}{\numberline {4.2.11}Existential variables}{78}{subsection.4.2.11}
\contentsline {subsubsection}{Explicit displaying of existential instances for pretty-printing}{79}{subsubsection*.241}
\contentsline {subsubsection}{Solving existential variables using tactics}{79}{subsubsection*.243}
\contentsline {section}{\numberline {4.3}The Coq library}{80}{section.4.3}
\contentsline {subsection}{\numberline {4.3.1}The basic library}{80}{subsection.4.3.1}
\contentsline {subsubsection}{Notations}{80}{subsubsection*.244}
\contentsline {subsubsection}{Logic}{81}{subsubsection*.245}
\contentsline {paragraph}{Propositional Connectives}{82}{paragraph*.247}
\contentsline {paragraph}{Quantifiers}{82}{paragraph*.248}
\contentsline {paragraph}{Equality}{82}{paragraph*.249}
\contentsline {paragraph}{Lemmas}{83}{paragraph*.250}
\contentsline {subsubsection}{Datatypes}{83}{subsubsection*.252}
\contentsline {paragraph}{Programming}{83}{paragraph*.255}
\contentsline {subsubsection}{Specification}{84}{subsubsection*.258}
\contentsline {subsubsection}{Basic Arithmetics}{85}{subsubsection*.266}
\contentsline {subsubsection}{Well-founded recursion}{87}{subsubsection*.269}
\contentsline {subsubsection}{Accessing the Type level}{88}{subsubsection*.272}
\contentsline {subsubsection}{Tactics}{88}{subsubsection*.275}
\contentsline {subsection}{\numberline {4.3.2}The standard library}{88}{subsection.4.3.2}
\contentsline {subsubsection}{Survey}{88}{subsubsection*.276}
\contentsline {subsubsection}{Peano’s arithmetic (nat)}{89}{subsubsection*.277}
\contentsline {subsubsection}{Notations for integer arithmetics}{89}{subsubsection*.278}
\contentsline {subsubsection}{Real numbers library}{90}{subsubsection*.279}
\contentsline {paragraph}{Notations for real numbers}{90}{paragraph*.280}
\contentsline {paragraph}{Some tactics for real numbers}{91}{paragraph*.281}
\contentsline {subsubsection}{List library}{93}{subsubsection*.285}
\contentsline {subsection}{\numberline {4.3.3}Users’ contributions}{93}{subsection.4.3.3}
\contentsline {section}{\numberline {4.4}Calculus of Inductive Constructions}{93}{section.4.4}
\contentsline {subsection}{\numberline {4.4.1}The terms}{94}{subsection.4.4.1}
\contentsline {subsubsection}{Sorts}{94}{subsubsection*.286}
\contentsline {subsubsection}{Terms}{95}{subsubsection*.288}
\contentsline {subsection}{\numberline {4.4.2}Typing rules}{95}{subsection.4.4.2}
\contentsline {subsection}{\numberline {4.4.3}Conversion rules}{98}{subsection.4.4.3}
\contentsline {subsubsection}{\(\mitbeta \)-reduction}{98}{subsubsection*.311}
\contentsline {subsubsection}{\(\mitiota \)-reduction}{98}{subsubsection*.312}
\contentsline {subsubsection}{\(\mitdelta \)-reduction}{98}{subsubsection*.313}
\contentsline {subsubsection}{\(\mitzeta \)-reduction}{99}{subsubsection*.316}
\contentsline {subsubsection}{\(\miteta \)-expansion}{99}{subsubsection*.318}
\contentsline {subsubsection}{Convertibility}{99}{subsubsection*.319}
\contentsline {subsection}{\numberline {4.4.4}Subtyping rules}{100}{subsection.4.4.4}
\contentsline {subsection}{\numberline {4.4.5}Inductive Definitions}{101}{subsection.4.4.5}
\contentsline {subsubsection}{Types of inductive objects}{103}{subsubsection*.322}
\contentsline {subsubsection}{Well-formed inductive definitions}{103}{subsubsection*.325}
\contentsline {paragraph}{Arity of a given sort}{103}{paragraph*.326}
\contentsline {paragraph}{Arity}{104}{paragraph*.327}
\contentsline {paragraph}{Type constructor}{104}{paragraph*.328}
\contentsline {paragraph}{Positivity Condition}{104}{paragraph*.329}
\contentsline {paragraph}{Strict positivity}{104}{paragraph*.330}
\contentsline {paragraph}{Nested Positivity}{105}{paragraph*.331}
\contentsline {paragraph}{Correctness rules}{105}{paragraph*.332}
\contentsline {paragraph}{Template polymorphism}{106}{paragraph*.334}
\contentsline {subsubsection}{Destructors}{108}{subsubsection*.336}
\contentsline {paragraph}{The match ... with ... end construction}{109}{paragraph*.337}
\contentsline {subsubsection}{Fixpoint definitions}{113}{subsubsection*.350}
\contentsline {paragraph}{Typing rule}{113}{paragraph*.351}
\contentsline {paragraph}{Reduction rule}{116}{paragraph*.353}
\contentsline {subsection}{\numberline {4.4.6}Admissible rules for global environments}{116}{subsection.4.4.6}
\contentsline {subsection}{\numberline {4.4.7}Co-inductive types}{117}{subsection.4.4.7}
\contentsline {subsection}{\numberline {4.4.8}The Calculus of Inductive Constructions with impredicative Set}{117}{subsection.4.4.8}
\contentsline {section}{\numberline {4.5}The Module System}{118}{section.4.5}
\contentsline {subsection}{\numberline {4.5.1}Modules and module types}{118}{subsection.4.5.1}
\contentsline {subsection}{\numberline {4.5.2}Typing Modules}{118}{subsection.4.5.2}
\contentsline {chapter}{\numberline {5}The proof engine}{124}{chapter.5}
\contentsline {section}{\numberline {5.1}Vernacular commands}{124}{section.5.1}
\contentsline {subsection}{\numberline {5.1.1}Displaying}{124}{subsection.5.1.1}
\contentsline {subsection}{\numberline {5.1.2}Flags, Options and Tables}{125}{subsection.5.1.2}
\contentsline {subsubsection}{Scope qualifiers for \sphinxstyleliteralintitle {\sphinxupquote {Set}} and \sphinxstyleliteralintitle {\sphinxupquote {Unset}}}{125}{subsubsection*.430}
\contentsline {subsection}{\numberline {5.1.3}Requests to the environment}{126}{subsection.5.1.3}
\contentsline {subsection}{\numberline {5.1.4}Loading files}{131}{subsection.5.1.4}
\contentsline {subsection}{\numberline {5.1.5}Compiled files}{132}{subsection.5.1.5}
\contentsline {subsection}{\numberline {5.1.6}Loadpath}{133}{subsection.5.1.6}
\contentsline {subsection}{\numberline {5.1.7}Backtracking}{134}{subsection.5.1.7}
\contentsline {subsection}{\numberline {5.1.8}Quitting and debugging}{135}{subsection.5.1.8}
\contentsline {subsection}{\numberline {5.1.9}Controlling display}{136}{subsection.5.1.9}
\contentsline {subsection}{\numberline {5.1.10}Controlling the reduction strategies and the conversion algorithm}{137}{subsection.5.1.10}
\contentsline {subsection}{\numberline {5.1.11}Controlling the locality of commands}{139}{subsection.5.1.11}
\contentsline {section}{\numberline {5.2}Proof handling}{139}{section.5.2}
\contentsline {subsection}{\numberline {5.2.1}Switching on/off the proof editing mode}{140}{subsection.5.2.1}
\contentsline {subsubsection}{Proof using options}{141}{subsubsection*.522}
\contentsline {subsubsection}{Name a set of section hypotheses for \sphinxstyleliteralintitle {\sphinxupquote {Proof using}}}{142}{subsubsection*.525}
\contentsline {subsection}{\numberline {5.2.2}Navigation in the proof tree}{142}{subsection.5.2.2}
\contentsline {subsubsection}{Bullets}{143}{subsubsection*.539}
\contentsline {subsubsection}{Set Bullet Behavior}{148}{subsubsection*.544}
\contentsline {subsection}{\numberline {5.2.3}Requesting information}{148}{subsection.5.2.3}
\contentsline {subsection}{\numberline {5.2.4}Controlling the effect of proof editing commands}{149}{subsection.5.2.4}
\contentsline {subsection}{\numberline {5.2.5}Controlling memory usage}{150}{subsection.5.2.5}
\contentsline {section}{\numberline {5.3}Tactics}{150}{section.5.3}
\contentsline {subsection}{\numberline {5.3.1}Invocation of tactics}{150}{subsection.5.3.1}
\contentsline {subsubsection}{Bindings list}{151}{subsubsection*.564}
\contentsline {subsubsection}{Occurrence sets and occurrence clauses}{151}{subsubsection*.569}
\contentsline {subsection}{\numberline {5.3.2}Applying theorems}{152}{subsection.5.3.2}
\contentsline {subsection}{\numberline {5.3.3}Managing the local context}{159}{subsection.5.3.3}
\contentsline {subsection}{\numberline {5.3.4}Controlling the proof flow}{167}{subsection.5.3.4}
\contentsline {subsection}{\numberline {5.3.5}Case analysis and induction}{171}{subsection.5.3.5}
\contentsline {subsection}{\numberline {5.3.6}Rewriting expressions}{189}{subsection.5.3.6}
\contentsline {subsection}{\numberline {5.3.7}Performing computations}{192}{subsection.5.3.7}
\contentsline {subsubsection}{Conversion tactics applied to hypotheses}{198}{subsubsection*.743}
\contentsline {subsection}{\numberline {5.3.8}Automation}{199}{subsection.5.3.8}
\contentsline {subsection}{\numberline {5.3.9}Controlling automation}{201}{subsection.5.3.9}
\contentsline {subsubsection}{The hints databases for auto and eauto}{201}{subsubsection*.760}
\contentsline {paragraph}{Creating Hint databases}{202}{paragraph*.762}
\contentsline {subsubsection}{Hint databases defined in the Coq standard library}{205}{subsubsection*.774}
\contentsline {subsubsection}{Hint locality}{206}{subsubsection*.782}
\contentsline {subsubsection}{Setting implicit automation tactics}{207}{subsubsection*.784}
\contentsline {subsection}{\numberline {5.3.10}Decision procedures}{208}{subsection.5.3.10}
\contentsline {subsection}{\numberline {5.3.11}Checking properties of terms}{212}{subsection.5.3.11}
\contentsline {subsection}{\numberline {5.3.12}Equality}{213}{subsection.5.3.12}
\contentsline {subsection}{\numberline {5.3.13}Equality and inductive sets}{213}{subsection.5.3.13}
\contentsline {subsection}{\numberline {5.3.14}Inversion}{214}{subsection.5.3.14}
\contentsline {subsection}{\numberline {5.3.15}Classical tactics}{215}{subsection.5.3.15}
\contentsline {subsection}{\numberline {5.3.16}Automating}{215}{subsection.5.3.16}
\contentsline {subsection}{\numberline {5.3.17}Non-logical tactics}{217}{subsection.5.3.17}
\contentsline {subsection}{\numberline {5.3.18}Simple tactic macros}{221}{subsection.5.3.18}
\contentsline {section}{\numberline {5.4}The tactic language}{221}{section.5.4}
\contentsline {subsection}{\numberline {5.4.1}Syntax}{222}{subsection.5.4.1}
\contentsline {subsection}{\numberline {5.4.2}Semantics}{224}{subsection.5.4.2}
\contentsline {subsubsection}{Sequence}{224}{subsubsection*.865}
\contentsline {subsubsection}{Local application of tactics}{224}{subsubsection*.867}
\contentsline {subsubsection}{Goal selectors}{225}{subsubsection*.869}
\contentsline {subsubsection}{For loop}{226}{subsubsection*.875}
\contentsline {subsubsection}{Repeat loop}{226}{subsubsection*.877}
\contentsline {subsubsection}{Error catching}{226}{subsubsection*.879}
\contentsline {subsubsection}{Detecting progress}{226}{subsubsection*.881}
\contentsline {subsubsection}{Backtracking branching}{226}{subsubsection*.884}
\contentsline {subsubsection}{First tactic to work}{227}{subsubsection*.886}
\contentsline {subsubsection}{Left-biased branching}{227}{subsubsection*.889}
\contentsline {subsubsection}{Generalized biased branching}{227}{subsubsection*.891}
\contentsline {subsubsection}{Soft cut}{227}{subsubsection*.893}
\contentsline {subsubsection}{Checking the successes}{228}{subsubsection*.895}
\contentsline {subsubsection}{Checking the failure}{228}{subsubsection*.898}
\contentsline {subsubsection}{Checking the success}{228}{subsubsection*.900}
\contentsline {subsubsection}{Solving}{228}{subsubsection*.902}
\contentsline {subsubsection}{Identity}{228}{subsubsection*.905}
\contentsline {subsubsection}{Failing}{229}{subsubsection*.907}
\contentsline {subsubsection}{Timeout}{232}{subsubsection*.912}
\contentsline {subsubsection}{Timing a tactic}{232}{subsubsection*.914}
\contentsline {subsubsection}{Timing a tactic that evaluates to a term}{232}{subsubsection*.916}
\contentsline {subsubsection}{Local definitions}{233}{subsubsection*.920}
\contentsline {subsubsection}{Application}{233}{subsubsection*.922}
\contentsline {subsubsection}{Function construction}{234}{subsubsection*.923}
\contentsline {subsubsection}{Pattern matching on terms}{234}{subsubsection*.924}
\contentsline {subsubsection}{Pattern matching on goals}{235}{subsubsection*.927}
\contentsline {subsubsection}{Filling a term context}{236}{subsubsection*.930}
\contentsline {subsubsection}{Generating fresh hypothesis names}{236}{subsubsection*.933}
\contentsline {subsubsection}{Computing in a constr}{237}{subsubsection*.934}
\contentsline {subsubsection}{Recovering the type of a term}{237}{subsubsection*.935}
\contentsline {subsubsection}{Manipulating untyped terms}{237}{subsubsection*.936}
\contentsline {subsubsection}{Counting the goals}{237}{subsubsection*.937}
\contentsline {subsubsection}{Testing boolean expressions}{238}{subsubsection*.938}
\contentsline {subsubsection}{Proving a subgoal as a separate lemma}{238}{subsubsection*.941}
\contentsline {subsection}{\numberline {5.4.3}Tactic toplevel definitions}{239}{subsection.5.4.3}
\contentsline {subsubsection}{Defining \sphinxtitleref {L}$_{\text {tac}}$ functions}{239}{subsubsection*.945}
\contentsline {subsubsection}{Printing \sphinxtitleref {L}$_{\text {tac}}$ tactics}{239}{subsubsection*.947}
\contentsline {subsection}{\numberline {5.4.4}Debugging \sphinxtitleref {L}$_{\text {tac}}$ tactics}{239}{subsection.5.4.4}
\contentsline {subsubsection}{Info trace}{239}{subsubsection*.950}
\contentsline {subsubsection}{Interactive debugger}{240}{subsubsection*.953}
\contentsline {subsubsection}{Profiling \sphinxtitleref {L}$_{\text {tac}}$ tactics}{241}{subsubsection*.957}
\contentsline {subsubsection}{Run-time optimization tactic}{243}{subsubsection*.965}
\contentsline {section}{\numberline {5.5}Detailed examples of tactics}{243}{section.5.5}
\contentsline {subsection}{\numberline {5.5.1}dependent induction}{243}{subsection.5.5.1}
\contentsline {subsubsection}{A larger example}{246}{subsubsection*.967}
\contentsline {subsection}{\numberline {5.5.2}autorewrite}{249}{subsection.5.5.2}
\contentsline {subsection}{\numberline {5.5.3}quote}{250}{subsection.5.5.3}
\contentsline {subsubsection}{Introducing variables map}{251}{subsubsection*.968}
\contentsline {subsubsection}{Combining variables and constants}{253}{subsubsection*.969}
\contentsline {subsection}{\numberline {5.5.4}Using the tactic language}{254}{subsection.5.5.4}
\contentsline {subsubsection}{About the cardinality of the set of natural numbers}{254}{subsubsection*.970}
\contentsline {subsubsection}{Permutations of lists}{254}{subsubsection*.971}
\contentsline {subsubsection}{Deciding intuitionistic propositional logic}{256}{subsubsection*.972}
\contentsline {subsubsection}{Deciding type isomorphisms}{257}{subsubsection*.973}
\contentsline {section}{\numberline {5.6}The SSReflect proof language}{259}{section.5.6}
\contentsline {subsection}{\numberline {5.6.1}Introduction}{260}{subsection.5.6.1}
\contentsline {subsubsection}{Acknowledgments}{260}{subsubsection*.974}
\contentsline {subsection}{\numberline {5.6.2}Usage}{260}{subsection.5.6.2}
\contentsline {subsubsection}{Getting started}{261}{subsubsection*.975}
\contentsline {subsubsection}{Compatibility issues}{261}{subsubsection*.976}
\contentsline {subsection}{\numberline {5.6.3}Gallina extensions}{262}{subsection.5.6.3}
\contentsline {subsubsection}{Pattern assignment}{262}{subsubsection*.977}
\contentsline {subsubsection}{Pattern conditional}{263}{subsubsection*.978}
\contentsline {subsubsection}{Parametric polymorphism}{264}{subsubsection*.979}
\contentsline {subsubsection}{Anonymous arguments}{265}{subsubsection*.981}
\contentsline {subsubsection}{Wildcards}{265}{subsubsection*.982}
\contentsline {subsubsection}{Definitions}{266}{subsubsection*.983}
\contentsline {subsubsection}{Abbreviations}{267}{subsubsection*.985}
\contentsline {paragraph}{Matching}{268}{paragraph*.988}
\contentsline {paragraph}{Occurrence selection}{270}{paragraph*.989}
\contentsline {subsubsection}{Basic localization}{272}{subsubsection*.990}
\contentsline {subsection}{\numberline {5.6.4}Basic tactics}{274}{subsection.5.6.4}
\contentsline {subsubsection}{Bookkeeping}{274}{subsubsection*.991}
\contentsline {subsubsection}{The defective tactics}{277}{subsubsection*.992}
\contentsline {paragraph}{The move tactic.}{277}{paragraph*.993}
\contentsline {paragraph}{The case tactic}{277}{paragraph*.995}
\contentsline {paragraph}{The elim tactic}{278}{paragraph*.996}
\contentsline {paragraph}{The apply tactic}{278}{paragraph*.998}
\contentsline {subsubsection}{Discharge}{280}{subsubsection*.1000}
\contentsline {paragraph}{Clear rules}{281}{paragraph*.1004}
\contentsline {paragraph}{Matching for apply and exact}{281}{paragraph*.1005}
\contentsline {paragraph}{The abstract tactic}{282}{paragraph*.1006}
\contentsline {subsubsection}{Introduction in the context}{282}{subsubsection*.1008}
\contentsline {subsubsection}{Generation of equations}{285}{subsubsection*.1013}
\contentsline {subsubsection}{Type families}{286}{subsubsection*.1014}
\contentsline {subsection}{\numberline {5.6.5}Control flow}{289}{subsection.5.6.5}
\contentsline {subsubsection}{Indentation and bullets}{289}{subsubsection*.1016}
\contentsline {subsubsection}{Terminators}{290}{subsubsection*.1017}
\contentsline {subsubsection}{Selectors}{291}{subsubsection*.1020}
\contentsline {subsubsection}{Iteration}{293}{subsubsection*.1025}
\contentsline {subsubsection}{Localization}{294}{subsubsection*.1028}
\contentsline {subsubsection}{Structure}{295}{subsubsection*.1030}
\contentsline {paragraph}{The have tactic.}{295}{paragraph*.1031}
\contentsline {paragraph}{Generating let in context entries with have}{300}{paragraph*.1033}
\contentsline {paragraph}{The have tactic and typeclass resolution}{302}{paragraph*.1034}
\contentsline {paragraph}{Variants: the suff and wlog tactics}{302}{paragraph*.1036}
\contentsline {subparagraph}{Advanced generalization}{305}{subparagraph*.1039}
\contentsline {subsection}{\numberline {5.6.6}Rewriting}{307}{subsection.5.6.6}
\contentsline {subsubsection}{An extended rewrite tactic}{307}{subsubsection*.1040}
\contentsline {subsubsection}{Remarks and examples}{309}{subsubsection*.1046}
\contentsline {paragraph}{Rewrite redex selection}{309}{paragraph*.1047}
\contentsline {paragraph}{Chained rewrite steps}{309}{paragraph*.1048}
\contentsline {paragraph}{Explicit redex switches are matched first}{310}{paragraph*.1049}
\contentsline {paragraph}{Occurrence switches and redex switches}{311}{paragraph*.1050}
\contentsline {paragraph}{Occurrence selection and repetition}{312}{paragraph*.1051}
\contentsline {paragraph}{Multi-rule rewriting}{313}{paragraph*.1052}
\contentsline {paragraph}{Wildcards vs abstractions}{316}{paragraph*.1053}
\contentsline {paragraph}{When SSReflect rewrite fails on standard Coq licit rewrite}{317}{paragraph*.1054}
\contentsline {paragraph}{Existential metavariables and rewriting}{318}{paragraph*.1055}
\contentsline {subsubsection}{Locking, unlocking}{320}{subsubsection*.1056}
\contentsline {subsubsection}{Congruence}{322}{subsubsection*.1058}
\contentsline {subsection}{\numberline {5.6.7}Contextual patterns}{325}{subsection.5.6.7}
\contentsline {subsubsection}{Syntax}{325}{subsubsection*.1060}
\contentsline {subsubsection}{Matching contextual patterns}{326}{subsubsection*.1061}
\contentsline {subsubsection}{Examples}{326}{subsubsection*.1062}
\contentsline {paragraph}{Contextual pattern in set and the : tactical}{326}{paragraph*.1063}
\contentsline {paragraph}{Contextual patterns in rewrite}{327}{paragraph*.1064}
\contentsline {subsubsection}{Patterns for recurrent contexts}{329}{subsubsection*.1065}
\contentsline {subsection}{\numberline {5.6.8}Views and reflection}{329}{subsection.5.6.8}
\contentsline {subsubsection}{Interpreting eliminations}{329}{subsubsection*.1066}
\contentsline {subsubsection}{Interpreting assumptions}{333}{subsubsection*.1067}
\contentsline {paragraph}{Specializing assumptions}{336}{paragraph*.1068}
\contentsline {subsubsection}{Interpreting goals}{337}{subsubsection*.1069}
\contentsline {subsubsection}{Boolean reflection}{338}{subsubsection*.1070}
\contentsline {subsubsection}{The reflect predicate}{339}{subsubsection*.1071}
\contentsline {subsubsection}{General mechanism for interpreting goals and assumptions}{341}{subsubsection*.1072}
\contentsline {paragraph}{Specializing assumptions}{341}{paragraph*.1073}
\contentsline {paragraph}{Interpreting assumptions}{341}{paragraph*.1074}
\contentsline {subsubsection}{Interpreting equivalences}{343}{subsubsection*.1075}
\contentsline {subsubsection}{Declaring new Hint Views}{344}{subsubsection*.1076}
\contentsline {subsubsection}{Multiple views}{345}{subsubsection*.1079}
\contentsline {subsection}{\numberline {5.6.9}SSReflect searching tool}{346}{subsection.5.6.9}
\contentsline {subsection}{\numberline {5.6.10}Synopsis and Index}{347}{subsection.5.6.10}
\contentsline {subsubsection}{Parameters}{347}{subsubsection*.1081}
\contentsline {subsubsection}{Items and switches}{347}{subsubsection*.1086}
\contentsline {subsubsection}{Tactics}{349}{subsubsection*.1093}
\contentsline {subsubsection}{Tacticals}{350}{subsubsection*.1097}
\contentsline {subsubsection}{Commands}{351}{subsubsection*.1098}
\contentsline {chapter}{\numberline {6}User extensions}{352}{chapter.6}
\contentsline {section}{\numberline {6.1}Syntax extensions and interpretation scopes}{352}{section.6.1}
\contentsline {subsection}{\numberline {6.1.1}Notations}{352}{subsection.6.1.1}
\contentsline {subsubsection}{Basic notations}{352}{subsubsection*.1100}
\contentsline {subsubsection}{Precedences and associativity}{353}{subsubsection*.1102}
\contentsline {subsubsection}{Complex notations}{353}{subsubsection*.1103}
\contentsline {subsubsection}{Simple factorization rules}{354}{subsubsection*.1104}
\contentsline {subsubsection}{Displaying symbolic notations}{355}{subsubsection*.1107}
\contentsline {subsubsection}{The Infix command}{356}{subsubsection*.1108}
\contentsline {subsubsection}{Reserving notations}{356}{subsubsection*.1110}
\contentsline {subsubsection}{Simultaneous definition of terms and notations}{357}{subsubsection*.1111}
\contentsline {subsubsection}{Displaying information about notations}{357}{subsubsection*.1112}
\contentsline {subsubsection}{Locating notations}{357}{subsubsection*.1114}
\contentsline {subsubsection}{Notations and binders}{358}{subsubsection*.1115}
\contentsline {paragraph}{Binders bound in the notation and parsed as identifiers}{358}{paragraph*.1116}
\contentsline {paragraph}{Binders bound in the notation and parsed as patterns}{358}{paragraph*.1117}
\contentsline {paragraph}{Binders bound in the notation and parsed as terms}{359}{paragraph*.1118}
\contentsline {paragraph}{Binders not bound in the notation}{359}{paragraph*.1119}
\contentsline {subsubsection}{Notations with recursive patterns}{360}{subsubsection*.1120}
\contentsline {subsubsection}{Notations with recursive patterns involving binders}{360}{subsubsection*.1121}
\contentsline {subsubsection}{Predefined entries}{361}{subsubsection*.1122}
\contentsline {subsubsection}{Summary}{361}{subsubsection*.1123}
\contentsline {paragraph}{Syntax of notations}{362}{paragraph*.1124}
\contentsline {paragraph}{Persistence of notations}{363}{paragraph*.1130}
\contentsline {subsection}{\numberline {6.1.2}Interpretation scopes}{363}{subsection.6.1.2}
\contentsline {subsubsection}{Global interpretation rules for notations}{363}{subsubsection*.1132}
\contentsline {subsubsection}{Local interpretation rules for notations}{364}{subsubsection*.1139}
\contentsline {paragraph}{Local opening of an interpretation scope}{364}{paragraph*.1140}
\contentsline {paragraph}{Binding arguments of a constant to an interpretation scope}{364}{paragraph*.1143}
\contentsline {paragraph}{Binding types of arguments to an interpretation scope}{365}{paragraph*.1145}
\contentsline {subsubsection}{The \sphinxstyleliteralintitle {\sphinxupquote {type\_scope}} interpretation scope}{366}{subsubsection*.1147}
\contentsline {subsubsection}{The \sphinxstyleliteralintitle {\sphinxupquote {function\_scope}} interpretation scope}{366}{subsubsection*.1148}
\contentsline {subsubsection}{Interpretation scopes used in the standard library of Coq}{366}{subsubsection*.1149}
\contentsline {subsubsection}{Displaying information about scopes}{367}{subsubsection*.1150}
\contentsline {subsection}{\numberline {6.1.3}Abbreviations}{368}{subsection.6.1.3}
\contentsline {subsection}{\numberline {6.1.4}Tactic Notations}{369}{subsection.6.1.4}
\contentsline {section}{\numberline {6.2}Proof schemes}{370}{section.6.2}
\contentsline {subsection}{\numberline {6.2.1}Generation of induction principles with \sphinxstyleliteralintitle {\sphinxupquote {Scheme}}}{370}{subsection.6.2.1}
\contentsline {subsubsection}{Automatic declaration of schemes}{372}{subsubsection*.1162}
\contentsline {subsubsection}{Combined Scheme}{372}{subsubsection*.1169}
\contentsline {subsection}{\numberline {6.2.2}Generation of induction principles with \sphinxstyleliteralintitle {\sphinxupquote {Functional}} \sphinxstyleliteralintitle {\sphinxupquote {Scheme}}}{373}{subsection.6.2.2}
\contentsline {subsection}{\numberline {6.2.3}Generation of inversion principles with \sphinxstyleliteralintitle {\sphinxupquote {Derive}} \sphinxstyleliteralintitle {\sphinxupquote {Inversion}}}{378}{subsection.6.2.3}
\contentsline {chapter}{\numberline {7}Practical tools}{380}{chapter.7}
\contentsline {section}{\numberline {7.1}The Coq commands}{380}{section.7.1}
\contentsline {subsection}{\numberline {7.1.1}Interactive use (coqtop)}{380}{subsection.7.1.1}
\contentsline {subsection}{\numberline {7.1.2}Batch compilation (coqc)}{380}{subsection.7.1.2}
\contentsline {subsection}{\numberline {7.1.3}Customization at launch time}{380}{subsection.7.1.3}
\contentsline {subsubsection}{By resource file}{381}{subsubsection*.1173}
\contentsline {subsubsection}{By environment variables}{381}{subsubsection*.1174}
\contentsline {subsubsection}{By command line options}{381}{subsubsection*.1175}
\contentsline {subsection}{\numberline {7.1.4}Compiled libraries checker (coqchk)}{383}{subsection.7.1.4}
\contentsline {section}{\numberline {7.2}Utilities}{384}{section.7.2}
\contentsline {subsection}{\numberline {7.2.1}Using Coq as a library}{384}{subsection.7.2.1}
\contentsline {subsection}{\numberline {7.2.2}Building a Coq project with coq\_makefile}{385}{subsection.7.2.2}
\contentsline {subsubsection}{CoqMakefile.local}{386}{subsubsection*.1176}
\contentsline {subsubsection}{Timing targets and performance testing}{386}{subsubsection*.1177}
\contentsline {subsubsection}{Reusing/extending the generated Makefile}{389}{subsubsection*.1178}
\contentsline {subsubsection}{Building a subset of the targets with \sphinxstyleliteralintitle {\sphinxupquote {-j}}}{390}{subsubsection*.1179}
\contentsline {subsection}{\numberline {7.2.3}Module dependencies}{390}{subsection.7.2.3}
\contentsline {subsection}{\numberline {7.2.4}Documenting Coq files with coqdoc}{391}{subsection.7.2.4}
\contentsline {subsubsection}{Principles}{391}{subsubsection*.1180}
\contentsline {paragraph}{Coq material inside documentation.}{391}{paragraph*.1181}
\contentsline {paragraph}{Pretty-printing.}{391}{paragraph*.1182}
\contentsline {paragraph}{Sections}{392}{paragraph*.1183}
\contentsline {paragraph}{Lists.}{392}{paragraph*.1184}
\contentsline {paragraph}{Rules.}{393}{paragraph*.1185}
\contentsline {paragraph}{Emphasis.}{393}{paragraph*.1186}
\contentsline {paragraph}{Escaping to LaTeX and HTML.}{393}{paragraph*.1187}
\contentsline {paragraph}{Verbatim}{393}{paragraph*.1188}
\contentsline {paragraph}{Hyperlinks}{393}{paragraph*.1189}
\contentsline {paragraph}{Hiding / Showing parts of the source.}{394}{paragraph*.1190}
\contentsline {subsubsection}{Usage}{394}{subsubsection*.1191}
\contentsline {paragraph}{Command line options}{394}{paragraph*.1192}
\contentsline {subsubsection}{The coqdoc LaTeX style file}{397}{subsubsection*.1193}
\contentsline {subsection}{\numberline {7.2.5}Embedded Coq phrases inside LaTeX documents}{397}{subsection.7.2.5}
\contentsline {subsection}{\numberline {7.2.6}Coq and GNU Emacs}{397}{subsection.7.2.6}
\contentsline {subsubsection}{The Coq Emacs mode}{397}{subsubsection*.1194}
\contentsline {subsubsection}{Proof-General}{398}{subsubsection*.1195}
\contentsline {subsection}{\numberline {7.2.7}Module specification}{398}{subsection.7.2.7}
\contentsline {subsection}{\numberline {7.2.8}Man pages}{398}{subsection.7.2.8}
\contentsline {section}{\numberline {7.3}Coq Integrated Development Environment}{398}{section.7.3}
\contentsline {subsection}{\numberline {7.3.1}Managing files and buffers, basic editing}{399}{subsection.7.3.1}
\contentsline {subsection}{\numberline {7.3.2}Interactive navigation into Coq scripts}{399}{subsection.7.3.2}
\contentsline {subsection}{\numberline {7.3.3}Trying tactics automatically}{400}{subsection.7.3.3}
\contentsline {subsection}{\numberline {7.3.4}Proof folding}{400}{subsection.7.3.4}
\contentsline {subsection}{\numberline {7.3.5}Vernacular commands, templates}{401}{subsection.7.3.5}
\contentsline {subsection}{\numberline {7.3.6}Queries}{401}{subsection.7.3.6}
\contentsline {subsection}{\numberline {7.3.7}Compilation}{401}{subsection.7.3.7}
\contentsline {subsection}{\numberline {7.3.8}Customizations}{402}{subsection.7.3.8}
\contentsline {subsection}{\numberline {7.3.9}Using Unicode symbols}{402}{subsection.7.3.9}
\contentsline {subsubsection}{Displaying Unicode symbols}{402}{subsubsection*.1197}
\contentsline {subsubsection}{Defining an input method for non-ASCII symbols}{403}{subsubsection*.1198}
\contentsline {subsubsection}{Character encoding for saved files}{403}{subsubsection*.1199}
\contentsline {chapter}{\numberline {8}Addendum}{404}{chapter.8}
\contentsline {section}{\numberline {8.1}Extended pattern matching}{404}{section.8.1}
\contentsline {subsection}{\numberline {8.1.1}Patterns}{404}{subsection.8.1.1}
\contentsline {subsection}{\numberline {8.1.2}Multiple patterns}{405}{subsection.8.1.2}
\contentsline {subsection}{\numberline {8.1.3}Aliasing subpatterns}{405}{subsection.8.1.3}
\contentsline {subsection}{\numberline {8.1.4}Nested patterns}{405}{subsection.8.1.4}
\contentsline {subsection}{\numberline {8.1.5}Disjunctive patterns}{407}{subsection.8.1.5}
\contentsline {subsection}{\numberline {8.1.6}About patterns of parametric types}{407}{subsection.8.1.6}
\contentsline {subsubsection}{Parameters in patterns}{407}{subsubsection*.1200}
\contentsline {subsection}{\numberline {8.1.7}Implicit arguments in patterns}{408}{subsection.8.1.7}
\contentsline {subsection}{\numberline {8.1.8}Matching objects of dependent types}{409}{subsection.8.1.8}
\contentsline {subsection}{\numberline {8.1.9}Understanding dependencies in patterns}{409}{subsection.8.1.9}
\contentsline {subsection}{\numberline {8.1.10}When the elimination predicate must be provided}{409}{subsection.8.1.10}
\contentsline {subsubsection}{Dependent pattern matching}{410}{subsubsection*.1202}
\contentsline {subsubsection}{Multiple dependent pattern matching}{410}{subsubsection*.1203}
\contentsline {subsubsection}{Patterns in \sphinxstyleliteralintitle {\sphinxupquote {in}}}{410}{subsubsection*.1204}
\contentsline {subsection}{\numberline {8.1.11}Using pattern matching to write proofs}{411}{subsection.8.1.11}
\contentsline {subsection}{\numberline {8.1.12}Pattern-matching on inductive objects involving local definitions}{412}{subsection.8.1.12}
\contentsline {subsection}{\numberline {8.1.13}Pattern-matching and coercions}{412}{subsection.8.1.13}
\contentsline {subsection}{\numberline {8.1.14}When does the expansion strategy fail?}{413}{subsection.8.1.14}
\contentsline {section}{\numberline {8.2}Implicit Coercions}{413}{section.8.2}
\contentsline {subsection}{\numberline {8.2.1}General Presentation}{413}{subsection.8.2.1}
\contentsline {subsection}{\numberline {8.2.2}Classes}{414}{subsection.8.2.2}
\contentsline {subsection}{\numberline {8.2.3}Coercions}{414}{subsection.8.2.3}
\contentsline {subsection}{\numberline {8.2.4}Identity Coercions}{414}{subsection.8.2.4}
\contentsline {subsection}{\numberline {8.2.5}Inheritance Graph}{415}{subsection.8.2.5}
\contentsline {subsection}{\numberline {8.2.6}Declaring Coercions}{415}{subsection.8.2.6}
\contentsline {subsection}{\numberline {8.2.7}Displaying Available Coercions}{416}{subsection.8.2.7}
\contentsline {subsection}{\numberline {8.2.8}Activating the Printing of Coercions}{417}{subsection.8.2.8}
\contentsline {subsection}{\numberline {8.2.9}Classes as Records}{417}{subsection.8.2.9}
\contentsline {subsection}{\numberline {8.2.10}Coercions and Sections}{417}{subsection.8.2.10}
\contentsline {subsection}{\numberline {8.2.11}Coercions and Modules}{417}{subsection.8.2.11}
\contentsline {subsection}{\numberline {8.2.12}Examples}{418}{subsection.8.2.12}
\contentsline {subsubsection}{Coercion at function application}{418}{subsubsection*.1237}
\contentsline {subsubsection}{Coercion to a type}{420}{subsubsection*.1238}
\contentsline {subsubsection}{Coercion to a function}{421}{subsubsection*.1239}
\contentsline {section}{\numberline {8.3}Canonical Structures}{422}{section.8.3}
\contentsline {subsection}{\numberline {8.3.1}Notation overloading}{422}{subsection.8.3.1}
\contentsline {subsubsection}{Derived Canonical Structures}{424}{subsubsection*.1240}
\contentsline {subsection}{\numberline {8.3.2}Hierarchy of structures}{425}{subsection.8.3.2}
\contentsline {subsubsection}{Compact declaration of Canonical Structures}{431}{subsubsection*.1241}
\contentsline {section}{\numberline {8.4}Type Classes}{432}{section.8.4}
\contentsline {subsection}{\numberline {8.4.1}Class and Instance declarations}{432}{subsection.8.4.1}
\contentsline {subsection}{\numberline {8.4.2}Binding classes}{433}{subsection.8.4.2}
\contentsline {subsection}{\numberline {8.4.3}Parameterized Instances}{434}{subsection.8.4.3}
\contentsline {subsection}{\numberline {8.4.4}Sections and contexts}{434}{subsection.8.4.4}
\contentsline {subsection}{\numberline {8.4.5}Building hierarchies}{435}{subsection.8.4.5}
\contentsline {subsubsection}{Superclasses}{435}{subsubsection*.1242}
\contentsline {subsubsection}{Substructures}{436}{subsubsection*.1243}
\contentsline {subsection}{\numberline {8.4.6}Summary of the commands}{436}{subsection.8.4.6}
\contentsline {subsubsection}{Typeclasses Transparent, Typclasses Opaque}{438}{subsubsection*.1254}
\contentsline {subsubsection}{Options}{439}{subsubsection*.1257}
\contentsline {subsubsection}{Typeclasses eauto \sphinxtitleref {:=}}{440}{subsubsection*.1268}
\contentsline {section}{\numberline {8.5}Omega: a solver for quantifier-free problems in Presburger Arithmetic}{440}{section.8.5}
\contentsline {subsection}{\numberline {8.5.1}Description of \sphinxstyleliteralintitle {\sphinxupquote {omega}}}{440}{subsection.8.5.1}
\contentsline {subsection}{\numberline {8.5.2}Arithmetical goals recognized by \sphinxstyleliteralintitle {\sphinxupquote {omega}}}{440}{subsection.8.5.2}
\contentsline {subsection}{\numberline {8.5.3}Messages from \sphinxstyleliteralintitle {\sphinxupquote {omega}}}{441}{subsection.8.5.3}
\contentsline {subsection}{\numberline {8.5.4}Using \sphinxstyleliteralintitle {\sphinxupquote {omega}}}{441}{subsection.8.5.4}
\contentsline {subsection}{\numberline {8.5.5}Options}{442}{subsection.8.5.5}
\contentsline {subsection}{\numberline {8.5.6}Technical data}{442}{subsection.8.5.6}
\contentsline {subsubsection}{Overview of the tactic}{442}{subsubsection*.1283}
\contentsline {subsubsection}{Overview of the OMEGA decision procedure}{443}{subsubsection*.1284}
\contentsline {subsection}{\numberline {8.5.7}Bugs}{443}{subsection.8.5.7}
\contentsline {section}{\numberline {8.6}Micromega: tactics for solving arithmetic goals over ordered rings}{443}{section.8.6}
\contentsline {subsection}{\numberline {8.6.1}Short description of the tactics}{443}{subsection.8.6.1}
\contentsline {subsection}{\numberline {8.6.2}\sphinxstyleemphasis {Positivstellensatz} refutations}{444}{subsection.8.6.2}
\contentsline {subsection}{\numberline {8.6.3}\sphinxtitleref {lra}: a decision procedure for linear real and rational arithmetic}{444}{subsection.8.6.3}
\contentsline {subsection}{\numberline {8.6.4}\sphinxtitleref {lia}: a tactic for linear integer arithmetic}{445}{subsection.8.6.4}
\contentsline {subsubsection}{High level view of \sphinxtitleref {lia}}{445}{subsubsection*.1291}
\contentsline {subsubsection}{Cutting plane proofs}{445}{subsubsection*.1292}
\contentsline {subsubsection}{Case split}{445}{subsubsection*.1294}
\contentsline {subsection}{\numberline {8.6.5}\sphinxtitleref {nra}: a proof procedure for non-linear arithmetic}{446}{subsection.8.6.5}
\contentsline {subsection}{\numberline {8.6.6}\sphinxtitleref {nia}: a proof procedure for non-linear integer arithmetic}{446}{subsection.8.6.6}
\contentsline {subsection}{\numberline {8.6.7}\sphinxtitleref {psatz}: a proof procedure for non-linear arithmetic}{446}{subsection.8.6.7}
\contentsline {section}{\numberline {8.7}Extraction of programs in OCaml and Haskell}{447}{section.8.7}
\contentsline {subsection}{\numberline {8.7.1}Generating ML Code}{447}{subsection.8.7.1}
\contentsline {subsection}{\numberline {8.7.2}Extraction Options}{448}{subsection.8.7.2}
\contentsline {subsubsection}{Setting the target language}{448}{subsubsection*.1305}
\contentsline {subsubsection}{Inlining and optimizations}{448}{subsubsection*.1309}
\contentsline {subsubsection}{Extra elimination of useless arguments}{449}{subsubsection*.1318}
\contentsline {subsubsection}{Realizing axioms}{450}{subsubsection*.1321}
\contentsline {subsubsection}{Realizing inductive types}{451}{subsubsection*.1324}
\contentsline {subsubsection}{Avoiding conflicts with existing filenames}{452}{subsubsection*.1326}
\contentsline {subsection}{\numberline {8.7.3}Differences between Coq and ML type systems}{452}{subsection.8.7.3}
\contentsline {subsection}{\numberline {8.7.4}Some examples}{453}{subsection.8.7.4}
\contentsline {subsubsection}{A detailed example: Euclidean division}{453}{subsubsection*.1330}
\contentsline {subsubsection}{Extraction's horror museum}{455}{subsubsection*.1331}
\contentsline {subsubsection}{Users' Contributions}{455}{subsubsection*.1332}
\contentsline {section}{\numberline {8.8}Program}{456}{section.8.8}
\contentsline {subsection}{\numberline {8.8.1}Elaborating programs}{456}{subsection.8.8.1}
\contentsline {subsubsection}{Syntactic control over equalities}{457}{subsubsection*.1335}
\contentsline {subsubsection}{Program Definition}{458}{subsubsection*.1336}
\contentsline {subsubsection}{Program Fixpoint}{458}{subsubsection*.1340}
\contentsline {subsubsection}{Program Lemma}{459}{subsubsection*.1343}
\contentsline {subsection}{\numberline {8.8.2}Solving obligations}{459}{subsection.8.8.2}
\contentsline {subsection}{\numberline {8.8.3}Frequently Asked Questions}{460}{subsection.8.8.3}
\contentsline {section}{\numberline {8.9}The ring and field tactic families}{461}{section.8.9}
\contentsline {subsection}{\numberline {8.9.1}What does this tactic do?}{461}{subsection.8.9.1}
\contentsline {subsection}{\numberline {8.9.2}The variables map}{461}{subsection.8.9.2}
\contentsline {subsection}{\numberline {8.9.3}Is it automatic?}{462}{subsection.8.9.3}
\contentsline {subsection}{\numberline {8.9.4}Concrete usage in Coq}{462}{subsection.8.9.4}
\contentsline {subsection}{\numberline {8.9.5}Adding a ring structure}{464}{subsection.8.9.5}
\contentsline {subsection}{\numberline {8.9.6}How does it work?}{467}{subsection.8.9.6}
\contentsline {subsection}{\numberline {8.9.7}Dealing with fields}{468}{subsection.8.9.7}
\contentsline {subsection}{\numberline {8.9.8}Adding a new field structure}{469}{subsection.8.9.8}
\contentsline {subsection}{\numberline {8.9.9}History of ring}{470}{subsection.8.9.9}
\contentsline {subsection}{\numberline {8.9.10}Discussion}{471}{subsection.8.9.10}
\contentsline {section}{\numberline {8.10}Nsatz: tactics for proving equalities in integral domains}{472}{section.8.10}
\contentsline {subsection}{\numberline {8.10.1}More about \sphinxtitleref {nsatz}}{472}{subsection.8.10.1}
\contentsline {section}{\numberline {8.11}Generalized rewriting}{473}{section.8.11}
\contentsline {subsection}{\numberline {8.11.1}Introduction to generalized rewriting}{474}{subsection.8.11.1}
\contentsline {subsubsection}{Relations and morphisms}{474}{subsubsection*.1370}
\contentsline {subsubsection}{Adding new relations and morphisms}{475}{subsubsection*.1371}
\contentsline {subsubsection}{Rewriting and non reflexive relations}{477}{subsubsection*.1375}
\contentsline {subsubsection}{Rewriting and non symmetric relations}{478}{subsubsection*.1376}
\contentsline {subsubsection}{Rewriting in ambiguous setoid contexts}{479}{subsubsection*.1377}
\contentsline {subsection}{\numberline {8.11.2}Commands and tactics}{479}{subsection.8.11.2}
\contentsline {subsubsection}{First class setoids and morphisms}{479}{subsubsection*.1378}
\contentsline {subsubsection}{Tactics enabled on user provided relations}{480}{subsubsection*.1379}
\contentsline {subsubsection}{Printing relations and morphisms}{481}{subsubsection*.1385}
\contentsline {subsubsection}{Deprecated syntax and backward incompatibilities}{481}{subsubsection*.1387}
\contentsline {subsection}{\numberline {8.11.3}Extensions}{481}{subsection.8.11.3}
\contentsline {subsubsection}{Rewriting under binders}{481}{subsubsection*.1390}
\contentsline {subsubsection}{Subrelations}{482}{subsubsection*.1391}
\contentsline {subsubsection}{Constant unfolding}{483}{subsubsection*.1392}
\contentsline {subsection}{\numberline {8.11.4}Strategies for rewriting}{483}{subsection.8.11.4}
\contentsline {subsubsection}{Definitions}{483}{subsubsection*.1393}
\contentsline {subsubsection}{Usage}{484}{subsubsection*.1424}
\contentsline {section}{\numberline {8.12}Asynchronous and Parallel Proof Processing}{485}{section.8.12}
\contentsline {subsection}{\numberline {8.12.1}Proof annotations}{485}{subsection.8.12.1}
\contentsline {subsubsection}{Automatic suggestion of proof annotations}{485}{subsubsection*.1429}
\contentsline {subsection}{\numberline {8.12.2}Proof blocks and error resilience}{486}{subsection.8.12.2}
\contentsline {subsubsection}{Caveats}{486}{subsubsection*.1430}
\contentsline {subsection}{\numberline {8.12.3}Interactive mode}{486}{subsection.8.12.3}
\contentsline {subsubsection}{Caveats}{487}{subsubsection*.1431}
\contentsline {subsection}{\numberline {8.12.4}Batch mode}{487}{subsection.8.12.4}
\contentsline {subsection}{\numberline {8.12.5}Limiting the number of parallel workers}{488}{subsection.8.12.5}
\contentsline {section}{\numberline {8.13}Miscellaneous extensions}{488}{section.8.13}
\contentsline {subsection}{\numberline {8.13.1}Program derivation}{488}{subsection.8.13.1}
\contentsline {section}{\numberline {8.14}Polymorphic Universes}{489}{section.8.14}
\contentsline {subsection}{\numberline {8.14.1}General Presentation}{490}{subsection.8.14.1}
\contentsline {subsection}{\numberline {8.14.2}Polymorphic, Monomorphic}{491}{subsection.8.14.2}
\contentsline {subsection}{\numberline {8.14.3}Cumulative, NonCumulative}{492}{subsection.8.14.3}
\contentsline {subsubsection}{An example of a proof using cumulativity}{493}{subsubsection*.1439}
\contentsline {subsection}{\numberline {8.14.4}Cumulativity Weak Constraints}{494}{subsection.8.14.4}
\contentsline {subsection}{\numberline {8.14.5}Global and local universes}{494}{subsection.8.14.5}
\contentsline {subsection}{\numberline {8.14.6}Conversion and unification}{494}{subsection.8.14.6}
\contentsline {subsection}{\numberline {8.14.7}Minimization}{494}{subsection.8.14.7}
\contentsline {subsection}{\numberline {8.14.8}Explicit Universes}{495}{subsection.8.14.8}
\contentsline {subsubsection}{Polymorphic definitions}{495}{subsubsection*.1446}
\contentsline {chapter}{Bibliography}{498}{chapter*.1449}
\contentsline {chapter}{Command Index}{501}{section*.1450}
\contentsline {chapter}{Tactic Index}{505}{section*.1451}
\contentsline {chapter}{Flags, options and Tables Index}{508}{section*.1452}
\contentsline {chapter}{Errors and Warnings Index}{510}{section*.1453}
\contentsline {chapter}{Index}{514}{section*.1454}
