fact: Fixpoint eval (A:Type) (expr:Expr A) (e:Env) { struct expr } : A := match expr in ExExpr A return A with | const A v => v | binop op e1 e2 => eval_binOP op (eval e1 e) (eval e2 e) | relop op e1 e2 => eval_relOP op (eval e1 e) (eval e2 e) | getvar A x => (get x e) end.
imports: ZArith Znumtheory hoarelogic Zwf Wellfounded Lia