Hint Rewrite @denote_tc_assert_andp' @denote_tc_assert_andp''
@denote_tc_assert_orp' @denote_tc_assert_orp''
@denote_tc_assert_iszero' @denote_tc_assert_nonzero'
@denote_tc_assert_nodivover' @denote_tc_assert_ilt' @denote_tc_assert_llt'
@denote_tc_assert_test_eq' @denote_tc_assert_test_order'
: dtca.
Ltac dtca := autorewrite with dtca; auto.
Definition stupid_typeconv ty :=
match ty with
| Tarray t _ a => Tpointer t a
| Tfunction _ _ _ => Tpointer ty noattr
| Tint _ _ _ => typeconv ty
| _ => ty
end.
Definition classify_sub' ty1 ty2 :=
match stupid_typeconv ty1 with
| Tpointer ty a =>
match stupid_typeconv ty2 with
| Tint _ si _ => sub_case_pi ty si
| Tlong _ _ => sub_case_pl ty
| Tpointer _ _ => sub_case_pp ty
| _ => sub_default
end
| _ => sub_default
end.

Lemma classify_shift_eq:  classify_shift = classify_shift'.
Definition classify_binarith' (ty1: type) (ty2: type) :=
match stupid_typeconv ty1, stupid_typeconv ty2 with
| Tint i1 s1 _, Tint i2 s2 _ => bin_case_i
match i1, s1, i2, s2 with
| I32, Unsigned, _, _ => Unsigned
| _, _, I32, Unsigned => Unsigned
| _, _, _, _ => Signed
end
| Tint _ _ _, Tlong s _ => bin_case_l s
| Tlong s _, Tint _ _ _ => bin_case_l s
| Tlong s1 _, Tlong s2 _ => bin_case_l
match s1, s2 with
| Signed, Signed => Signed
| _, _ => Unsigned
end
| Tfloat F32 _, Tfloat F32 _ => bin_case_s
| Tfloat _ _, Tfloat _ _ => bin_case_f
| Tfloat F64 _, (Tint _ _ _ | Tlong _ _) => bin_case_f
| (Tint _ _ _ | Tlong _ _), Tfloat F64 _ => bin_case_f
| Tfloat F32 _, (Tint _ _ _ | Tlong _ _) => bin_case_s
| (Tint _ _ _ | Tlong _ _), Tfloat F32 _ => bin_case_s
| _, _ => bin_default
end.