2024/04/19

Newest at the top

2024-04-19 21:42:59 +0200Tuplanolla(~Tuplanoll@91-159-69-59.elisa-laajakaista.fi)
2024-04-19 21:42:44 +0200 <tomsmeding> probie: definitional, going by what they've said so far
2024-04-19 21:42:01 +0200ph88(~ph88@ip5b403f30.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
2024-04-19 21:41:57 +0200 <probie> masaeedu: Normally I'm used to people talking about leibniz equality if they haven't explicitly specified a definition. Those two things are definitely leibniz equal (assuming functional extensionality). What is your definition of equality?
2024-04-19 21:40:00 +0200 <ncf> true
2024-04-19 21:38:59 +0200 <dolio> Haskell doesn't need them to say the type is meant to be a quotient when you're reasoning about it.
2024-04-19 21:38:59 +0200 <monochrom> Right for example Data.Set binary search trees.
2024-04-19 21:37:54 +0200 <ncf> haskell needs quotient inductive types
2024-04-19 21:37:16 +0200 <dolio> So the appropriate equality incorporates that.
2024-04-19 21:36:34 +0200 <ncf> right
2024-04-19 21:36:18 +0200 <dolio> If I import some .Internals module, I can tell the difference between abstract structures. Or maybe there is no technical barrier to telling them apart, but I am meant to not care about some differences in representation.
2024-04-19 21:35:15 +0200 <ncf> dolio: do you have an example?
2024-04-19 21:34:25 +0200 <dolio> Sometimes even observational (in Haskell) equality is not appropriate.
2024-04-19 21:33:38 +0200ph88(~ph88@ip5b403f30.dynamic.kabel-deutschland.de)
2024-04-19 21:31:48 +0200ChaiTRex(~ChaiTRex@user/chaitrex)
2024-04-19 21:30:44 +0200ChaiTRex(~ChaiTRex@user/chaitrex) (Remote host closed the connection)
2024-04-19 21:30:10 +0200 <monochrom> No, like I said, the problem does not exist in Haskell because we use denotational equality here, even generally mathematical equality.
2024-04-19 21:30:08 +0200 <tomsmeding> anything I would want to use typeclass laws for would be about observational equality
2024-04-19 21:29:22 +0200 <masaeedu> the problem exists in both Haskell in Agda, assuming the laws actually mean anything and you're actually trying to prove what you claim in the typeclass laws
2024-04-19 21:29:17 +0200akshar(~user@209.94.142.169)
2024-04-19 21:29:15 +0200 <monochrom> Or rather, why would one restrict oneself to definitional equality, then bolt on codata, then also throw up hands and declare "nothing can be proved about codata" and so it is all a waste of time?
2024-04-19 21:28:33 +0200 <tomsmeding> in agda you might, because there one cares about what the type checker can automaticall reduce for you and what it cannot
2024-04-19 21:28:11 +0200 <monochrom> Why would one restrict onself to definitional equality?
2024-04-19 21:27:11 +0200 <monochrom> To a large extent, I am betting on: 1. No one dares to contrive a denotational semantics that distinguish coding styles; 2. No one bothers to contrive a denotational semantics that distinguish time/space complexity.
2024-04-19 21:26:59 +0200 <tomsmeding> not about a proof assistant where we care a lot about what holds definitionally and what does not
2024-04-19 21:26:39 +0200 <tomsmeding> masaeedu: we're talking about haskell, right?
2024-04-19 21:26:26 +0200 <tomsmeding> yes I'm not arguing against you, just calibrating my understanding of the terminology
2024-04-19 21:26:22 +0200 <masaeedu> tomsmeding: you seem to be imagining "observational equality" as some kind of drop in substitute for definitional equality. it doesn't really work like that
2024-04-19 21:25:33 +0200 <monochrom> Fortunately even then all existing choices agree on infinite lists.
2024-04-19 21:25:25 +0200 <tomsmeding> right, then I still understand things :)
2024-04-19 21:25:06 +0200 <monochrom> We only have the (or one of several) intuitively reasonable one. :)
2024-04-19 21:24:29 +0200 <tomsmeding> (doesn't this depend on what denotational semantics you assign to Haskell? Are we assuming the intuitively reasonable one, or a specific formalised one?)
2024-04-19 21:24:04 +0200 <monochrom> Fortunately if you gross over computational complexity, "denotation" and "observation" are, um, observationally equal >:)
2024-04-19 21:23:00 +0200 <monochrom> But given that a lot of people haven't heard of that, observation will have to do as a proxy.
2024-04-19 21:22:29 +0200 <monochrom> In the Haskell community you are supposed to eventually pick up the implicit convention that laws in type classes use denotational equality not C programmer equality.
2024-04-19 21:21:33 +0200 <Franciman> nice
2024-04-19 21:21:31 +0200 <Franciman> I must leave, so i give up. I'll read the answer tho!
2024-04-19 21:21:06 +0200 <Franciman> maybe for this codata it's more indirectly applicable
2024-04-19 21:20:55 +0200 <monochrom> Eventually I will be advocating for denotational equality/inequality but yeah.
2024-04-19 21:20:35 +0200 <Franciman> it's the confluence theorem no?
2024-04-19 21:20:29 +0200 <Franciman> uhm, if they both terminate they can't different answers
2024-04-19 21:20:12 +0200 <tomsmeding> (absent unsafePerformIO and precise performance measurement, but that's surely outside the realm of reasoning here)
2024-04-19 21:19:33 +0200 <monochrom> I would hope both terminate. But I posit that you can't get two different answers.
2024-04-19 21:18:18 +0200 <Franciman> if there is a context where the two lambda terms don't both terminate
2024-04-19 21:17:59 +0200 <Franciman> ok so you mean
2024-04-19 21:17:45 +0200 <monochrom> I'm OK with re-negotiation those terms, but let's start somewhere.
2024-04-19 21:17:42 +0200raehik(~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net)
2024-04-19 21:17:09 +0200 <monochrom> Perhaps even restrict f :: [Integer] -> Bool as a first attempt.
2024-04-19 21:16:38 +0200 <monochrom> Franciman: There are many ways to convey the meaning. Perhaps we can start with: Write a function f such that f (map (2*) [1..]) gives a different answer from f [2, 4, ..].
2024-04-19 21:16:16 +0200tremon(~tremon@83.80.159.219)