Definition uniform (n : nat) (d : dist (list bool)) :=
forall l, (List.length l = n)%nat ->
Qeq (eval_dist d (list_beq bool eqb l)) ((1 / 2) ^ (Z.of_nat n)).

(* top level security theorem says that when we have a list of accesses, the distribution of the final list of paths as output observes the same distribution of the source of the randomness *)
Theorem access_dist_preservation :
forall {C : Config} (arg_list : list (block_id * operation)) (s : state),
uniform ((List.length arg_list) * LOP)
(get_dist_list_bool arg_list s).