Recommend relevant Isabelle/HOL or Coq standard library theories, lemmas, and tactics based on proof goals. Use when: (1) Users need library lemmas for their proof, (2) Proof goals match standard library patterns, (3) Users ask what libraries to import, (4) Specific lemmas are needed for list/set/arithmetic operations, (5) Users are stuck and need to know what library support exists, or (6) Guidance on find_theorems/Search commands is needed. Supports both Isabelle/HOL and Coq standard librar...
Scanned 5/27/2026
Install via CLI
openskills install ArabelaTso/Skills-4-SE---
name: library-advisor
description: "Recommend relevant Isabelle/HOL or Coq standard library theories, lemmas, and tactics based on proof goals. Use when: (1) Users need library lemmas for their proof, (2) Proof goals match standard library patterns, (3) Users ask what libraries to import, (4) Specific lemmas are needed for list/set/arithmetic operations, (5) Users are stuck and need to know what library support exists, or (6) Guidance on find_theorems/Search commands is needed. Supports both Isabelle/HOL and Coq standard libraries."
---
# Library Usage Advisor
Recommend relevant libraries, lemmas, and theories from Isabelle/HOL or Coq standard libraries based on proof goals.
## Workflow
### 1. Analyze the Proof Goal
Examine the goal to identify:
- **Domain**: Lists, sets, arithmetic, logic, etc.
- **Operations**: Specific functions or operators involved
- **Pattern**: Commutativity, associativity, distributivity, etc.
- **Complexity**: Simple property vs. complex relationship
### 2. Determine Target System
Identify which proof assistant:
- **Isabelle/HOL**: Use Main library and extensions
- **Coq**: Use standard library (List, Arith, etc.)
- **Both**: Provide recommendations for both systems
### 3. Identify Relevant Libraries
Based on the domain, recommend appropriate libraries:
**For list operations**:
- Isabelle: Main (List theory included)
- Coq: `Require Import List. Import ListNotations.`
**For arithmetic**:
- Isabelle: Main (Nat theory included)
- Coq: `Require Import Arith Lia.`
**For sets**:
- Isabelle: Main (Set theory included)
- Coq: `Require Import MSets.`
**For logic**:
- Isabelle: HOL (automatically available)
- Coq: `Require Import Logic.`
### 4. Search for Specific Lemmas
Look for lemmas that directly match the goal:
**Exact matches**: Lemmas that prove the goal directly
**Component lemmas**: Lemmas for parts of the goal
**Related lemmas**: Similar properties that might help
Use the library reference files:
- **Isabelle library**: See [isabelle_library.md](references/isabelle_library.md)
- **Coq library**: See [coq_library.md](references/coq_library.md)
### 5. Recommend Usage
Provide concrete recommendations:
**Direct application**:
```isabelle
lemma "goal"
by (simp add: relevant_lemma)
```
**With additional steps**:
```coq
Lemma goal : statement.
Proof.
apply relevant_lemma.
(* additional steps *)
Qed.
```
**Manual proof with lemmas**:
Show how to use lemmas in a structured proof
### 6. Suggest Search Commands
Teach users how to find lemmas themselves:
**Isabelle**:
```isabelle
find_theorems "pattern"
find_theorems name: "keyword"
sledgehammer
```
**Coq**:
```coq
Search pattern.
Search "keyword".
Locate "notation".
```
## Domain-Specific Recommendations
### Lists
**Common goals**:
- Length properties: `length_append`, `length_rev`, `length_map`
- Reverse properties: `rev_rev_ident`, `rev_append`
- Append properties: `append_assoc`, `append_Nil`
- Map properties: `map_append`, `map_map`
- Membership: `in_set_member`, `set_append`
**Libraries**:
- Isabelle: Main (automatic)
- Coq: `List` library
### Arithmetic
**Common goals**:
- Commutativity: `add_commute`, `mult_commute`
- Associativity: `add_assoc`, `mult_assoc`
- Distributivity: `add_mult_distrib`
- Inequalities: Use `arith`/`lia` tactics
**Libraries**:
- Isabelle: Main (Nat theory)
- Coq: `Arith`, `Lia`, `Nia`
### Sets
**Common goals**:
- Union/intersection: `Un_commute`, `Int_commute`
- Subset: `subset_refl`, `subset_trans`
- Membership: `Un_iff`, `Int_iff`
**Libraries**:
- Isabelle: Main (Set theory)
- Coq: `MSets` or custom definitions
### Logic
**Common goals**:
- Conjunction: `conjI`, `conjE`
- Disjunction: `disjI1`, `disjI2`
- Implication: `impI`, `mp`
- Quantifiers: `allI`, `exI`
**Libraries**:
- Isabelle: HOL (automatic)
- Coq: `Logic` (mostly automatic)
## Recommendation Patterns
### Pattern 1: Exact Lemma Match
When goal exactly matches a known lemma:
**Isabelle**:
```isabelle
lemma "rev (rev xs) = xs"
by (simp add: rev_rev_ident)
```
**Coq**:
```coq
Lemma example : forall l, rev (rev l) = l.
Proof.
apply rev_involutive.
Qed.
```
### Pattern 2: Combination of Lemmas
When goal needs multiple lemmas:
**Isabelle**:
```isabelle
lemma "length (rev (xs @ ys)) = length xs + length ys"
by (simp add: length_rev length_append)
```
**Coq**:
```coq
Lemma example : forall l1 l2,
length (rev (l1 ++ l2)) = length l1 + length l2.
Proof.
intros.
rewrite rev_length.
rewrite app_length.
reflexivity.
Qed.
```
### Pattern 3: Automation
When goal is provable by automation:
**Isabelle**:
```isabelle
lemma "n + m = m + n"
by simp
(* Or: by auto, by arith *)
```
**Coq**:
```coq
Lemma example : forall n m, n + m = m + n.
Proof.
intros. lia.
Qed.
```
### Pattern 4: Induction with Lemmas
When manual proof needed but lemmas help:
**Isabelle**:
```isabelle
lemma "property xs"
proof (induction xs)
case Nil
show ?case by simp
next
case (Cons x xs)
show ?case using Cons.IH by (simp add: helper_lemma)
qed
```
**Coq**:
```coq
Lemma example : forall l, property l.
Proof.
induction l as [| x xs IHxs].
- simpl. reflexivity.
- simpl. rewrite IHxs. apply helper_lemma.
Qed.
```
## Search Strategies
### Strategy 1: Pattern-Based Search
**Isabelle**:
```isabelle
find_theorems "rev (rev _) = _"
find_theorems "length (_ @ _)"
find_theorems "_ + _ = _ + _"
```
**Coq**:
```coq
Search rev.
Search (_ ++ _).
Search (?x + ?y = ?y + ?x).
```
### Strategy 2: Name-Based Search
**Isabelle**:
```isabelle
find_theorems name: "append"
find_theorems name: "comm"
```
**Coq**:
```coq
Search "append".
Search "comm" (_ + _).
```
### Strategy 3: Type-Based Search
**Coq**:
```coq
Search (list _ -> nat).
Search (_ -> _ -> _ + _).
```
### Strategy 4: Sledgehammer/Auto
**Isabelle**:
```isabelle
lemma "goal"
sledgehammer
(* Suggests relevant lemmas and tactics *)
```
**Coq**:
```coq
Lemma goal : statement.
Proof.
auto. (* Try automatic tactics *)
Qed.
```
## Common Recommendations by Goal Type
### "rev (rev xs) = xs"
- Isabelle: `rev_rev_ident` or `by simp`
- Coq: `rev_involutive`
### "length (xs @ ys) = length xs + length ys"
- Isabelle: `length_append` or `by simp`
- Coq: `app_length`
### "n + m = m + n"
- Isabelle: `add_commute` or `by simp`
- Coq: `plus_comm` or `lia`
### "x ∈ set (xs @ ys) ⟷ x ∈ set xs ∨ x ∈ set ys"
- Isabelle: `set_append`
- Coq: `in_app_iff`
### "map f (xs @ ys) = map f xs @ map f ys"
- Isabelle: `map_append`
- Coq: `map_app`
## Examples
For complete examples with specific proof goals and library recommendations, see [examples.md](references/examples.md).
## Tips
- **Search first**: Use find_theorems/Search before proving manually
- **Check automation**: Try simp/auto/lia before complex proofs
- **Use sledgehammer**: In Isabelle, sledgehammer finds relevant lemmas
- **Import early**: Import all needed libraries at the start
- **Learn patterns**: Common properties (commutativity, etc.) have standard names
- **Read library docs**: Browse standard library documentation
- **Build intuition**: Learn which libraries contain which lemmas
- **Combine lemmas**: Complex goals often need multiple lemmas
- **Simplify first**: Use simp/simpl to reduce goals before searching
No comments yet. Be the first to comment!