2024/05/01

Newest at the top

2024-05-01 03:49:59 +0200 <ski> (not clear how would apply something like that to BDDs, though)
2024-05-01 03:49:07 +0200 <ski> (what i was thinking about was encoding the sharing in the type, or rather, in the decomposition process, making it mandatory, thereby making sure it will happen in the result as well)
2024-05-01 03:47:32 +0200 <ski> there's also a problem that when traversing a structure with sharing, producing a new parallel structure, that would normally lose all sharing
2024-05-01 03:46:30 +0200ski. o O ( "BDD-Based Deductive Databasee" <https://bddbddb.sourceforge.net/> ; "Soufflé - A Datalog Synthesis Tool for Static Analysis" <https://souffle-lang.github.io> )
2024-05-01 03:43:11 +0200waleee(~waleee@h-176-10-144-38.NA.cust.bahnhof.se) (Quit: WeeChat 4.1.2)
2024-05-01 03:38:18 +0200 <c_wraith> well, no. The problem is sharing only happens when explicitly introduced, and doing that is going to require bookkeeping. And the memory cost of that bookkeeping is ridiculous.
2024-05-01 03:36:16 +0200 <talismanick> Is the problem is that laziness memoizes and shares for you without asking, making every tree equivalent to a DAG but not the one you want?
2024-05-01 03:32:04 +0200 <talismanick> kind of like SAT solving
2024-05-01 03:31:46 +0200 <talismanick> https://en.wikipedia.org/wiki/Binary_decision_diagram
2024-05-01 03:31:22 +0200 <ski> s/re/are/
2024-05-01 03:31:19 +0200skidoesn't recall what those re
2024-05-01 03:31:09 +0200 <talismanick> yeah
2024-05-01 03:30:28 +0200 <ski> hm, is "BDD" Binary Decision Diagram ?
2024-05-01 03:29:18 +0200 <talismanick> is it the kind of thing where it becomes obvious when you write it down?
2024-05-01 03:29:12 +0200otto_s(~user@p4ff27c65.dip0.t-ipconnect.de)
2024-05-01 03:29:11 +0200 <ski> or, in terms of composition, if `Compose (Compose ar0 ar1a) (Compose ar1b ar2) = ar012', then `ar1a = ar1b'. so we have something like `Compose :: (ar0 :: Slice n) -> (ar1 :: Slice n) -> Agree ar0 ar1 => Slice (1+n)', where `Agree (Singleton x) (Singleton y)' as well as `(ar1a = ar1b) => Agree (Compose ar0 ar1a) (Compose ar1b ar2)' (where `Agree :: Slice n -> Slice n -> Constraint')
2024-05-01 03:27:48 +0200otto_s(~user@p4ff27e40.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2024-05-01 03:26:03 +0200 <talismanick> because, if one can assume "maximal sharing", I feel like I can see in my head how a BDD might be implemented with a (real) free monad
2024-05-01 03:24:25 +0200 <ski> basically, we have, if `Just (ar01,ar12) = decompose ar012', `Just (ar0,ar1a) = decompose ar01' and `Just (ar1b,ar2) = decompose ar12', then `ar1a = ar1b'
2024-05-01 03:23:41 +0200 <talismanick> I'm feeling a little stupid, then, trying to understand https://hackage.haskell.org/package/zsdd/docs/Data-Diagram.html
2024-05-01 03:18:35 +0200 <ski> advantage of the sharing
2024-05-01 03:18:29 +0200 <ski> given an array/vector with indices from `0' to `n-1' (incl.), we could decompose this into one slice from `0' to `n-2' and one from `1' to `n-1', guaranteed to overlap on the `1' to `n-2' part. eventually, we'd get down to singleton slices, which could be the base case of a dynamic programming, then results percolating back up in a "lattive"-like structure, rather than a tree, proper, thereby taking
2024-05-01 03:15:53 +0200waldo(~waldo@user/waldo)
2024-05-01 03:15:04 +0200 <ski> iow, i'm thinking of something like a catamorphism
2024-05-01 03:15:01 +0200 <c_wraith> you can embed basically anything you want into f
2024-05-01 03:14:50 +0200 <c_wraith> pick f carefully.
2024-05-01 03:14:36 +0200 <ski> s/iput/input/
2024-05-01 03:14:28 +0200 <ski> yea, but how do you detect, or enforce, the sharing, of the iput structure, to justify the sharing of the output computation ?
2024-05-01 03:11:30 +0200 <c_wraith> You just need sharing.
2024-05-01 03:11:26 +0200 <c_wraith> You don't need any special structure for that, though
2024-05-01 03:10:01 +0200fryguybob(~fryguybob@024-094-050-022.inf.spectrum.com) (Quit: leaving)
2024-05-01 03:09:19 +0200 <ski> hmm .. i guess you could have an operation that requires that its opeands "overlap" (have some common substructures), in some particular fashion. so a recursive decomposition of a problem (corresponding to matching on such a constructor operation) would then naturally allow dynamic programming (iow a DAG, rather than a tree, recursive decomposition/structuring of the original problem), presumably
2024-05-01 03:02:05 +0200pointlessslippe1(~pointless@212.82.82.3) (Ping timeout: 240 seconds)
2024-05-01 03:00:13 +0200 <geekosaur> talismanick, isn't it actually a DAG anyway? cycles would severely limit the monads you could use to "interpret" it
2024-05-01 02:57:02 +0200 <geekosaur> oh, right, I saw that a few months ago
2024-05-01 02:55:23 +0200 <talismanick> If a free monad is a tree of expressions, is there a DAG analogue?
2024-05-01 02:53:14 +0200talismanick(~user@2601:644:937c:ed10::ae5)
2024-05-01 02:51:02 +0200 <jackdk> It was https://reasonablypolymorphic.com/blog/abusing-constraints/
2024-05-01 02:47:05 +0200xff0x(~xff0x@softbank219059019218.bbtec.net) (Ping timeout: 252 seconds)
2024-05-01 02:44:57 +0200whatsupdoc(uid509081@id-509081.hampstead.irccloud.com)
2024-05-01 02:43:47 +0200wroathe(~wroathe@user/wroathe)
2024-05-01 02:43:47 +0200wroathe(~wroathe@24-152-179-157.fttp.usinternet.com) (Changing host)
2024-05-01 02:43:47 +0200wroathe(~wroathe@24-152-179-157.fttp.usinternet.com)
2024-05-01 02:14:39 +0200mima(~mmh@aftr-62-216-211-165.dynamic.mnet-online.de) (Ping timeout: 260 seconds)
2024-05-01 02:08:23 +0200 <jackdk> Thanks but it's neither of those. It was more like a typelevel answer to the question "what resources is this function going to touch?" in a way that let you accumulate the names in a constraint and pull them down to the value level to write out a policy or equivalent
2024-05-01 02:04:38 +0200peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com)
2024-05-01 02:04:01 +0200gmg(~user@user/gehmehgeh) (Quit: Leaving)
2024-05-01 02:03:32 +0200lol_jcarpenter2
2024-05-01 01:58:08 +0200waldo(~waldo@user/waldo) (Quit: waldo)
2024-05-01 01:53:37 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 268 seconds)