This PR adds `Sym.Simp.evalGround`, a simplification procedure for evaluating ground terms of builtin numeric types. It is designed for `Sym.simp`. Key design differences from `Meta.Simp` simprocs: - Pure value extraction: `getValue?` functions are `OptionT Id` rather than `MetaM`, avoiding `whnf` overhead since `Sym` maintains canonical forms - Specialized predicate lemmas: comparisons use pre-proved lemmas like `Int.lt_eq_true` applied with `rfl`, avoiding `Decidable` instance reconstruction at each call site - Type dispatch via `match_expr`: assumes standard instances, no synthesis Supported types: `Nat`, `Int`, `Rat`, `Fin n`, `BitVec n`, `UInt8/16/32/64`, `Int8/16/32/64`. Supported operations: arithmetic (`+`, `-`, `*`, `/`, `%`, `^`), bitwise (`&&&`, `|||`, `^^^`, `~~~`), shifts (`<<<`, `>>>`), comparisons (`<`, `≤`, `>`, `≥`, `=`, `≠`, `∣`), and boolean predicates (`==`, `!=`).
49 lines
1.4 KiB
Text
49 lines
1.4 KiB
Text
/-
|
|
Copyright (c) 2014 Microsoft Corporation. All rights reserved.
|
|
Released under Apache 2.0 license as described in the file LICENSE.
|
|
Authors: Leonardo de Moura
|
|
-/
|
|
module
|
|
prelude
|
|
public import Init.Prelude
|
|
public import Init.Notation
|
|
public import Init.Tactics
|
|
public import Init.TacticsExtra
|
|
public import Init.ByCases
|
|
public import Init.RCases
|
|
public import Init.Core
|
|
public import Init.Control
|
|
public import Init.WF
|
|
public import Init.WFComputable
|
|
public import Init.WFTactics
|
|
public import Init.Data
|
|
public import Init.System
|
|
public import Init.Util
|
|
public import Init.Dynamic
|
|
public import Init.ShareCommon
|
|
public import Init.MetaTypes
|
|
public import Init.Meta
|
|
public import Init.NotationExtra
|
|
public import Init.SimpLemmas
|
|
public import Init.PropLemmas
|
|
public import Init.Hints
|
|
public import Init.Conv
|
|
public import Init.Guard
|
|
public import Init.Simproc
|
|
public import Init.SizeOfLemmas
|
|
public import Init.BinderPredicates
|
|
public import Init.Ext
|
|
public import Init.Omega
|
|
public import Init.MacroTrace
|
|
public import Init.Grind
|
|
public import Init.GrindInstances
|
|
public import Init.Sym
|
|
public import Init.While
|
|
public import Init.Syntax
|
|
public import Init.Internal
|
|
public import Init.Try
|
|
public meta import Init.Try -- make sure `Try.Config` can be evaluated anywhere
|
|
public import Init.BinderNameHint
|
|
public import Init.Task
|
|
public import Init.MethodSpecsSimp
|
|
public import Init.LawfulBEqTactics
|