00:02:50 -!- Phantom_Hoover has quit (Remote host closed the connection).
00:03:09 -!- tromp has joined.
00:28:31 -!- Essadon has quit (Quit: Qutting).
00:34:54 -!- Lord_of_Life_ has joined.
00:37:57 -!- Lord_of_Life has quit (Ping timeout: 245 seconds).
00:37:57 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
00:42:38 -!- tromp has quit (Remote host closed the connection).
01:12:29 <oerjan> argh i hate web pages that steal clicks such that you accidentally follow a link when trying to do something else
01:14:03 <kmc> a lot of porn sites do that
01:14:53 <oerjan> this time it was SE's chat archive, of all things
01:15:00 <zzo38> I generally disable scripts and alter CSS if necessary, so mostly is avoiding that; maybe there are other ways to make up the setting for events to control that
01:15:42 <oerjan> it is possible i actually accidentally clicked twice.
01:16:11 <zzo38> (One feature I would like is the ability to replace individual scripts on a webpage with my own versions.)
01:16:14 <oerjan> (i was selecting a link with the right button to copy it, and ended up following it.)
01:16:41 <kmc> I was reading a site that used hot pink text on white background :(
01:16:47 <zzo38> (Including such things as replacing jQuery with my own version on any webpages that use that)
01:16:52 <oerjan> and there are other times i _do_ want the script there, when following quoting links
01:16:53 <kmc> the content was actually quite good and important
01:17:02 <kmc> I fixed it with element inspector
01:17:10 <kmc> but I wonder the best way to link it to other people
01:17:27 <oerjan> kmc: i use that a lot to get rid of annoyingly large horizontal bars
01:17:34 <kmc> I don't know of a way to construct a link with a custom style sheet
01:18:03 <kmc> other than a javascript: url that you have to visit after
01:18:13 <zzo38> I don't know of any way either, but I do often customize CSS of other webpages (although this is usually not needed if the webpage has no CSS at all)
01:18:16 -!- tromp has joined.
01:18:19 <kmc> perhaps I could host a page which shows it in an iframe
01:18:42 <kmc> or just mirror the content and hope to not get in copyright trouble
01:18:56 <kmc> or copy the entire text into my Facebook post when I share it
01:19:08 <kmc> another solution to bad color choices is print to pdf
01:19:44 <zzo38> (I prefer to not set any colours in making webpages, instead using the user settings; unless it needs to have some colours to indicate different kind of stuff)
01:22:52 -!- tromp has quit (Ping timeout: 250 seconds).
01:31:00 <oerjan> hm ais523 has on some occasions on ppcg pointed out that (hindley-milner) typed SKI calculus isn't TC, and you need Y too. but i also seem to recall something about Y _not_ being enough if you don't have arithmetic...
01:32:03 <oerjan> vaguely recalling something about decidable halting problem...
01:35:07 <oerjan> also i cannot seem to google this.
01:48:50 * oerjan should get something to eat before he starts banning people for not answering.
03:06:07 -!- tromp has joined.
03:10:55 -!- tromp has quit (Ping timeout: 246 seconds).
03:20:01 <oerjan> never mind, the thing i was trying to use it for won't work anyway
03:22:02 -!- ATMunn has quit (Quit: lol rip).
04:12:04 -!- oerjan has quit (Quit: Nite).
04:27:17 -!- FreeFull has quit.
05:21:06 <zzo38> I partially implemented a NNTP server software, mainly, because I could not find another one that seemed suitable to my use
05:59:56 <esowiki> [[Ragaraja]] https://esolangs.org/w/index.php?diff=60653&oldid=60587 * Mauriceling * (+307) /* Description of Commands / Instructions */
06:45:00 <esowiki> [[Ragaraja]] https://esolangs.org/w/index.php?diff=60654&oldid=60653 * Mauriceling * (+9077) Added implementation flag
07:44:56 -!- tromp has joined.
07:50:48 -!- S_Gautam has joined.
08:44:32 -!- AnotherTest has joined.
09:42:12 -!- tromp has quit (Remote host closed the connection).
10:12:07 -!- tromp has joined.
10:27:02 <esowiki> [[Ragaraja]] https://esolangs.org/w/index.php?diff=60655&oldid=60654 * Mauriceling * (+160) /* References to Biology */
11:13:21 <esowiki> [[Powder]] https://esolangs.org/w/index.php?diff=60656&oldid=60638 * A * (+219) Add purpose
11:14:15 <esowiki> [[Powder]] https://esolangs.org/w/index.php?diff=60657&oldid=60656 * A * (+3) And sorry for making a small edit
11:26:56 <esowiki> [[Brainfuck implementations]] https://esolangs.org/w/index.php?diff=60658&oldid=59708 * Tromp * (+106) add interpreter written in lambda calculus
11:44:25 -!- ocharles has quit (Ping timeout: 258 seconds).
11:45:25 -!- ocharles has joined.
12:35:29 -!- Lord_of_Life_ has joined.
12:38:34 -!- Lord_of_Life has quit (Ping timeout: 250 seconds).
12:38:34 -!- Lord_of_Life_ has changed nick to Lord_of_Life.
13:19:43 <esowiki> [[A]] N https://esolangs.org/w/index.php?oldid=60659 * Arcorann * (+1749) Created page with "'''A''' is a programming language that uses only the letter A in its source code. Its creation year is uncertain but no later than 2008. == Description == A program with les..."
13:23:04 <esowiki> [[A]] M https://esolangs.org/w/index.php?diff=60660&oldid=60659 * Arcorann * (+11) /* See also */
13:26:48 <esowiki> [[A]] M https://esolangs.org/w/index.php?diff=60661&oldid=60660 * Arcorann * (+28)
13:40:25 -!- S_Gautam has quit (Quit: Connection closed for inactivity).
15:01:13 -!- S_Gautam has joined.
15:01:53 -!- sebbu has quit (Ping timeout: 268 seconds).
15:04:05 -!- AnotherTest has quit (Ping timeout: 250 seconds).
15:08:06 -!- sebbu has joined.
15:33:29 -!- oerjan has joined.
15:37:24 <oerjan> i realized an intuitive argument for why (simply/hindley-milner) typed SKIY isn't TC without infinite "basis" types: without them, the number of functions of every type you can construct is finite, so you can solve the halting problem by explicitly evaluating their CPO denotations.
15:38:20 <oerjan> i still would like to remember the reference someone gave to this before, though.
15:40:59 <rain1> interesting, it's not turing complete but it has programs that diverge?
15:42:17 <oerjan> (which is just f x=f x)
15:42:23 -!- arseniiv has joined.
15:43:04 <int-e> oerjan: R. Statman, "The λY calculus" shows that the word problem is decidable for that calculus.
15:43:58 <oerjan> well that does seem like the same thing.
15:44:26 <oerjan> what i am looking for sounds wearker than that
15:44:43 <int-e> huh, wait, I'm misrepresenting this
15:45:09 <int-e> the halting problem is decidable; the word problem is decidable if Y is restricted to a single type (o -> o) -> o.
15:45:14 <int-e> but not in general.
15:46:03 <int-e> I'm not sure I get the finiteness angle though; even the simply typed lamda calculus has infinitely many inhabitants of (o -> o) -> o -> o.
15:46:26 <Taneb> int-e: it doesn't for a specific o of finite size
15:47:08 <int-e> Taneb: yes it does: all church numerals have that type.
15:47:32 <int-e> oerjan's talking about models.
15:47:34 <oerjan> the church numerals collapse
15:47:45 <int-e> (the "CPO" didn't fully register)
15:48:00 <Taneb> There's, like, three or four functions of type (() -> ()) -> () -> ()
15:48:07 <oerjan> for a particular set, only finitely many of them are unequal.
15:48:58 <int-e> But I'm not sure whether this helps; the calculus operates on terms, and the main problem is distinguishing terms representing _|_ from everything else.
15:49:18 <Taneb> (id, const id, const (const _|_))
15:49:49 <oerjan> int-e: for solving the halting problem, though, all you need is to evaluate with all the free variables = ()
15:50:02 <oerjan> or Bool if you like that better
15:50:30 <int-e> Hmm I need to think about this... it sounds too good to be true.
15:53:08 <Taneb> oerjan: is your "basis type" terminology standard?
15:56:32 <int-e> (Of course my reference has the annoying problem that SKI and lambda calculus are not perfectly aligned.)
16:02:26 <oerjan> Taneb: not that i know of
16:03:24 <oerjan> int-e: denotationally they are, i should think
16:04:06 <oerjan> also i got to thinking about because i had doubts about a proof on PPCG that haskell is TC with just ()=;
16:04:41 <oerjan> i think that fails for this reason
16:08:20 <Taneb> How does that work at all?
16:10:02 <oerjan> you use (======) as identifiers
16:11:49 <kmc> that's cute
16:16:34 -!- b_jonas has joined.
16:24:39 <Taneb> oerjan: could polymorphic recursion help out the proof in this case? And the fact that some terms have more than one type
16:31:35 <arseniiv> on an unrelated subject: I have an idea to make something akin to Metamath but with more structured approach: there would still be metavariables of user-declared sorts, but formulas would be no simple strings, but terms of these sorts, and there would be language support for bound variables. Term constructors would be user-declared, and to declare binders, the language basically contains lambda-calculus, but terms of arbitrary sorts aren’t allowed,
16:31:35 <arseniiv> so I hope their unification will be decidable
16:33:03 <oerjan> Taneb: you need a type signature for polymorphic recursion, although i'm not sure if that's enough for TC-ness
16:34:03 <oerjan> Taneb: i don't think more than one type helps, because you can always duplicated definition to avoid using that.
16:34:36 <Taneb> oerjan: but eg. (===)(====)=(====) has an infinite number of types
16:35:12 <oerjan> yes, but you'll only ever use a finite number when running a program
16:35:38 <oerjan> (ghc defaults types to Any as i recall)
16:35:57 <oerjan> (without polymorphic recursion)
16:38:31 <b_jonas> It should be possible to make it TC by adding a few specific primitives, such as three list primitives and while
16:38:59 <b_jonas> yes, probably even arithmetic and while is enough, as you say
16:39:41 <b_jonas> although while has a generic type
16:40:28 <oerjan> b_jonas: oh hi, that reminds me, you remember the PPCG challenge for making several quines with no characters in common, and how you suggested 3 might be possible in perl? Jo King made such an answer in perl 6 https://codegolf.stackexchange.com/a/181246/
16:41:23 <oerjan> b_jonas: i believe ():;1- is TC
16:41:50 <b_jonas> oerjan: how does that work? how do you make functions?
16:42:23 <b_jonas> I don't see how that works, but that's at least more believable
16:42:57 <b_jonas> you can just make recursive function definitions
16:43:12 <b_jonas> named functions, refering to themselves by name
16:43:17 <b_jonas> like you said above with (===)
16:43:23 <Taneb> Best thing is, you can now comment your code
16:43:28 <oerjan> i've been trying to think of a version with 5 chars but i cannot make it work
16:43:31 <b_jonas> only now you can use - too, so you get a slightly more conveient character set
16:44:41 <b_jonas> oerjan: could you use ()=;: and use lists terminated by some special value consed with undef?
16:44:46 <b_jonas> instead of arithmetic that is
16:45:07 <b_jonas> like, lists of true and false, with the tail being undef
16:46:20 <oerjan> b_jonas: yes, ()=;:' should work
16:46:45 <b_jonas> why would you need char literals?
16:47:06 <b_jonas> I mean, just use two different well-typed functions to represent true and false
16:47:13 <oerjan> shortest way to get something to put in the lists that you can distinguish two values of
16:47:21 <b_jonas> mytrue x y = x; myfalse x y = y;
16:47:30 <b_jonas> then just call them to distinguish them
16:47:33 <oerjan> b_jonas: oh maybe that does work
16:47:43 <b_jonas> haskell rules again, so those will be polymorphic functions
16:48:08 <oerjan> but that may give trouble with the original obstruction...
16:48:14 -!- LKoen has joined.
16:48:28 <oerjan> because they won't be polymorphic in a particular list
16:49:10 <oerjan> but maybe it's close enough...
16:49:51 -!- ais523 has joined.
16:51:19 <b_jonas> ais523: I think you may be able to help with this discussion
16:52:00 <b_jonas> oerjan was thinking of how he could choose a small set of characters so that Haskell with the source code containing just those characters is a turing-complete language
16:52:26 <ais523> b_jonas: see the top answer on the PPCG question about Turing-complete subsets of languages' character sets
16:52:27 <b_jonas> he threw in the idea that the four characters ()=; lets you define functions with names like (=====) and arguments with such names too
16:52:38 <ais523> I believe (=); is the character set chosen, yes
16:52:39 <b_jonas> ais523: yes, I think that's what spawned this
16:52:46 <b_jonas> but oerjan says that it's not clear if that works
16:52:51 <ais523> however, I'm starting to have doubts about whether SKI+fix is enough
16:53:05 <ais523> in a strongly typed language
16:53:07 <Taneb> ais523: oerjan is convinced that it isn't
16:53:34 <ais523> ofc, we have more than SKI+fix here; we have the entirety of typed lambda calculus + recursion
16:55:43 <oerjan> ais523: but that's just really syntactic sugar over SKIY
16:56:13 <b_jonas> oerjan: I guess you're right and ()=;:' or ()=;:1 should be enough
16:57:15 <kmc> typed church lists are a bit complicated aren't they
16:57:20 <oerjan> a weirder idea i had was x"|>=;
16:57:21 <kmc> the type of the list encodes the types of its elements?
16:57:36 <oerjan> originally without the |, so it was my best idea for getting 5
16:57:38 <kmc> I probably can't make a homogeneously-typed list without some kind of injection type :/
16:57:55 <b_jonas> oerjan: how does that work?
16:58:40 <oerjan> well i'm not entirely sure it works, but you have monadic operations >>= and >> and comparisons == > >=
16:58:55 <kmc> I tried to write fib with (=); for a while and gave up, but it's probably doable
16:58:59 <b_jonas> oerjan: but how do you define functions or call functions or something? you have no space or parens
16:59:02 <kmc> got into some occurs check hell
16:59:24 <oerjan> b_jonas: x""xx=xxx>>=xxxx
16:59:36 <kmc> adding type signatures to figure it out is tricky because a church numeral should be type Church = forall a. (a -> a) -> a -> a, but that doesn't fly in vanilla Haskell
16:59:54 <oerjan> i haven't thought that one all through though
17:00:12 <b_jonas> write lambda calculus, with names like (>>>>)
17:00:21 <b_jonas> because of the types again?
17:00:39 <oerjan> that was the original version of another PPCG answer
17:02:09 <oerjan> ais523: on a previous occasion someone, i think here, said that fix without something like integers is not enough in a typed LC (simply or hindley/milner, i'm not sure) although i've forgot the reference. int-e gave another above.
17:02:32 <b_jonas> I wonder if we could use square brackets instead of parenthesis
17:02:51 <b_jonas> define functions that take each argument in a single-element list
17:03:01 <ais523> oerjan: I'm wondering if you can do it using the (a->a)->(a->a) type for Church numerals
17:03:11 <ais523> b_jonas: that doesn't let you create identifiers
17:03:16 <b_jonas> then we get empty lists and one element lists "for free"
17:03:26 <b_jonas> ais523: yeah, that is a problem
17:03:44 <b_jonas> yeah, that would need 5 chars
17:04:21 <ais523> maybe you could use : rather than []?
17:04:35 <ais523> although that might run into type issues
17:04:48 <ais523> it'd definitely be enough in an untyped language, given that you have structure, destructure, recursion
17:05:04 <b_jonas> ais523: you need an argument separator then
17:05:35 <b_jonas> I think ()=;:1 works, oerjan's suggestion was ()=;:' which should work too
17:07:15 <oerjan> <b_jonas> []=;x <-- i considered that one and the problem was no way to construct larger values
17:08:02 <oerjan> Taneb: you can't pattern match with : then
17:08:33 <b_jonas> oerjan: what do you mean by "larger values"?
17:08:59 <b_jonas> you can construct [[[[[[[]]]]]]]
17:09:14 <oerjan> yes, but that has no fixed type
17:10:46 <oerjan> it's really quite awkward how 5 just seems to slip away for several different reasons
17:11:21 <Taneb> > let x'x'xx=xx; xxx='x' in x'x'xxx
17:11:29 <ais523> are there language options you can give to infer the type of Church numerals correctly?
17:11:45 <oerjan> Taneb: alas ' is an identifier char too
17:11:46 <kmc> what's PPCG?
17:11:50 <ais523> :t \f x->f (f (f (f x)))
17:11:56 <ais523> kmc: codegolf.stackexchange.com
17:12:07 <b_jonas> Taneb: isn'tr x'x'xx a single variable?
17:12:08 <kmc> wheres pp from
17:12:12 <Taneb> oerjan: ...so why not x=;:"
17:12:13 <ais523> possibly the world's largest users of esolangs?
17:12:22 <ais523> kmc: ppcg = programming puzzles and code golf
17:12:33 <ais523> although they basically gave up on the programming puzzles quite early on, the name didn't change
17:12:34 <lambdabot> error: Variable not in scope: x'x'xx
17:12:49 <ais523> (oddly, puzzling.stackexchange.com are typically quite willing to do programming puzzles)
17:13:42 <oerjan> ais523: inferring the type of Church numerals would be ImpredicativeTypes, a ghc extension which probably never quite worked for that and has languished so long it's now essentially unsupported and broken for nearly everything.
17:14:00 <b_jonas> ais523: and puzzling.stackexchange.com has very few questions about creating puzzles, it's almost all questions that are puzzle
17:14:19 <ais523> b_jonas: questions about creating and solving puzzles are ontopic but rarely asked
17:14:44 <int-e> > let add a b f x = a f (b f x); zero f x = x; one f x = f x; fibs n a b = n b (add a b); fibz a b = a; fib n = n fibs fibz zero one in let church n f x = iterate f x !! n; int n = n succ 0 in map (int . fib . church) [0..10]
17:14:46 <lambdabot> [0,1,1,2,3,5,8,13,21,34,55]
17:14:52 <oerjan> <Taneb> oerjan: ...so why not x=;:" <-- no pattern matching of : in function arguments
17:15:01 <ais523> as I discovered recently, even Stack Overflow has a similar issue; it was intended to be a collaborative build-an-FAQ site for programming but turned into a help-me-debug-this site
17:15:32 <b_jonas> ais523: doesn't it still have lots of FAQ though?
17:15:45 <Taneb> b_jonas: nah, they just get closed for duplicaiton ;P
17:15:54 <b_jonas> I don't visit SO much, it's just too large for me
17:15:54 <ais523> b_jonas: yes, there are still plenty of those around, mostly from earlier in the site's history
17:16:47 <ais523> they added a new ask-a-question wizard recently which insists that you post code samples
17:16:56 <ais523> it's optional, but it excludes basically any FAQ from being asked when used
17:17:28 <b_jonas> ais523: yeah, you seem to be right
17:18:21 <int-e> such a nice type: fib::(((((a->a)->a->a)->((a->a)->a->a)->(a->a)->a->a)->((a->a)->a->a)->((a->a)->a->a)->(a->a)->a->a)->(((a->a)->a->a)->((a->a)->a->a)->(a->a)->a->a)->((a->a)->a->a)->((a->a)->a->a)->(a->a)->a->a)->(a->a)->a->a
17:20:20 <ais523> int-e: does that example show that SKIY is in fact TC in a typed lazy language?
17:20:29 <oerjan> i suppose primitive recursion is probably possible, then.
17:21:26 <oerjan> ais523: if a is a finite type, you can only distinguish finitely many fib types.
17:21:29 <int-e> ais523: no. fib is primitive recursive. note that Y is not even used.
17:21:29 <b_jonas> int-e: um, but can you get rid of the iterate and (!!) things?
17:21:37 <int-e> b_jonas: they're just for testing
17:22:19 <b_jonas> oh, so you're saying that even without them you can at least get primitive recursion, even deeper than the single exponential that fib does?
17:22:29 <int-e> b_jonas: The first let defines a fibonacci function (of sorts); The second let defines conversions between Church numerals and Int.
17:23:08 <int-e> b_jonas: yes, if you're willing to use sufficiently big types for the church numerals.
17:23:52 <arseniiv> aren’t Church numerals basically unfolders? (so, primitive recursion)
17:23:53 <ais523> OK, so the technique int-e used above is limited to primitive recursion, because its only control flow structure is the while loop
17:24:21 <arseniiv> (or I remember it wrong, and some other numerals are unfolders)
17:24:40 <arseniiv> (maybe Church—Scott if it means a different thing)
17:25:09 <int-e> There is a result that Church numerals at type (o -> o) -> o -> o gives you something called extended polynomials only (in simply typed lambda calculus; no Y).
17:25:36 -!- AnotherTest has joined.
17:25:39 <b_jonas> also, EU copyright thing thing, just have to mention it on the channel, would be strange if nobody did
17:26:27 <ais523> b_jonas: the article 11 / article 13 thing?
17:26:40 <b_jonas> ais523: yeah, or the whole vote and stuff
17:26:52 <b_jonas> the article 13 thing that got renumbered
17:26:56 <ais523> I'm not 100% convinced those are bad ideas; at least, most of the examples that people have brought up as to why they're bad, I disagree with, however they may be bad for other reasons
17:27:28 <ais523> I'd prefer a comprehensive reform to copyright law rather than just enforcing it
17:27:32 <int-e> b_jonas: the renumbering was a normal part of the process.
17:28:27 <b_jonas> int-e: the renumbering is so they can publish the text of the law without the content filters kicking them off because it mentions "article 13"
17:29:17 <b_jonas> ais523: the ones that people say article 13 requires in the sense that it makes content hosters more responsible for the content of third-party materials that they host
17:29:49 <b_jonas> which hosters can only enforce by automatic real-time content filters to accept or reject third-party content
17:30:24 <int-e> ais523: I don't like article 13 mainly because I expect that youtubers will regularly run into their own videos being blocked by an automatic filter, without any reasonable course of remedy... those videos cost time and effort, and often money, to produce, so it will discourage that particular way of producing content. It may not actually happen but I believe that's a true risk.
17:30:40 <ais523> int-e: this is already the case on YouTube nowadays
17:30:49 <ais523> it has an automatic filter, and it does cause problems
17:31:01 <b_jonas> ais523: I don't think it's relevant for youtube, because youtube is the site that already wants automated content filters, and would do it anyway regardless of that law
17:31:17 <int-e> Yes and that will become worse. So this is another step in the wrong direction.
17:31:18 <b_jonas> it's more relevant for other sites
17:32:01 <int-e> And yeah, other sites will be forced to implement filters at the "industry standard" which will be defined by the likes of Google and Facebook. Yay.
17:32:29 <ais523> actually, one of the main problems with YouTube's filters at the moment is people falsely claiming to have copyright on things and fooling the input to the filter
17:32:42 <ais523> so that the people making the false claims end up getting all the ad revenue
17:33:06 <ais523> if a reform made that sort of claim illegal, then it would improve the current situation for youtube-like sites
17:33:28 -!- oerjan has quit (Quit: Later).
17:34:11 <arseniiv> (btw someone interested in that Metamath-like thing?)
17:34:13 <b_jonas> ais523: ok, but what happens to sites that aren't as large as youtube, but also aren't too tiny, and have third-party content?
17:34:32 -!- Essadon has joined.
17:34:59 <b_jonas> ais523: also, isn't that sort of claim already illegal?
17:35:17 <int-e> The main beneficiants of the directive will be publishers and right holder's organization; to some extend Google and Facebook... creators will largely lose out slightly (more if the optional Article 16 (previously 12) is implemented), and creators who currently rely on youtube and other content sharing platforms to distribute their material.
17:35:19 <ais523> b_jonas: no, it would be if it were a DMCA claim, but YouTube's filters allow non-DMCA claim
17:35:27 <ais523> even then, DMCA claims have huge loopholes in them
17:36:26 <int-e> We'll see in a couple of years how bad it'll actually be.
17:37:51 <ais523> from my point of view, there surely has to be a better situation then a) ridiculously strict copyright rules existing and b) those same rules rarely being enforced
17:38:01 <ais523> because that leaves law-abiding people at a major disadvantage
17:38:03 <int-e> What really irks me is that instead of a healthy debate we got stuck on the level of name-calling... both sides accusing the other of having no clue (which, to some extent, is true, because this is a clash of different cultures.)
17:38:26 <ais523> the EU's sugested fix probably isn't a very good one, but the situation needs fixing, so I'm at least happy that it's being discussed
17:38:29 <b_jonas> as for finding a small set of characters that induce a TC subset of a language, that's somewhat similar to finding the smallest set of controller buttons with which you can complete a video game, as in, super mario speedwalks and the like
17:38:34 <int-e> what's the right word actually... "beneficiaries"?
17:39:05 <int-e> ais523: I agree... and in fact it was quite funny how the #Yes2Copyright hashtag was adopted by both sides of this campaign.
17:39:21 <arseniiv> int-e: it seems the latter, yes
17:39:41 <b_jonas> ais523: that's not really a good enough argument for any particular new law though
17:40:48 <arseniiv> laws seem to look as a sort of code, usually of very bad maintainability, suspicious correctness and the like
17:41:00 <ais523> b_jonas: well, any potential change in the law, other than outright removing copyright (which seems very unlikely to help), will have to come with better enforcement
17:41:14 <ais523> so this may be a first step that leads to wider reform
17:42:24 <arseniiv> so if “better code is less code”, yeah, one shouldn’t make new laws on every occasion, even if there’s some demand for a code solving/enabling a particular thing (because rarely there are no demand)
17:44:35 <b_jonas> ais523: I still don't think that really addresses the debate. sure something has to be done, but nobody really said that nothing should be done, they just had complaints about the specific law
17:45:58 <ais523> b_jonas: most of the attacks I've seen have been against the basic idea of the articles in question; it is entirely possible that the idea is good but the details are bad
17:46:36 <int-e> ais523: But look at how people dealt with the advent of photocopiers, floppies, recordable CDs, big USB devices... AFAIK there's no enforcement there. In Germany, instead a part of the sales price goes to right holders' organizations. It's not ideal (in particular those organizations hold quite a lot of power as a result) but it's *very* unintrusive. Content sharing platforms are a different...
17:46:42 <int-e> ...beast, of course, but some trade-off between enforcement and a collective pool of money (with various options for sources... consumer end (ISPs) or content sharing provider end...) should be possible.
17:47:24 <ais523> int-e: sending part of a sales price to right holders' organizations should imply that copying data owned by those right holders is not copyright infringement
17:47:42 <ais523> if so, then it makes sense
17:48:03 <int-e> Also I'd like to see data. How much of the content on Youtube is there illegally? I would like to know that from both sides... uploads and views.
17:48:51 <b_jonas> int-e: that would be hard to tell, because the content that is known to be illegal is taken down so wouldn't be in the statistics, and the ones that aren't known to be illegal are hard to count
17:50:22 <int-e> And I can also imagine tweaks to Article 17 (13) that would make it much nicer to youtubers: rather than blocking an upload directly, what if the platform has the option to tell the user why it would be blocked, and let them override that decision, in which case liability reverts back to the user? This probably requires that the user be properly identified, but anyone who monetizes their channel...
17:50:25 -!- S_Gautam has quit (Quit: Connection closed for inactivity).
17:50:28 <int-e> ...probably has shared their address with the provider anyway.
17:51:55 <int-e> (The directive has provisions for disputing infringement claims; it even mandates that a human be involved in that process. I don't see how platforms can implement this in an affordable way so I expect those processes to be very slow and convoluted.)
17:52:38 <int-e> (So the point of my idea above is that it can easily be fully automated.)
17:59:25 <ais523> int-e: "what proportion of YouTube" is a hard question, because there are probably huge numbers of videos that are hardly ever viewed
17:59:33 <ais523> people using it as a backup for family photos, or whatever
17:59:59 <int-e> ais523: yes, that's why I want the statistics for views as well
18:00:05 <ais523> maybe asking about the proportion of YouTube /views/ is more interesting, in which case I expect the vast majority to be of copyrighted content, but often with the implicit permission of the content's owner
18:00:29 <int-e> (those are probably the more relevant ones anyway, but both uploads and views are interesting)
18:00:37 <kmc> a lot of record labels post their music officially
18:00:45 <ais523> or even explicit-but-global permission (e.g. many computer games give permission to upload videos of the game on YouTube)
18:00:49 <kmc> they get royalties
18:01:07 <b_jonas> yes, views are the more relevant, because the uploads just scale with how quickly youtube recognizes and removes the illegal content, at which point the uploader reuploads a modified version of it
18:01:16 <int-e> kmc: yes. and it's also good advertisement, especially for lesser known artists.
18:01:38 <kmc> I've found quite a bit of music there that I listen to all the time now
18:02:25 <kmc> on a tangential note, this is some amazing guitar work https://www.youtube.com/watch?v=ISS2SrHxKI4
18:02:39 <kmc> I wouldn't have thought it possible to do an acoustic guitar cover of a drum&bass song, but not only is it possible it's amazing
18:03:19 * kmc listens again
18:20:03 <esowiki> [[Category theory]] https://esolangs.org/w/index.php?diff=60662&oldid=46854 * Koyodyne * (+25) Fixed some information about identity morphisms
18:20:41 <esowiki> [[Category theory]] M https://esolangs.org/w/index.php?diff=60663&oldid=60662 * Koyodyne * (+0) replaced a typo
18:22:06 <esowiki> [[Category theory]] M https://esolangs.org/w/index.php?diff=60664&oldid=60663 * Koyodyne * (+2) replaced auspicious "set" with "class"
18:23:43 -!- ZM has joined.
18:24:39 -!- ZM has quit (Client Quit).
19:09:23 -!- Sgeo__ has joined.
19:12:14 -!- Sgeo_ has quit (Ping timeout: 246 seconds).
20:10:20 <esowiki> [[Category theory]] https://esolangs.org/w/index.php?diff=60665&oldid=60664 * Koyodyne * (+534) Added a section on higher categories
20:12:04 <esowiki> [[Category theory]] https://esolangs.org/w/index.php?diff=60666&oldid=60665 * Koyodyne * (+20) Added a section on higher categories
20:28:33 <esowiki> [[Category theory]] M https://esolangs.org/w/index.php?diff=60667&oldid=60666 * Salpynx * (+23) Add category so this is linked from somewhere
20:31:41 -!- FreeFull has joined.
20:32:52 -!- Phantom_Hoover has joined.
20:33:43 <arseniiv> oh this is actually very nice. If I’d known that article needs some attention…
20:34:23 <b_jonas> everyone be prepared, this weekend we'll have the timezone offset change in most of Europe, then on Monday we'll have SIGBOVIK
20:34:37 <arseniiv> (should I add about semicategories, the ones without identity morphisms?)
20:36:14 <arseniiv> nah, a link to nLab should be really sufficient
20:46:24 <ais523> arseniiv: categories are general enough as it is, why would you need to make them more general? :-D
20:46:53 <ais523> anyway, I'm not convinced category theory is an esolang; it's fairly eso but not very lang
20:49:25 <arseniiv> yeah, it’s a bit hard to use them for me because of that. Though there are so-called internal languages, but e. g. for arbitrary category there isn’t really anything interesting to have in that language, and I even don’t know if it’s a thing
20:54:05 <arseniiv> ais523: ^ and also about the first I’d say “because of Haskell”, but there seemed to be a more specific answer I’ve forgot
20:54:30 <arseniiv> and Haskell is in no relation to that AFAIR
20:54:46 <ais523> well, Haskell is fairly close to category theory as a programming language
20:54:48 <arseniiv> but it’s a universal argument, I should admit
20:54:53 <ais523> it's not at all the same thing, but the same ideas get used in both
20:56:48 <arseniiv> if only I’d get more of Edward Kmett’s packages... hm no forget it
21:51:24 <kmc> isn't the point of category that the same ideas get used in /everything/
21:59:49 <ais523> yes, it lets you translate theorems from one context to another
22:00:47 <ais523> my PhD used a categorical result to prove that the compiler I'd defined from the syntax of a language to its semantics was consistent, in the sense that sometimes it would match the same program in multiple different ways, but it'd produce the same result in each case
22:01:00 <ais523> (this is known as a "coherence" result, in category theory)
22:01:17 -!- fractal has quit (Ping timeout: 245 seconds).
22:11:25 <b_jonas> !card-by-name Soulcatchers' Aerie
22:11:39 <b_jonas> `card-by-name Soulcatchers' Aerie
22:11:40 <HackEso> Soulcatchers' Aerie \ 1W \ Enchantment \ Whenever a Bird is put into your graveyard from the battlefield, put a feather counter on Soulcatchers' Aerie. \ Bird creatures get +1/+1 for each feather counter on Soulcatchers' Aerie. \ JUD-U
22:16:30 <b_jonas> ais523: ^ could that work instead of Noxious Ghoul in an M:tG implementation of Waterfall Model?
22:16:45 -!- fractal has joined.
22:17:10 <ais523> b_jonas: you need a -/- effect somewhere; Noxious Ghoul is only used as an easily triggerable -/- effect in the The Waterfall Model impl
22:17:15 <ais523> `card-by-name Noxious Ghoul
22:17:16 <HackEso> Noxious Ghoul \ 3BB \ Creature -- Zombie \ 3/3 \ Whenever Noxious Ghoul or another Zombie enters the battlefield, all non-Zombie creatures get -1/-1 until end of turn. \ LGN-U, HOP-U
22:17:28 <ais523> I guess you could use a damage effect instead
22:17:48 <ais523> oh, what's that effect which pings everything when a creature ETBs called?
22:17:52 <ais523> `card-by-name pandemonium
22:17:52 <HackEso> Pandemonium \ 3R \ Enchantment \ Whenever a creature enters the battlefield, that creature's controller may have it deal damage equal to its power to any target of their choice. \ EX-R, TSP-S
22:18:05 <ais523> oh, would need to be global, so not that
22:19:32 <ais523> Forerunner of the Empire almost works but it's a "may" ability
22:19:39 <ais523> `card-by-name forerunner of the empire
22:19:39 <HackEso> Forerunner of the Empire \ 3R \ Creature -- Human Soldier \ 1/3 \ When Forerunner of the Empire enters the battlefield, you may search your library for a Dinosaur card, reveal it, then shuffle your library and put that card on top of it. \ Whenever a Dinosaur enters the battlefield under your control, you may have Forerunner of the Empire deal 1 damage to each creature. \ RIX-U
22:19:51 <ais523> (you can use a protection-from-color effect to make it selective)
22:19:57 <ais523> is there a reason you wanted to replace noxious ghoul, anyway?
22:21:03 <b_jonas> ais523: no reason really. I was looking for cards for a different construction, but found this one and got curious
22:21:45 <ais523> soulcatcher's aerie seems like the sort of building block that might be helpful for a TCness construction, but it doesn't fit into the TWM construction directly
22:22:35 <ais523> you could almost use it to replace Hungry Lynx but the two creature types are the same
22:23:11 <ais523> (also, because it affects newly created tokens proactively, it'd do weird things to the language semantics, it might still be TC but it wouldn't be TWM)
22:23:38 <b_jonas> I was wondering on a construction where you have just one creature for each Waterfall counter; you somehow decrease the toughness of each creature by a constant each turn, I don't know how to do that; the opponent has a Fleet-Footed Monk with Lure to deal damage to the creature with 1 toughness each turn;
22:23:52 <b_jonas> and somehow you trigger off blocking or damage, but I also don't see how to do that
22:24:41 <b_jonas> the advantage would be that since your creatures never die or get born, they can be complicated enchanted creatures
22:24:56 <b_jonas> they can have rules text on them, or on enchantments on them
22:25:13 <b_jonas> which allows a larger selection of cards, but I don't find the right card needed here
22:25:24 <ais523> the existing construction has one creature per counter, though
22:25:45 <ais523> it uses a lot of other creatures for triggered abilities but the fact that they're creatures is irrelevant, it'd work almost as well with them as enchantments
22:25:56 <ais523> (not quite as well because the existing setup has no way to wish for enchantments, so they'd have to be maindecked)
22:25:59 <b_jonas> ais523: yes, but don't those creatures die and get recreated as tokens?
22:26:07 <b_jonas> I mean, what I'd like here is that those creatures never die
22:26:13 <b_jonas> instead they linger at toughness 1 or 3
22:26:18 <ais523> you'd want to use tokens anyway because of deck size limits
22:26:28 <b_jonas> above that, and get triggered when they are lowered to toughness 1 or toughness 3
22:26:56 <ais523> triggering on a specific toughness is hard
22:26:58 <b_jonas> ais523: well, they could be token copies, but you copy and enchant them once at the start
22:27:16 <b_jonas> ais523: that's what the Fleet-Footed Monk is for, and there's another card that works for toughness 3
22:27:42 <ais523> `card-by-name fleet-footed monk
22:27:43 <HackEso> Fleet-Footed Monk \ 1W \ Creature -- Human Monk \ 1/1 \ Fleet-Footed Monk can't be blocked by creatures with power 2 or greater. \ P1-C
22:27:57 <b_jonas> `card-by-name Goldmeadow Dodger
22:27:58 <HackEso> Goldmeadow Dodger \ W \ Creature -- Kithkin Rogue \ 1/1 \ Goldmeadow Dodger can't be blocked by creatures with power 4 or greater. \ LRW-C
22:28:19 <ais523> there are lots of creatures that trigger on dealing combat damage
22:28:36 <b_jonas> ais523: yes, but we're using -1/-1 or +1/+1 effects anyway, either counters or something crazy like that Soulcatcher's Aerie, because it has to survive turn changes
22:28:44 <ais523> maybe we could trigger on that, rather than on /not/ dealing combat damage
22:29:01 <b_jonas> ais523: yes, that could work. is there an enchantment that gives a creature protection versus a creature type?
22:29:17 <b_jonas> we have to give the opponent's Goldmeadow Dodger protection against everything but the one creature type
22:29:23 <b_jonas> and have one Dodger per counter
22:29:57 <b_jonas> would be easier with colors, but there's only 5 and that's not known to be enough with Waterfall
22:30:43 <ais523> all the tunable protection cards I can see are color-based, not creature-type-based; runed halo is an exception, triggering on name, but it enchants players, not creatures
22:30:52 <ais523> there's also true-name nemesis but it's hard to count that
22:31:41 <ais523> oh, there may be specific creature type protections, rather than tunable, that we can hack
22:31:47 <b_jonas> they don't need tunable, they can be Evolvable
22:32:22 <b_jonas> `card-by-name Boldwyr Imitator
22:32:33 <HackEso> Boldwyr Intimidator \ 5RR \ Creature -- Giant Warrior \ 5/5 \ Cowards can't block Warriors. \ {R}: Target creature becomes a Coward until end of turn. \ {2}{R}: Target creature becomes a Warrior until end of turn. \ FUT-U, MOR-U, CNS-U, DDS-U
22:32:48 <b_jonas> that, and a large amount of Evolution
22:32:51 <ais523> I was going to say, boldwyr intimidator has a different effect, but does it work for what you're looking for?
22:33:08 <b_jonas> but there's still at least two problems
22:33:34 <ais523> I kind-of like the way my existing setup works at split-second speed; something that involves combat can't
22:33:39 <b_jonas> one is what exactly to trigger from it attacking
22:33:49 <b_jonas> ais523: yes, that certainly makes it easier
22:34:20 <b_jonas> oh, I know the other one. the other problem is how to damage the creatures every turn, but that's easy. there's a blue aura for it
22:34:33 <b_jonas> `card-by-name Unstable Mutation
22:34:34 <HackEso> Unstable Mutation \ U \ Enchantment -- Aura \ Enchant creature \ Enchanted creature gets +3/+3. \ At the beginning of the upkeep of enchanted creature's controller, put a -1/-1 counter on that creature. \ AN-C, RV-C, 4E-C, 5E-C, TSP-S
22:34:46 <b_jonas> ok, so now what to trigger from the Dodgers dealing damage?
22:34:54 <ais523> `card-by-name crackling perimeter
22:34:55 <HackEso> Crackling Perimeter \ 1R \ Enchantment \ Tap an untapped Gate you control: Crackling Perimeter deals 1 damage to each opponent. \ GTC-U
22:35:03 <ais523> I couldn't remember the trigger on that one
22:35:06 <ais523> and I thought it hit creatures
22:35:16 <ais523> I think there's a card that hits every creature once-per-turn, but I guess copied auras could also work?
22:36:19 <b_jonas> ais523: I expect most of those would deal damage, not -1/-1, although you could perhaps animate something and give it infest
22:37:18 <ais523> but yes, I'm used to toughness being the only relevant stat, but your construction triggers on power
22:37:39 <b_jonas> they will probably go hand in hand
22:38:33 <b_jonas> I was also wondering if we can somehow make our creatures actually die from dropped toughness, but respawn
22:39:08 <b_jonas> but it doesn't seem easy to make that scale
22:39:18 <ais523> that's basically what the existing construction does
22:40:09 <b_jonas> yes, but it recreates a token
22:40:19 <b_jonas> whereas I wanted to reanimate the same creature
22:40:39 <b_jonas> it can't work with many creatures, it needs actual cards, and possibly even then it won't work
22:41:38 <ais523> objects lose their identity when changing zones, that's one of the most fundamental rules of magic
22:41:49 <ais523> there's one creature which keeps counters when changing zones, I think, but it's definitely a special case
22:41:56 <ais523> `card-by-name skullbriar
22:41:57 <HackEso> Skullbriar, the Walking Grave \ BG \ Legendary Creature -- Zombie Elemental \ 1/1 \ Haste \ Whenever Skullbriar, the Walking Grave deals combat damage to a player, put a +1/+1 counter on it. \ Counters remain on Skullbriar as it moves to any zone other than a player's hand or library. \ CMD-R
22:42:12 <ais523> oh wow, I didn't expect to successfully remember which one it was first try
22:42:36 -!- LKoen_ has joined.
22:43:05 <b_jonas> ais523: yes, but there are ways to make a card respawn
22:43:39 <b_jonas> they don't have to keep their identity if they're printed with the right creature type and the opponent has all the Evolved stuff
22:43:55 <b_jonas> then you still need as many creature cards in your deck as there are Waterfall counters, which isn't too good
22:44:26 <ais523> if it's not keeping its identity, why do you care about whether it's a token respawning or a token being created? is the difference even observable?
22:44:47 <b_jonas> or at least, I shouldn't care about it
22:45:03 <b_jonas> the problem with tokens is that you can't bring them back from the gy
22:45:40 -!- LKoen has quit (Ping timeout: 250 seconds).
22:45:52 <b_jonas> but yes, this doesn't work well
22:46:55 <b_jonas> another thing I was wondering about is
22:46:59 <b_jonas> `card-by-name Ensnaring Bridge
22:47:00 <HackEso> Ensnaring Bridge \ 3 \ Artifact \ Creatures with power greater than the number of cards in your hand can't attack. \ ST-R, 7E-R, 8ED-R, MPS_KLD-S, A25-M
22:47:06 <ais523> `card-by-name gift of immortality
22:47:07 <HackEso> Gift of Immortality \ 2W \ Enchantment -- Aura \ Enchant creature \ When enchanted creature dies, return that card to the battlefield under its owner's control. Return Gift of Immortality to the battlefield attached to that creature at the beginning of the next end step. \ THS-R
22:47:10 <b_jonas> plus a luring creature by the opponent
22:47:22 <b_jonas> so that it's your creature that attacks, but only if it has low toughness
22:47:24 <ais523> I don't think Gift of Immortality works on tokens? but it probably works for anything else you might be doing with this
22:47:26 <b_jonas> the opponent has the Bridge
22:47:51 <b_jonas> ais523: I don't think that works. once the token goes to the gy, it can't move to a new zone from there
22:48:39 <ais523> yes, doesn't work on tokens, but would work on creature cards
22:48:44 <b_jonas> then we'd need something like Edgar Markov, but that has an attack trigger that puts a +1/+1 counter on each creature of some _other_ type than itself
22:49:01 <ais523> apparently the playtest version just said "enchanted creature can't die", but it got altered for rules and balance reasons
22:50:31 <HackEso> Rage Forger \ 2R \ Creature -- Elemental Shaman \ 2/2 \ When Rage Forger enters the battlefield, put a +1/+1 counter on each other Shaman creature you control. \ Whenever a creature you control with a +1/+1 counter on it attacks, you may have that creature deal 1 damage to target player or planeswalker. \ MOR-U
22:52:50 <b_jonas> ok, my ideas don't seem to work
22:55:15 <b_jonas> the game designers aren't stupid, they don't make too many cards that form easy infinite loops
22:56:19 <b_jonas> especially not mandatory ones
22:58:02 <b_jonas> and yes, I do have a playset of Faceless Butchers in my box of blacks
22:59:21 <ais523> LSV (a famous magic player) once pulled off the oblivion ring infinite loop on MTGO on stream, against a real opponent, on a spur-of-the-moment decision to set it up
22:59:31 <ais523> because he was curious as to what would happen (the deck wasn't built around setting it up)
23:01:55 <ais523> MTGO didn't handle it well, it replayed the entire game to try to figure out what had gone wrong, and then restarted it when it couldn't figure it out
23:03:02 <b_jonas> or did the players call one?
23:04:08 <ais523> MTGO doesn't have judges
23:04:15 <ais523> when it breaks you can apply for a refund, but that's abotu it
23:04:30 <b_jonas> not even for tournaments with rewards?
23:06:24 -!- LKoen has joined.
23:06:42 <ais523> nope; quite a few people are upset about this
23:06:49 <b_jonas> oh, also, is it possible to golf this to one IRC line?
23:06:50 <b_jonas> <TABLE border=0 cellspacing=0><COLGROUP span=10 width=25><TR height=25><TD bgcolor=#80C rowspan=4><TD bgcolor=#80C><TD bgcolor=#FF8 colspan=5><TD bgcolor=#4F4 colspan=3><TR height=25><TD bgcolor=#8C0 colspan=3><TD bgcolor=#44F colspan=4><TD bgcolor=#08C><TD bgcolor=#4F4 rowspan=2><TR height=25><TD bgcolor=#0C8><TD bgcolor=#0C8 rowspan=3><TD bgcolor=#8C0 colspan=2><TD bgcolor=#44F><TD bgcolor=#08C
23:06:57 <b_jonas> colspan=3><TR height=25><TD bgcolor=#8FF><TD bgcolor=#0C8><TD bgcolor=#C08><TD bgcolor=#F44 rowspan=2><TD bgcolor=#08C><TD bgcolor=#F8F><TD bgcolor=#C80><TD bgcolor=#C80 rowspan=3><TR height=25><TD bgcolor=#8FF colspan=2 rowspan=2><TD bgcolor=#C08 colspan=2><TD bgcolor=#F8F colspan=3><TR height=25><TD bgcolor=#C08 colspan=2><TD bgcolor=#F44 colspan=3><TD bgcolor=#F8F><TD bgcolor=#C80></TABLE>
23:07:19 <ais523> because if they reach the late stages of tournament and lose out to an MTGO malfunction, getting the entry fee refunded isn't really what they were looking for
23:07:52 <ais523> how repeated are the colors? I was wondering if a <style> tag would help, but probably not for something that's that short
23:08:07 <b_jonas> I think the ` height=25` could be eliminated, but that's not enough
23:08:21 <b_jonas> and you could drop the ending </TABLE>
23:09:07 <b_jonas> ais523: well, there are 12 colors and 28 TD elements
23:09:43 <b_jonas> I guess we could save two bgcolor attributes if I gave the table a default bgcolor
23:09:49 -!- LKoen_ has quit (Ping timeout: 258 seconds).
23:10:28 <ais523> just out of interest (I know there's no actual reason required, especially in this channel), why are you trying to golf an HTML image-constructed-using-tables into a single line of IRC anyway?
23:11:05 <ais523> is there a reason it has to be constructed using tables? it's possible that absolute-positioning divs would be shorter (not sure on that though; it's probably naturally more verbose but has more scope for golfing)
23:11:14 <b_jonas> ais523: I dunno. the image is a packing of the 12 pentominoes into a rectangle, but the golfing is arbitrary
23:11:30 <b_jonas> using a PNG with a data url would probably make it small enough
23:11:41 <ais523> oh, divs wouldn't work well for that
23:11:51 <b_jonas> scale the png up with html
23:12:54 <b_jonas> the one irc line is arbitrary, I just thought of it because someone mentioned html tables on another channel
23:14:08 <b_jonas> oh yeah, the style could help with both the width and heigth
23:14:25 <b_jonas> an embedded stylesheet with a STYLE element that is
23:14:49 <b_jonas> I thought I'd just drop the height and add non-breaking spaces to make the rows reasonably tall
23:15:01 <b_jonas> I could even use that for width
23:15:34 <b_jonas> also I thought I could just drop the hash marks from the colors, but it seems like that doesn't work
23:16:36 <b_jonas> ah I see, it only works when there are six digits, not when there are only three
23:16:44 <b_jonas> or at least the three digits aren't interpreted the same
23:19:57 <b_jonas> also, one IRC line would work in a wisdom
23:20:33 <b_jonas> I'll have to try with a png in a data attribute
23:21:45 <ais523> there are golfier image formats, I think
23:21:57 <ais523> that text-based format X uses probably wouldn't even need to be base64'd
23:22:05 <ais523> (and would also be more readable on an IRC line)
23:22:20 <ais523> although it has a lot of needless double quotes and commas and the like
23:22:36 <b_jonas> sure, but this fits easier. even paletted BMP works, since I can set the number of palette elements to 12 IIRC
23:23:11 <b_jonas> heck, even RGB BMP would work, since it's just 180 bytes of pixel data before the base64 encoding
23:23:32 <b_jonas> then that could be produced by a script, making a random packing
23:23:47 <b_jonas> although I think paletted would be shorter
23:24:26 <ais523> I wonder if there's been much research on golfing image formats
23:24:41 <ais523> PNG was designed to be portable more than golfy (it is fairly golfy for large images, but could easily be made better on small ones)
23:24:41 <b_jonas> ais523: for small images like this, or for large ones?
23:24:43 -!- oerjan has joined.
23:25:28 <b_jonas> I've golfed an svg image once
23:26:06 <b_jonas> well, not completely golfed
23:26:19 <b_jonas> just relatively, compared to the original which was way too long
23:26:37 <b_jonas> by adding groups that are repeated, etc
23:28:21 <oerjan> b_jonas: i got thinking about your ()=;: suggestion while away and i think it actually works.
23:29:11 <oerjan> because if CPS transform the program, you only need to branch on one type to church-simulate booleans
23:30:01 -!- Phantom_Hoover has quit (Remote host closed the connection).
23:30:25 -!- tromp has quit (Remote host closed the connection).
23:30:27 <oerjan> so you simulate a stream of Bools as [a -> a] where a is the final type of the computation.
23:31:27 <oerjan> the CPS transform can disrupt laziness but you don't need that for TC-ness
23:31:52 <b_jonas> oerjan: ok, although at that point I can't claim credit for it being my suggestion
23:32:11 <b_jonas> I don't really see why it would reduce to one type either
23:32:47 <b_jonas> so you'd make something like a cyclic tag system?
23:32:49 <oerjan> because if you have CPS transformed, then you can branch on a bool by applying it to two continuations.
23:33:26 <oerjan> and they always have the same type a
23:34:17 <b_jonas> might work, but I'm tired now
23:34:20 <oerjan> i suppose you need a little laziness for that, but CPS doesn't destroy that
23:34:31 <b_jonas> this is haskell, we have a little lazyness
23:35:03 <ais523> oerjan: I'm having trouble seeing why the bool wouldn't have to have a more complex type than the continuations (meaning you couldn't store bools inside continuations)
23:35:58 <oerjan> ais523: the type of the continuation is only the type of its final result, it doesn't prevent it from using more complicated types inside i think
23:36:33 <ais523> oh wow, I think I see how this works
23:36:39 <ais523> we give the arguments to the continuations /first/
23:37:01 <ais523> so both possible continuations for the program are already fully constructed, but because Haskell is lazy, aren't running yet
23:37:18 <ais523> then we force only the one we want (indirectly, as the currently running function is forced)
23:37:35 <b_jonas> what if you translate StackFlow, and the types you store on the list are functions that take each stack as the input (the function is curried to take multiple args) and the final output as the output?
23:37:48 <ais523> this is the sort of illogical evaluation order normally only seen in declarative programming :-D
23:38:26 <oerjan> i don't think you _need_ laziness for this. you could use [(()->a)->(()->a)->(()->a)] instead.
23:38:36 <oerjan> and then it would work just as well in say ocaml
23:38:40 <ais523> recently I fixed a bug in Brachylog's standard library: the command being implemented was "given a list, a function, and a value, assert that the function produces the value on every element of the list"
23:38:56 <ais523> and the evaluation order I picked to make this work looks really bizarre to anyone not used to declarative languages
23:39:33 <ais523> first we produce a new list of the same length of the original, then we assert that all the elements of the new list are equal, then we assert that the first element of the new list is the value, then we map the function from the old list to the new list
23:40:04 <ais523> I guess I could have swapped the second and third steps and then it'd work in imperative languages too (although it'd require a two-list map)
23:40:06 <b_jonas> ais523: wait, does this apply only to a finite list?
23:40:29 <ais523> map doesn't work very well on infinite lists in most declarative languages
23:40:44 <ais523> now I'm wondering how you could make it work
23:40:54 <ais523> (the list wouldn't be so much /infinite/, as undefined-length)
23:41:17 <b_jonas> ais523: map isn't the hard part, all is
23:41:37 <kmc> why doesn't it work well?
23:41:51 <ais523> well, the problem is that most declarative language impls record known facts about each element of a list by its index
23:42:46 <ais523> you can see this in Brachylog: write "a list whose first element is 4 and all of whose elements are prime" and you get an immediate "that's impossible", write "a list whose last element is 4 and all of whose elements are prime" and it'll go into an infinite loop
23:42:56 <b_jonas> ais523: I have a small prolog library that implements some such list functions using the convention we talked earlier about to represent closures
23:43:24 <ais523> (because in the former case, the 4 has a known index, so it has somewhere to record the known fact about it; in the later case it has to fall back to backtracking)
23:44:05 <oerjan> <b_jonas> what if you translate StackFlow [...] <-- my CPS suggestion fails if the types inside the lists are recursive (which is why you can't e.g. church encode the _whole_ list this way.)
23:44:23 <oerjan> it works for Bools and finite Enums.
23:44:32 -!- Essadon has quit (Read error: No route to host).
23:45:07 <ais523> hmm, actually I'm wrong, even in the former case it seems to enter an infinite loop? this may be a bug I can fix
23:45:32 <ais523> I can't see a logical reason why it would
23:46:24 <b_jonas> ais523: http://dpaste.com/1N0YQK5
23:46:46 <ais523> oh, duh, it's got confused about data types and is looking for an integer that starts with the digit 4
23:47:30 <ais523> it uses /**/ comments and "no" rather than "false"
23:47:54 <fizzie> I've definitely seen "no" before.
23:48:09 <b_jonas> ais523: sicstus prolog, I think
23:48:17 <ais523> fizzie: same, but I can't remember where
23:48:21 <ais523> "false" seems more common IME
23:48:26 <b_jonas> (the commercial one that works worse than gnu prolog)
23:49:11 <fizzie> SWI-Prolog is the only one I've really used particularly much.
23:49:20 <b_jonas> ais523: on comment syntax https://sicstus.sics.se/sicstus/docs/latest4/html/sicstus.html/ref_002dsyn_002dcom.html#ref_002dsyn_002dcom
23:49:47 <b_jonas> ais523: the "no" appears only in the output, not in the input though
23:49:54 <fizzie> I tried to Google for examples, and there's at least one swipl example which says "yes" and "no", but also there was another one where it was saying "true" (no "false"s in the example), so maybe they've changed it over time.
23:49:56 <ais523> b_jonas: Brachylog's written in SWI Prolog, so I've got fairly used to that
23:50:14 <ais523> even though GNU Prolog is the one I've used most, and Borland Prolog is the first one I learned (but never used; I just liked reading manuals)
23:50:54 <b_jonas> for input, I use false or fail
23:51:06 <b_jonas> I don't think "no" works as input
23:52:08 <b_jonas> ais523: gnu prolog seemed to work well for me, this one simply uses sicstus because I wrote it connected to a university course about declarative programming
23:52:26 <b_jonas> so the professor chose the interpreter, and that choice was good enough that it wasn't worth to mess with
23:52:27 <ais523> gnu prolog often has weird build-system-related issues IME
23:52:59 <ais523> I thought the standard true/fail values in input were "true" and "fail"
23:53:06 <b_jonas> ais523: maybe, but it ran my constraint logic programs fast, which matters for this course
23:53:18 <ais523> although "\+!" is sometimes seen as a fail value, as is "1=0" (these are both golfier than "fail")
23:53:37 <b_jonas> ais523: I think both false and fail works in multiple prologs
23:53:38 <ais523> explicitly writing a true value is probably never useful?
23:53:56 <ais523> maybe for use with call and friends
23:54:14 <b_jonas> ais523: I wrote the olvashato compiler that outputs prolog code. I wouldn't say that explicit true can never be useful.
23:54:25 <b_jonas> I'm not sure if it outputs true
23:54:56 <b_jonas> sure, x=x would work there too
23:55:02 <ais523> oh right, it's useful in generated code for the same reason that trailing commas on lists are
23:55:18 <ais523> IIRC there's a 1=1 in the output of the Brachylog compiler
23:55:31 <ais523> simply to avoid special-casing for empty lists
23:56:29 <b_jonas> there are string constants saying "true" in the prolog part of the olvashato compiler. I won't check if it's dead code now though.
23:57:47 <b_jonas> there are enough of them that one of them likely can be triggered
23:57:53 <ais523> explicit fail is also a weird case; it's only relevant in code with side effects (assuming you're considering cuts to be side effects)
23:58:01 <b_jonas> though it may need input code where you use something unnecessary
23:58:58 <b_jonas> explicit "fail" only appears once in the compiler, for when you call the or builtin with no arguments (it's variadic)
23:59:16 <b_jonas> it does output explicit "abort" often though
23:59:31 <b_jonas> that's quite different of course