Skills-4-SE library-advisor
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.
git clone https://github.com/ArabelaTso/Skills-4-SE
T=$(mktemp -d) && git clone --depth=1 https://github.com/ArabelaTso/Skills-4-SE "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/library-for-proof-advisor" ~/.claude/skills/arabelatso-skills-4-se-library-advisor && rm -rf "$T"
skills/library-for-proof-advisor/SKILL.mdLibrary 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
- Coq library: See coq_library.md
5. Recommend Usage
Provide concrete recommendations:
Direct application:
lemma "goal" by (simp add: relevant_lemma)
With additional steps:
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:
find_theorems "pattern" find_theorems name: "keyword" sledgehammer
Coq:
Search pattern. Search "keyword". Locate "notation".
Domain-Specific Recommendations
Lists
Common goals:
- Length properties:
,length_append
,length_revlength_map - Reverse properties:
,rev_rev_identrev_append - Append properties:
,append_assocappend_Nil - Map properties:
,map_appendmap_map - Membership:
,in_set_memberset_append
Libraries:
- Isabelle: Main (automatic)
- Coq:
libraryList
Arithmetic
Common goals:
- Commutativity:
,add_commutemult_commute - Associativity:
,add_assocmult_assoc - Distributivity:
add_mult_distrib - Inequalities: Use
/arith
tacticslia
Libraries:
- Isabelle: Main (Nat theory)
- Coq:
,Arith
,LiaNia
Sets
Common goals:
- Union/intersection:
,Un_commuteInt_commute - Subset:
,subset_reflsubset_trans - Membership:
,Un_iffInt_iff
Libraries:
- Isabelle: Main (Set theory)
- Coq:
or custom definitionsMSets
Logic
Common goals:
- Conjunction:
,conjIconjE - Disjunction:
,disjI1disjI2 - Implication:
,impImp - Quantifiers:
,allIexI
Libraries:
- Isabelle: HOL (automatic)
- Coq:
(mostly automatic)Logic
Recommendation Patterns
Pattern 1: Exact Lemma Match
When goal exactly matches a known lemma:
Isabelle:
lemma "rev (rev xs) = xs" by (simp add: rev_rev_ident)
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:
lemma "length (rev (xs @ ys)) = length xs + length ys" by (simp add: length_rev length_append)
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:
lemma "n + m = m + n" by simp (* Or: by auto, by arith *)
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:
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:
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:
find_theorems "rev (rev _) = _" find_theorems "length (_ @ _)" find_theorems "_ + _ = _ + _"
Coq:
Search rev. Search (_ ++ _). Search (?x + ?y = ?y + ?x).
Strategy 2: Name-Based Search
Isabelle:
find_theorems name: "append" find_theorems name: "comm"
Coq:
Search "append". Search "comm" (_ + _).
Strategy 3: Type-Based Search
Coq:
Search (list _ -> nat). Search (_ -> _ -> _ + _).
Strategy 4: Sledgehammer/Auto
Isabelle:
lemma "goal" sledgehammer (* Suggests relevant lemmas and tactics *)
Coq:
Lemma goal : statement. Proof. auto. (* Try automatic tactics *) Qed.
Common Recommendations by Goal Type
"rev (rev xs) = xs"
- Isabelle:
orrev_rev_identby simp - Coq:
rev_involutive
"length (xs @ ys) = length xs + length ys"
- Isabelle:
orlength_appendby simp - Coq:
app_length
"n + m = m + n"
- Isabelle:
oradd_commuteby simp - Coq:
orplus_commlia
"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.
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