induction e with simp[denote, cfold]
| plus l r => split <;> simp_all[denote, cfold]
| eq l r => split <;> simp_all[denote, cfold]
| and l r => split <;> simp_all[denote, cfold]
| if_ d l r dih lih rih =>
  rw[dih, lih, rih]
  cases cfold d with simp[denote]
  | bConst b => cases b <;> simp
| pair l r => simp_all[denote]
| fst p ih => 
  rw[ih]
  cases cfold p <;> simp[pairOut, denote]
| snd p ih =>
  rw[ih]
  cases cfold p <;> simp[pairOut, denote]
a✝ : Ty
e : Exp a✝
⊢ denote e = denote (cfold e)
no goals