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

              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 and optional config overrides.

                                register_sym_simp myVariant where
                                  pre  := telescope
                                  post := ground >> rewrite mySet with self
                                

                                Pre-processing simproc chain.

                                Instances For

                                  Post-processing simproc chain.

                                  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
                                          maxSteps := 50000
                                        
                                        Instances For