Hacker News new | past | comments | ask | show | jobs | submit | predictand's comments login

I have been working on Heuristica for the last 1.5 years, which pays for my rent. It is a subscription-based, AI-powered concept mapping tool that helps visualize learning and research.

As I started to make money, I was able to start hiring freelancers to help with certain aspects of the site, like the design, SEO, and some independent coding tasks. It is rewarding, but due to the pace of developments in the AI space, it feels like I need to improve the product constantly to remain competitive, which can get a bit burdensome.

https://www.heuristi.ca/


Looks cool! Have any SEO / dev freelancers with extra capacity you've liked working with that you can recommend?

I learned about Vacuous Truth the hard way recently when I found out that `every` method in JavaScript returns `true` for empty arrays as well.

In programing, you can always rewrite that first rule as "all" and "some" must compose over set union. So, "all (A ∪ B) == all A && all B", and "some (A ∪ B) == some A || some B".

That lets you discover the answer for the empty set.


Which leads to a funny fact that if all elements of the set S satisfy proposition P it doesn’t necessarily imply that some elements of the set S satisfy proposition P.

My description of the power set is by definition allowing all to imply some

I don’t follow. Can you elaborate?

The power set of a set S, P(S) (or sometimes 2^S) is the set of all subsets of S including both the empty set and the set itself.

To bridge the gap with programming, make a map f: S -> bool which represents our predicate.

all(f, S) => either S is empty or for all elements s in S, f(s) = True.

Now make f work on sets as well as individual values. f({x, y}) means True if f(x) and f(y) are True, False otherwise.

all(f, S) => all(f, P(S))

If we take the opposite and define all(f, {}) = False then this doesn't work and in addition all(f, P(S)) = False for all sets S.


That doesn’t explain how all(f,{}) => some(f,{}) may be made true with your definition preserving the distributive property.

As I think you would hope from a practical standpoint -- you don't want to have to handle a special case of false and always check if the array is empty.

I agree it's only logical in engineering contexts like that though, not in everyday language.


This is even what I expected, but I majored in math, so maybe that biased my response.

But if you consider “liar” to be an object,

> liar.hats.every((hat) => hat.color === "green")

will throw a TypeError: Cannot read properties of undefined. That’s definitely not `true`.


This depends on `liar.hats` being undefined, but what if `liar.hats` is an empty array? That seems like an equally valid way of representing a person that owns no hats.

You implemented the problem wrong, and thus got an error. If hats is a list of colors, then every hat != green is true if the list is empty.

I wouldn’t say it is wrong per se. It certainly defies the conventional translation into FOL, but there is no a priori reason to pick the conventional formalism of FOL for this problem.

I don't think that's true. What if the liar buys a red hat?

    liar.hats.push("red")
This only works if hats is an empty array. If hats is just not a property people have (undefined in the example), then you can't represent adding them.

Now you might argue hats can be null when a user doesn't have them, or a non-empty array, but that's clearly not a great way to represent that. Now you have owning no hats represented two different ways as an empty array or null, and must build special casing around the null case (unless you are using a language where nil and the empty array are one and the same)


Hm. No.

    const liar = { hats: [] };
    liar.hats.every(hat => hat.color === "green")

    true

Daemon series by Daniel Suarez: I can’t believe I slept on this book for so long. It would have altered my worldview fundamentally if I had read it at a younger age.

Mind Hunter: Somehow even better than the show.

A Brief History of Intelligence: Packed with so much knowledge about the evolution, mechanics, and different forms of intelligence. One of the best non-fiction books I have read in a long time.


The Daemon series along with the Magicians Trilogy by Lev Grossman are two of my favorite sci-fi/fantasy series.


At the times I've read the Daemon series, I also enjoyed https://en.wikipedia.org/wiki/The_Nexus_Trilogy by Ramez Naam shortly afterwards.


This thread is not about Ray-Ban glasses but their new AR glasses.


I built Heuristica for learning and research using concept maps powered by LLMs. It is a different kind of interface for using LLMs. Instead of having linear conversations, you can have visual explorations that let you structure, organize, and retain knowledge much better.

I have been working on it on the side for the last 17 months.

https://www.heuristi.ca/


It's really fun to use mind maps and visualizations, I must try it, and I want to know if the final document can be exported to Markdown?


Yep, Markdown and Image exports are currently supported. Feel free to let me know what you think of it!


I found Axiomatic by Greg Egan to have a similar vibe.


"Anxiety Is the Dizziness of Freedom" is one of the best stories I have read about quantum physics. I highly recommend it. I can't wait for it to become a movie.


I dearly hope it becomes a movie.

It reminded me of Naval Ravikant idea, except Ravikant was talking about money and Chiang wasn't:

"In 1,000 parallel universes, you want to be wealthy in 999 of them. You don’t want to be wealthy in the 50 of them where you got lucky. We want to factor luck out of it." (https://nav.al/rich)


This GitHub repo has a bunch of software deals from indie makers: https://github.com/trungdq88/Awesome-Black-Friday-Cyber-Mond...

I would also recommend you check out https://www.heuristi.ca/. I am a bit biased here since I am the founder but it is a great tool for learning, exploration, and divergent thinking. It is 40% off for Black Friday.


Heuristica is quite helpful! Thanks for building it.


How to select multiple nodes for a comparison?


I agree with the author that chat interfaces for LLMs can be suboptimal. A chat could require redundancies that is not required to perform a task and it imposes a linear flow of information. It is hard to have branching behaviour in a chat. I have been experimenting with using a different kind of a UI to overcome these limitations: https://www.heuristi.ca/


Thank you, glad you like it!


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: