{-# OPTIONS --safe #-}
module Cubical.Tactics.NatSolver.NatExpression where

open import Cubical.Foundations.Prelude

open import Cubical.Data.FinData
open import Cubical.Data.Nat
open import Cubical.Data.Nat.Order using (zero-≤)
open import Cubical.Data.Vec.Base

infixl 6 _+'_
infixl 7 _·'_

-- Expression in a ring on A with n variables
data Expr (n : ) : Type ℓ-zero where
  K :   Expr n
   : Fin n  Expr n
  _+'_ : Expr n  Expr n  Expr n
  _·'_ : Expr n  Expr n  Expr n

module Eval where
  open import Cubical.Data.Vec

  ⟦_⟧ :  {n}  Expr n  Vec  n  
   K r  v = r
    k  v = lookup k v
   x +' y  v =   x  v +  y  v
   x ·' y  v =  x  v ·  y  v