arabelatso/tactic-suggestion-assistant
Analyze proof states in Isabelle or Coq and suggest applicable tactics to make progress. Use when users need help with: (1) Choosing the next tactic in an interactive proof, (2) Understanding what tactics apply to their current goal, (3) Getting unstuck in a proof, (4) Learning which tactics work for specific goal structures (conjunctions, implications, induction, etc.). Provides 3-5 ranked tactic suggestions with explanations for intermediate-level proofs in both Isabelle/Isar and Coq.
npx skills add https://github.com/ArabelaTso/Skills-4-SE --skill tactic-suggestion-assistant
Analyze proof states and suggest applicable tactics to make progress in Isabelle or Coq.
This skill helps you navigate interactive proofs by analyzing the current proof state and suggesting 3-5 ranked tactics that can make progress. It works with both Isabelle/Isar and Coq, providing system-specific suggestions with explanations.
Provide the current proof state including:
The assistant will analyze the state and suggest tactics ranked by likelihood of success.
Determine whether you're working in Isabelle or Coq based on syntax:
⟹, ∧, ∨, ∀, ∃, 'a list, etc.->, /\, \/, forall, exists, list A, etc.Examine the goal's logical form:
P ∧ Q / P /\ Q → Split tacticsP ⟹ Q / P -> Q → Introduction tactics∀x. P / forall x, P → Variable introductiont1 = t2 → Simplification or rewritingLook at available hypotheses:
Type information guides tactic choice:
Provide 3-5 tactics ranked by:
For each suggested tactic, provide:
Proof state:
goal (1 subgoal):
1. ⋀xs ys. length xs = length ys ⟹ length (xs @ ys) = 2 * length xs
Analysis:
length xs = length ysxs and ysSuggestions:
by simp (High likelihood)length (xs @ ys) to length xs + length ys, then uses hypothesisapply (subst length_append) (Medium likelihood)length (xs @ ys) to length xs + length ysusing assms by auto (Medium likelihood)Proof state:
1 subgoal
n : nat
IHn : even n -> even (n + 2)
============================
even n -> even (S (S n))
Analysis:
IHnnSuggestions:
intro H. (High likelihood)H: even n to context, goal becomes even (S (S n))intros. simpl. apply IHn. assumption. (High likelihood)S (S n) simplifies to n + 2intro H. rewrite <- plus_n_Sm. rewrite <- plus_n_O. apply IHn. exact H. (Medium likelihood)S (S n) to n + 2 form to use IHauto. (Low likelihood)Isabelle: ⊢ P ∧ Q
apply (rule conjI) - Split into two goalsby auto - If both parts are trivialby simp - If simplification proves bothCoq: P /\ Q
split. - Split into two goalsauto. - If both parts are trivialintuition. - Propositional reasoningIndicators: Goal about all elements of a list/nat, recursive structure
Isabelle:
proof (induction xs) - List inductionproof (induction n) - Nat inductionproof (induction t) - Custom type inductionCoq:
induction l as [|x l' IH]. - List inductioninduction n as [|n' IH]. - Nat inductioninduction t. - Custom type inductionIndicators: Goal or hypothesis with conditional, pattern match
Isabelle:
proof (cases xs) - Case analysis on variableproof (cases "condition") - Case split on booleanby (auto split: if_split) - Auto with case splitCoq:
destruct l as [|x l']. - Case analysis on variabledestruct (condition). - Case split on booleancase_eq term. - Case analysis with equationIndicators: Goal with +, -, *, <, ≤
Isabelle:
by arith - Arithmetic decision procedureby linarith - Linear arithmeticby simp - SimplificationCoq:
lia. - Linear integer arithmeticnia. - Non-linear arithmeticring. - Ring solverIndicators: Many connectives, nested structure
Isabelle:
by auto - Full automationby fastforce - Aggressive automationsledgehammer - External proversCoq:
auto. - Automationintuition. - Propositional reasoningfirstorder. - First-order reasoningtauto. - Tautology solverDetailed tactic references and patterns:
Load these references when you need:
auto, simp) before manual tacticsTake arabelatso/tactic-suggestion-assistant from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.