I feel the same, regretted the absence of the "delete message" button couple of times.
But over all the article and the discussion were quite interesting and i got a lot insights from it.
Few final remarks:
(0) [ (Ec :: U.c) ] => (Ex :: [U.x])
It can't be proved in general, because it amounts to the Axiom of Choice. Operationally speaking, from assumption that for each, implicit, point 'p' we have a scalar (or several of them) 'c', satisfying U.c we conclude the existence of function 'x' that for each 'p' "chooses" one of the appropriate scalars.
(1) (Ex :: [U.x]) => [ (Ec :: U.c) ]
My prove from above seems to be correct after all.
It uses the theorem
for punctual U: [(Ex :: U.x) == (Ec :: U.c)]
which is dual to the theorem (7) from EWD1184-3.
Initially i just assumed it to be true, but wasn't able to prove it right away and panicked. My problem was that the prove requires a different (from original) version of Leibniz rule:
[ (x = c) ^ f.x == (x = c) ^ f.c ]
instead of
[ (x = c) => f.x == (x = c) => f.c ]
(2) Appealing to monotonicity
Argument
multiplication is monotonic with respect to 'divides'
=>
multiplication distribute over 'gcd'
is appealing, because it can be easily reused, for example exponentiation as also monotonic.
The objection is that 'divides' is not a total order.
But, assuming prime factorization, it is as total as '=<':
(Ap :: p ** x divides p ** y == x =< y )
where ** is exponentiation ( 2 ** 3 = 8 )
To exploit this local, or punctual, totality, the monotonic functions have to distribute over factorization, i.e. be punctual.
Luckily they do:
(Px:: f.x) * (Px:: g.x) = (P.x:: f.x * g.x)
(Px:: f.x) ** y = (P.x:: f.x ** y)
where (P::) is a "product" quantifier.
And that is about it.
среда, 6 марта 2024 г. в 00:53:49 UTC+3, Jeremy Weissmann: