public Type type_check(Table<Type> t_env,Table<Dec> v_env,boolean in_loop,ErrorList e){
		/* 1.first check the type_id's name */
		Type a_type = t_env.get(id);
		if(a_type==null){//no such tid name
			e.add_error("Undeclared type name "+id, line, column, "typing");
			the_type = Type.THE_ERROR_STATE;
			return the_type;
		}
		else if(!(a_type.actual() instanceof ARRAY)){
			e.add_error("Wrong type "+id+" which is not array type", line, column, "typing");
			the_type = Type.THE_ERROR_STATE;
			return the_type;
		}
		/* 2.check expr--num, which should be int */
		Type num_type = num.type_check(t_env, v_env, false, e);
		if(!(num_type.actual() instanceof INT)){
			e.add_error("Wrong num type in array construct which is not integer", num.line, num.column, "typing");
		}
		/* 3.check expr--value, which should be the same as array_type's element */
		Type v_type = value.type_check(t_env, v_env, false, e);
		Type should_be = ((ARRAY)a_type.actual()).element;
		if(!v_type.coerceTo(should_be)){
			e.add_error("Wrong element type in array construct which should be "+should_be, num.line, num.column, "typing");
		}
		
		the_type = a_type;
		return the_type;
	}