Definition unOp_result_type op t :=
match op with
| Cop.Onotbool =>match t with
| Tint _ _ _ => Tint IBool Signed noattr
| Tlong _ _ => Tint IBool Signed noattr
| Tpointer _ _ => Tint I32 Signed noattr
| Tfloat _ _ => Tint IBool Signed noattr
| Tarray _ _ _ => Tint IBool Signed noattr
| Tfunction _ _ _ => Tint IBool Signed noattr
| _ => Tvoid
end
| Cop.Onotint => match t with
| Tint _ _ _ => Tint I32 Signed noattr
| Tlong _ _ => Tlong Signed noattr
| _ => Tvoid
end
| Cop.Oneg => match t with
| Tint _ _ _ => Tint I32 Signed noattr
| Tlong _ _ => Tlong Signed noattr
| Tfloat _ _ => t
| _ => Tvoid
end
| Cop.Oabsfloat => t
end.

Lemma same_base_tc_val : forall v t1 t2,
same_base_type t1 t2 = true ->
tc_val t1 v ->
tc_val t2 v.