Definition tc_numeric_val (v: val) (t: type) : Prop :=
 match v,t with
 | Vint _, Tint _ _ _ => True
 | Vlong _, Tlong _ _ => True
 | Vfloat _, Tfloat F64 _ => True
 | _, _ => False
 end.

(* Specifications: *)
Lemma tc_val_of_bool: forall x i3 s3 a3, tc_val (Tint i3 s3 a3) (Val.of_bool x).
Lemma tc_val_sem_cmp: forall op v1 t1 v2 t2 i3 s3 a3, tc_numeric_val v1 t1 -> tc_numeric_val v2 t2 -> tc_val (Tint i3 s3 a3) (force_val (Clight_Cop2.sem_cmp op t1 t2 v1 v2)).
Lemma tc_val'_sem_cmp_pp: forall cmp v1 v2 v i s a, sem_cmp_pp cmp v1 v2 = Some v -> tc_val' (Tint i s a) v.
Lemma tc_val'_sem_cmp: forall cmp t v1 v2 t1 t2, is_int_type t = true -> tc_val' t (force_val2 (Clight_Cop2.sem_cmp cmp t1 t2) v1 v2).
Lemma tc_val_cmp_eqne_ip: forall op v1 t1 v2 t0 a0 i2 s0 a1, match op with Ceq => True | Cne => True | _ => False end -> match v1,t1 with | Vint i, Tint _ _ _ => Int.eq i Int.zero = true | Vlong i, Tlong _ _ => Int64.eq (Int64.repr (Int64.unsigned i)) Int64.zero = true | _, _ => False end -> tc_val (Tpointer t0 a0) v2 -> tc_val (Tint i2 s0 a1) (force_val (Clight_Cop2.sem_cmp op t1 (Tpointer t0 a0) v1 v2)).
Lemma tc_val_cmp_eqne_pi: forall op v1 t1 v2 t0 a0 i2 s0 a1, match op with Ceq => True | Cne => True | _ => False end -> match v1,t1 with | Vint i, Tint _ _ _ => Int.eq i Int.zero = true | Vlong i, Tlong _ _ => Int64.eq (Int64.repr (Int64.unsigned i)) Int64.zero = true | _, _ => False end -> tc_val (Tpointer t0 a0) v2 -> tc_val (Tint i2 s0 a1) (force_val (Clight_Cop2.sem_cmp op (Tpointer t0 a0) t1 v2 v1)).