val lemma_add_hi_lo64 : dummy:int
  -> Lemma
  (requires true)
  (ensures (forall (a:nat64) (b:nat64) (c:nat1) . {:pattern(add_lo a b c); (add_hi a b
    c)}Vale.Bignum.Defs.add_lo a b c + va_mul_nat pow2_64 (Vale.Bignum.Defs.add_hi a b c) == a + b
    + c))
let lemma_add_hi_lo64 dummy =
  Vale.Bignum.Defs.reveal_add_hi_all ();
  Vale.Bignum.Defs.reveal_add_lo_all ();
  ()
val lemma_add_hi_lo64 : dummy:int
  -> Lemma
  (requires true)
  (ensures (forall (a:nat64) (b:nat64) (c:nat1) . {:pattern(add_lo a b c); (add_hi a b
    c)}Vale.Bignum.Defs.add_lo a b c + va_mul_nat pow2_64 (Vale.Bignum.Defs.add_hi a b c) == a + b
    + c))
let lemma_add_hi_lo64 dummy =
Vale.Bignum.Defs.reveal_add_hi_all ();
Vale.Bignum.Defs.reveal_add_lo_all ();
()
Vale.Bignum.X64.fst.checked
Vale.X64.State.fsti.checked Vale.X64.Stack_i.fsti.checked Vale.X64.QuickCodes.fsti.checked Vale.X64.QuickCode.fst.checked Vale.X64.Memory.fsti.checked Vale.X64.Machine_s.fst.checked Vale.X64.InsStack.fsti.checked Vale.X64.InsMem.fsti.checked Vale.X64.InsBasic.fsti.checked Vale.X64.Decls.fsti.checked Vale.X64.CPU_Features_s.fst.checked Vale.Def.Words_s.fsti.checked Vale.Def.Types_s.fst.checked Vale.Bignum.Defs.fsti.checked Vale.Arch.Types.fsti.checked prims.fst.checked FStar.Seq.fst.checked FStar.Pervasives.Native.fst.checked FStar.Pervasives.fsti.checked FStar.Mul.fst.checked
Vale.Bignum.X64.fst
Prims.int Prims.unit Vale.Bignum.Defs.reveal_add_lo_all Vale.Bignum.Defs.reveal_add_hi_all
module Vale.Bignum.X64
open Vale.Def.Words_s
open Vale.Def.Types_s
open Vale.Arch.Types
open Vale.X64.Machine_s
open Vale.X64.Memory
open Vale.X64.Stack_i
open Vale.X64.State
open Vale.X64.Decls
open Vale.X64.InsBasic
open Vale.X64.InsMem
open Vale.X64.InsStack
open Vale.X64.QuickCode
open Vale.X64.QuickCodes
open Vale.X64.CPU_Features_s
open Vale.Bignum.Defs
open FStar.Mul
open FStar.Seq
open Vale.Def.Words_s
let bool_to_nat1 (b:bool) : nat1 = if b then 1 else 0
let flag_cf f = bool_to_nat1 (cf f)
let flag_of f = bool_to_nat1 (overflow f)
//-- reveal_flags

let reveal_flags f =
  ()
//--
//-- lemma_add_hi_lo64
val lemma_add_hi_lo64 : dummy:int
  -> Lemma
  (requires true)
  (ensures (forall (a:nat64) (b:nat64) (c:nat1) . {:pattern(add_lo a b c); (add_hi a b
    c)}Vale.Bignum.Defs.add_lo a b c + va_mul_nat pow2_64 (Vale.Bignum.Defs.add_hi a b c) == a + b
    + c))
dummy: Prims.int
  -> FStar.Pervasives.Lemma (requires true)
      (ensures
        forall (a: Vale.Def.Words_s.nat64) (b: Vale.Def.Words_s.nat64) (c: Vale.Def.Words_s.nat1).
          {:pattern Vale.Bignum.Defs.add_lo a b c; Vale.Bignum.Defs.add_hi a b c}
          Vale.Bignum.Defs.add_lo a b c +
          Vale.X64.Decls.va_mul_nat Vale.Def.Words_s.pow2_64 (Vale.Bignum.Defs.add_hi a b c) ==
          a + b + c)