import public Algebra.Monoid
import public Algebra.Solver.Prodtimes : CommutativeMonoid a => Nat -> a -> adata Expr : (a : Type) -> List a -> TypeLit : a -> Expr a asVar : (x : a) -> Elem x as -> Expr a asNeutral : Expr a asAppend : Expr a as -> Expr a as -> Expr a asrecord Term : (a : Type) -> List a -> Type.factor : Term a as -> afactor : Term a as -> a.prod : Term a as -> Prod a asprod : Term a as -> Prod a asappend : CommutativeMonoid a => Term a as -> Term a as -> Term a asnormalize : CommutativeMonoid a => Expr a as -> Term a aseval : CommutativeMonoid a => Expr a as -> aeprod : CommutativeMonoid a => Prod a as -> aeterm : CommutativeMonoid a => Term a as -> a0 pvar : {auto {conArg:1889} : CommutativeMonoid a} -> (as : List a) -> (e : Elem x as) -> eprod (fromVar e) = x0 solve : {auto {conArg:3210} : CommutativeMonoid a} -> (as : List a) -> (e1 : Expr a as) -> (e2 : Expr a as) -> normalize e1 = normalize e2 => eval e1 = eval e2