FUNCTION derive_elementary_function_domain
(ef_val : elementary_function_enumerators) : tuple_space;
IF NOT EXISTS (ef_val) THEN RETURN (?); END_IF; CASE ef_val OF ef_and : RETURN (make_extended_tuple_space (the_zero_tuple_space, the_logicals)); ef_or : RETURN (make_extended_tuple_space (the_zero_tuple_space, the_logicals)); ef_not : RETURN (make_uniform_product_space (the_logicals, 1)); ef_xor : RETURN (make_uniform_product_space (the_logicals, 2)); ef_negate_i : RETURN (make_uniform_product_space (the_integers, 1)); ef_add_i : RETURN (the_integer_tuples); ef_subtract_i : RETURN (make_uniform_product_space (the_integers, 2)); ef_multiply_i : RETURN (the_integer_tuples); ef_divide_i : RETURN (make_uniform_product_space (the_integers, 2)); ef_mod_i : RETURN (make_uniform_product_space (the_integers, 2)); ef_exponentiate_i : RETURN (make_uniform_product_space (the_integers, 2)); ef_eq_i : RETURN (make_uniform_product_space (the_integers, 2)); ef_ne_i : RETURN (make_uniform_product_space (the_integers, 2)); ef_gt_i : RETURN (make_uniform_product_space (the_integers, 2)); ef_lt_i : RETURN (make_uniform_product_space (the_integers, 2)); ef_ge_i : RETURN (make_uniform_product_space (the_integers, 2)); ef_le_i : RETURN (make_uniform_product_space (the_integers, 2)); ef_abs_i : RETURN (make_uniform_product_space (the_integers, 1)); ef_if_i : RETURN (make_listed_product_space ([the_logicals, the_integers, the_integers])); ef_negate_r : RETURN (make_uniform_product_space (the_reals, 1)); ef_reciprocal_r : RETURN (make_uniform_product_space (the_reals, 1)); ef_add_r : RETURN (the_real_tuples); ef_subtract_r : RETURN (make_uniform_product_space (the_reals, 2)); ef_multiply_r : RETURN (the_real_tuples); ef_divide_r : RETURN (make_uniform_product_space (the_reals, 2)); ef_mod_r : RETURN (make_uniform_product_space (the_reals, 2)); ef_exponentiate_r : RETURN (make_listed_product_space ([the_nonnegative_reals, the_reals])); ef_exponentiate_ri : RETURN (make_listed_product_space ([the_reals, the_integers])); ef_eq_r : RETURN (make_uniform_product_space (the_reals, 2)); ef_ne_r : RETURN (make_uniform_product_space (the_reals, 2)); ef_gt_r : RETURN (make_uniform_product_space (the_reals, 2)); ef_lt_r : RETURN (make_uniform_product_space (the_reals, 2)); ef_ge_r : RETURN (make_uniform_product_space (the_reals, 2)); ef_le_r : RETURN (make_uniform_product_space (the_reals, 2)); ef_abs_r : RETURN (make_uniform_product_space (the_reals, 1)); ef_acos_r : RETURN (make_uniform_product_space (the_neg1_one_interval, 1)); ef_asin_r : RETURN (make_uniform_product_space (the_neg1_one_interval, 1)); ef_atan2_r : RETURN (make_uniform_product_space (the_reals, 2)); ef_cos_r : RETURN (make_uniform_product_space (the_reals, 1)); ef_exp_r : RETURN (make_uniform_product_space (the_reals, 1)); ef_ln_r : RETURN (make_uniform_product_space (the_nonnegative_reals, 1)); ef_log2_r : RETURN (make_uniform_product_space (the_nonnegative_reals, 1)); ef_log10_r : RETURN (make_uniform_product_space (the_nonnegative_reals, 1)); ef_sin_r : RETURN (make_uniform_product_space (the_reals, 1)); ef_sqrt_r : RETURN (make_uniform_product_space (the_nonnegative_reals, 1)); ef_tan_r : RETURN (make_uniform_product_space (the_reals, 1)); ef_if_r : RETURN (make_listed_product_space ([the_logicals, the_reals, the_reals])); ef_negate_c : RETURN (make_uniform_product_space (the_complex_numbers, 1)); ef_reciprocal_c : RETURN (make_uniform_product_space (the_complex_numbers, 1)); ef_add_c : RETURN (the_complex_tuples); ef_subtract_c : RETURN (make_uniform_product_space (the_complex_numbers, 2)); ef_multiply_c : RETURN (the_complex_tuples); ef_divide_c : RETURN (make_uniform_product_space (the_complex_numbers, 2)); ef_exponentiate_c : RETURN (make_uniform_product_space (the_complex_numbers, 2)); ef_exponentiate_ci : RETURN (make_listed_product_space ([the_complex_numbers, the_integers])); ef_eq_c : RETURN (make_uniform_product_space (the_complex_numbers, 2)); ef_ne_c : RETURN (make_uniform_product_space (the_complex_numbers, 2)); ef_conjugate_c : RETURN (make_uniform_product_space (the_complex_numbers, 1)); ef_abs_c : RETURN (make_uniform_product_space (the_complex_numbers, 1)); ef_arg_c : RETURN (make_uniform_product_space (the_complex_numbers, 1)); ef_cos_c : RETURN (make_uniform_product_space (the_complex_numbers, 1)); ef_exp_c : RETURN (make_uniform_product_space (the_complex_numbers, 1)); ef_ln_c : RETURN (make_uniform_product_space (the_complex_numbers, 1)); ef_sin_c : RETURN (make_uniform_product_space (the_complex_numbers, 1)); ef_sqrt_c : RETURN (make_uniform_product_space (the_complex_numbers, 1)); ef_tan_c : RETURN (make_uniform_product_space (the_complex_numbers, 1)); ef_if_c : RETURN (make_listed_product_space ([the_logicals, the_complex_numbers, the_complex_numbers])); ef_subscript_s : RETURN (make_listed_product_space ([the_strings, the_integers])); ef_eq_s : RETURN (make_uniform_product_space (the_strings, 2)); ef_ne_s : RETURN (make_uniform_product_space (the_strings, 2)); ef_gt_s : RETURN (make_uniform_product_space (the_strings, 2)); ef_lt_s : RETURN (make_uniform_product_space (the_strings, 2)); ef_ge_s : RETURN (make_uniform_product_space (the_strings, 2)); ef_le_s : RETURN (make_uniform_product_space (the_strings, 2)); ef_subsequence_s : RETURN (make_listed_product_space ([the_strings, the_integers, the_integers])); ef_concat_s : RETURN (make_extended_tuple_space (the_zero_tuple_space, the_strings)); ef_size_s : RETURN (make_uniform_product_space (the_strings, 1)); ef_format : RETURN (make_listed_product_space ([the_numbers, the_strings])); ef_value : RETURN (make_uniform_product_space (the_strings, 1)); ef_like : RETURN (make_uniform_product_space (the_strings, 2)); ef_if_s : RETURN (make_listed_product_space ([the_logicals, the_strings, the_strings])); ef_subscript_b : RETURN (make_listed_product_space ([the_binarys, the_integers])); ef_eq_b : RETURN (make_uniform_product_space (the_binarys, 2)); ef_ne_b : RETURN (make_uniform_product_space (the_binarys, 2)); ef_gt_b : RETURN (make_uniform_product_space (the_binarys, 2)); ef_lt_b : RETURN (make_uniform_product_space (the_binarys, 2)); ef_ge_b : RETURN (make_uniform_product_space (the_binarys, 2)); ef_le_b : RETURN (make_uniform_product_space (the_binarys, 2)); ef_subsequence_b : RETURN (make_listed_product_space ([the_binarys, the_integers, the_integers])); ef_concat_b : RETURN (make_extended_tuple_space (the_zero_tuple_space, the_binarys)); ef_size_b : RETURN (make_uniform_product_space (the_binarys, 1)); ef_if_b : RETURN (make_listed_product_space ([the_logicals, the_binarys, the_binarys])); ef_subscript_t : RETURN (make_listed_product_space ([the_tuples, the_integers])); ef_eq_t : RETURN (make_uniform_product_space (the_tuples, 2)); ef_ne_t : RETURN (make_uniform_product_space (the_tuples, 2)); ef_concat_t : RETURN (make_extended_tuple_space (the_zero_tuple_space, the_tuples)); ef_size_t : RETURN (make_uniform_product_space (the_tuples, 1)); ef_entuple : RETURN (the_tuples); ef_detuple : RETURN (make_uniform_product_space (the_generics, 1)); ef_insert : RETURN (make_listed_product_space ([the_tuples, the_generics, the_integers])); ef_remove : RETURN (make_listed_product_space ([the_tuples, the_integers])); ef_if_t : RETURN (make_listed_product_space ([the_logicals, the_tuples, the_tuples])); ef_sum_it : RETURN (make_uniform_product_space (the_integer_tuples, 1)); ef_product_it : RETURN (make_uniform_product_space (the_integer_tuples, 1)); ef_add_it : RETURN (make_extended_tuple_space (the_integer_tuples, the_integer_tuples)); ef_subtract_it : RETURN (make_uniform_product_space (the_integer_tuples, 2)); ef_scalar_mult_it : RETURN (make_listed_product_space ([the_integers, the_integer_tuples])); ef_dot_prod_it : RETURN (make_uniform_product_space (the_integer_tuples, 2)); ef_sum_rt : RETURN (make_uniform_product_space (the_real_tuples, 1)); ef_product_rt : RETURN (make_uniform_product_space (the_real_tuples, 1)); ef_add_rt : RETURN (make_extended_tuple_space (the_real_tuples, the_real_tuples)); ef_subtract_rt : RETURN (make_uniform_product_space (the_real_tuples, 2)); ef_scalar_mult_rt : RETURN (make_listed_product_space ([the_reals, the_real_tuples])); ef_dot_prod_rt : RETURN (make_uniform_product_space (the_real_tuples, 2)); ef_norm_rt : RETURN (make_uniform_product_space (the_real_tuples, 1)); ef_sum_ct : RETURN (make_uniform_product_space (the_complex_tuples, 1)); ef_product_ct : RETURN (make_uniform_product_space (the_complex_tuples, 1)); ef_add_ct : RETURN (make_extended_tuple_space (the_complex_tuples, the_complex_tuples)); ef_subtract_ct : RETURN (make_uniform_product_space (the_complex_tuples, 2)); ef_scalar_mult_ct : RETURN (make_listed_product_space ([the_complex_numbers, the_complex_tuples])); ef_dot_prod_ct : RETURN (make_uniform_product_space (the_complex_tuples, 2)); ef_norm_ct : RETURN (make_uniform_product_space (the_complex_tuples, 1)); ef_if : RETURN (make_listed_product_space ([the_logicals, the_generics, the_generics])); ef_ensemble : RETURN (the_tuples); ef_member_of : RETURN (make_listed_product_space ([the_generics, the_maths_spaces])); OTHERWISE : RETURN (?); END_CASE; END_FUNCTION; -- derive_elementary_function_domain
|