Skip to content
cccskills
FreePublished on GitHub

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.

The English summary is being prepared. Showing the original description.

Run score Not tested

See how to install

Files included (4)

  • SKILL.md7.8 KB
  • references/coq_tactics.md7.7 KB
  • references/isabelle_tactics.md6.1 KB
  • references/proof_patterns.md10.1 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Tactic Suggestion Assistant

Analyze proof states and suggest applicable tactics to make progress in Isabelle or Coq.

Overview

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.

How to Use

Provide the current proof state including:

  1. System: Isabelle or Coq
  2. Goal: The current goal to prove
  3. Context: Available hypotheses/assumptions (if any)
  4. Variables: Types of variables involved (optional but helpful)

The assistant will analyze the state and suggest tactics ranked by likelihood of success.

Analysis Process

Step 1: Identify the Proof System

Determine whether you're working in Isabelle or Coq based on syntax:

  • Isabelle: Uses ⟹, ∧, ∨, ∀, ∃, 'a list, etc.
  • Coq: Uses ->, /\, \/, forall, exists, list A, etc.

Step 2: Analyze Goal Structure

Examine the goal's logical form:

  • Conjunction: P ∧ Q / P /\ Q → Split tactics
  • Implication: P ⟹ Q / P -> Q → Introduction tactics
  • Quantification: ∀x. P / forall x, P → Variable introduction
  • Equality: t1 = t2 → Simplification or rewriting
  • Inductive types: Lists, nat, trees → Induction or case analysis

Step 3: Examine Context

Look at available hypotheses:

  • Equations: Can be used for rewriting
  • Inductive predicates: Can be inverted or used directly
  • Conjunctions: Can be decomposed
  • Disjunctions: Require case analysis

Step 4: Consider Variable Types

Type information guides tactic choice:

  • Lists: Suggest induction or case analysis (empty vs cons)
  • Natural numbers: Suggest induction or case analysis (0 vs successor)
  • Options: Suggest case analysis (None vs Some)
  • Custom types: Suggest structural induction

Step 5: Rank Suggestions

Provide 3-5 tactics ranked by:

  1. Structural match with goal
  2. Simplicity and directness
  3. Automation potential
  4. Common proof patterns
  5. Context support

Suggestion Format

For each suggested tactic, provide:

  1. Tactic: The exact tactic syntax
  2. Rationale: Why this tactic applies
  3. Effect: What happens after applying it
  4. Likelihood: High/Medium/Low

Example: Isabelle Proof State

Proof state:

goal (1 subgoal):
 1. ⋀xs ys. length xs = length ys ⟹ length (xs @ ys) = 2 * length xs

Analysis:

  • Goal: Implication with equality
  • Hypothesis: length xs = length ys
  • Variables: Lists xs and ys

Suggestions:

  1. by simp (High likelihood)

    • Rationale: Goal is an arithmetic equality that simplification can handle
    • Effect: Simplifies length (xs @ ys) to length xs + length ys, then uses hypothesis
    • Try this first for simple arithmetic goals
  2. apply (subst length_append) (Medium likelihood)

    • Rationale: Explicitly unfold the append length property
    • Effect: Rewrites length (xs @ ys) to length xs + length ys
    • More explicit than simp, useful if simp fails
  3. using assms by auto (Medium likelihood)

    • Rationale: Use assumptions with automation
    • Effect: Combines hypothesis with automatic reasoning
    • Good fallback if simp doesn't work

Example: Coq Proof State

Proof state:

1 subgoal
n : nat
IHn : even n -> even (n + 2)
============================
even n -> even (S (S n))

Analysis:

  • Goal: Implication
  • Hypothesis: Induction hypothesis IHn
  • Variables: Natural number n
  • Context: In an induction proof

Suggestions:

  1. intro H. (High likelihood)

    • Rationale: Goal is an implication, introduce the hypothesis
    • Effect: Adds H: even n to context, goal becomes even (S (S n))
    • Standard first step for implications
  2. intros. simpl. apply IHn. assumption. (High likelihood)

    • Rationale: Complete proof chain using IH
    • Effect: Introduces hypothesis, simplifies, applies IH, solves with assumption
    • Direct solution if S (S n) simplifies to n + 2
  3. intro H. rewrite <- plus_n_Sm. rewrite <- plus_n_O. apply IHn. exact H. (Medium likelihood)

    • Rationale: Rewrite to match IH form
    • Effect: Converts S (S n) to n + 2 form to use IH
    • Needed if simplification doesn't automatically match
  4. auto. (Low likelihood)

    • Rationale: Try automation
    • Effect: May solve if proof is straightforward
    • Worth trying but may not have enough hints

Common Situations

Situation: Conjunction Goal

Isabelle: ⊢ P ∧ Q

  • apply (rule conjI) - Split into two goals
  • by auto - If both parts are trivial
  • by simp - If simplification proves both

