Hacker Newsnew | past | comments | ask | show | jobs | submit | munchler's commentslogin

As a fan of the Curry-Howard correspondence, I approve of this decision.

You’re going to hate when you learn that the never type is inhabited

I'm unclear what this is implying, but in Rust the never type is uninhabited. https://doc.rust-lang.org/reference/items/enumerations.html#...

In Rust, `loop {}` is an expression of type `!`, which means that from a type-theoretic perspective it is inhabited. This means that the Curry–Howard correspondence fails for Rust.

Perhaps it refers to PhantomData<!> but I don't know

> The strongest argument I see for continuing to train much smarter models quickly is the need to build defensive systems against the dangers posed by other AI.

Yikes! I really wonder about the cognitive dissonance necessary to work at OpenAI these days. They’re in an arms race to build a machine god, knowing full well that it could end humanity.


Money me. Money now. Me a money needing a lot now.


SWEs better start looking for the job cannon.


My helmet is on.


actually starting to look at a physical cannon to shoot at silicon valley



This[0] continues to be one of the most useful articles I’ve ever read.

[0]: https://www.slatestarcodexabridged.com/Meditations-On-Moloch


> They’re in an arms race to build a machine god, knowing full well that it could end humanity.

Fantasies built upon extrapolations derived from fever dream delusions. "Could end humanity"? Come on, it's a computer program just like Microsoft Clippy.


I can think of several computer programs that are stored in big 5.1/4 floppy discs that could end humanity in... half an hour.


It would require an authorized human to load the floppy into the drive and make it go. And there's nothing special about that process being done in code, it could just as well be done by people flipping switches manually.

There's just no plausible way, in the real world, that a computer program running in some datacenter is going to make this happen. Or anything of any dire existential consequence. It's not a real threat.


I think I disagree! You can always manipulate a human. It's true tho that this particular example has a myriad of failsafes, so the actual example I wrote is less than interesting.


> You can always manipulate a human.

Yes, but to make "apocalyptic" scenarios happen your AI would need to manipulate at least millions of people. So far it's not yet clear they can successfully manipulate even one, or even that "manipulate" is a coherent concept, since LLMs pretty clearly have no agency or intrinsic goals. So like... I guess if we start seeing AI systems autonomously throwing elections and starting wars I'd be more concerned? It doesn't look likely anytime soon.


It seems like AI to me as well. “That’s the gap” is a familiar Claude-ism, as are the references to a “pivot” and the use of “touch” to mean “affect”.

To be fair, I’ve reached the point where most random blog posts I read on the internet seem AI written, so it could just be confirmation bias on my part.


It’s a minimal Windows app, so the whole idea is to rely on Windows DLLs as much as possible.


Officially, one should not use KERNEL32.dll for instance but go via crt. In practice, most interfaces are stable.


KERNEL32.DLL (in spite of the name) provides user-mode system services for the Windows API. The CRT provides the C99 API. There are many entry points to the same thing on Windows; you can do any of `malloc`/`HeapAlloc`/`new`/`VirtualAlloc` to get a void* memory buffer. `malloc` is from the CRT; `HeapAlloc` is from KERNEL32.DLL, and `new` is from the C++ runtime.


Many many different ways to allocate memory. malloc, new, HeapAlloc, LocalAlloc, GlobalAlloc, CoTaskMemAlloc, etc. GlobalAlloc and LocalAlloc are pretty much obsolete. "malloc" sometimes redirects to HeapAlloc with the default process heap, but only sometimes, it depends entirely on which compiler and CRT is used.

It just causes one big headache that a DLL can't simply return a pointer and have the caller use "free", because malloc/free can be incompatible across modules.

This just led to the COM standard, featuring reference-counted objects that don't care what underlying way was used to allocate the memory. For the situations where you do need memory buffers, COM enforces the use of CoTaskMemAlloc/CoTaskMemFree.


kernel32 is an official API, you're probably thinking of ntdll. CRT is the C-runtime. Not everything is written in C.


Yes, you are right, must have been thinking of ntdll.


A human child would just say “I don’t know”.


Indeed. The child applied intelligence.

The LLM has none, so it relies upon regurgitating what it's ingested, and unsurisingly that includes very little programming Q&A with young children. It has no record of not knowing the answer, and so cannot give this correct response.


Why is subtraction not part of the algebra? It’s certainly familiar to every high school math student. This omission allows the counterexample, so the reveal is a bit of a disappointment IMHO.


Subtraction is not closed over positive integers, which is untidy. The point of Tarski’s conjecture was to propose a minimal number of axioms and operations, AFAICS they define the standard semiring of positive integers (with the natural definition of exponentiation added).

(Edit: positive integers aren’t exactly a semiring because 0 is excluded, although some authors do define a semiring without the requirement of an additive identity element.)


Well, yes, but negative numbers are also well known to every high school math student.


Sure. But "High School Algebra (Excluding Subtraction) Problem" isn’t as catchy a name.


They subtracted the subtraction exclusion in the name of simplicity?


If subtraction is allowed but negative numbers are not, that's known to be undecidable, even without exponentiation. There are several ways to deal with a subtraction with a negative result, but each variant is undecidable.

If we allow negatives but disallow exponentiation, that's decidable. If we allow negatives and partial exponentiation that stays within the integers, that's undecidable again.


Because subtraction is not a total operation on positive integers. Negative numbers leave the domain.


Why was it important to Tarski to limit the domain to positive integers? That seems pointlessly arbitrary.


If you allow negative integers, you get negative exponents. To accomodate negative exponents, you can expand the domain again, to rational numbers. If you allow rational numbers, then you have to allow rational exponents, which means you can take arbitrary nth roots. Which you could do, but now you're most of the way to the complex numbers (plus roots aren't unique anymore).


