LINUX.ORG.RU

История изменений

Исправление quasimoto, (текущая версия) :

верно то, что 1 бит теряется при любой бинарной операции.

Это не верно.

Для множества D бинарная операция (по определению) это функция f : D * D -> D. Их всего |D| ^ (|D| ^ 2) разных. Ты утверждаешь, что для любого множества D и любой такой функции... Что?

Под D нужно n = log(|D|) бит (тоже по определению). Под первый _или_ второй аргумент — n бит. Под первый _и_ второй — 2 n (log(|D * D|) = log(|D| ^ 2) = 2 log(|D|)). Под результат — 0 <= log(|Im(f)|) <= n бит, то есть столько же или на сколько угодно меньше, не на 1.

Дальше, если 1 < |D| < aleph_0, то бинарная операция не может быть вложением/биекцией, то есть аргументы не восстанавливаются однозначно из результата. Это всегда так — тут не о чем говорить (и вообще — коммутативная операция по определению не вложение/биекция, в случае любого D, так как забывает эти самые ярлычки). Между отрезком и его квадратом есть соответствие только в случае если их нет, они точки или дискретные или непрерывные линия и плоскость.

Ещё у тебя может быть идеальное M с операциями (пусть натуральные числа) и модельное D (регистр), тогда из f : M * M -> M делаем f' : D * D -> M и видим, что log(|Im(f')|) может быть относительно n чем угодно — никаких потерь единиц.

это если ты ярлычки к аргументам приклеишь: «первый» и «второй». Без ярлычков не взлетит.

Это называется декартово произведение.

В случае min : D * D -> D образ это ровно D, под результат нужно ровно n бит.

n != n + 1.

операция возвращающая константу выдаёт _всегда_ 0 бит

Я не стал этого говорить, но да — log(1) = 0.

0 != n + 1.

не удваивает.

Строго говоря не удваивает (есть эквивалентные разбиения на множители, так что часть информации теряется), но и не увеличивает на единицу:

> let n = 64
> logBase 2 n
6.0
> logBase 2 $ fromIntegral $ length $ nub [x * y | x <- [1 .. n], y <- [1 .. n]]
10.302638923787553

11 != 6 + 1.

Я больше про то, что крайний случай это вложение D * D в M (D < M) — Im(f) ~ D * D. То есть правильное утверждение — при сужении любой бинарной операции с M на D всегда _достаточно_ вдвое большего количества бит под результат по отношению к битности (одного из) аргумента (D).

2 n != n + 1.

Заметь, никаких систем счислений, рациональных чисел и расширений полей Галуа — примитивные рассуждения про любые множества, операции и информацию (определённую через мощность, то есть как количество состояний которое нужно закодировать строкой из такого-то количества символов).

Исправление quasimoto, :

верно то, что 1 бит теряется при любой бинарной операции.

Это не верно.

Для множества D бинарная операция (по определению) это функция f : D * D -> D. Их всего |D| ^ (|D| ^ 2) разных. Ты утверждаешь, что для любого множества D и любой такой функции... Что?

Под D нужно n = log(|D|) бит (тоже по определению). Под первый _или_ второй аргумент — n бит. Под первый _и_ второй — 2 n (log(|D * D|) = log(|D| ^ 2) = 2 log(|D|)). Под результат — 0 <= log(|Im(f)|) <= n бит, то есть столько же или на сколько угодно меньше, не на 1.

Дальше, если 1 < |D| < aleph_0, то бинарная операция не может быть вложением/биекцией, то есть аргументы не восстанавливаются однозначно из результат. Это всегда так — тут не о чем говорить (и вообще — коммутативная операция по определению не вложение/биекция, в случае любого D, так как забывает эти самые ярлычки). Между отрезком и его квадратом есть соответствие только в случае если их нет, они точки или дискретные или непрерывные линия и плоскость.

Ещё у тебя может быть идеальное M с операциями (пусть натуральные числа) и модельное D (регистр), тогда из f : M * M -> M делаем f' : D * D -> M и видим, что log(|Im(f')|) может быть относительно n чем угодно — никаких потерь единиц.

