use super::{
Identifier, IndexedTraceAccess, ListComprehension, MatrixAccess, NamedTraceAccess, VectorAccess,
};
#[derive(Debug, Eq, PartialEq, Clone)]
pub enum Expression {
Const(u64),
Elem(Identifier),
VectorAccess(VectorAccess),
MatrixAccess(MatrixAccess),
IndexedTraceAccess(IndexedTraceAccess),
NamedTraceAccess(NamedTraceAccess),
Rand(Identifier, usize),
Add(Box<Expression>, Box<Expression>),
Sub(Box<Expression>, Box<Expression>),
Mul(Box<Expression>, Box<Expression>),
Exp(Box<Expression>, Box<Expression>),
ListFolding(ListFoldingType),
}
#[derive(Debug, Clone, Eq, PartialEq)]
pub enum ListFoldingType {
Sum(ListComprehension),
Prod(ListComprehension),
}