open DItv
open DProd
open DomArrayBlk
open DomBasic

module Val = Prod4(Itv)(PowLoc)(ArrayBlk)(PowProc)

(** val itv_of_val : Val.t -> Itv.t **)

let itv_of_val =
  Val.fst

(** val pow_loc_of_val : Val.t -> PowLoc.t **)

let pow_loc_of_val =
  Val.snd

(** val array_of_val : Val.t -> ArrayBlk.t **)

let array_of_val =
  Val.thrd

(** val pow_proc_of_val : Val.t -> PowProc.t **)

let pow_proc_of_val =
  Val.frth

(** val powProc_of_val : Val.t -> PowProc.t **)

let powProc_of_val =
  pow_proc_of_val

(** val val_of_itv : Itv.t -> Val.t **)

let val_of_itv x =
  (((x, PowLoc.bot), ArrayBlk.bot), PowProc.bot)

(** val val_of_pow_loc : PowLoc.t -> Val.t **)

let val_of_pow_loc x =
  (((Itv.bot, x), ArrayBlk.bot), PowProc.bot)

(** val val_of_array : ArrayBlk.t -> Val.t **)

let val_of_array x =
  (((Itv.bot, PowLoc.bot), x), PowProc.bot)

(** val val_of_pow_proc : PowProc.t -> Val.t **)

let val_of_pow_proc x =
  (((Itv.bot, PowLoc.bot), ArrayBlk.bot), x)

(** val modify_itv : Val.t -> Itv.t -> Val.t **)

let modify_itv x i =
  (((i, (pow_loc_of_val x)), (array_of_val x)), (pow_proc_of_val x))

(** val modify_pow_loc : Val.t -> PowLoc.t -> Val.t **)

let modify_pow_loc x l =
  ((((itv_of_val x), l), (array_of_val x)), (pow_proc_of_val x))

(** val modify_array : Val.t -> ArrayBlk.t -> Val.t **)

let modify_array x a =
  ((((itv_of_val x), (pow_loc_of_val x)), a), (pow_proc_of_val x))

(** val modify_pow_proc : Val.t -> PowProc.t -> Val.t **)

let modify_pow_proc x p =
  ((((itv_of_val x), (pow_loc_of_val x)), (array_of_val x)), p)