Library search
Use Search in the toolbar, or Ctrl/⌘ Shift F, to search bundled Cumulus and .g17 libraries loaded through Open .g17 or Open folder. Results include qualified names, source declarations, section assumptions, documentation, and source navigation. Copy name copies the qualified identifier. Escape closes; Arrow Down enters the results, and Tab moves through result actions.
Search is local and works offline after the workbench has been cached. It does not send source text to a search service. Imported files must be available in the bundle or loaded into the workspace; it does not crawl arbitrary disks or remote repositories. Workspace modules override bundled modules of the same name. Reopening Search synchronizes edits and removals.
Queries#
Criteria are conjoined. Quotes preserve whitespace. Prefix a criterion with
- to exclude it. Matching is case-insensitive.
| Query | Meaning |
|---|---|
Nullstellensatz |
Search names, declarations, section context and comments |
name:mul module:Complex |
Names containing mul in Complex modules |
kind:theorem symbol:IntegerDivides |
Theorems whose declarations mention that symbol |
conclusion:"∃" -module:Core |
Existential conclusions outside Core |
module:Polynomial name:translate |
Polynomial translation declarations |
pattern:"distance(?x, ?x)" |
A repeated source expression in the conclusion |
A value may follow its field after whitespace. After conclusion: or
pattern: such a value runs to the next filter or the end of the query,
so conclusion: ∈ ω is the conclusion criterion ∈ ω and
conclusion: _ = 0 ∨ _ = 0 -module:Core is one conclusion pattern and an
exclusion; after the other fields it is the next word. symbol: matches
a complete source identifier or its qualified suffix, not a substring.
module: and conclusion: use substring matching; name: matches the
whole value as a substring, or its pieces split at _ in order, so
name:mul_eq_zero finds mul.eq_zero_iff and integerMulValue.eq_zero
while name:complexPolynomial.continuous stays a substring.
A conclusion: value with a wildcard is matched as a pattern.
pattern: uses token sequences with nonempty balanced spans for _ and
named wildcards such as ?x. Repeated named wildcards must bind identical token
sequences. Wildcards are local to each pattern criterion. Matching is
syntactic, over the source text. It does not resolve overloads, identify
alpha-equivalent expressions, unfold definitions, or infer carriers.
Patterns are limited to 128 tokens, wildcard spans to 64 tokens, and query work
to a fixed matching budget. When the budget runs out, search asks for another
filter instead of returning a partial result set.
Results are source declarations. They say nothing about proof status: broken
or admitted workspace declarations can appear. Autogenerated theorems without explicit
source declarations are not indexed yet. Use proof checking and Axiom Audit
for validity/dependencies. Existing exact?, apply?, and rw? perform checked
goal-directed discovery inside proofs.
Design#
A dedicated worker keeps discovery independent of long-running kernel checks. The index uses trigram postings, intersects the rarest postings first, and verifies each surviving candidate against all criteria. Changed files replace their records and postings; unchanged files retain them. Query caches are bounded and invalidated on changes. Results are ranked deterministically: an exact short-name match first for a name or text criterion, and for a conclusion or pattern criterion the conclusion whose token shape is the value itself (parentheses around the whole aside), then shorter conclusions containing it before longer ones. The UI debounces typing, ignores stale replies, limits rendered results, and reports malformed or over-budget queries.
Limits#
Search matches source text. There is no elaborated structural index that
resolves notation, alpha-equivalence, or carriers, and no natural-language
retrieval. For goal-directed search over the elaborated environment, use
exact?, apply?, and rw? inside a proof.