Definition check_pp_int' e1 e2 op t e :=
match op with
| Cop.Oeq | Cop.One =>
tc_andp'
(tc_test_eq' e1 e2)
(tc_bool (is_int_type t) (op_result_type e))
| Cop.Ole | Cop.Olt | Cop.Oge | Cop.Ogt =>
tc_andp'
(tc_test_order' e1 e2)
(tc_bool (is_int_type t) (op_result_type e))
| _ => tc_noproof
end.
(* Definition check_pl_long' e2 op t e := match op with | Cop.Oeq | Cop.One => tc_andp' (tc_iszero' e2) (tc_bool (is_int_type t) (op_result_type e)) | _ => tc_noproof end. *)

(* Specifications: *)
Lemma tc_andp_TT2:  forall e, tc_andp e tc_TT = e.
Lemma or_True: forall x, (x \/ True) = True.
Lemma True_or: forall x, (True \/ x) = True.
Lemma False_or: forall x, (False \/ x) = x.
Lemma tc_orp_sound : forall {CS: compspecs} a1 a2 rho m,
denote_tc_assert (tc_orp a1 a2) rho m <->
denote_tc_assert (tc_orp' a1 a2) rho m.
Lemma denote_tc_assert_orp: forall {CS: compspecs} x y rho,
denote_tc_assert (tc_orp x y) rho =
orp (denote_tc_assert x rho) (denote_tc_assert y rho).
Lemma is_true_true: is_true true = True.
Lemma denote_tc_assert_iszero': forall {CS: compspecs} e,
denote_tc_assert (tc_iszero e) = denote_tc_assert (tc_iszero' e).
Lemma denote_tc_assert_nonzero: forall {CS: compspecs} e rho,
denote_tc_assert (tc_nonzero e) rho =
match (eval_expr e rho) with
| Vint i => prop (i <> Int.zero)
| Vlong i =>prop (i <> Int64.zero)
| _ => FF end.
Lemma denote_tc_assert_nonzero': forall {CS: compspecs} e,
denote_tc_assert (tc_nonzero e) = denote_tc_assert (tc_nonzero' e).
Lemma denote_tc_assert_nodivover: forall {CS: compspecs} e1 e2 rho,
denote_tc_assert (tc_nodivover e1 e2) rho =
match eval_expr e1 rho, eval_expr e2 rho with
| Vint n1, Vint n2 => prop (~(n1 = Int.repr Int.min_signed /\ n2 = Int.mone))
| Vlong n1, Vlong n2 => prop (~(n1 = Int64.repr Int64.min_signed /\ n2 = Int64.mone))
| Vint n1, Vlong n2 => TT
| Vlong n1, Vint n2 => prop (~ (n1 = Int64.repr Int64.min_signed  /\ n2 = Int.mone))
| _ , _ => FF
end.
Lemma denote_tc_assert_nodivover': forall {CS: compspecs} e1 e2,
denote_tc_assert (tc_nodivover e1 e2) = denote_tc_assert (tc_nodivover' e1 e2).
Lemma denote_tc_assert_andp'':
forall {CS: compspecs} a b rho, denote_tc_assert (tc_andp' a b) rho =
andp (denote_tc_assert a rho) (denote_tc_assert b rho).
Lemma denote_tc_assert_test_order':
forall {CS: compspecs} a b,
denote_tc_assert (tc_test_order a b) =
denote_tc_assert (tc_test_order' a b).