Claude-skill-registry lean-hit-development
Guides adding new Higher Inductive Types to the ComputationalPaths library. Use when creating new HITs, defining fundamental group (pi1) calculations, implementing encode-decode proofs, or adding new topological spaces.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/lean-hit-development" ~/.claude/skills/majiayu000-claude-skill-registry-lean-hit-development && rm -rf "$T"
manifest:
skills/data/lean-hit-development/SKILL.mdsource content
Higher Inductive Type Development
This skill guides the implementation of new Higher Inductive Types (HITs) in the ComputationalPaths Lean 4 library, following established patterns for axiom declarations, recursion principles, and fundamental group calculations.
File Location
New HITs go in
ComputationalPaths/Path/HIT/YourHIT.lean
Required Module Structure
/- # [HIT Name] Higher Inductive Type Brief mathematical description of the space. ## Key Results - `yourHITBase`: The base point constructor - `yourHITLoop`: The path constructor(s) - `piOneEquiv*`: π₁(YourHIT) ≃ [Group] ## Mathematical Background [Explain the topology/homotopy theory] ## References - [Cite relevant papers] -/ import ComputationalPaths.Path.Homotopy.FundamentalGroup import ComputationalPaths.Path.Rewrite.SimpleEquiv -- other imports as needed namespace ComputationalPaths namespace Path.HIT /-! ## Type and Constructor Axioms -/ axiom YourHIT : Type u axiom yourHITBase : YourHIT axiom yourHITLoop : Path yourHITBase yourHITBase -- or other path constructors /-! ## Recursion Principle -/ axiom YourHIT.rec {β : Type v} (base : β) (loop : Path base base) : YourHIT → β axiom YourHIT.rec_base : YourHIT.rec base loop yourHITBase = base /-! ## Path Recursion (for encode) -/ axiom YourHIT.recPath {a : YourHIT} (P : YourHIT → Type) (pbase : P yourHITBase) (ploop : Path (transport P yourHITLoop pbase) pbase) : (x : YourHIT) → P x /-! ## Presentation Type -/ -- Define the group presentation inductive YourGroupWord | e : YourGroupWord -- identity | gen : YourGroupWord -- generator(s) | inv : YourGroupWord → YourGroupWord | mul : YourGroupWord → YourGroupWord → YourGroupWord inductive YourGroupRel : YourGroupWord → YourGroupWord → Prop | inv_left : YourGroupRel (mul (inv w) w) e | inv_right : YourGroupRel (mul w (inv w)) e -- group-specific relations def YourGroupPresentation := Quot YourGroupRel /-! ## Encode-Decode -/ -- Decode: presentation → π₁ noncomputable def decode : YourGroupPresentation → π₁(YourHIT, yourHITBase) := Quot.lift (fun w => wordToLoop w) (fun _ _ h => Quot.sound (decode_respects_rel h)) -- Encode: π₁ → presentation (often needs axioms) axiom encodePath : Path yourHITBase yourHITBase → YourGroupWord axiom encodePath_respects_rweq : RwEq p q → YourGroupRel (encodePath p) (encodePath q) noncomputable def encode : π₁(YourHIT, yourHITBase) → YourGroupPresentation := Quot.lift (fun p => Quot.mk _ (encodePath p)) (fun _ _ h => Quot.sound (encodePath_respects_rweq h)) /-! ## Round-Trip Proofs -/ theorem decode_encode (α : π₁(YourHIT, yourHITBase)) : decode (encode α) = α := by induction α using Quot.ind with | _ p => exact Quot.sound (decode_encode_path p) theorem encode_decode (x : YourGroupPresentation) : encode (decode x) = x := by induction x using Quot.ind with | _ w => exact Quot.sound (encode_decode_word w) /-! ## Main Equivalence -/ noncomputable def piOneEquivYourGroup : SimpleEquiv (π₁(YourHIT, yourHITBase)) YourGroupPresentation where toFun := encode invFun := decode left_inv := decode_encode right_inv := encode_decode /-! ## Summary -/ /- This module establishes: 1. YourHIT as an axiomatized higher inductive type 2. π₁(YourHIT, yourHITBase) ≃ YourGroupPresentation -/ end Path.HIT end ComputationalPaths
Checklist for New HITs
- Define axioms for type and constructors
- Define recursion principle (non-dependent and dependent)
- Define computation rules (β-rules as axioms)
- Create group presentation type (words + relations)
- Implement decode (presentation → π₁)
- Implement encode (π₁ → presentation, may need axioms)
- Prove decode_respects_rel using RwEq lemmas
- Prove round-trip properties (decode_encode, encode_decode)
- Package as SimpleEquiv
- Add to imports in
ComputationalPaths/Path.lean - Update README with new result
Common HIT Patterns
Circle (S¹)
- One base point, one loop
- π₁(S¹) ≃ ℤ
Torus (T²)
- One base point, two loops (a, b) with
aba⁻¹b⁻¹ = refl - π₁(T²) ≃ ℤ × ℤ
Sphere (S²)
- One base point, one 2-cell (surface) filling a constant loop
- π₁(S²) ≃ 1 (trivial)
Wedge Sum (A ∨ B)
- Glue base points together
- π₁(A ∨ B) ≃ π₁(A) * π₁(B) (free product)
Orientable Surface (Σ_g)
- Genus g with 2g generators and surface relation
- π₁(Σ_g) ≃ ⟨a₁,b₁,...,a_g,b_g | [a₁,b₁]⋯[a_g,b_g] = 1⟩
Key Imports
import ComputationalPaths.Path.Basic.Core -- Path, refl, symm, trans import ComputationalPaths.Path.Basic.Congruence -- congrArg, transport import ComputationalPaths.Path.Rewrite.RwEq -- RwEq and lemmas import ComputationalPaths.Path.Rewrite.SimpleEquiv -- SimpleEquiv structure import ComputationalPaths.Path.Homotopy.FundamentalGroup -- π₁ notation import ComputationalPaths.Path.Homotopy.Loops -- LoopSpace
Axiom Minimization
Only use axioms for:
- The HIT type itself
- Point constructors
- Path constructors
- Higher path constructors (2-cells, etc.)
- Recursion/elimination principles
- Computation rules (β-rules)
- Encode function (when not definable)
Everything else should be proved from these axioms.