はじめに¶
この文書は証明アシスタント Coq のリファレンスマニュアルです。Coqを初めて使う方は、まずチュートリアルを読むことをお勧めします。https://coq.inria.fr/documentation や https://github.com/coq/coq/wiki#coq-tutorials には、幾つかのチュートリアルへのリンクがあります。
Coq は、数学的な証明を構築するためにデザインされました。特に、形式仕様やプログラムを記述したり、プログラムが仕様に沿っていることを検証することを目的としています。Coqは、 Gallina と呼ばれる仕様記述言語を提供します。Gallina の項はプログラム・プログラムの性質・性質の証明を表現できます。カリー・ハワード同型対応 を使えば、プログラム・性質・証明は全て Calculus of Inductive Constructions という一つの言語で表現できます。これは \(\lambda\) 計算にリッチな型システムが付いたものです。Coq における論理的判断は全て型付け判断です。Coq システムの心臓部は型検査アルゴリズムで、これは証明の正しさを検査します。言い換えれば、このアルゴリズムはプログラムがその仕様に準拠するか検査します。また、Coq は、 タクティック と呼ばれるプログラムを用いて証明を構築する、対話的証明アシスタントも提供します。
Coq が提供する全てのサービスは、 Vernacular と呼ばれるコマンド言語を読み込ませることで利用できます。
Coq には、ユーザが入力した端からコマンドを実行していく対話モードと、ファイルに書かれたコマンドを順に実行していくコンパイルモードがあります。
対話モードでは、ユーザは順を追って証明を構築したり、利用できる定理や定義をシステムに問い合わせたりできます。対話モードは一般的に, CoqIDE (Coq Integrated Development Environment にて記載)やProof-General [Asp00] 1 を入れた Emacs 、またはブラウザ上で動作する jsCoq (https://github.com/ejgallego/jscoq) のようなIDEの助けを借りて実行されます。デバッグのために、 read-eval-print-loop である coqtop を直接用いることもできます。
コンパイルモードは、開発したもの全てを受け取り、その正当性を保証する証明チェッカとして機能します。さらに、 Coq コンパイラは、入力のコンパクトな表現を持つ出力ファイルを生成します。コンパイルモードは coqc コマンドで実行されます。
参考
この文書の読み方¶
この文書はリファレンスマニュアルであり、通読するものではありません。目的の文書を素早く見つけるために、色々な索引を使うことをお勧めします。総合索引に加え、タクティックやコマンド、エラーメッセージ・警告に特化した索引があります。とはいえ、このマニュアルも以下のような構造を持っています。
第1部では、仕様記述言語 Gallina について説明します。仕様記述言語 Gallina および Gallina の拡張 の章では、構文および Calculus of Inductive Constructions におけるプログラムや証明・定理の意味について説明します。The Coq library の章では Coq の標準ライブラリについて説明します。Calculus of Inductive Constructions の章は数学の形式的な説明です。The Module System の章ではモジュールシステムについて説明します。
第2部では、証明エンジンについて説明します。ここは6つの章に分かれています。Vernacular commands の章では、対話的証明と直接的には関係のないコマンド (Vernacular コマンド) を全て挙げます。コマンドは、環境への要求、完全/部分的な評価、ファイルの読み込みやコンパイルなどを行います。どのように証明を始め、終わればいいのか、どうすれば証明を並行して進めることができるかは、 Proof handling の章で説明しています。Tactics の章では、証明の1つまたは複数のステップを成すコマンド (タクティック) を全て挙げます。これらのタクティックを組み合わせて複雑な証明戦略を作るための言語については The tactic language の章で述べています。タクティックの具体例は Detailed examples of tactics の章で説明します。最後に、証明言語 SSReflect について The SSReflect proof language の章で説明します。
第3部は、 Syntax extensions and interpretation scopes の章で|Coq| の構文の拡張方法を、 Proof schemes の章で帰納法の原理を新たに定義する方法を説明しています。
第4部はより実用的なツールについて文書化しています。まず、 The Coq commands の章で、coqc (コンパイルモード) と coqtop (対話モード) の使い方およびオプションについて説明します。次に、 Utilities の章で、 Coq ディストリビューションに付属する様々なユーティリティについて説明します。最後に、 Coq Integrated Development Environment の章で、 CoqIDE について説明します。
第5部では、型強制・正準構造・型クラス・プログラム抽出・特殊なソルバとタクティックといった、いくつかの高度な機能について説明します。全ての項目を知りたい場合は、目次を参照してください。
その他の文書一覧¶
このマニュアルは Coq についてユーザが求める文書が全て含まれているわけではありません。以下の文書からも様々な情報を得ることができます。
- チュートリアル
このマニュアルと対を成す Coq チュートリアルは、新規ユーザが型理論の知識なしに Coq で証明を構築できるようになるまで、優しく導入することを目的としています。その後は、再帰型についてのチュートリアル (RecTutorial.ps) を読むのもいいでしょう。
- インストール方法
ソースに付属するテキストファイル INSTALL では、 Coq をインストールする方法について説明しています。
- Coq 標準ライブラリ
Coq 標準ライブラリのコメント付きソースコード (仕様のみで、証明を省いたもの)は https://coq.inria.fr/stdlib/ で閲覧できます。
目次¶
- はじめに
- Credits
- Credits: addendum for version 6.1
- Credits: addendum for version 6.2
- Credits: addendum for version 6.3
- Credits: versions 7
- Credits: version 8.0
- Credits: version 8.1
- Credits: version 8.2
- Credits: version 8.3
- Credits: version 8.4
- Credits: version 8.5
- Credits: version 8.6
- Credits: version 8.7
- Credits: version 8.8
- 仕様記述言語 Gallina
- Gallina の拡張
- レコード型
- Variants and extensions of
match
- 高度な再帰関数
- セクション機構
- モジュールシステム
- Libraries and qualified names
- Implicit arguments
- The different kinds of implicit arguments
- Maximal or non maximal insertion of implicit arguments
- Casual use of implicit arguments
- Declaration of implicit arguments
- Automatic declaration of implicit arguments
- Mode for automatic declaration of implicit arguments
- Controlling strict implicit arguments
- Controlling contextual implicit arguments
- Controlling reversible-pattern implicit arguments
- Controlling the insertion of implicit arguments not followed by explicit arguments
- Explicit applications
- Renaming implicit arguments
- Displaying what the implicit arguments are
- Explicit displaying of implicit arguments for pretty-printing
- Interaction with subtyping
- Deactivation of implicit arguments for parsing
- 正準構造
- 変数の暗黙の型
- 暗黙の一般化
- コアーション
- 全ての構成を表示する
- ユニバースを表示する
- Existential variables
- The Coq library
- Calculus of Inductive Constructions
- The Module System
- Vernacular commands
- Proof handling
- Tactics
- Invocation of tactics
- Applying theorems
- Managing the local context
- Controlling the proof flow
- Case analysis and induction
- Rewriting expressions
- Performing computations
- Automation
- Controlling automation
- Decision procedures
- Checking properties of terms
- Equality
- Equality and inductive sets
- Inversion
- Classical tactics
- Automating
- Non-logical tactics
- Simple tactic macros
- The tactic language
- Syntax
- Semantics
- Sequence
- Local application of tactics
- Goal selectors
- For loop
- Repeat loop
- Error catching
- Detecting progress
- Backtracking branching
- First tactic to work
- Left-biased branching
- Generalized biased branching
- Soft cut
- Checking the successes
- Checking the failure
- Checking the success
- Solving
- Identity
- Failing
- Timeout
- Timing a tactic
- Timing a tactic that evaluates to a term
- Local definitions
- Application
- Function construction
- Pattern matching on terms
- Pattern matching on goals
- Filling a term context
- Generating fresh hypothesis names
- Computing in a constr
- Recovering the type of a term
- Manipulating untyped terms
- Counting the goals
- Testing boolean expressions
- Proving a subgoal as a separate lemma
- Tactic toplevel definitions
- Debugging Ltac tactics
- Detailed examples of tactics
- The SSReflect proof language
- はじめに
- Usage
- Gallina extensions
- Basic tactics
- Control flow
- Rewriting
- An extended rewrite tactic
- Remarks and examples
- Rewrite redex selection
- Chained rewrite steps
- Explicit redex switches are matched first
- Occurrence switches and redex switches
- Occurrence selection and repetition
- Multi-rule rewriting
- Wildcards vs abstractions
- When SSReflect rewrite fails on standard Coq licit rewrite
- Existential metavariables and rewriting
- Locking, unlocking
- Congruence
- Contextual patterns
- Views and reflection
- SSReflect searching tool
- Synopsis and Index
- Syntax extensions and interpretation scopes
- Notations
- Basic notations
- Precedences and associativity
- Complex notations
- Simple factorization rules
- Displaying symbolic notations
- The Infix command
- Reserving notations
- Simultaneous definition of terms and notations
- Displaying information about notations
- Locating notations
- Notations and binders
- Notations with recursive patterns
- Notations with recursive patterns involving binders
- Predefined entries
- Summary
- Interpretation scopes
- Abbreviations
- Tactic Notations
- Notations
- Proof schemes
- The Coq commands
- Utilities
- Coq Integrated Development Environment
- Extended pattern matching
- Patterns
- Multiple patterns
- Aliasing subpatterns
- Nested patterns
- Disjunctive patterns
- About patterns of parametric types
- Implicit arguments in patterns
- Matching objects of dependent types
- Understanding dependencies in patterns
- When the elimination predicate must be provided
- Using pattern matching to write proofs
- Pattern-matching on inductive objects involving local definitions
- Pattern-matching and coercions
- When does the expansion strategy fail?
- Implicit Coercions
- 正準構造
- 型クラス
- Omega: a solver for quantifier-free problems in Presburger Arithmetic
- Micromega: tactics for solving arithmetic goals over ordered rings
- Short description of the tactics
- Positivstellensatz refutations
- lra: a decision procedure for linear real and rational arithmetic
- lia: a tactic for linear integer arithmetic
- nra: a proof procedure for non-linear arithmetic
- nia: a proof procedure for non-linear integer arithmetic
- psatz: a proof procedure for non-linear arithmetic
- Extraction of programs in OCaml and Haskell
- Program
- The ring and field tactic families
- Nsatz: tactics for proving equalities in integral domains
- Generalized rewriting
- Asynchronous and Parallel Proof Processing
- Miscellaneous extensions
- Polymorphic Universes
ライセンス¶
この作品 (Coq リファレンスマニュアル) はオープン・パブリケーション利用許諾契約書 (v1.0 かそれ以降) で指定された条件と制約に従う限り配布することができる(契約書の最新の版は現在のところ http://www.opencontent.org/openpub/で入手可能である)。オプションAおよびBは選択しない。
- 1
Proof-General は https://proofgeneral.github.io/から入手可能です。また、マイナーモード Company-Coq [PCC16] (https://github.com/cpitclaudel/company-coq) で拡張することもできます。