Есть ли источники, чтобы найти общие функции сокращения карт, которые были бы инъекционными? (Есть ли название для таких функций?)
Например, мне нужно отобразить список чисел
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