Documentation

Init.Sym.Simp.SimprocDSL

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 #

Combinators #

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 control-flow expressions (if-then-else, match, cond, dite). Visits only conditions and discriminants. Intended as a pre simproc.

      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

                  Identity simproc (no simplification).

                  Instances For

                    Apply a, then apply b to the result.

                    Instances For

                      Try a, if no progress try b.

                      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.

                                          Instances For

                                            Register a named Sym.simp variant.

                                            register_sym_simp myVariant where
                                              pre  := telescope
                                              post := ground >> rewrite [thm1, thm2] with self
                                              discharger := grind
                                              maxSteps := 50000
                                            
                                            Instances For