let by_array_reference_usage_term e = 
  let s = "[by_array_ref_usage_term]" in
   debug "%s" s; 
  match delta_array_term e with 
    | None ->
        (match bracket_term e with 
           | None -> 
               debug "%s not a bracket pattern" s; Any
           | Some (x,n) ->
               begin
                 debug "%s %a[]<%d>" s !Ast_printer.d_logic_var x n;
                 if (is_lformal x) then 
                   (  debug "%s %a is a formal" s !Ast_printer.d_logic_var x;
                      let arr = brackets_and_stars_lv_typ x.lv_type in
                      if (arr >= n) then 
                        (debug "%s %a has dim %d ok!" s 
                           !Ast_printer.d_logic_var x arr ;Ok (x,arr)) 
                      else 
                        (debug "%s %a has dim %d when need %d ko!"
                           s !Ast_printer.d_logic_var x arr n  
                        ;Ko (x,arr))) 
                 else
                   ( debug "%s %a is not a formal" 
                       s !Ast_printer.d_logic_var x;Any)
               end)

    |Some (x,n) ->
       debug "%s %a[]" s !Ast_printer.d_logic_var x ;
        if is_lformal x then Ok (x,n) else Any