fact: Fixpoint simp {A} (e : expr A) : expr A := match e with | Var n => Var n | Plus e1 e2 => simp_plus (simp e1) (simp e2) | Equal e1 e2 => simp_equal (simp e1) (simp e2) | Pair e1 e2 => Pair (simp e1) (simp e2) | Fst e => simp_fst (simp e) | Snd e => simp_snd (simp e) | Const t c => Const t c | Ite e e1 e2 => simp_ite (simp e) (simp e1) (simp e2) end.
imports: Hammer(Tactics) Program.Equality Arith String