00:25:43 -!- ais523 has joined.
00:26:17 <ais523> zzo38: I use EX_CONFIG in cases where the program couldn't meaningfully start because a configuration file it depends on was malformed or missing required informatoin
00:27:32 <ais523> there's a more detailed explanation of sysexits.h in the BSD man page, https://man.openbsd.org/sysexits
00:27:58 <ais523> although not much more detailed
00:29:58 -!- ais523 has quit (Client Quit).
00:30:58 -!- GeekDude has joined.
00:54:05 -!- MDude has joined.
00:58:02 -!- arseniiv has quit (Ping timeout: 240 seconds).
01:32:09 -!- Sgeo__ has joined.
01:35:18 -!- Sgeo_ has quit (Ping timeout: 245 seconds).
01:41:03 -!- oerjan has joined.
01:54:22 <oerjan> <imode> y'know what, assume you have the full pos/neg range. <-- not possible in a bounded number of instructions, i think.
01:55:43 <oerjan> well, you didn't say you had looping instructions, so not possible at all.
01:57:03 <oerjan> the thing is, subtraction commutes with negating all numbers involved. so the only thing to distinguish things if you negate everything is that AND gives 1 and not -1 (i assume)
01:59:25 <oerjan> imagine if the numbers you start with are multiples of a googolplex
02:03:36 <oerjan> it will take you more than a googol operations to magnify a 1 into something of similar size - and only then do you have any chance of a distinguishing test result.
02:07:42 <oerjan> that is, if you start with numbers x, y, then every number you can construct will be of the form i*x + j*y + k (where the k comes from AND results)
02:08:05 -!- xkapastel has quit (Quit: Connection closed for inactivity).
02:08:45 <oerjan> and this will be zero exactly when i*(-x) + j*(-y) + k is, _unless_ k is divisible by gcd(x,y).
02:09:19 <oerjan> in which case it _might_ not be, if you're lucky.
02:10:23 <oerjan> and it will take you on the order of log (gcd(x,y)) operations to get a k that large.
02:32:41 -!- Lykaina has joined.
02:40:57 <imode> assume I have looping instructions.
02:41:13 <imode> including "break if == 0"
02:47:15 <Lykaina> so hard to get certain people's attention in irc. (i refer to another channel on another network)
02:52:00 <oerjan> imode: ok then you can basically do something like: construct 1 using AND, then use it to increment/decrement counters to search for x and y among all numbers.
02:52:53 <oerjan> and keeping track of which you find first and whether they're >0 or <0
02:53:36 <imode> yikes. there's no way to speed that process up? I have access to constants and everything...
02:54:15 <oerjan> i don't really think so
02:54:39 <imode> interesting... you seem so limited. :\
02:54:48 <imode> if you don't have <0 or >0.
03:13:32 -!- atslash has quit (Ping timeout: 265 seconds).
03:14:27 -!- hppavilion[1] has joined.
03:25:20 -!- atslash has joined.
03:30:32 -!- Lykaina has quit (Quit: leaving).
04:10:27 -!- imode has quit (Ping timeout: 245 seconds).
04:17:06 -!- sprocklem has joined.
04:19:59 -!- tromp_ has quit (Read error: Connection reset by peer).
04:20:50 -!- tromp has joined.
04:21:09 <esowiki> [[1+]] M https://esolangs.org/w/index.php?diff=66317&oldid=66313 * TwilightSparkle * (+2) /* Fibonacci sequence */
04:33:38 -!- imode has joined.
04:42:50 -!- Lord_of_Life has quit (Ping timeout: 240 seconds).
04:44:14 -!- tromp has quit (Ping timeout: 276 seconds).
04:44:23 -!- Lord_of_Life has joined.
04:45:35 <esowiki> [[1+]] https://esolangs.org/w/index.php?diff=66318&oldid=66317 * TwilightSparkle * (+53)
04:59:44 <esowiki> [[1+]] M https://esolangs.org/w/index.php?diff=66319&oldid=66318 * TwilightSparkle * (+45)
05:07:37 -!- tromp has joined.
05:19:06 -!- tromp has quit (Read error: Connection timed out).
05:20:01 <esowiki> [[1+]] https://esolangs.org/w/index.php?diff=66320&oldid=66319 * TwilightSparkle * (+39) /* Examples */
05:48:31 -!- tromp has joined.
06:04:32 -!- tromp has quit (Read error: Connection timed out).
06:05:56 <esowiki> [[Keg]] https://esolangs.org/w/index.php?diff=66321&oldid=66035 * JonoCode9374 * (+81) /* See also */
06:05:59 -!- oerjan has quit (Quit: Nite).
06:26:50 -!- imode has quit (Ping timeout: 240 seconds).
06:27:26 -!- tromp has joined.
06:43:11 -!- tromp has quit (Read error: Connection timed out).
06:56:04 -!- tromp has joined.
07:11:14 -!- tromp has quit (Read error: Connection reset by peer).
07:11:41 -!- tromp has joined.
07:44:11 -!- cpressey has joined.
07:53:03 <cpressey> Good morning. There was something very important I needed to tell you about all your base, but I've forgotten what it was.
08:45:44 <cpressey> I made Robin's ref impl able to run on Hugs, even the random numbers and I/O parts. I'm running the test suite on it now. It's taking... a while to finish.
08:53:44 <cpressey> 26 minutes, to be precise. (compared to about 1 minute 8 seconds when it's compiled by ghc.)
09:46:49 <esowiki> [[An Odd Rewriting System/Odd.hs]] N https://esolangs.org/w/index.php?oldid=66322 * Chris Pressey * (+1791) Add Haskell implementation of An Odd Rewriting System.
09:48:47 <esowiki> [[An Odd Rewriting System]] M https://esolangs.org/w/index.php?diff=66323&oldid=58485 * Chris Pressey * (+71) Link to Haskell implementation.
09:54:24 <esowiki> [[Talk:Deque]] N https://esolangs.org/w/index.php?oldid=66324 * YamTokTpaFa * (+186) /* Isn't this article's expression unified? */ new section
10:10:15 <cpressey> Consider a language where programs automatically loop after N steps, and on each step, N grows. Programs can modify themselves, so that they can grow on each loop.
10:11:21 <Taneb> cpressey: consider me considering
10:11:46 <cpressey> If this is the only way to loop, and if N grows by a constant additive amount, this could be TC. But if N grows by a multiplicative factor, is it?
10:12:18 <cpressey> You'd need an inner loop to make it grow enough to get to the next loop.
10:13:02 <cpressey> idk, not terribly interesting by itself, but maybe it could be developed
10:13:32 <Taneb> Do you have to have enough instructions to make it to N to loop?
10:13:39 <Taneb> Or can it autopad with no-ops
10:14:17 <cpressey> I was thinking of having some fairly generic instruction set which could include no-ops.
10:15:48 <cpressey> It seems like N could start out "too small" as well
10:17:02 <cpressey> One could also try to make an "evil" version where N grows, but not in a way that is easy to predict
10:47:46 <cpressey> Or otherwise make it difficult to construct a no-op. In a lot of languages it's easy, in some it might be impossible, but ideally you'd want to strike some middle ground
10:51:27 -!- tromp_ has joined.
10:53:53 -!- tromp has quit (Ping timeout: 246 seconds).
10:55:53 <esowiki> [[Keg]] M https://esolangs.org/w/index.php?diff=66325&oldid=66321 * A * (+24) /* See also */ This link also includes irrelevant questions.
11:00:15 <cpressey> "A Turing-complete language that admits a quine also admits a way to build a no-op" -- I wonder if that's true?
11:00:37 <cpressey> My gut feeling is that it's probably true
11:12:37 <cpressey> Not really from anywhere, just from me thinking about how one might make a language where it's not possible to write a program that does nothing
11:16:08 -!- nfd9001 has joined.
11:52:02 -!- hppavilion[1] has quit (Ping timeout: 240 seconds).
12:09:00 <shachaf> Oh, there's a whole discussion above.
12:11:11 <shachaf> Does no-op mean a program of length n+k that computes the same thing as a program of length n?
12:15:37 <cpressey> I was using the word to mean the identity function, more or less. A program that does nothing. If you tack it on to some other program, it doesn't change the meaning of that program.
12:16:13 <cpressey> There are sort of a lot of assumptions about programs in there.
12:17:13 <shachaf> Oh, a whole program, not an instruction.
12:17:48 <shachaf> But a language could easily be Turing-complete and still require programs to always print something?
12:17:58 <cpressey> I think that came from, if you don't have a no-op instruction, can you build one out of the other instructions.
12:20:05 <cpressey> Maybe. If you force the program to always output something, then you say that's Turing complete because you can reduce every program to a TM, you're kind of pushing the "no-op-ness" into the TC reduction.
12:21:38 <shachaf> I'm not sure the TC reduction is such a useful way to talk about programs for other purposes.
12:24:48 <cpressey> I think that's why I started thinking about quines.
12:33:02 <cpressey> Trying to think of it another way: say you have an algebra, and it doesn't have an identity element (perhaps it's a semigroup). It's claimed that one can express any computation they like in this algebra. Could this claim be true?
12:40:52 <Taneb> How can it be said that an algebra can express a computation?
12:47:12 -!- xkapastel has joined.
12:49:09 <cpressey> That, itself, is an interesting question.
12:53:35 <cpressey> I once saw a paper that showed that the Hercules-Hydra battle could be expressed in braid theory.
12:53:39 <rain2> is there a good proof of rice theorem
12:55:15 <cpressey> rain2: My rough version of Rice's theorem is: It's undeciable to show that a Turing machine does X, because you can take that Turing machine and replace "X" with "halt" and you get the Halting Problem, which you already know is undecidable.
12:55:36 <cpressey> I know that's not the same thing as a good proof.
12:56:17 -!- sprocklem has quit (Ping timeout: 276 seconds).
12:57:09 <rain2> A rock solid proof
13:02:44 <cpressey> I'm pretty sure there's been a machine-checked proof of it in something like Lean or Coq but I have been unable to find anything with a quick web search.
13:05:58 <cpressey> https://github.com/leanprover-community/mathlib/blob/master/src/computability/halting.lean#L165
13:06:47 -!- imode has joined.
13:06:55 <cpressey> Apparently they prove the undecidability of HP based *on* Rice's theorem in that
13:08:48 <rain2> i'll try to understand these theorem statements
13:09:29 <shachaf> Do you like "Rice's theorem for the computable reals"?
13:21:06 <cpressey> It could be useful for thinking about infinite programs.
13:21:17 <rain2> are infinite programs superturing
13:21:33 -!- Sgeo__ has quit (Read error: Connection reset by peer).
13:22:25 <cpressey> I would say uncountably infinite programs have to count as "superturing" in some sense. Countable ones, probably not.
13:24:04 <rain2> https://cs.stackexchange.com/questions/77487/decidable-properties-of-computable-reals
13:24:10 <rain2> Rice's theorem for reals holds in every reasonable version of computable reals
13:26:58 <shachaf> It's interesting that it's a version of Rice's theorem that holds for programs that are guaranteed to halt.
13:28:13 <shachaf> What are other things you can say about programs that you know some things about?
13:29:08 <shachaf> For example what properties of a total function are decidable given a guaranteed-to-halt program that computes it?
13:31:03 <shachaf> Also: The computable reals are countable, but they're not computably countable.
13:31:45 <rain2> why aren't they computably countabl?
13:33:01 <cpressey> I'm a bit confused: The program that generates a computable real isn't guaranteed to halt. Quite the opposite, it has to be able to run indefinitely to compute some computable numbers, such as square roots.
13:36:24 <cpressey> Guaranteed to halt = "total" = "recursive" = R; Computable real = "computably enumerable" = "recursively enumerable" = RE; R < RE.
13:38:16 <shachaf> cpressey: Oh, well, if you define it that way it's productive.
13:38:31 <shachaf> I was thinking you give the program a required precision and it gives you an approximation within that precision.
13:38:40 <shachaf> In which case it halts on every input.
13:39:15 <cpressey> Sure, but you can write an analogous program for uncomputable reals too.
13:39:29 <cpressey> It halts because it's a finite approximation.
13:40:01 <cpressey> Not because of some property that the real it's approximating, has.
13:40:57 <shachaf> You can't compute uncomputable reals.
13:41:39 <cpressey> You can write a program that asks for a precision and computes an approximation of Chaitin's omega to that precision.
13:42:25 <cpressey> You can. It has in fact been done.
13:43:10 <Taneb> I don't believe you, cpressey
13:43:18 <Taneb> In fact, I believe you are mistaken here
13:43:43 <Taneb> With N bits of that constant you can solve the halting problem of programs of a size proportional to N
13:44:18 -!- arseniiv has joined.
13:44:44 <Taneb> There are Ns known to have programs of that size where it's undecidable whether they halt or not
13:45:13 <shachaf> What does it mean for it to be undecidable whether a particular program halts?
13:47:12 <cpressey> Taneb: the key word is "approximation". Perhaps there is a limit to the amount of precision you can ask for.
13:47:21 <Taneb> A proof of whether it halts or not is outside ZFC (or some other axiom scheme of your choice, but that might requre a different N)
13:47:55 <Taneb> cpressey: I think the limit might be about 5
13:47:55 <cpressey> (Or rather, expect to get, when you ask for it.)
13:48:15 <shachaf> Oh, I'd call that "unprovable", not "undecidable".
13:48:44 <shachaf> But, hmm, that still doesn't make sense to me.
13:49:01 <shachaf> Surely if the program halts, you can prove that much in ZFC.
13:49:19 <shachaf> I guess you're not naming a particular program but only saying (metatheoretically?) that one exists.
13:49:49 <Taneb> There are theorems outside ZFC. We can construct a turing machine that it halts iff one such theorem is true.
13:51:15 <cpressey> I'm having trouble finding the paper but I wouldn't be surprised if 5 bits was all you could get so, OK, I withdraw any implication I might have made that you can get an arbitrary precision that you ask for in that case.
13:51:29 <cpressey> That wasn't exactly what I was trying to drive at in any case.
13:52:21 <cpressey> Any function that produces a finite approximation of anything will of course terminate always. That's not what we're talking about when we talk about computable reals. We're distinguishing them from uncomputable reals, ones that no TM can produce.
13:53:19 <shachaf> cpressey: The point is that it can produce approximations to any precision you ask.
13:53:34 <shachaf> An infinite stream of bits can be represented as a function : N -> 2 that always halts in the same way.
13:54:58 -!- ais523 has joined.
13:55:04 <cpressey> Okay. I see it differently, in a way that has nothing to do with approximations.
13:55:46 <shachaf> I don't think the way you see it really matters because however you construct the computable reals they come out the same.
13:55:49 <shachaf> How do you like representing them?
13:55:50 <ais523> cpressey: assuming you can't append to the program faster than 1 instruction per instruction, your multiplicatively growing language would probably want lots of imps to work
13:56:11 <ais523> (an imp is an instruction that adds a copy of itself to the running program; this is Core Wars terminology but could generalise to other languages)
13:56:26 <ais523> the imps are more useful than no-ops because they tend to multiply, whereas no-ops just sit there
13:57:38 <cpressey> shachaf: How do I like representing a computable real? With the Turing machine that writes it to its tape, I suppose.
13:58:32 <cpressey> There's a TM that writes pi to its tape, there's a TM that writes 1 to its tape, there's a TM that writes e to its tape, and so forth, for any computable real you can pick. Would you agree?
13:58:36 <ais523> <cpressey> "A Turing-complete language that admits a quine also admits a way to build a no-op" -- I wonder if that's true? ← what about a language where all commands echo when run? quining is trivial, no-ops don't exist
13:58:51 <shachaf> I don't know what you mean by writing a number to its tape, so maybe I agree.
13:59:26 -!- ais523 has quit (Client Quit).
13:59:38 -!- ais523 has joined.
14:00:08 <cpressey> Turing machines write symbols on their tapes. Suppose the alphabet of symbols is "0123456789.". Then there's a TM that writes "3.14159..." on its tape, where "..." is standing in for the rest of pi.
14:00:44 <cpressey> Decimal is of course not necessary, but it's the base I tend to use the most in my daily like.
14:01:14 <shachaf> Well, if you want addition to be computable.
14:01:29 <ais523> I believe you can use bases which have redundant representations
14:01:33 <ais523> e.g. binary with digits 0, 1, 2
14:01:58 <ais523> the problem with using a traditional base (say decimal) is that you might end up with a computable number that happens to be a terminating decimal but you can't prove it
14:02:03 <cpressey> I don't care about the base. I'm trying to communicate the general definition.
14:02:44 <ais523> https://en.wikipedia.org/wiki/Richardson%27s_theorem is the relevant theorem
14:02:46 <shachaf> Well, maybe the thing ais523 said works, I'm not sure.
14:03:15 <ais523> shachaf: basically, the thing you can't do with computable reals is determine for certain whether two things that are actually equal happen to be <= or >= each other
14:03:21 <ais523> if two things are actually not equal, you can tell them apart
14:03:31 <shachaf> ais523: You can't determine for certain *anything* about computable reals.
14:03:37 <shachaf> That's the "Rice's theorem for computable reals" above.
14:03:59 <shachaf> Oh, you mean determine for certain in the weaker sense of semidecidability, never mind.
14:04:02 <ais523> shachaf: with the definitions I'm aware of, a < b is semi-decidable: it's always decidable if it happens to be true
14:04:09 <ais523> but might not be decidable if it happens to be false
14:04:26 <shachaf> cpressey: You certainly want addition to be computable. Say I add "0.666..." and "0.333...". What should the answer be?
14:04:50 <ais523> this means that a general "base" representation of a computable real you use has to be one with semi-decidable equality, e.g. in hyperbinary, 022222… and 10000… might or might not be equal
14:04:51 <cpressey> shachaf: Did I claim computable reals can be compared to each other, or added to each other?
14:05:12 <shachaf> Maybe not, but then you're wildly deviating from anything anyone calls the computable reals.
14:05:18 <ais523> cpressey: the ability to produce a base-N expansion (for any N) implies the abilty to compare
14:05:36 <shachaf> You *can* compare decimal expansions, that's exacty the problem.
14:05:59 <ais523> e.g. in the case of pi, you need to compare to 3.1415 and 3.1416 to determine that the fourth digit after the decimal point is a 5
14:07:02 <shachaf> I guess I should ask what you mean by the reals in the first place.
14:07:22 <shachaf> Presumably you don't construct the reals in maths as decimal expansions but as Cauchy sequences or Dedekind cuts or something.
14:09:21 <shachaf> You can presumbly construct the reals as equivalence classes of decimal expansions.
14:09:32 <cpressey> ais523: How do you figure that implication? It's not so much that the TM "does produce" the expansion, as, if the TM were to run forever somehow, it "would produce" it.
14:10:11 <ais523> cpressey: suppose you have a number for which it's undecidable how it compares to 3.1415; the Turing machine won't get past three digits past the decimal point no matter how long you run it
14:10:47 <cpressey> ais523: Where did the undecidable number come from?
14:11:04 <cpressey> I thought you were talking about computable numbers
14:11:14 <ais523> cpressey: I thought we were discussing the computable reals; for any rational number there's a computable real number that's equal to it, but undecidably so
14:11:22 <ais523> by Richardson's Theorem, which I linked above
14:12:03 <cpressey> OK, as usual, my brain is too small to follow everything that is going on in one of these conversations.
14:12:36 <cpressey> Fine, I surrender. I only thought this was how computable reals were defined, because it's how I recall them being defined in Turing's original paper.
14:12:43 <cpressey> But I might be mis-remembering how he defined them.
14:13:28 <cpressey> If decimal (etc) expansions don't work, pick some expansion that does work. Does any expansion work?
14:13:46 <cpressey> If there is one, make a TM that writes all the parts of it onto its tape, "forever".
14:14:39 <shachaf> The point about 0.666... + 0.333... is that when you see the trillionth digit you might have to change your mind about the first digit.
14:14:46 <ais523> hyperbinary is the most common expansion that works
14:14:51 <shachaf> Because the answer might be either 0.999...8 or 1.000...1
14:15:05 <cpressey> shachaf: Sure, the TM might have to revise its tape, all the way back to the beginning.
14:15:10 <arseniiv> AFAIR there are several computable real definitions: weaker ones, stronger ones
14:15:14 <shachaf> Any representation of the computable reals might have to change its mind arbitrarily far in.
14:15:25 <ais523> arseniiv: that doesn't surprise me
14:15:29 <shachaf> That's why I talked about finite approximations.
14:16:04 <cpressey> I'm not interested in approximations and I don't think you need to invoke them to talk about the objects themselves.
14:16:11 <arseniiv> so some phenomena may exist only for those sufficiently weak/strong
14:16:18 <shachaf> cpressey: But Cauchy sequences are sequences of approximations.
14:16:38 <shachaf> All I'm talking about here is a particular kind of Cauchy sequence.
14:17:00 <ais523> fwiw, Wikipedia seems to agree with cpressey's definition of computable reals
14:17:23 <ais523> in the original definition by Minsky
14:17:41 <ais523> but says that that definition was since found to be flawed
14:18:08 <ais523> there's a section discussing the difference: https://en.wikipedia.org/wiki/Rounding#Table-maker's_dilemma
14:19:17 <cpressey> This is all somewhat related to something I thought of recently: Consider the computable, infinite initial GoL configurations. Some, like "infinite barberpole" or "empty space" can be simulated by a TM; others can't even though they are computable.
14:19:33 <cpressey> The latter relates to "Rice's theorem for computable reals".
14:19:37 <cpressey> There is no approximation going on here.
14:20:23 <cpressey> Er well, I should say, you could probably try to "approximately evolve" a GoL form.
14:20:24 <ais523> to me it's not obvious that a TM can't simulate all computable GoL configurations: can't it compute the value of any given cell after n steps via computing the initial state of the (2n+1)×(2n+1) neighbourhood around it and simulating that?
14:20:31 <ais523> I'm not sure on this, though
14:20:37 <cpressey> You might be even be able to get more than 5 bits of precision out of it, who knows.
14:21:11 <ais523> shachaf: re the 5 bits thing: do you know what the smallest/simplest program is for which it isn't known whether or not it halts?
14:21:22 <ais523> I guess in some mathematical formalization
14:21:32 <shachaf> ais523: BB(5) is unknown, right?
14:21:35 <ais523> we ran that competition at CGCC and I'm currently winning with a 3-byte Brachylog program
14:21:41 <ais523> shachaf: that sounds about right
14:21:43 <cpressey> ais523: Every column of the GoL playfield could be a different irrational number. Every cell needs to be evolved to the next state. The effects of all the cells propogate at the speed of light. I don't think a TM can do all that.
14:22:10 <cpressey> "different irrational number" = infinitely tall binary expansion of such, in dead/alive cells, of course
14:22:19 <ais523> cpressey: it can compute the value of any specific cell after any specific number of steps
14:22:24 <shachaf> https://en.wikipedia.org/wiki/Busy_Beaver_game#Exact_values_and_lower_bounds
14:22:25 <ais523> perhaps you're using a different definition?
14:22:55 <cpressey> ais523: Maybe I don't know what I'm talking about.
14:23:44 <shachaf> I think thinking of the reals as infinite sequences of digits is a very common computer scientist thing to do.
14:23:51 <shachaf> And I think it's really pretty wrong.
14:23:52 <ais523> it's interesting… a TM seems incapable of holding "the whole thing" in its memory at any given time, but for any concrete question you have about a particular cell and a particular time, the TM can answer it
14:24:14 <ais523> simply by computing only the relevant parts and discarding all the data it doesn't need
14:24:36 <ais523> this is due to the speed-of-light issues: in a language like RUBE you couldn't do it because data transmission can be arbitrarily fast there
14:25:01 <shachaf> In what sense is that not holding "the whole thing" in memory?
14:25:01 <shachaf> I guess because you depend on the oracle?
14:25:58 <ais523> much of the information about the state of the GoL automation is never computed
14:26:57 <shachaf> Sure, but so what? If a program computes an infinite sequence of bits, it doesn't hold "the whole thing" in memory, but it can answer questions about any particular bit.
14:27:22 <shachaf> I guess the speed of light thing makes it slightly different.
14:27:31 <shachaf> This is the same trick that Hashlife uses.
14:28:00 <cpressey> ais523: There does seem to be an inherent slowdown at least; every time you need some information about a cell you haven't computed yet, you need to simulate its entire history so that you know for sure what it is
14:29:00 <ais523> actually this is one of the main reasons I don't like Turing machines as the standard basis of computation
14:29:10 <ais523> they have inherent slowdowns in a weird and artificial-feeling way
14:29:39 <ais523> I prefer counter machines because they are at least consistently slow, which feels more natural than Turing machines being slow at some things and fast at others
14:31:41 <imode> what about queue automata?
14:31:49 <cpressey> I have a hard time believing simulating such a GoL playfield on a counter machine would not also have the same slowdown
14:32:10 <imode> TMs but without the need for data shifting.
14:32:16 <ais523> cpressey: it does, probably worse
14:32:30 <ais523> my complaints about TMs aren't that the slowdown exists, but that it's applied inconsistently
14:36:22 <cpressey> Still, say there is some expansion of a real that a TM can write to a tape. A real is computable if some TM writes its expansion to its tape "eventually". Then: if A and B are computable reals, then why is A + B not a computable real?
14:36:41 <cpressey> A + B will also be written "eventually"
14:36:56 <shachaf> What's your answer to my 0.666... + 0.333... question?
14:37:35 <cpressey> That if you have a TM computing 0.666... and a TM computing 0.333... you can make a TM that computes 0.666... + 0.333 ?
14:37:42 <shachaf> Oh, wait, you said something I didn't expect, which is that a program can change its mind and erase digits after it writes them.
14:37:51 <cpressey> I missed the final ellipsis there
14:37:59 <shachaf> I thought the output was append-only.
14:38:13 <ais523> shachaf: hmm, I think that works
14:38:14 <shachaf> If it's not then these things don't seem useful.
14:38:38 <ais523> it raises some interesting philosophical problems, though
14:38:50 <ais523> shachaf: being able to rewrite your output so far, when outputting a computable real as decimal
14:39:00 <imode> "other GoL configurations can't be computed by a TM" <-- why is this.
14:39:18 <ais523> it's like a halting tester that outputs "doesn't halt", runs the program it's testing, and if it halts, erases the "doesn't halt" and outputs "halts" instead
14:39:38 <cpressey> imode: it's apparently not true, I was wrong
14:40:15 <shachaf> ais523: Hmm, this is a lot like call/cc.
14:40:26 <shachaf> Which makes sense becuase using call/cc you can decide anything.
14:40:31 <imode> how are counter machines > TMs.
14:41:31 <ais523> TMs effectively give you access to two stacks, where pushing on one pops the other and vice versa
14:41:36 <ais523> some problems map neatly onto that model, some don't
14:42:11 <cpressey> I'm also not sure how to reconcile the infinite GoL playfield thing with shachaf's "Rice's theorem for the computable reals" though.
14:42:22 <shachaf> cpressey: I don't see the connection?
14:42:29 <imode> cpressey: assume you only have to consider sparse cells.
14:42:30 <ais523> a good example is string find-and-replace: on a TM that operation is fast if the replacement string is no longer than the search string, slow if it's longer
14:42:35 <cpressey> shachaf: Well the playfield is literally filled with computable reals
14:42:36 <shachaf> cpressey: To be clear, "Rice's theorem for infinite sequences of bits" doesn't hold.
14:42:47 <shachaf> Plenty of things about infinite sequences of bits are decidable, like "is the first bit 0?".
14:42:47 <imode> ais523: that makes sense, also why I like queue automata vs. TMs.
14:42:51 <ais523> actually I think it might be slow if the replacement string is shorter, too
14:43:01 <imode> yeah because you need to shift data left and right.
14:43:12 <ais523> with most models, the search-and-replace is the same speed regardless of the relation in length between the search and replacement strings
14:43:27 <imode> even with counter machines? how is that possible?
14:44:09 <ais523> with counter machines the computational complexity is pretty horrible but it's the same in both cases
14:44:10 <cpressey> shachaf: even if I define my infinite sequences of bits as being binary expansions of irrational numbers?
14:44:19 <ais523> I can't remember whether it's O(n²) or O(n³)
14:44:52 <shachaf> cpressey: You mean real numbers?
14:45:03 <shachaf> I don't actually understand what you mean.
14:45:19 <shachaf> 0.111... = 1.000..., as binary expansions.
14:45:25 <shachaf> But they're different as sequences of bits.
14:45:32 <cpressey> shachaf: Well I said "irrational numbers", I'll let you figure out if that means "real numbers"
14:45:48 <cpressey> Maybe I was talking about the irrational integers.
14:45:57 <shachaf> cpressey: I assumed you'd treat "000..." as a rational number, but now I'm not sure what you mean.
14:46:12 <shachaf> "Rice's theorem for the irrational numbers [only, not including the rationals]" also doesn't hold.
14:46:55 <ais523> shachaf: beause the undecidable cases are actually rational, you just don't know it?
14:47:40 <cpressey> shachaf: There is a number we call pi. You can write out a binary expansion of pi.
14:47:54 <cpressey> Well, not *you* you, but you know what I mean.
14:48:14 <arseniiv> oh, I was meant to say “register machines ftw”, not counter machines
14:48:25 <imode> what bothers me about counter machines is that at a glance, they seem actually practical. you don't have to construct numbers out of symbols, you just _have_ them and can do arithmetic. but in order to do anything useful, you need to construct data structures using compounding arithmetic ops and... ugh.
14:48:50 <arseniiv> I like that one can extend register machine definition so that registers hold values of any simple inductive type
14:49:03 <ais523> arseniiv: I'm not automatically opposed to register machines but think they can be awkward to define
14:49:14 <arseniiv> like binary strings instead of naturals
14:49:40 <shachaf> ais523: I'm not sure that's what I mean?
14:49:51 <shachaf> ais523: I would say it's because the Baire space is totally disconnected.
14:50:08 <shachaf> cpressey: Yes, I agree that I can write out a binary expansion of pi.
14:50:39 <imode> is there any way to perform general computation on counter machines outside of constructing some kind of linear tape.
14:50:48 <arseniiv> (I should read on counter machines vs. register ones, I seem to forget what the difference was)
14:53:18 <cpressey> OK, well, I think I see the reconciliation now. The TM simulating the infinite GoL form, is at every step working on a finite segment of the thing.
14:53:22 <arseniiv> hm maybe I didn’t want to say “register machines…” after all. I meant a machine with type constructors and “conditional-jump destructor” as operations
14:54:50 <imode> yeah if there were infinitely active cells in some kind of pattern, the GoL wouldn't even update.
14:54:56 <arseniiv> so my flavor of Minsky machine would have an additional CLR op, corresponding to Z constructor. We can omit it because it’s the only nullary constructor, for a type with more than one nullary constructor we can’t
14:57:11 -!- nfd9001 has quit (Ping timeout: 250 seconds).
14:57:20 <ais523> arseniiv: I take it these are recursive types? (otherwise it's hard to see how it ends up TC)
14:57:25 <arseniiv> <imode> is there any way to perform general computation on counter machines outside of constructing some kind of linear tape. => for my kind of machine for type Str = Empty | O Str | I Str, we can effectively have as many stacks of bits as we wish, I think it’s better than a tape
14:57:29 <ais523> I like that formalization
14:57:54 <ais523> it's basically what I used to prove the subset of JavaScript which uses only the characters +[]=` as Turing-complete
14:58:11 <arseniiv> (thanks, I like it too, it seems pretty neat and concise)
14:58:27 <ais523> I'm not sure if it has a name
14:58:29 <imode> wait, as many stacks of bits... 1's and 0's, or just unary.
14:58:49 <imode> what machine are we talking about here. INC/JZDEC?
14:58:57 <arseniiv> (though it’s only concise when we have recursive types defined already; I don’t know how to define them quickly)
15:00:10 <imode> like what I mean by "general computation" is more about convenience than anything. you can build up to random access memory with a TM.
15:00:37 <imode> if you're just using a counter machine as a TM or a 2-stack PDA... what's the point.
15:00:43 <shachaf> cpressey: I don't think that's where th confusion is.
15:00:44 <imode> apart from knowing you can/speed concerns.
15:00:57 <arseniiv> imode: no, this machine would have ops [CLR, redundant], APPEND0, APPEND1, “JEMPTYCASE” which jumps to three different places in case of "", in case of s + "0" and in case of s + "1" and truncates the value to s in the last two cases
15:01:25 <shachaf> cpressey: But it's not quite clear to me. The main point I was making was to distinguish bit streams from real numbers.
15:01:50 <arseniiv> also there is an accompanying recursive function formalism which also can be extended to work with values of an arbitrary recursive type
15:02:08 <cpressey> shachaf: What properties does a real number have that a bitstream derived from that real number does not have?
15:02:20 <shachaf> cpressey: Oh, I guess I can say that I want this property: The real number is the limit of a sequence, and the sequence is what you write down.
15:02:29 <cpressey> Though, I somewhat object to "stream"
15:02:34 <shachaf> That means you can't arbitrarily change the sequence.
15:02:56 <arseniiv> https://esolangs.org/wiki/YEOOIIOOIOA is based on the rec. fun. formalism corresponding to the machine defined above
15:03:05 <shachaf> cpressey: I'm a bit confused by that question. A real number is a completely different thing from an encoding of that number.
15:03:17 <imode> arseniiv: then you're not talking about the same machine I am.
15:03:21 <shachaf> What property does a partial function have that a Turing machine that computes that function does not have?
15:04:47 <cpressey> shachaf: I've never seen a real number, and I've never seen an infinite sequence of bits either, so really, I can't say.
15:05:03 -!- sleepnap has joined.
15:05:27 <cpressey> I've always thought there was a certain amount of irony in the word "real" being applied to them, tbh
15:05:28 <shachaf> There are two levels of encoding here.
15:06:32 <imode> arseniiv: a counter machine on the order of INC and JZDEC.
15:06:36 <imode> that's what I'm talking about.
15:09:29 <arseniiv> <imode> if you're just using a counter machine as a TM or a 2-stack PDA... what's the point. => oh but we can use a more complicated type, like lists of lists, and index into those lists in a linear time, or maybe binary trees, and index them even more efficiently
15:10:04 <arseniiv> <imode> arseniiv: then you're not talking about the same machine I am. => yes
15:11:08 <arseniiv> imode: though IDK the usual machine you meant seems nice to me too
15:12:28 <arseniiv> not because it implements things in a simple manner, but e. g. because these machines compose nicer than TMs
15:13:13 -!- imode has quit (Ping timeout: 265 seconds).
15:13:28 <shachaf> But I still don't understand your statement.
15:13:50 <Taneb> I rarely understand anything
15:14:25 -!- xkapastel has quit (Quit: Connection closed for inactivity).
15:16:40 <arseniiv> I like thinking of a kind of computable reals where they are r: N → Q × Q where fst r(i) < snd r(i) and fst r(i) < fst r(i+1) and snd r(i) > snd r(i+1), though IIRC it’s not the strongest definition
15:19:34 <shachaf> Don't you need something to constrain the rate of convergence?
15:19:38 <arseniiv> ah, the interval lengths should also decrease geometrically
15:19:56 <arseniiv> yes, I opened the page ais523 mentioned
15:22:43 <shachaf> Did you know you can sort a list of computable reals (or infinite sequences of bits)?
15:23:41 <ais523> how do you sort an infinite sequence that starts with 1s forever, but might have a 0 somewhere down the line?
15:23:54 <ais523> oh, finite list, each element is infinite
15:24:19 <ais523> that's sort-of a trick question because you can output the sorted finite list, but you can't identify which element of the sorted list corresponds to which element of the original
15:24:36 <Taneb> shachaf: I did know that! I think because you told me at some point (maybe you tweeted about it)
15:24:56 <shachaf> Until I heard of this, I thought of sorting algorithms as extracting a permutation from their input and applying it.
15:25:31 <shachaf> But here you can't extract a single bit of order information from the input and you can still sort it (extensionally, not intensionally).
15:25:48 <ais523> gravity sort is a good example of a sorting algorithm that doesn't feel like extracting a permutation
15:26:48 <ais523> that isn't a comparison sort though, you need to ine
15:26:54 <shachaf> I guess strictly speaking this isn't a comparison sort. But until I heard about this I thought of sorting networks as comparison sorts.
15:26:55 <ais523> *interleave the comparisons for it to work
15:31:44 -!- nfd9001 has joined.
15:35:52 -!- imode has joined.
15:36:10 <imode> arseniiv: you mentioned that counter machines 1. compose well and 2. give you access to lists, etc.
15:36:15 <cpressey> "We shall avoid confusion by speaking more often of computable sequences than of computable numbers." - Turing 1936
15:36:18 <imode> how is that possible with only counters? some kind of arithmetic encoding?
15:38:08 <imode> it requires a large amount of memory.
15:38:35 <imode> large numbers, rather.
15:39:03 <cpressey> Looking at the paper again, I don't think I was misremembering it. He argues that some infinite sequences of 0's and 1's cannot come from any Turing machine. You can go further and put a "." in front of that and call it a "real number" if you like.
15:40:26 -!- nfd9001 has quit (Ping timeout: 240 seconds).
15:40:54 <imode> cpressey: I take it you're a finitist, or an ultra-finitist.
15:41:42 <shachaf> cpressey: I mean, certainly if you write "0." followed by any infinite sequence of bits, that names a real number.
15:41:58 <cpressey> imode: I find the concept of completed infinity rather suspect, while I find the concept of potential infinity invaluable. If you know a good label for that, please do let me know.
15:42:22 <imode> probably somewhere around finitist.
15:44:50 <cpressey> I think I'd call myself a formalist before I'd call myself a finitist. Clearly, you can manipulate strings of symbols representing propositions about large cardinals, if you like...
15:46:29 <imode> that reminds me of another reason why I don't like counter machines: they require giant numbers to get anything done.
15:47:44 <arseniiv> imode: they compose well in any case, but give access to lists only when we use a sufficiently complex recursive type for their values, unfortunately
15:47:44 <arseniiv> about composing: if we have machines A1, …, An, B that implement functions f1, …, fn, g, we can implement g ∘ (f1, …, fn) by a big machine which has all the counters of A1, …, An, B, and sequentially executes commands for A1, …, An, B with minor modifications (when Ai halts, we start A(i+1), and we copy from output registers of all Ai to input registers of B before starting it)
15:47:44 <arseniiv> I think it’s clearer than TMs as the tape corresponds to inputs and outputs not in that a straight way
15:49:33 -!- andrewtheircer_ has joined.
15:49:45 <imode> what do you mean "sufficiently complex recursive type".
15:49:51 <imode> we're just talking about positive integers here, yeah.
15:51:55 <arseniiv> imode: for Minsky machine, yes, but when I talked about lists and indexing, I meant the extension :D
15:52:21 <imode> wasn't there a way to encode pairs arithmetically?
15:53:22 <imode> it requires absurdly large numbers for any suitably sized pairs.
15:53:33 <arseniiv> but as we want to not make huge numbers and long computations, the more complex type seems more natural
15:53:58 <imode> by the by, you can do that composition easily with TMs as well.
15:54:22 <imode> I don't know if you can compose wang B-machines in the same manner because of the way you execute instructions.
15:54:34 <imode> but TMs are literally just wiring state machines up correctly.
15:54:51 <arseniiv> so say you have a type Tree = Leaf | Branch Tree Tree, you can encode with them a nice data store as well as indexes to that store, and work with all that more or less easy
15:56:04 <arseniiv> <imode> by the by, you can do that composition easily with TMs as well. => when I last thought about that, it seemed there should be much of gluing needed, isn’t that so?
15:56:18 <imode> not really. you can concatenate machines to do arbitrary things.
15:56:42 <imode> one machine's halt state feeds into another machine's start state, and you can build small atomic machines that move the tape left or right unconditionally.
15:56:51 <imode> and do stuff like add numbers, etc.
15:56:52 <arseniiv> even with multiple inputs and outputs on a tape?
15:56:59 <imode> yeah. that's not really a problem.
15:57:22 -!- ais523 has quit (Quit: quit).
15:57:42 <imode> still not that much of a problem, you can build shuffling machines.
15:57:47 -!- cpressey has quit (Quit: A la prochaine.).
15:57:50 <imode> and then compose them together. it's literally just wiring.
15:58:25 <arseniiv> imode: and with counter machines, you don’t need any shuffling at all :P
15:59:01 <imode> if you're transforming input into output, you can segment the tape into two, the former being your "read" space, the latter being your "write" space.
15:59:17 <imode> the former segment can store your input, the latter segment can store your output.
15:59:27 <imode> you can build machines to read/copy input elements to the work tape.
16:00:12 <arseniiv> IDK, they are more transparent to me
16:00:12 <arseniiv> <imode> define shuffling. => moving substrings not containing an empty symbol from one place of the tape to the other place so that order of these substrings changes, I think that’ll do
16:00:31 <imode> not a problem once you have a machine built that does just that.
16:01:05 <imode> basically "read all symbols until end of 'token' marker, copy them to the place the cursor was previously.
16:01:20 <arseniiv> of course, but we need to discover that machine first
16:01:44 <imode> it's not hard to create one...
16:01:48 <arseniiv> and it seems quite tedious to write that machine out
16:01:59 <imode> what do you mean tedious.
16:02:07 <imode> you can build it from things like search machines.
16:02:32 <arseniiv> I mean, it’ll take me a while, I’ll need to write search machines out too
16:02:35 <imode> "seek to read segment, seek to Nth symbol in read segment"
16:02:40 <imode> here, I have some literature for you.
16:03:23 <imode> let's see if I can find it..
16:03:24 <arseniiv> I’m sure it’s possible and I’m almost sure it would seem natural when you saw all that, but…
16:03:47 <arseniiv> also do you think composing Markov algorithms is easy too?
16:04:27 <imode> that I experimented with. it was a little more flexible because you could always do things like define separate symbol spaces via rule prefixes.
16:04:29 <imode> https://web.stanford.edu/class/archive/cs/cs103/cs103.1132/lectures/19/Small19.pdf
16:04:34 <imode> great set of slides.
16:05:18 <imode> goes all the way up to a reasonably usable programming language.
16:05:25 <imode> which eventually gets reduced down to a native state form.
16:06:57 <imode> you'd do this with a counter machine anyway.
16:07:28 <arseniiv> . o O ( even these slides say “Turing machines are hard” almost at the start )
16:08:00 -!- andrewtheircer_ has quit (Remote host closed the connection).
16:08:56 <arseniiv> imode: ah, a language compiling into them, yeah, I did that with something C-like, with constructs like `local <names> { <code> }` to declare fresh registers
16:09:00 <imode> TMs are hard because of the unweildy nature (at a glance) of state machines. it's an unstructured control graph, with cycles and everything. but as with everything, you break it down into small re-usable chunks.
16:09:00 <Taneb> As opposed to lambda calculus, which is squishy
16:09:23 <Taneb> Complete opposite end of the Moh scale
16:09:42 <Taneb> Oh, apparently it's Mohs, not Moh's
16:12:33 <imode> arseniiv: wang's B-machines are pretty much a prelude to things like brainfuck.
16:12:41 <imode> "atomization" was the first step.
16:21:57 <imode> you need to do this in counter machines as well. really in any machine model..
16:22:12 <imode> in order to get to something halfway usable.
16:31:31 -!- MDude has quit (Ping timeout: 265 seconds).
16:41:53 -!- Lord_of_Life_ has joined.
16:44:34 -!- Lord_of_Life has quit (Ping timeout: 265 seconds).
16:44:47 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
16:51:12 -!- FreeFull has joined.
16:59:12 -!- sleepnap has left.
16:59:16 <imode> machines that manipulate nonlinear media are difficult to internalize.
17:00:29 <imode> assume a TM's tape was suddenly replaced with an undirected, unlabeled graph. how would it navigate?
17:03:04 <arseniiv> imode: is there hope at all? I don’t see
17:04:12 <imode> I have no idea. you can highlight the current vertex, but there's little else you can do off the top of my head, unless you have a method of storing the path.
17:04:21 <arseniiv> despite unlabeled at the start, can we label vertices and edges as we go?
17:04:53 <arseniiv> yeah, it would be in a sense equivalent to store several paths
17:05:38 <imode> what would your condition even be.
17:05:59 <arseniiv> though as we don’t know where to go, it’s still not obvious what we could do except maybe traverse one of the connected components
17:11:11 <imode> you could say "in state X, if you're not at a vertex you've previously visited, do Y and go to state Z, otherwise go to state W."
17:11:49 <imode> you could use loops of vertices as labels.
17:11:59 <imode> and the length of those loops as differentiating labels.
17:12:23 <arseniiv> hm how would it label us any particular vertex?
17:12:56 <imode> you can construct "macro-vertices".
17:13:14 <arseniiv> are we able to tweak the graph?
17:13:19 <shachaf> Taneb: I think I did twit it. But I also learned about it from a twit.
17:16:01 <arseniiv> imode: add/remove vertices or edges, for example
17:17:39 <arseniiv> and make loops in place of a vertex, then
17:18:23 <arseniiv> though I’m not sure at all it’s possible with only several simple operations
17:18:30 <imode> this is kind of why I think linear media is better than nonlinear media.
17:18:52 <imode> what's more universal and basic than linear tape.
17:19:35 <imode> maybe unordered collections of objects... but there's not much there.
17:21:07 <arseniiv> maybe the linear tape is as good as N or Z, for respective kinds of unboundedness
17:21:22 <arseniiv> I mean, is good for precisely same reasons
17:22:45 <arseniiv> hm imagine a data store indexed by hereditarily finite sets
17:23:45 -!- j-bot has joined.
17:24:07 <arseniiv> as they can be canonically ordered, it’s quite tempting
17:25:30 <arseniiv> we can go to the least element, the greatest element, or we can go to powerset or s ↦ {s}
17:25:51 <arseniiv> first two. of course, not for ∅
17:26:54 <arseniiv> could we traverse all the elements of some known set, though?..
17:27:27 <arseniiv> we stand at that set, then we go to the least element, then we have forgotten what we were to traverse
17:27:37 -!- MDude has joined.
17:28:29 <arseniiv> ah, we could go to the set not containing the least/greatest element. Then we could eat all them away sequentially
17:28:46 <arseniiv> though we won’t be able to extract what we’ve eaten
17:33:12 <esowiki> [[Semantic Brain]] M https://esolangs.org/w/index.php?diff=66326&oldid=51670 * SilverWingedSeraph * (+8) Fix my name.
17:45:28 <arseniiv> anyway yesterday I recalled values with statically checked states because of the following problem: you want to write a thing that computes some value or a more elaborate value without recomputing what was already computed and without computing what isn’t needed for the level of elaboration asked for by a callee. What syntax would be appropriate to write such a thing and not to have a headache
17:45:28 <arseniiv> the part about not computing what’s not needed can be dealt with using a lazy data structure, but the first part seems unwieldy: imagine it’s less expensive to compute f(a) from g(a) and vice versa than f and g themselves. Then if I want my premature optimization, I need to write something complex, maybe like this for an OOP language:
17:45:28 <arseniiv> class GetFG { A a; FA? fa := null; GA? ga := null; ctor(a) { this.a := a; } fun get_g() { if (ga) return ga; elif (fa) return ga := g_from_f(fa); else return ga := g(a); } /* get_f is likewise */ }
17:45:28 <arseniiv> you can see this is very clumsy
17:45:28 <arseniiv> I thought about extending coroutines with a public API like classes but it seems going nowhere too
17:45:43 <arseniiv> this is too general a question too, though
17:46:36 <arseniiv> maybe it, or some specification of it, has a name?
18:19:48 <esowiki> [[Talk:Quiney]] https://esolangs.org/w/index.php?diff=66327&oldid=46265 * KrystosTheOverlord * (+150)
19:12:32 -!- Hooloovo0 has quit (Quit: Temporarily refracted into a free-standing prism.).
19:14:50 -!- Hooloovo0 has joined.
20:30:47 -!- Phantom_Hoover has joined.
20:33:19 <imode> some guy just tried to sell me on his concatenative language and "hard won ideas of programming language design tried over decades".
20:33:55 <imode> what is it with egos.
20:42:46 <arseniiv> imode: what language, is it well-known?
20:43:03 <imode> it is not. it is not even released. one doubts that it ever will.
20:44:35 <imode> was just having a discussion with him about what I'm trying to look for in a language, and I posted some work in progress examples of mine (one I actually have a C compiler for), and he just kept calling it a tarpit and told me to "readjust my position" or something.
20:44:56 <arseniiv> there are too many dynamically typed concatenative languages, too many stacks they bear with them on us
20:45:38 <imode> sure, it's a previous version (prior to me moving to a queue instead of a stack for the work area).
20:46:21 <arseniiv> readjust your position, don’t use unit tests <backspace backspace>
20:46:45 <imode> he also said "You had everything to gain and you lost it."
20:46:54 <imode> "now you're on the losing side" or whatever.
20:47:03 <imode> like whaaaaaat the fuuuuuck.
20:47:18 <imode> who says things like that.
20:47:40 <arseniiv> there are seven sides but some people think in binary
20:47:59 <imode> gene ray save me now.
20:48:49 <imode> https://hatebin.com/dsijqhwkec the C compiler for the old version, the newest version (using expanded keywords and definitions) is here https://hatebin.com/imhzdlmjba
20:49:37 <imode> gonna be writing a C compiler for the new version in C. it's honestly really trivial and like, nothing to even get into.
20:50:45 <imode> the longer keywords get reduced to single symbols.
20:51:39 <imode> the conversation was interesting in and of itself before everything turned violent. I was trying to figure out how to make a language like this into something like a pointfree prolog.
20:54:48 <arseniiv> imode: pointfree in the usual sense, no explicit arguments? Didn’t see that prolog
20:55:07 <imode> no explicit arguments, no variables.
20:55:21 <imode> yeah, prolog requires variables.
20:55:28 <arseniiv> ah, yes, no variables too. How does it look?
20:55:36 <imode> I have no idea, to be honest.
20:56:09 <imode> I imagine it could be done by pushing symbolic variable names on to the queue/stack.
20:56:27 <imode> and then just passing those around until you hit rock bottom assertions.
20:56:41 <imode> orrrr you don't, and you error out.
20:58:32 <arseniiv> also in light of my remark about static typing now I think about if your language is typable. At least whether one can reason about stack safety / length. I don’t immediately see if `[`, `]` and control things like these can be reasoned about in a simple way
20:59:06 <arseniiv> imode: ah, I meant how its syntax should look like
20:59:17 <imode> ahh, I honestly don't know, that's what we were brainstorming about. :)
20:59:58 <imode> for things like stack/queue effects, you can annotate your source properly, and each annotation specifies part of the larger "compile-time program".
21:00:10 <imode> : factorial ( num -- ) ... ;
21:00:25 <imode> : dup ( any -- any any ) ... ;
21:00:26 <arseniiv> maybe one should draw these programs as tree pictures or like de Brujin indices, but these seem point-bound
21:00:59 <arseniiv> imode: yeah, these simple operations are typable easy, I agree
21:01:13 <imode> this way you can guard against over/underflow, as well as typing.
21:02:03 <arseniiv> I did something like that and even encoded it as Haskell heterogeneous lists with type vars instead of Nil, that is the rest of the stack we conserve
21:02:19 <imode> curry's basis for getting into combinators, IIRC, was to build logical sentences without variables.
21:05:20 <arseniiv> hm, also can I ask lambdabot or someone else to remind me a thing after some time?
21:06:00 <arseniiv> or I need to write a note so I don’t forget to think about `[` and `]`
21:06:29 <int-e> you're on your own
21:07:22 <imode> hahaha. cron job is usually good. :)
21:07:42 <int-e> Oh sure. `at` exists for such purposes.
21:07:49 <imode> fyi, `[` and `]` are 'begin an infinite loop' and 'end an infinite loop'.
21:08:07 <int-e> Delivery may be tricky unless you have local mail set up.
21:08:51 <int-e> . o O ( at midnight kill -9 - 1 )
21:09:22 <int-e> oops, there should be no space between - and 1.
21:09:47 <int-e> Ah I didn't know that `at` had a `teatime` timespec :)
21:10:30 <int-e> "You may also specify midnight, noon, or teatime (4pm)"
21:12:11 <int-e> The real problem with writing notes as reminders is where to put the note that reminds you to read your notes.
21:21:57 <arseniiv> I put them on my precious desk and move them from place to place there
21:22:25 <arseniiv> also there are some notes in a phone app
21:23:58 -!- atslash has quit (Quit: This computer has gone to sleep).
21:26:31 <int-e> arseniiv: do you have categories? "not important" "not right now" "let's do this later"?
21:27:21 <arseniiv> I desire to have them but still don’t
21:27:46 <arseniiv> "not important" "not right now" "let's do this later"? => these are default
21:28:07 <int-e> . o O ( Bitcoin is a very expensive religion. )
21:35:42 <arseniiv> analyst and catalyst walk into a bar
21:48:26 -!- grumble has quit (Quit: Whose thought XML was a good idea in the first place?).
21:49:55 <fizzie> I saw a scientology shop in town yesterday.
21:50:02 -!- grumble has joined.
21:50:08 <fizzie> For some reason the phrase "expensive religion" brought it to mind.
21:50:31 <fizzie> They would've had a free video on Dianetics to view.
22:10:20 <kmc> i wrote a shell script that generates markdown
22:10:28 <kmc> fizzie: there's one just up the street from me
22:10:48 <kmc> and the main one in SF is rather fancy https://www.scientology-sanfrancisco.org/inside-our-church/
22:10:50 <int-e> "We waste NN minutes of your time but we also make you feel like it was a gift so now you a) owe us and b) have to justify spending NN minutes of your time on our ideas"
22:10:56 <kmc> I see them in the subway sometimes marketing their "free stress test"
22:11:05 <kmc> bitch I don't need a stress test I already know I'm stressed
22:11:13 <fizzie> GCC sources have .md files, but they're actually "machine description" files rather than markdown files, but GitHub still attempts to render them as markdown.
22:11:20 <int-e> kmc: Seeing scientology called a church is so unreal :)
22:11:22 <kmc> i see a lot more jehova's witnesses though
22:11:29 <kmc> int-e: eh...
22:11:39 <fizzie> I assume the London one was a much less fancy, although obviously I only saw the front.
22:11:45 <kmc> many churches are a bit nutty
22:11:52 <kmc> the only difference between a religion and a cult is popularity
22:11:55 <int-e> kmc: They tried that in Germany too. The courts looked at them and said, no, you're not a church. And that was it. :)
22:12:08 <kmc> sure, cults tend to be abusive, but a lot of things generally recognized as religions are also abusive
22:12:23 <int-e> kmc: It's just another difference between the US and here.
22:12:32 <kmc> well, your government is more willing to draw the line
22:12:35 <kmc> it's still an arbitrary line
22:12:47 <kmc> freedom of religion is strong in the USA
22:12:50 <kmc> for good or for ill
22:13:02 <kmc> I really like the satanists, because they troll the fundamentalist christians
22:13:32 <kmc> if a public school has a christian club they'll try to set up a satanism club
22:13:41 <fizzie> https://goo.gl/maps/xUPRwEjfkpdei2v69 I guess that's pretty fancy.
22:13:43 <kmc> when some fundies put a 10 commandments sculpture on the courthouse lawn, the satanists responded with a huge statue of Baphomet
22:14:09 <kmc> fizzie: have you watched the British sitcom "Peep Show"?
22:14:19 <fizzie> They've got a different fancier place that's the actual church, that's just a "life improvement center".
22:14:36 <kmc> it might be the funniest tv show i've ever seen. certainly in the top few
22:14:47 <kmc> anywhere, there's a whole episode where one of the characters joins the "New Wellness Center"
22:16:37 <kmc> "It's based on the seven sacred truths from the golden tablets found in the asteroid which crashed in Siberia in 1911. It's a really great book. You'd love the chapter on orgones. Orgones are the invisible molecules of universal life energy which govern our moods and our actions. Negatives orgones are the source of all the problems in the world."
22:16:42 <kmc> "And you believe that?"
22:16:44 <kmc> "Well, how do you explain all the problems in the world?"
22:16:47 <kmc> "I mean, I couldn't just There are so many historical and economic factors—"
22:16:49 <kmc> "Exactly! You haven't got a clue."
22:18:04 <kmc> the Bay Area is still a leading exporter of cults
22:18:10 <kmc> People's Temple being the most famous one
22:18:25 <kmc> but more recently we have the Berkeley Rationalists
22:18:42 <kmc> and OneTaste which is a sort of startup sex cult / yuppie lifestyle brand
22:21:05 <kmc> fun fact: People's Temple ran a ham radio station at Jonestown, which they used to communicate with the organization back in SF, and they would also acknowledge contacts with whoever was on the airwaves
22:21:39 <kmc> it was a prized contact because people collect countries and there were not many stations in Guyana at that time (probably still the case)
22:21:47 -!- MDude has quit (Ping timeout: 276 seconds).
22:21:56 <kmc> http://hamgallery.com/qsl/country/Guyana/wb6mid3_b.jpg https://jonestown.sdsu.edu/wp-content/uploads/2013/07/fccDieckman.jpg
22:23:30 <kmc> 1978 was a crazy year for San Francisco
22:24:19 <kmc> 918 people died in Jonestown, many of whom had family and friends in San Francisco, including our congressional representative (who also just happened to be a vocal critic of the CIA)
22:25:14 <kmc> then 9 days later, the mayor and a city supervisor (the first openly gay elected official in california history) were assassinated by another city supervisor
22:25:36 <shachaf> kmc: The original motivation was for RAII-like things.
22:25:50 <kmc> the only assassination of a major US city mayor ever, i believe
22:25:53 <shachaf> kmc: Python's "with" takes effect for a nested scope, but often you'd want it to take effect for a scope instead.
22:26:00 <shachaf> I mean for the rest of the scope.
22:26:08 <kmc> then riots over the verdict of that trial
22:27:01 <kmc> shachaf: sure
22:27:03 <kmc> makes sense
22:27:08 <kmc> that's kind of like defer
22:29:27 <shachaf> Sure, defer is for the second part.
22:29:45 <shachaf> I think it's reasonable to acquire a lock and release it at the end of a scope.
22:30:01 <shachaf> I just think the RAII approach where you need an object for it is kind of silly.
22:32:04 <kmc> but it's a case of getting a feature for free from another feature (destructors for types with actual content)
22:36:10 <fizzie> Did you intentionally swap channels, or unintentionally?
22:36:32 <fizzie> I spent a while going up the backscroll looking for where that was coming from.
22:40:37 -!- Sgeo has joined.
22:46:16 <int-e> there are other channels?
22:46:30 <int-e> fungot: what shall we do about this blasphemy?
22:46:30 <fungot> int-e: still many evils remained: and, if this were done, my whole duty in this respect he sometimes reminds us of the violent ebbs and flows of public feeling, it seems, however, is what nobody will dispute. the king performs a sacrifice: but the entrails are fnord and from the necessity of watchful preparation and powerful establishment." but still, as far as i am concerned in the public service. he never can show that even u
22:46:42 <shachaf> fizzie: It seemed more ontopic here?
22:46:58 <fungot> Available: agora alice c64 ct darwin discworld enron europarl ff7 fisher fungot homestuck ic irc iwcs jargon lovecraft nethack oots pa qwantz sms speeches* ss wp ukparl youtube
22:47:04 <fungot> Selected style: speeches (misc. speeches from Project Gutenberg)
22:47:26 <fizzie> I don't think I have a list of those speeches anymore.
22:47:28 <imode> fungot: how do we squash the nonbelievers.
22:47:28 <fungot> imode: ladies and gentlemen,--you receive me with so much good has not been refuted by my honourable friend. he calls upon us to raise that united cry which has so excellent a writer would not cease to write. in the next parliament. but, if the country has to pay two millions, it will never apply itself sufficiently to works of that kind deserves our fullest recognition. i recognise to the full the responsibility for it.
22:48:00 <imode> sounds complicated and expensive.
22:56:38 -!- FreeFull has quit.
22:59:09 <kmc> i wanna conquer the world, give all the idiots a brand new religion
23:00:52 <int-e> kmc: will that limit climate change?
23:01:07 <int-e> (I almost wrote "avert" but it's too late for that)
23:26:02 -!- arseniiv has quit (Ping timeout: 246 seconds).
23:36:42 -!- budonyc has joined.
23:39:07 <imode> still have no idea why dup, drop, swap and last are "universal" for queue automata.
23:39:34 <imode> I guess it makes sense.
23:40:05 <imode> dup creates information, drop removes information, swap reorders information, last shifts information around.
23:40:31 <imode> take an element from the rear of the queue and bring it to the front.
23:40:43 <shachaf> Oh, I missed the word "queue".
23:40:43 <imode> 1 2 3 last -> 3 1 2
23:41:20 <shachaf> What's "universal" for stack automata?
23:41:44 <imode> that I am unsure of. probably pick and roll, I guess?
23:41:52 <imode> not really stack ops..
23:42:08 -!- Phantom_Hoover has quit (Read error: Connection reset by peer).
23:42:31 <shachaf> I wonder how this compares to S and K, which also duplicate and delete.
23:42:45 <imode> that's what I'm trying to figure out.
23:42:50 <shachaf> B C K W is more directly a duplicate/delete, thing, I guess.
23:42:54 <imode> S is kind of a compound operation.
23:43:07 <shachaf> C is like swap, K is like drop, W, is like dup
23:44:55 <imode> you may only need dup, drop and swap, now that I think about it. `last` is for convenience.
23:45:10 <imode> rolling the queue can just be : roll dup drop ;
23:45:34 <imode> _provided_ you don't dequeue the top symbol.
23:46:01 <imode> if you do, then you need to do... : roll swap last last swap last ;
23:46:43 <imode> 3 2 1 -> 1 2 3 -> 3 1 2 -> 2 3 1 -> 1 3 2 -> 2 1 3
23:47:22 <kmc> roll puff puff swap
23:49:27 <imode> 'last' is kind of a hack, though. I can build a queue machine that will do it in linear time.
23:58:59 -!- oerjan has joined.