let rec dummy_val_of_type = function
    Base(t) ->
      (try
        (let dummy_value = List.assoc t dummy_values_string_list in
        let dummy_value_id = string_id#register_name dummy_value 0 in
        if (type_table#register_type dummy_value_id (Base(t)) <> (Base(t))) then
          add_sem_error
            (20, "constant "^dummy_value^" declared with incorrect type (reserved)""""","","");
        Base(Const(dummy_value_id)))
      with Not_found ->
        (let dummy_value_id = string_id#register_name "dummy_msg" 0
        in
        if (type_table#register_type dummy_value_id (Base(Message)) <> (Base(Message))) then
          add_sem_error
            (20, "constant dummy_msg declared with incorrect type (reserved)""""","","");
        Base(Const(dummy_value_id))))
  | Inv(Base(Public_key)) ->
      Inv(dummy_val_of_type (Base(Public_key)))
  | Pair(t1,t2) ->
      Pair(dummy_val_of_type t1, dummy_val_of_type t2)
  | Scrypt(t1,t2) ->
      Scrypt(dummy_val_of_type t1, dummy_val_of_type t2)
  | Crypt(t1,t2) ->
      Crypt(dummy_val_of_type t1, dummy_val_of_type t2)
  | Function(_) as t -> 
        (let dummy_value_id = string_id#register_name "dummy_func" 0
        in
        if (type_table#register_type dummy_value_id t <> t) then
          add_sem_error
            (20, "constant dummy_func declared with incorrect type (reserved)""""","","");
        Base(Const(dummy_value_id)))
  | Set(_) -> 
        (let dummy_value_id = string_id#register_name "dummy_set" 0
        in
        if (type_table#register_type dummy_value_id (Set([Base(Message)])) <> (Set([Base(Message)]))) then
          add_sem_error
            (20, "constant dummy_set declared with incorrect type (reserved)""""","","");
        Base(Const(dummy_value_id)))
(*  | Lst(_) as t -> 
        (let dummy_value_id = string_id#register_name " 0
        in
        if (type_table#register_type dummy_value_id (Lst([])) <> (Lst([]))) then
          add_sem_error
            (20, ", ", ",",");
        Base(Const(dummy_value_id)))*)

  | _ -> 
        (let dummy_value_id = string_id#register_name "dummy_msg" 0
        in
        if (type_table#register_type dummy_value_id (Base(Message)) <> (Base(Message))) then
          add_sem_error
            (20, "constant dummy_msg declared with incorrect type (reserved)""""","","");
        Base(Const(dummy_value_id)))