Truly, you could say that about many conjectures, especially more “fun” classical ones.


I'm not sure, but maybe it is due to that the expression a - b can be replaced as a + (-b)?

Similarly, I think a * b and a / b can be replaced with the same trick, but then I realized it may not work on non-abelian, or where multiplicative inverse is not available...


We’re in the semiring of positive integers, so there are no additive (or multiplicative) inverses.


The subtraction point is interesting but I don't think it makes the result disappointing. The whole point of Tarski's problem is what follows from that very restricted set of elementary identities so finding the exact minimum countermodel under those rules still seems like a pretty satisfying result.


What a beautiful illustration. It makes intuitive the very abstract concepts discussed in the text. It’s fun to zoom in and browse around the structure.


[dead]


The visualization is of the power set, which is uncountable.


TREE(3) is unimaginably small, compared to ω


TREE(3) is also unimaginably tiny compared to the normal form size of (λa.aaa(λbλcλdλe.ebbbcde)aaaa)(λfλx.f(fx)) [1].

[1] https://wiki.bbchallenge.org/wiki/Lambda_Calculus#Champions


Well, any natural number is unimaginably small, compared to ω …


All describable or recognizable complexity is part of the subcountable set of computable subsets of N. Higher infinities thus mostly contain fake elements about which nothing can be said, so they don’t feel any bigger.


"Fake elements," feels right to me. They're allegedly in there but we can't find any of them. It's funny that these elements comprise the majority of the "real" numbers.


Thank you. The OP's article is clearly AI-written.


It's not about immature people being unable to separate art from artist because it's difficult. The issue is whether it's the right thing to do.

I feel pretty confident that I could describe to you a case (either real or hypothetical) where you would reject an artist based on their personal behavior, rather than their art. You would find it quite difficult in such a case to separate the two.

So the question is where to draw the line, and everyone answers that question differently.



> https://fstar-lang.org/tutorial/

FYI: The link to this tutorial is unluckily a little bit obscured on the F* website: Go to

> https://fstar-lang.org/index.html#learn (1)

and click on the image below the text "You probably want to read it while trying out examples and exercises in your browser by clicking the image below.".

In the section of (1) also the PDF version is linked:

> https://fstar-lang.org/tutorial/proof-oriented-programming-i...


I still don't see any code examples!

But I do see the editor to try it.

I wonder why more languages don't have a few simple examples of: "HTTP server", "hello world", "todo list app" that you can just click and it shows the code for how you'd make it in that language.

It matters a lot how the syntax looks IMO and seeing how, say, an API is scaffolded, helps understand a lot about the language in one glance

Edit: Page 18 of the PDF. That's the first time I found what the code looks like, thanks for sharing!


> I wonder why more languages don't have a few simple examples of: "HTTP server", "hello world", "todo list app" that you can just click and it shows the code for how you'd make it in that language.

Often the reason is that the value that the programming language brings is thinking very differently about how to write code - the examples how to write something in it are merely the "more boring" consequences of this different way of thinking.

--

If you want a programming language that "just" enables you to write something well-understood (in particular in the area of web development) like your suggested

> "HTTP server", "hello world", "todo list app"

in a perhaps just a little bit more elegant/concise way, just look at which web development language/framework is currently fashionable on HN.


> just look at which web framework

See, by listing those, you can tell what it is.

I imagine the quick project showcase would be different for Swift or for Rust.

Would be nice to have something like that for this Fstar or any language I haven’t heard of - or maybe have but never looked into so I see why people are using it.

Like what kinds of things i can even think of writing with it - an implementation example


> I imagine the quick project showcase would be different for Swift or for Rust.

> Would be nice to have something like that for this Fstar or any language I haven’t heard of - or maybe have but never looked into so I see why people are using it.

I suggest simply having a look at the table of contents of

> https://fstar-lang.org/tutorial/proof-oriented-programming-i...

This in my opinion gives you a first rough idea for what kind of problems people are using F*.

Spoiler alert: these are not the kind of problems which are related to ["HTTP server", "hello world", "todo list app", ...].

This is exactly the reason why I wrote further above:

> Often the reason [why more languages don't have a few simple examples of: "HTTP server", "hello world", "todo list app"] is that the value that the programming language brings is thinking very differently about how to write code - the examples how to write something in it are merely the "more boring" consequences of this different way of thinking.


> these are not the kind of problems which are related to ["HTTP server", "hello world", "todo list app", ...].

Ok, what kinds of problems are they?

And ideally - what does a simple solution look like in F-star?

Set me on the path to installing the thing (ideally above the fold)


> Ok, what kinds of problems are they?

> And ideally - what does a simple solution look like in F-star?

RTFM

Or to explicate on this point: find a section in the table of contents that looks interesting to you, go to the respective section, and look at a code example.

> Set me on the path to installing the thing (ideally above the fold)

How to install this thing:

1. Read https://fstar-lang.org/index.html#download

2. Go to the GitHub page linked there: https://github.com/fstarlang/fstar/releases

3. Download F* for an operating system of your choice there.


You are right that someone could go through that effort bat that only really makes sense if they give you some.idea how to use it.

Reading the exchange it seems like you got caught up on the illustrative examples the other person used. If a web server isn't a good example of a simple problem for F* the landing page should have an example of something that is. It shouldn't take going through that many steps to understand the so what.


I guess it's a bit popular right now

    * Error 17 at Welcome.fst(24,0-28,30):
      - Could not start SMT solver process.
      - Command: ‘/home/site/wwwroot/fstar/bin/z3’
      - Exception:
          Unix.Unix_error(Unix.ENOENT, "create_process", "/home/site/wwwroot/fstar/bin/z3")
    
    1 error was reported (see above)


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

Search: