diff --git a/src/transform/eliminate_algebraic.ml b/src/transform/eliminate_algebraic.ml
index 5ee3f867b1a89a4df574b926b76877e5f5016988..0e59c3e0a10b5ddb54bbdbaee645226389d28bf2 100644
--- a/src/transform/eliminate_algebraic.ml
+++ b/src/transform/eliminate_algebraic.ml
@@ -188,6 +188,31 @@ let add_selector (state,task) ts ty = function
   | [_] -> state, task
   | csl -> add_selector (state,task) ts ty csl
 
+let add_indexer (state,task) ts ty csl =
+  (* declare the indexer function *)
+  let mt_id = id_derive ("index_" ^ ts.ts_name.id_string) ts.ts_name in
+  let mt_ls = create_fsymbol mt_id [ty] ty_int in
+  let task  = add_decl task (create_logic_decl [mt_ls, None]) in
+  (* define the indexer function *)
+  let index = ref (-1) in
+  let mt_add tsk cs =
+    incr index;
+    let id = mt_ls.ls_name.id_string ^ "_" ^ cs.ls_name.id_string in
+    let pr = create_prsymbol (id_derive id cs.ls_name) in
+    let vl = List.rev_map (create_vsymbol (id_fresh "u")) cs.ls_args in
+    let hd = t_app cs (List.rev_map t_var vl) (of_option cs.ls_value) in
+    let ix = t_const (ConstInt (string_of_int !index)) in
+    let ax = f_equ (t_app mt_ls [hd] ty_int) ix in
+    let ax = f_forall_close (List.rev vl) [[Term hd]] ax in
+    add_decl tsk (create_prop_decl Paxiom pr ax)
+  in
+  let task = List.fold_left mt_add task csl in
+  state, task
+
+let add_indexer (state,task) ts ty = function
+  | [_] -> state, task
+  | csl -> add_indexer (state,task) ts ty csl
+
 let add_projections (state,task) _ts _ty csl =
   (* declare and define the projection functions *)
   let pj_add (m,tsk) cs =
@@ -235,6 +260,7 @@ let add_type (state,task) ts csl =
   (* add selector, projections, and inversion axiom *)
   let ty = ty_app ts (List.map ty_var ts.ts_args) in
   let state,task = add_selector (state,task) ts ty csl in
+  let state,task = add_indexer (state,task) ts ty csl in
   let state,task = add_projections (state,task) ts ty csl in
   let state,task = add_inversion (state,task) ts ty csl in
   (* add the tag for enumeration if the type is one *)