это если ты ярлычки к аргументам приклеишь: «первый» и «второй». Без ярлычков не взлетит.

Это называется декартово произведение.

В случае min : D * D -> D образ это ровно D, под результат нужно ровно n бит.

n != n + 1.

операция возвращающая константу выдаёт _всегда_ 0 бит

Я не стал этого говорить, но да — log(1) = 0.

0 != n + 1.

не удваивает.

Строго говоря не удваивает (есть эквивалентные разбиения на множители, так что часть информации теряется), но и не увеличивает на единицу:

> let n = 64
> logBase 2 n
6.0
> logBase 2 $ fromIntegral $ length $ nub [x * y | x <- [1 .. n], y <- [1 .. n]]
10.302638923787553

11 != 6 + 1.

Я больше про то, что крайний случай это вложение D * D в M (D < M) при Im(f) ~ D * D, то есть правильное утверждение — при сужении любой бинарной операции с M на D _достаточно_ вдвое большее количество бит под результат по отношению к битности (одного из) аргумента (D).

2 n != n + 1.

Заметь, никаких систем счислений, рациональных чисел и расширений полей Галуа — примитивные рассуждения про любые множества, операции и информацию (определённую через мощность, то есть как количество состояний которое нужно закодировать строкой из такого-то количества символов).

Исходная версия quasimoto, :

верно то, что 1 бит теряется при любой бинарной операции.

Это не верно.

Для множества D бинарная операция (по определению) это функция f : D * D -> D. Их всего |D| ^ (|D| ^ 2) разных. Ты утверждаешь, что для любого множества D и любой такой функции... Что?

Под D нужно n = log(|D|) бит (тоже по определению). Под первый _или_ второй аргумент — n бит. Под первый _и_ второй — 2 n (log(|D * D|) = log(|D| ^ 2) = 2 log(|D|)). Под результат — 0 <= log(|Im(f)|) <= n бит, то есть столько же или на сколько угодно меньше, не на 1.

Дальше, если 1 < |D| < aleph_0, то бинарная операция не может быть вложением/биекцией, то есть аргументы не восстанавливаются однозначно из результат. Это всегда так — тут не о чем говорить (и вообще — коммутативная операция по определению не вложение/биекция, в случае любого D, так как забывает эти самые ярлычки). Между отрезком и его квадратом есть соответствие только в случае если их нет, они точки или дискретные или непрерывные линия и плоскость.

Ещё у тебя может быть идеальное M с операциями (пусть натуральные числа) и модельное D (регистр), тогда из f : M * M -> M делаем f' : D * D -> M и видим, что log(|Im(f')|) может быть относительно n чем угодно — никаких потерь единиц.

это если ты ярлычки к аргументам приклеишь: «первый» и «второй». Без ярлычков не взлетит.

Это называется декартово произведение.

В случае min : D * D -> D образ это ровно D, под результат нужно ровно n бит.

n != n + 1.

операция возвращающая константу выдаёт _всегда_ 0 бит

Я не стал этого говорить, но да — log(1) = 0.

0 != n + 1.

не удваивает.

Строго говоря не удваивает, но и не увеличивает на единицу:

> let n = 64
> logBase 2 n
6.0
> logBase 2 $ fromIntegral $ length $ nub [x * y | x <- [1 .. n], y <- [1 .. n]]
10.302638923787553

11 != 6 + 1.

Я больше про то, что крайний случай это вложение D * D в M (D < M) при Im(f) ~ D * D, то есть правильное утверждение — при сужении любой бинарной операции с M на D _достаточно_ вдвое большее количество бит под результат по отношению к битности (одного из) аргумента (D).

2 n != n + 1.

Заметь, никаких систем счислений, рациональных чисел и расширений полей Галуа — примитивные рассуждения про любые множества, операции и информацию (определённую через мощность, то есть как количество состояний которое нужно закодировать строкой из такого-то количества символов).