fact: Definition KEY : package KEY_loc [interface] KEY_out := [package #def #[ GEN ] (_ : 'unit) : 'unit { k ← get k_loc ;; #assert (k == None) ;; k ← sample keyD ;; #put k_loc := Some k ;; @ret 'unit Datatypes.tt } ; #def #[ SET ] (k : 'key) : 'unit { k' ← get k_loc ;; #assert (k' == None) ;; #put k_loc := Some k ;; @ret 'unit Datatypes.tt } ; #def #[ GET ] (_ : 'unit) : 'key { k ← get k_loc ;; #assert (isSome k) as kSome ;; @ret 'key (getSome k kSome) } ].
imports: Relational(OrderEnrichedCategory GenericRulesSimple) mathcomp(all_ssreflect all_algebra reals distr fingroup.fingroup realsum ssrnat ssreflect ssrfun ssrbool ssrnum eqtype choice seq) Crypt(Axioms ChoiceAsOrd SubDistr Couplings UniformDistrLemmas FreeProbProg Theta_dens RulesStateProb UniformStateProb Package Prelude pkg_composition) Coq(Utf8 Lia) extructures(ord fset fmap) Equations(Equations)