    ------------------------------------------------------------------------
    -- The Agda standard library
    --
    -- Automatic solvers for equations over naturals
    ------------------------------------------------------------------------

    -- See README.Tactic.RingSolver for examples of how to use this solver

    {-# OPTIONS --cubical-compatible --safe #-}

    module Data.Nat.Tactic.RingSolver where

    open import Agda.Builtin.Reflection using (Term; TC)

    open import Data.Maybe.Base using (just; nothing)
    open import Data.Nat.Base using (zero)
    open import Data.Nat.Properties using (+-*-commutativeSemiring)
    open import Level using (0ℓ)
    open import Data.Unit.Base using (⊤)
    open import Relation.Binary.PropositionalEquality.Core using (refl)

    import Tactic.RingSolver as Solver using (solve-∀-macro; solve-macro)
    import Tactic.RingSolver.Core.AlmostCommutativeRing as ACR

    ------------------------------------------------------------------------
    -- A module for automatically solving propositional equivalences
    -- containing _+_ and _*_

    ring : ACR.AlmostCommutativeRing 0ℓ 0ℓ
    ring = ACR.fromCommutativeSemiring +-*-commutativeSemiring
      λ { zero → just refl; _ → nothing }

    macro
      solve-∀ : Term → TC ⊤
      solve-∀ = Solver.solve-∀-macro (quote ring)

    macro
      solve : Term → Term → TC ⊤
      solve n = Solver.solve-macro n (quote ring)