Require Export VST.veric.base.
(* This file contains lemmas regarding "superprecise", and in principle, almost proving that "mapsto" is superprecise.  However, mapsto is not superprecise, because it's not quite true that decode_val is injective.  The only reason is the treatment of single-precision floating-point NaNs, where the conversion from single-prec to double-prec loses one bit of information: both quiet 32-bit NaNs and signalling 32-bit NaNs are quietly turned into quite 64-bit NaNs.  If CompCert ever changes so that this does not happen, then the lemmas in this file might become useful.  *)
Transparent Float.of_bits.
Transparent Float32.of_bits.
*)
Abort.
(* Lemma float32_preserves_payload: forall s pl, let '(s1,pl1) := Float.of_single_pl s pl in (s=s1 /\ (536870912 * (Pos.lor (proj1_sig pl) 4194304))%positive = proj1_sig pl1).  Lemma pos_lor_inj:  (* not true *)
forall k N (a b: nan_pl k),
Zpower_nat 2 (Z.to_nat (k-2)) = Zpos N ->
Pos.lor (proj1_sig a) N =  Pos.lor (proj1_sig b) N ->
a=b.

Lemma single_of_bits_inj:
forall i j : Int.int, Float32.of_bits i = Float32.of_bits j -> i=j.