librexpr
You don't need to choose a concrete implementation. If you don't want to choose a construction, you can just say something like "let (N, 0, +, *) be a structure satisfying the peano axioms" and work from there.
> For all good definitions, so get Peano arithmetic and can work with, but the question “Is 1 and member of 3” depends on your chosen implementation. Even though it is a weird question, it is valid and not isomorphic under implementations. That is problematic, since it is hidden in how we do mathematics mostly.
Why is that problematic? The constructions are isomorphic under the sentences that actually matter. This kind of statement is usually called a "junk theorem", and they are a thing in type theory too, see for example this quote from a faq by Kevin Buzzard about why Lean defines division by zero to be zero:
> The idiomatic way to do it is to allow garbage inputs like negative numbers into your square root function, and return garbage outputs. It is in the theorems where one puts the non-negativity hypotheses.
https://xenaproject.wordpress.com/2020/07/05/division-by-zer...
> Secondly, it is hard to formalize, and I think mathematics desperately needs to be formalized.
Is that actually true? At the very least writing out the axioms and derivation rules is easier for set theory, since it's simpler than type theory. And there has been plenty of computer-verified mathematics done in Metamath/set.mm and Isabelle/ZF, even though less has been done than in type theory. Currently the automated tools are better for type theory, but it seems likely to me that that has more to do with how much effort has been put into type theory than any major inherent advantages of it.
---
More generally, types in type theory are also constructed! The real numbers in Lean don't come from the platonic realm of forms, they are constructed as equivalence classes of cauchy sequences. And the construction involves a lot of type-theoretic machinery which I'd usually rather ignore when working with reals, much like I'd usually rather ignore the set-theoretic construction of the real numbers. And the great thing is that I can ignore them, in either foundation!
So I just don't really buy these common criticisms of set theory, which to me seem like double standards.
More generally, in normal math, every theorem that involves division by some value Y which could be zero must have as hypothesis that Y is not equal to zero. All these theorems still work in systems like Lean where division by zero is defined to be zero, so nothing is lost.
https://nitter.net/ESYudkowsky/search?f=tweets&since=2023-05...
First tweet:
> ...can we get confirmation on this being real?
https://nitter.net/ESYudkowsky/status/1664313290317795330#m
Second tweet, which is a reply:
> Good they tested in sim, bad they didn't see it coming given how much the entire alignment field plus the previous fifty years of SF were warning in advance about this exact case
https://nitter.net/ESYudkowsky/status/1664357633762140160#m
Third tweet:
> Disconfirmed.
https://nitter.net/ESYudkowsky/status/1664639807002214401#m
The second tweet does not explicitly say "conditional on this turning out to be real", but given that the immediately preceding tweet was expressing doubt, it is implicit from the context that that is what he meant.
Another slight correction/expansion is that (|n| args...) = n - numargs when n >= numargs. This happens to coincide with False when n = numargs + 1, so it would have been better if I had said "when n > numargs + 1".
The expansion into |n|(args...) must happen before we know what n is, because in the lambda calculus we can't know anything about a function without calling it. Since it happens before we know what n is, then the number of args will necessarily be the same for all n. When n > numargs, |n|(args...) ignores all its arguments and halts, and therefore f cannot be a useful test for zero.
Giving it a different name would also imply that you shouldn't submit AI songs to a songwriting competition, much like you wouldn't submit a photograph to a painting competition, but you could have separate competitions for AI songs, and separate competitions that accept anything, and so on.
So personally I have no problem with considering GPT stuff "art", but I think it should be considered a separate art form and given a different name.
Unfortunately in most languages this pattern will lead to stack overflow on medium-sized inputs, so you can't often use it unless you're using a language like Racket or Erlang which can't really stack overflow.
I think that unaligned and sufficiently smart AI could kill everyone because I looked at the arguments for and against and came to a conclusion. Presumably this is the same thing you did. I know my own mind better than you, and I'm telling you that your attempts to explain why I disagree with you are completely off the mark.
> We don’t enact public policy based on predictions of a biblical apocalypse, nor do we ban televisions or computers because groups like the Amish disapprove of them.
The reason we don't do that is because we evaluate their arguments and disagree with them. It has nothing to do with who they are or why they believe what they believe.
[0] https://www.w3.org/TR/activitypub/#x7-1-3-shared-inbox-deliv...
[1] https://github.com/mastodon/mastodon/blob/a5a00d7f7adff5e0af...
However, there is a way around it, by taking as axiom that ZF is consistent, choosing some model M of ZF, and then talking about the set S of numbers inside M that cannot be described.
[0] https://en.wikipedia.org/wiki/Tarski%27s_undefinability_theo...
[0] https://en.wikipedia.org/wiki/G%C3%B6del%E2%80%93Gentzen_neg...
This means that you don't get any safety by rejecting the law of excluded middle, nor by rejecting the axiom of choice. For this reason, I think intuitionistic logic is trading away a lot of power for basically no gain.
[0] https://en.wikipedia.org/wiki/G%C3%B6del%E2%80%93Gentzen_neg...
[1] https://en.wikipedia.org/wiki/Axiom_of_choice#Independence
> It's a pure naval-gazing exercise
> The response to the idea [...] should be "who cares".
If anything sets back mathematics, it's when people have this kind of attitude towards the parts of math they find unintuitive.
For example, in Metamath[0] (which was mentioned in another comment), there are just two inference rules. First is modus ponens[1], which says "if A is true, and if A being true implies that B is true, then B is true". Second is the rule of generalization[2], which says "if A is unconditionally true, then for all x A is true". If you start with the axiomatic statements of classical logic + set theory, pretty much all of mathematics can be inferred just by repeatedly applying these two rules to derive more true statements.
The hard part is developing a good feel for what's possible within this system and what's not, so that you can start skipping large numbers of steps too. As someone who's self-learning this stuff I've personally found exploring Metamath very helpful for this, because I find it helpful to break things down to the foundations when I'm not sure about a bit of reasoning, and Metamath is good at breaking things down to the foundations. But to each their own. Regardless, if you haven't already done so, I'd recommend learning classical logic if you want to understand proofs.
[0] http://us.metamath.org/mpeuni/mmset.html
> for any non-trivial property of partial functions, no general and effective method can decide whether an algorithm computes a partial function with that property
This basically translates to "for each non-trivial property P, there exists a program x for which it is undecidable if x has the property P", or "∀P ∃x such that it's undecidable if x has property P".
Notice that in this statement, programs are quantified using an "exists", not a "forall". Something similar holds for what you said here:
> its corollary is there is no general algorithm to build Turing Machines with arbitrary non-trivial properties
Translated to logic, this becomes "for every program y which takes as input a property and outputs a Turing Machine, there exists a property P such that the y(P) does not have property P", or "∀y ∃P y(P) does not have property P".
Because this statement uses "exists" on the property, it does not rule out the existence of a y which works for most properties P that we'd care about. It only rules out one that works for all properties.
As a simple example where it's possible to prove a non-trivial property, take the property "x is the identity function". This is a non-trivial property, because it is not true about all programs, nor is it false about all programs. And it is trivial to prove that the function "(n) => n" satisfies this property.
Now, I additionally think that most practical programs can have their correctness / incorrectness proven. My reason for this belief is that generally, I expect coders to understand why the code they're writing should work. If nobody understands why the code works, I'd generally consider that a bug, or at least a major code smell. But if the programmer actually understands why the code works, and hasn't made any mistakes, then in principle their understanding could be converted into a proof, because proofs are more or less just correct reasoning, but written out formally. Of course, it would still be very hard, but it's not "provably impossible".
Edit: minor text change
numbers_not_divisible_by_2_3_5_7 = []
for i in range(520, 620):
is_divisible = False
for p in [2, 3, 5, 7]:
if i % p == 0:
is_divisible = True
break
if not is_divisible:
numbers_not_divisible_by_2_3_5_7.append(i)
print(numbers_not_divisible_by_2_3_5_7)
print(len(numbers_not_divisible_by_2_3_5_7))
And if you run this code you'll find that it demonstrates a counterexample. Between 520 and 620 there are 25 numbers which are not divisible by 2, 3, 5, or 7:[521, 523, 527, 529, 533, 541, 547, 551, 557, 559, 563, 569, 571, 577, 583, 587, 589, 593, 599, 601, 607, 611, 613, 617, 619]
You really need to use all the primes from 2 to 13 inclusive to get a limit of 23. And even then I was only able to prove it by brute-forcing up to the primorial of 13, but maybe there's a simpler way.
And someone selling copies cheaper might give you a reputation for being too expensive, but a) that's the money issue again, and b) this can only happen after 20-50 years, at which point you've had plenty of time to build your business, and c) even after 20-50 years, you only have a problem if you were completely stagnant, because any new changes you made to the work will last 20-50 years after the most recent change.
If you don't think that this solution is sufficient, then it would seem that we've found the main point of disagreement.
You also asked:
> What makes you qualified to opine on how long it takes for a creator to make “enough money”? What makes you qualified to decide that a certain amount of monetary harm is “less important”?
The way I answer these questions is by viewing money as a means to an end. I think money only matters insofar as it positively or negatively affects someone's life, so to me the question is, "to what extent is this person negatively impacted by less money 20-50 years later, compared to everyone who is negatively impacted by the restrictions on their actions?"
---
As for the rest of my comment, I was elaborating on my opinions, yes. And yes, these opinions are largely based on what seems reasonable to me. I don't have the desire nor time to do a thorough study to find the actually correct number of years, and even if I did, the question is sufficiently complicated that I expect that there would still be a lot of uncertainty left even after thorough research. In addition, since it's partially a moral issue, gut feeling will always be a necessary component of this.
Finally, your original question wasn't about concrete numbers, merely persuasiveness:
> But, devil’s advocate, I haven’t heard a super convincing argument as to why something I make should ever revert to public domain, especially while I’m alive. Why shouldn’t I have the right to take my work to my grave and never have someone else profit from it?
So I don't feel bad about explaining my own point of view, which is persuasive to me even if not to you, as an attempt to answer that question.
Just found this quora question which is the same as what you asked: <https://www.quora.com/Assume-n-1-How-can-I-prove-one-can-onl...>
But the answers seem wrong? The first one uses only the primes 2 to 7 instead of 2 to 13, but there's a reason I used 2 to 13, and it's that there's a counterexample if you use less than that. Even using 2 to 11, which is more than they use, a counterexample exists between 520 and 620, where there are 25 numbers which are not divisible by any of 2, 3, 5, 7, or 11:
[521, 523, 527, 529, 533, 541, 547, 551, 557, 559, 563, 569, 571, 577, 583, 587, 589, 593, 599, 601, 607, 611, 613, 617, 619]
For the proof by induction at the bottom of the page, I'll admit I just don't understand it, but at first glance it seems impossible to me that it would work given how short it is and it doing things that just don't seem to make sense. But maybe I'm missing something.
Regardless, having triple-checked it, I will take pride that my proof is probably correct :P
Edit: Now by double-checking this particular comment I've found that there are actually only 24 numbers between 520 and 620 which are not divisible by any prime from 2 to 11. 25 is if you use 2 to 7. This has no effect on the proof though, only this comment about the quora proofs, and even then my point stands.
I don't think I understand in what ways it can be damaging to reputation. Maybe you mean if I pretended to be the original author? Because in that case I think it's a different issue than copyright. You can have no copyright but still have laws about proper disclaimers and proper attribution, and I'd be in favor of that. I don't care if I have to clearly and explicitly label all my derivative works as a "fanwork", so long as I'm allowed to legally make and distribute them at all.
Other than that, you mentioned "multiple kinds of social harm". But I'm looking through your other comments on this submission, and the only other place where I've found where you explicitly state a harm is here:
> That claim doesn’t hold water when the pirate is enjoying the value of the work, and is ignoring the costs of it’s creation including time.
Which as far as I can tell is just the money issue again. Sorry if I missed another harm that you mentioned, but for now as far as I can tell every harm is either money, or a harm which can be addressed by much less restrictive laws than copyright.
Now, assuming that money is the only harm of copying, which is what I believe, then it's the only issue that copyright needs to deal with. And given that copyright has harms of its own, both socially and with respect to freedom*, then once money is dealt with I think the copyright should be removed.
So then it becomes a debate on what would be a "reasonable" copyright, which would mostly avoid the "money" harm, while also mostly avoiding the harms of copyright itself. I don't think it makes sense to reward children for their parents' creation (except insofar as they might inherit money that the parent has already earned), so I think anything longer than life is already much too long.
I think 50 is more than enough, since someone making a work at 20 will be able to receive income from it until they're 70, which is almost their entire life. I think it's very rare that a work will make no money for the first 50 years but then suddenly start making money, but even in that case the author will probably have already moved on, made more works and/or made money in other ways by then, so at that point the monetary harm is less important.
I'm in favor of requiring manually registering to extend copyright past 20 because I think most works will never make money and are not intended to make money (most memes, for example), so those works should become public domain faster. I also think that most works that make money will have started doing so in the first 20 years, so it will be rare that a money-making work will unintentionally enter the public domain after 20 years.
I'll note that I'm less confident about registration than about shorter copyright. However, I view the "manual registration" as a compromise, so if we removed it and just went for a flat number of years, I would advocate for less than 50 years, maybe 30 or 40.
(*I think it's a restriction on my freedom that I have things in my head which I can't use. It wouldn't be realistic to argue that I should avoid looking at any copyrighted material my entire life, and as long as I can't feasibly do that and still take part in society, I will have ideas derived from copyrighted works and be unable to legally act on them)
Edit: I should also address startups and corporations making software. In that case, 50 years is already quite long, and the software almost never stays exactly as it is, it evolves. And every new change will last another 20-50 years. So you'll only be able to use version 20-50 years out of date, so in almost all cases the corporation will still have their competitive edge.
This obviously works for the n we check manually because if there are at most 23 potential primes, there are at most 23 primes.
This also works for n greater than those we check manually, because potential primes in this set "loop" when you get past 30030. Because 30030 is divisible by every prime in P, for any x which is divisible by P, 30030 + x will also be divisible by P. Similarly, if x is a potential prime, 30030 + x will also be a potential prime. This means that there are all the same potential primes from 0 to 30030 as there are from 30030 to 30030*2, and from 30030*2 to 30030*3, and so on. Since by brute force, there was always at most 23 potential primes in the first loop (plus the beginning of the second loop, to make up for the fact that we start at n=2), then it must be true in every later loop.
Here is code that does the brute force in ruby 3, finishing the proof:
require 'prime'
def get_cycle_extended(n)
# Get every "potential prime"
primes = Prime.each(n).to_a
cycle = []
for i in 0...(primes.reduce(:*) + 200) # + 200 to be safe
is_eliminated = false
for prime in primes
if i % prime == 0
is_eliminated = true
break
end
end
cycle << i if not is_eliminated
end
cycle
end
p get_cycle_extended(5) # just checking that get_cycle makes sense
size = 13
cycle = get_cycle_extended(size)
for n in 2..3004
s = 10*n
e = 100 + s
restricted = cycle.filter { |x| (s..e).include?(x) }
if restricted.length > 23
raise "false at #{n}"
else
p restricted
end
end
Edit: Since I posted about copyright not long before posting this, I'll just go and say explicitly that I'm releasing this comment to the public domain using CC0.I'm also not hurting anyone by making copies of things, the only negative side-effect is that the creator might make less money. On the other hand, the fact that it's illegal to make modified versions of copyrighted works, or to send them to my friends, has been a significant inconvenience in my life and to my creativity. Money for the author is important, and we make concessions for that by having copyright, but in the absence of anything else the default ought to be freedom, not copyright.
I'd go for 20 years of copyright by default, with the option of renewing up to 50 years, which ought to be long enough for the creator to make their money.
As an aside, I don't care if others sell copies of my work, that's why I prefer to release it under open-source licenses or into the public domain directly.
You can see it in the generated code on the bottom right during that part of the demo. It loops over the lines and bolds them when index % 5 == 0.
Edit: I guess with the 1-based indexing of natural languages, the code actually bolds lines number 1, 6, etc. So arguably it should have done index % 5 == 4 instead, to bold lines number 5, 10, etc. But funnily enough, if it had done that, it would have bolded all the empty lines, so it would have seemed like it didn't do anything.