Definition func_beq a b :=
match a, b with
| Const f1, Const f2 => const_beq f1 f2
| Zop f1, Zop f2 => z_op_beq f1 f2
| Intop f1, Intop f2 => int_op_beq f1 f2
| Value f1, Value f2 => values_beq f1 f2
| Eval_f f1, Eval_f f2 => eval_beq f1 f2
| Other f1, Other f2 => other_beq f1 f2
| Sep f1, Sep f2 => sep_beq f1 f2
| Data f1, Data f2 => data_beq f1 f2
| Smx f1, Smx f2 => smx_beq f1 f2
| _, _ => false
end.

(* Specifications: *)
Lemma func_beq_sound : forall a b, func_beq a b = true -> a = b.
Hint Resolve data_beq_sound : expr_beq.