Примеры инъективных функций сокращения?
Есть ли какие-либо источники для поиска общих инъективных функций сокращения карты? (Есть ли название для таких функций?)
Например, мне нужно сопоставить список чисел
lst = [1,2,3,4]
в кортеж (сумма, произведение)
def mapper(lst):
sum_, prod = 0, 1
for e in lst:
sum_ += e
prod *= e
res = mapper(lst)
# res = tuple(10, 24)
Но это отображение не является инъективным, потому что списки:
x = [1,2,3,4]
y = [4,3,2,1]
дают тот же результат.
Меня не особенно беспокоит "сложность" инвертирования этих функций, но разные источники для простых и сложных обратимых функций были бы полезны.
Также было бы неплохо, если бы результат не "взрывался" в дальности. Например, функция:
def mapper(lst):
res = 1
for e, prime in zip( lst, prime_number_generator() ):
res *= prime**e
является сокращением карты, а также инъективным, но результатом будет:
res = 2^1 * 3^2 * 5^3 * 7^4 = 2 * 9 * 125 * 2401 = 5402250 # too large number