let rec eq_tarray pool te dims ta tb =
  match dims with
    | [] -> !deq_ctype te ta tb
    | d::ds ->
        let i = LogicLang.fresh pool "i" Integer in
        let ta_i = e_access ta (e_var i) in
        let tb_i = e_access tb (e_var i) in
        p_forall i
          (in_range i d (eq_tarray pool te ds ta_i tb_i))