Simproc and Discharger DSLs for Sym.simp #
Simproc DSL (sym_simproc) #
A syntax category for specifying pre and post simproc chains in Sym.simp variants.
Primitives #
ground— evaluates ground (fully concrete) termstelescope— simplifies telescope binders (have-values, arrow hypotheses) but not the final bodyrewrite setName [with discharger]— rewrites using a named theorem setrewrite [thm₁, thm₂, ...] [with discharger]— rewrites using inline theoremsarith [with discharger]— polynomial normal form for ring, semiring, and field termsself— recursive simplification (calls the full simplifier)none— identity (no simplification)
Combinators #
a >> b— applya, then applybto the result (andThen)a <|> b— trya, if no progress tryb(orElse)
Discharger DSL (sym_discharger) #
A syntax category for specifying dischargers used in the with clause of rewrite.
Dischargers attempt to prove side conditions of conditional rewrite rules.
Primitives #
Evaluate ground (fully concrete) terms.
Instances For
Simplify telescope binders but not the final body.
Instances For
Simplify arrow telescopes (p₁ → p₂ → ... → q) without entering binders.
Simplifies each pᵢ and q individually. Intended as a pre simproc.
Instances For
Rewrite using a named theorem set. Optionally specify a discharger for conditional rewrites.
Instances For
Rewrite using inline theorems. Optionally specify a discharger for conditional rewrites.
Instances For
Normalize ring and semiring terms into polynomial normal form (Sym.Arith.normalize?).
Simplifies the atoms recursively. Intended as a pre simproc. The optional discharger proves
the side conditions x ≠ 0 under which x * x⁻¹ is cancelled in a field.
Instances For
Recursive simplification (calls the full simplifier).
Instances For
Apply a, then apply b to the result.
Instances For
Parenthesized simproc expression.
Instances For
Recursive simplifier discharge. Calls the full simplifier to prove side conditions.
Instances For
No discharge. Only unconditional rewrites will apply.
Instances For
Parenthesized discharger expression.
Instances For
Calls grind to prove side conditions. The goal's internalized hypotheses (hypotheses are
internalized when the sym => block starts and by tactics such as intro and internalize)
are shared across discharge attempts; the remaining local declarations (e.g., introduced by
Sym.simp when entering binders) are internalized on each attempt.
Instances For
register_sym_simp command #
Declares a named Sym.simp variant with pre/post simproc chains, the discharger for the
extra theorems provided at use time (simp myVariant [thm₁, thm₂, ...]), and optional config
overrides.
register_sym_simp myVariant where
pre := telescope
post := ground >> rewrite mySet with self
discharger := grind
Pre-processing simproc chain.
Instances For
Post-processing simproc chain.
Instances For
Discharger for the side conditions of the extra theorems provided at use time
(simp myVariant [thm₁, thm₂, ...]). Defaults to none.
Instances For
Maximum number of simplification steps.
Instances For
Maximum depth of recursive discharge attempts.