Generate structured proof skeletons with tactics, strategies, and intermediate lemmas for theorems in Isabelle/HOL or Coq. Use when users need to: (1) Create proof outlines for theorem statements, (2) Generate proof structure with tactic placeholders, (3) Identify key lemmas needed for a proof, (4) Plan proof strategies (induction, case analysis, forward/backward reasoning), (5) Scaffold proofs with intermediate steps and subgoals, or (6) Convert theorem statements into detailed proof templat...
Scanned 5/27/2026
Install via CLI
openskills install ArabelaTso/Skills-4-SE---
name: proof-skeleton-generator
description: "Generate structured proof skeletons with tactics, strategies, and intermediate lemmas for theorems in Isabelle/HOL or Coq. Use when users need to: (1) Create proof outlines for theorem statements, (2) Generate proof structure with tactic placeholders, (3) Identify key lemmas needed for a proof, (4) Plan proof strategies (induction, case analysis, forward/backward reasoning), (5) Scaffold proofs with intermediate steps and subgoals, or (6) Convert theorem statements into detailed proof templates. Supports both Isabelle/HOL and Coq equally."
---
# Proof Skeleton Generator
Generate structured proof skeletons with tactics, proof strategies, and key lemmas for theorems in Isabelle/HOL or Coq.
## Workflow
### 1. Analyze the Theorem Statement
Examine the theorem to understand:
- **Quantifiers**: Universal (∀/forall) or existential (∃/exists)
- **Logical structure**: Implications, conjunctions, disjunctions
- **Data types involved**: Lists, natural numbers, custom types
- **Complexity**: Simple equality vs. complex property
### 2. Choose Target System
Ask the user which proof assistant to target:
- **Isabelle/HOL**: Uses Isar structured proofs, automatic tactics
- **Coq**: Uses Ltac tactics, more explicit proof terms
- **Both**: Generate skeletons for both systems
If not specified, default to generating both versions.
### 3. Determine Proof Strategy
Based on the theorem structure, identify the appropriate proof technique:
**Induction** - When theorem involves recursive types:
- List induction for list properties
- Natural number induction for arithmetic
- Structural induction for custom datatypes
- Strong induction when needed
**Case Analysis** - When theorem involves:
- Boolean conditions
- Option types (None/Some)
- Sum types or custom constructors
- Conditional expressions
**Direct Proof** - When theorem is:
- Simple equality that simplifies
- Follows directly from definitions
- Provable by automatic tactics
**Forward Reasoning** - Build up facts:
- Establish intermediate lemmas
- Chain implications
- Construct witnesses for existentials
**Backward Reasoning** - Work from goal:
- Apply rules to reduce goal
- Split conjunctions
- Introduce implications
### 4. Identify Required Lemmas
Determine helper lemmas that may be needed:
- **Standard library lemmas**: Check if already available
- **Custom lemmas**: Properties that need separate proof
- **Induction hypotheses**: How they'll be used
- **Intermediate facts**: Steps in the main proof
### 5. Generate Proof Skeleton
Use the reference files for tactics and patterns:
- **Isabelle tactics**: See [isabelle_tactics.md](references/isabelle_tactics.md)
- **Coq tactics**: See [coq_tactics.md](references/coq_tactics.md)
- **Complete examples**: See [examples.md](references/examples.md)
Create a skeleton that includes:
1. **Proof structure** with appropriate method (induction, cases, etc.)
2. **Case labels** for each subgoal
3. **Strategy comments** explaining the approach
4. **Tactic placeholders** (sorry/admit) for incomplete steps
5. **Intermediate assertions** (have/assert) for key facts
6. **Helper lemmas** with their own skeletons
### 6. Structure the Output
Organize the proof skeleton clearly:
**For Isabelle/HOL:**
```isabelle
(* Helper lemmas if needed *)
lemma helper_name:
"statement"
sorry
(* Main theorem *)
theorem theorem_name:
assumes "assumptions"
shows "conclusion"
proof (method)
case case_name
(* Goal: ... *)
(* Strategy: ... *)
(* Key steps:
1. ...
2. ...
*)
show ?case sorry
next
(* Additional cases *)
qed
```
**For Coq:**
```coq
(* Helper lemmas if needed *)
Lemma helper_name :
statement.
Proof.
(* proof *)
admit.
Admitted.
(* Main theorem *)
Theorem theorem_name :
statement.
Proof.
intros.
induction ... as [| ...].
- (* Case: ... *)
(* Strategy: ... *)
admit.
- (* Case: ... *)
(* IH: ... *)
(* Strategy: ... *)
admit.
Admitted.
```
## Key Principles
### Clarity
- Add comments explaining the proof strategy
- Label each case clearly
- Document what the induction hypothesis provides
- Explain non-obvious steps
### Completeness
- Include all necessary cases
- Identify all required helper lemmas
- Show the structure of nested proofs
- Indicate where automation might work
### Practicality
- Use `sorry` (Isabelle) or `admit` (Coq) for incomplete steps
- Suggest automatic tactics where applicable
- Note when `sledgehammer` (Isabelle) might help
- Indicate which steps are trivial vs. challenging
### Correctness
- Ensure case analysis is exhaustive
- Verify induction is on the right variable
- Check that the proof structure matches the goal
- Validate that lemmas are actually needed
## Proof Strategy Selection Guide
### When to Use Induction
**List properties**: `forall xs, P xs`
- Induction on `xs`
- Base case: empty list
- Inductive case: `x :: xs` with IH `P xs`
**Natural number properties**: `forall n, P n`
- Induction on `n`
- Base case: `0` or `Suc 0`
- Inductive case: `Suc n` with IH `P n`
**Recursive function properties**: When function is defined recursively
- Induct on the recursive argument
- IH mirrors the recursive call
### When to Use Case Analysis
**Conditional expressions**: `if b then ... else ...`
- Split on `b` (true/false cases)
**Option types**: `match opt with None => ... | Some x => ...`
- Case on `None` and `Some x`
**Sum types**: `match x with Left a => ... | Right b => ...`
- Case on each constructor
### When to Use Direct Proof
**Definitional equalities**: `f x = g x` where definitions unfold
- Unfold definitions and simplify
**Trivial goals**: Provable by `auto`, `simp`, `reflexivity`
- Try automatic tactics first
### When to Use Lemmas
**Repeated subgoals**: Same property needed multiple times
- Extract as separate lemma
**Complex intermediate facts**: Multi-step derivations
- Prove as helper lemma
**Standard properties**: Check standard library first
- Import and use existing lemmas
## Common Patterns
### Induction with Simplification
```
proof (induction xs)
case Nil
show ?case by simp
next
case (Cons x xs)
show ?case using Cons.IH by simp
qed
```
### Case Analysis with Subproofs
```
proof (cases x)
case Constructor1
show ?thesis
proof -
(* detailed steps *)
qed
next
case Constructor2
(* ... *)
qed
```
### Forward Reasoning Chain
```
proof -
have step1: "fact1" by simp
have step2: "fact2" using step1 by simp
show ?thesis using step2 by simp
qed
```
### Backward Reasoning with Rules
```
proof (rule some_rule)
show "premise1" sorry
show "premise2" sorry
qed
```
## Tips
- **Start with structure**: Get the proof skeleton right before filling details
- **Use comments liberally**: Explain strategy and key steps
- **Identify IH usage**: Note where induction hypothesis is applied
- **Check standard library**: Many lemmas already exist
- **Suggest automation**: Note where `auto`, `simp`, `blast` might work
- **Be realistic**: Mark challenging steps as `sorry`/`admit`
- **Both systems**: Ensure semantic equivalence when generating both
- **Nested induction**: Handle carefully with clear variable names
- **Termination**: Note when termination proofs are needed
No comments yet. Be the first to comment!