Library zoo_std.random

Require Import zoo.prelude.
Require Import zoo.base.
Require Export zoo_std.random__code.
Require Import zoo_std.random__types.
Require Import zoo.options.

Axiom random٠initspec : `{zoo۰G : !ZooG Σ} Φ,
  Φ ()%V
  WP random٠init () {{ Φ }}.

Axiom random٠bitsspec : `{zoo۰G : !ZooG Σ} Φ,
  ( n : Z,
    Φ #n
  )
  WP random٠bits () {{ Φ }}.

Axiom random٠intspec : `{zoo۰G : !ZooG Σ} ub Φ,
  (0 < ub)%Z
  ( n,
    0 n < ub%Z -∗
    Φ #n
  )
  WP random٠int #ub {{ Φ }}.

Section zoo۰G.
  Context `{zoo۰G : !ZooG Σ}.

  Lemma random٠intspecnat (ub : nat) Φ :
    0 < ub
    ( n,
      n < ub -∗
      Φ #n
    )
    WP random٠int #ub {{ Φ }}.

  Lemma random٠int_in_rangespec lb ub Φ :
    (lb < ub)%Z
    ( n,
      lb n < ub%Z -∗
      Φ #n
    )
    WP random٠int_in_range #lb #ub {{ Φ }}.
  Lemma random٠int_in_rangespecnat lb ub Φ :
    lb < ub
    ( n,
      lb n < ub -∗
      Φ #n
    )
    WP random٠int_in_range #lb #ub {{ Φ }}.
End zoo۰G.

Require zoo_std.random__opaque.