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.
*)
Abort.

Lemma superprecise_ewand_lem1:
forall S P: pred rmap, superprecise P ->
S |-- P * TT ->
S = (P * (ewand P S))%pred.