Theorem four_color : (m : (map R)) (simple_map m) -> (map_colorable (4) m).
The verification community seeks to build a system that can follow the reasoning of an average human engaged in a creative, computational, problem solving task lasting months or years and spanning an arbitrary set of application domains.We should aim for the specification and machine checked proof of full functional correctness of programs of inherent importance and interest.
Now step back and reconsider what was just said: we seek to build a system that follows the reasoning of an average human in an arbitrary, creative, computational, problem-solving task.
This is the theorem proving problem, perhaps restricted to a computational logic. We seek to build a system that reasons about computation.
I believe one is not likely to achieve a goal unless one identifies precisely what the goal is. My goal is to build a practical theorem prover for a computational logic. I believe that any attack on the verification problem will fail unless theorem proving -- machine assisted reasoning -- is at its heart.
This is the problem. How do we invent proofs -- especially inductive proofs?2. How to use Examples and Counterexamples
I believe this problem is part of the solution of the first one. I believe people frequently use examples to guide the search for a proof -- and more often use examples to guide the search for accurately stated theorems and inductive invariants.3. How to use Analogy, Learning, and Data Mining
How do we learn new concepts? How do we come to understand their patterns of motion in terms? Proof by analogy is often a reasonable substitute for higher-order features. That is, instead of stating a higher-order general scheme, prove the instances automatically as needed. How do we learn what moves are likely to work in a given context and what moves won't?4. How to Architect an Open Verification Environment
In any sufficiently automatic system, the system's strategy will occasionally thwart the proof strategy the user has in mind. It must be possible to over-ride virtually every automatic decision -- in a sound way. This is also the place where we will address the problem of plugging together different tools -- other provers, decision procedures, static analyzers, etc.5. Parallel, Distributed and Collaborative Theorem Proving
Big proof projects involve many people working on interconnected parts of the problem. Big projects require ``proof maintenance'' where previously constructed proofs must be re-constructed for slightly different models and specs. How do we support distributed proof development and maintenance?6. User Interface and Interactive Steering
How do we combine a fully automatic proof search engine with one that allows the user to supply proof sketches, hints, and strategic guidance? How do we inform the user of what the system is doing so the user can help -- how can we do that without drowning the user in a sea of formulas?7. Education of the User Community -- and Their Managers
Even if we succeed in building an empowering verification environment, we have to motivate and educate people to use it.8. How to Build a Verified Theorem Prover
At first sight, this goal may not seem to be on the critical path. However, it is difficult to sell a product you don't use -- and that includes formal methods.Remember, this paper asks the questions. It doesn't answer them.
Build only those things you can imagine specifying and verifying -- and if your group cannot handle its own system, then find some partners who can build the part you need.Our community is perfectly positioned as the vanguard of the revolution. If we accept the challenge, we are likely to be the first group to build a machine that reasons.