lean-naming-style
Use when naming Lean declarations, organizing files, adding docstrings, or cleaning code so it matches Mathlib conventions and review expectations.
Install for Claude Code
curl -fsSL https://skills.openmathmodel.org/lean-naming-style.zip -o /tmp/lean-naming-style.zip && unzip -oq /tmp/lean-naming-style.zip -d ~/.claude/skills/
Files 6 files · 45.7 KB · updated 2026-10-09
- agents/openai.yaml242 B
- LICENSE18.2 KB
- LICENSES/Apache-2.0.txt11.1 KB
- NOTICE.md3.0 KB
- references/naming-and-style.md10.6 KB
- SKILL.md2.6 KB
SKILL.md
---
name: lean-naming-style
description: Use when naming Lean declarations, organizing files, adding docstrings, or cleaning code so it matches Mathlib conventions and review expectations.
---
# Lean Naming Style
Use this skill when creating or renaming declarations, organizing modules, or cleaning Lean code for review. The goal is not just “pretty code”; it is a library-shaped API that feels native to Mathlib.
## Naming Rules
- Use `snake_case` for theorem names and terms of type `Prop`.
- Use `UpperCamelCase` for structures, classes, inductive types, and other declarations returning `Type` or `Sort`.
- Use `lowerCamelCase` for ordinary terms returning data.
- Prefer descriptive theorem names whose conclusion drives the name.
- add hypotheses with `_of_...`
- use systematic fragments like `nonneg`, `inj`, `ext`, `iff`
- Put the declaration in the most specific namespace that supports natural dot notation.
## File and API Rules
- Use `UpperCamelCase.lean` file names.
- In projects using the module system, follow this header order:
- copyright comment;
- `module`;
- imports: `public import` only for what statements need, plain `import`
otherwise;
- `/-! module docstring -/`;
- `public section`.
See the `lean-project-architecture` skill's `references/module-system.md`.
- Keep one focused topic per file and follow the repository's file-size limit.
- Import as little as possible.
- After adding a public definition, add the obvious API immediately.
- constructor or evaluation lemmas
- `@[simp]` lemmas only when they genuinely improve simplification
- extensionality lemmas where equality is structural
- Add module docstrings and public-definition docstrings where they help later readers.
## Style Rules
- Prefer readable proofs over clever ones.
- Keep checked-in proofs explicit and lint-clean.
- Do not commit unmanifested `sorry`, `exact?`, `apply?`, or exploratory
`simp`. The sole `sorry` exception is the exact `by sorry` body of an
author-approved, manifest-bound frozen keystone theorem in state
`DRAFT_SORRY`; it is statement ABI, not finished code.
- In projects with a zero-warning policy, do not commit while linter warnings remain.
## Review Checklist
- Does the name match Mathlib conventions?
- Is the namespace the right one?
- Is the file the canonical home?
- Are imports minimal?
- Are there missing `simp`, `ext`, or accessor lemmas?
- Is the code docstring- and linter-clean?
## References
- Read [references/naming-and-style.md](references/naming-and-style.md) for naming patterns, symbol-to-name translations, structural lemma conventions, file organization, and lint/style expectations.