Coq: P /\ Q

  • split. - Split into two goals
  • auto. - If both parts are trivial
  • intuition. - Propositional reasoning

Situation: Need Induction

Indicators: Goal about all elements of a list/nat, recursive structure

Isabelle:

  • proof (induction xs) - List induction
  • proof (induction n) - Nat induction
  • proof (induction t) - Custom type induction

Coq:

  • induction l as [|x l' IH]. - List induction
  • induction n as [|n' IH]. - Nat induction
  • induction t. - Custom type induction

Situation: Case Analysis Needed

Indicators: Goal or hypothesis with conditional, pattern match

Isabelle:

  • proof (cases xs) - Case analysis on variable
  • proof (cases "condition") - Case split on boolean
  • by (auto split: if_split) - Auto with case split

Coq:

  • destruct l as [|x l']. - Case analysis on variable
  • destruct (condition). - Case split on boolean
  • case_eq term. - Case analysis with equation

Situation: Arithmetic Goal

Indicators: Goal with +, -, *, <, ≤

Isabelle:

  • by arith - Arithmetic decision procedure
  • by linarith - Linear arithmetic
  • by simp - Simplification

Coq:

  • lia. - Linear integer arithmetic
  • nia. - Non-linear arithmetic
  • ring. - Ring solver

Situation: Stuck on Complex Goal

Indicators: Many connectives, nested structure

Isabelle:

  • by auto - Full automation
  • by fastforce - Aggressive automation
  • sledgehammer - External provers

Coq:

  • auto. - Automation
  • intuition. - Propositional reasoning
  • firstorder. - First-order reasoning
  • tauto. - Tautology solver

References

Detailed tactic references and patterns:

Load these references when you need:

  • Complete tactic syntax and options
  • Advanced tactic usage
  • Detailed pattern matching rules
  • Tactic combinators and composition

Tips for Effective Suggestions

  1. Start simple: Suggest automation (auto, simp) before manual tactics
  2. Match structure: Prioritize tactics that directly match the goal form
  3. Consider context: Use available hypotheses in suggestions
  4. Explain effects: Clearly state what happens after applying the tactic
  5. Provide alternatives: Offer 3-5 options ranked by likelihood
  6. Be specific: Give exact syntax, not just tactic names
  7. Learn from failures: If a suggested tactic fails, analyze why and suggest alternatives

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Applies abstract interpretation using different abstract domains (intervals, octagons, polyhedra, sign, congruence) to statically analyze program variables and infer invariants, value ranges, and relationships. Use when analyzing program properties, inferring loop invariants, detecting potential errors, or understanding variable relationships through static analysis.

The English summary is being prepared. Showing the original description.

ArabelaTso/Skills-4-SE258Updated Aug 21, 2026

Uses abstract interpretation to automatically infer loop invariants, function preconditions, and postconditions for formal verification. Generates invariants that capture program behavior and support correctness proofs in Dafny, Isabelle, Coq, and other verification systems. Use when adding formal specifications to code, generating verification conditions, inferring contracts for functions, or discovering loop invariants for proofs.

The English summary is being prepared. Showing the original description.

ArabelaTso/Skills-4-SE258Updated Aug 21, 2026

Performs abstract interpretation over source code to infer possible program states, variable ranges, and data properties without executing the program. Reports potential runtime errors including out-of-bounds accesses, null dereferences, type inconsistencies, division by zero, and integer overflows. Use when analyzing code for potential runtime errors, performing static analysis, checking safety properties, or verifying program behavior without execution.

The English summary is being prepared. Showing the original description.

ArabelaTso/Skills-4-SE258Updated Aug 21, 2026

Performs abstract interpretation to produce summarized execution traces and high-level program behavior representations. Highlights key control flow paths, variable relationships, loop invariants, function summaries, and potential runtime states using abstract domains (intervals, signs, nullness, etc.). Use when analyzing program behavior, understanding execution paths, computing loop invariants, tracking variable ranges, detecting potential runtime errors, or generating program summaries without concrete execution.

The English summary is being prepared. Showing the original description.

ArabelaTso/Skills-4-SE258Updated Aug 21, 2026

Create ACSL (ANSI/ISO C Specification Language) formal annotations for C/C++ programs. Use this skill when working with formal verification, adding function contracts (requires/ensures), loop invariants, assertions, memory safety annotations, or any ACSL specifications. Supports Frama-C verification and generates comprehensive formal specifications for C/C++ code.

The English summary is being prepared. Showing the original description.

ArabelaTso/Skills-4-SE258Updated Aug 21, 2026

CLI-based browser automation with persistent page state using ref-based element interaction. Use when users ask to navigate websites, interact with web pages, fill forms, take screenshots, test web applications, or extract information from web pages.

The English summary is being prepared. Showing the original description.

ArabelaTso/Skills-4-SE258Updated Aug 21, 2026

See all skills by ArabelaTso

Report a problem with this skill