let rec is_darray pool te dims a =
  if dims > 0 then
    let i = LogicLang.fresh pool "i" Integer in
    let a_i = e_access a (e_var i) in
    p_forall i (is_darray pool te (pred dims) a_i)
  else
    !dhas_ctype te a