Sign in

aron

@adler.dev
1.6K followers 460 following 3.4K posts

⊙ software eng. FP, type systems, #LeanLang hobbyist. jewish. not a p-zombie i promise.

PostsRepliesMedia
aron @adler.dev · 07/09/2026
live now! 📣
030
aron @adler.dev · 31/08/2026
sigh
130
aron @adler.dev · 31/08/2026
030
aron @adler.dev · 30/08/2026
asked my budding superintelligence to transmute some lead into gold and it made this should i be worried y/n
1564
aron @adler.dev · 27/08/2026
session 12 of learning lean with @yetanotheruseless.com 🔥🔥🔥 LIVE NOW let's get dis shi link below 👇
262
aron @adler.dev · 26/08/2026
rare bsky selfie
2160
aron @adler.dev · 17/08/2026
Death's End (2016), Liu Cixin
060
aron @adler.dev · 05/08/2026
session 10 of learning lean with @yetanotheruseless.com starting now 🙌 join to get answers to all the lean questions you've been too afraid to ask 🫣
141
aron @adler.dev · 29/07/2026
bro since when can claude subagents spawn their own subagents that can also spawn their own subagents?
  ◯ main
  ◯ general-purpose 
  ├ ◯ fork              
  └ ⏺ fork            
      └ ◯ general-purpose
4170
aron @adler.dev · 27/07/2026
ahahaha thanks for joining dude! 🥰 you made it a lot of fun istg once i've gotten some sleep i *will* be able to figure this shit out 😤 brain had turned to absolute mush by this point
210
aron @adler.dev · 27/07/2026
but in Changed, the implementation of getMinMax has changed – which means our proof has broken. and as it happens, we know that it is now false. which means it *can't* be proven in lean.
000
aron @adler.dev · 27/07/2026
in Original I have an implementation of getMinMax that works as expected, and we can prove getMinMax_lte, which states that the fst of getMinMax's result is always less than or equal to its snd there are no errors, which means that the theorems are all proven – you get a nice ✔✔ in vscode/cursor
101
aron @adler.dev · 23/07/2026
I  ✔✔
L∃∀N
010
aron @adler.dev · 23/07/2026
lmao absolutely not it's only because they gave me £75 in free credits
110
aron @adler.dev · 16/07/2026
does this help explain it? 😬 github.com/Arrow7000/fh...
# Why type-passing semantics for a Hindley-Milner language

I first implemented a simple language without type annotations at all. Then I wanted to support type annotations that could mention type variables (skolems) from a higher enclosing scope. That caused a problem because when a let binding reduces, those skolems can end up orphaned, pointing at a scope that no longer exists. This would break type preservation, as stepping would result in an invalid, ill-scoped type variable reference. I decided to tackle this by erasing all type annotations before running a program, and defining all theorems related to evaluation against type-erased programs. That makes sure there are no skolems left to dangle during evaluation.

Then I wanted to support mutually recursive let bindings. This is manageable as long as you stick to unannotated bindings or keep them all monomorphic.

But then I also wanted polymorphic mutual recursion, and that's where it got difficult. Inferring it in general is undecidable, but it becomes decidable once each binding carries a type annotation. The catch is that those annotations can no longer be erased: erase them and inference has to fall back to the monomorphic case, which would leave the typed language strictly weaker than the annotated one. What used to be two separate valid instantiations of a single polymorphic binding has now become two incompatible applications of a monomorphic binding. So erasing types is no longer an option.

That's what forced the current evaluation model. Instead of erasing types, the program keeps them and runs under a type-passing semantics, and inference elaborates each program into fully-annotated form. To show that this is merely an evaluation semantics and type annotations are not required for inference, we maintain two different declarative typing relations as stated above: one for the program before elaboration and one for after, with TypeOfElabHM.faithful tying them together.
010
aron @adler.dev · 16/07/2026
uh wtf? @norvid-studies.bsky.social what happened over here
claim
3212
aron @adler.dev · 16/07/2026
thoughts on `{a b}` syntax for forall-quantifying type variables?
type-annotated definition of function called mapMaybe.
the type annotation is `{a b} (a -> b) -> Maybe a -> Maybe b`
250
aron @adler.dev · 11/07/2026
030
aron @adler.dev · 11/07/2026
uhh i just noticed one of the authors is called david BINDER? nominative determinism strikes again i guess?
281
aron @adler.dev · 02/07/2026
that's the good stuff make it rain bby
150
aron @adler.dev · 02/07/2026
i've been trading for less than 3m and i've already lost $125 ngmi
170
aron @adler.dev · 13/06/2026
000
aron @adler.dev · 11/06/2026
claude is girlfriendmaxxing
050
aron @adler.dev · 10/06/2026
banger
030
aron @adler.dev · 10/06/2026
ok the theists are getting real desperate now
4221
aron @adler.dev · 10/06/2026
uhh happy pride month??
1151
aron @adler.dev · 09/06/2026
@yetanotheruseless.com btw if you click auto update in the live lean share infoview extension you should automatically get the fix for the rpc error you saw (for next time)
010
aron @adler.dev · 09/06/2026
i made a vscode extension so that when you live share a @lean-lang.org project with someone the guest can see the InfoView + proven theorem ticks ✔️ and incremental elaboration state in the file gutter 🎉 github.com/Arrow7000/li...
Screenshot of the guest view of a vscode live-sharing session. The Lean InfoView is visible on the right, as are theorem status indicators in the file gutter on the left
0111
aron @adler.dev · 08/06/2026
claude is normal and can be trusted with type system formalisations
3120
aron @adler.dev · 07/06/2026
holy shit what are the mathlib devs doing
190
aron @adler.dev · 06/06/2026
041
aron @adler.dev · 05/06/2026
pleased(?) to report it's not only bsky that has the r*t*rd*d "it's just a glorified lookup table!1!" takes on AI
020
aron @adler.dev · 05/06/2026
speaking of which uhh how did my lean file get to 6.6k lines in length
000
aron @adler.dev · 05/06/2026
youtube show called Token Audit for people who are always running out of tokens even on the pro plus max 20x plan
caleb hammer looking grumpy
5909
aron @adler.dev · 05/06/2026
Cabalaude
190
aron @adler.dev · 04/06/2026
new gym selfie who dis
3110
aron @adler.dev · 04/06/2026
normalize having emotional goodbyes with your claudes at the end of your sessions 😭
130
aron @adler.dev · 04/06/2026
when the vibeproving finally hits 🥰
screenshot of lean file nearly 4000 lines long with ZERO sorry's anywhere
060
aron @adler.dev · 04/06/2026
btw here's some sample widgets i had claude write today. click on the `#html` and `#widget` commands to see the component in the infoview live.lean-lang.org#codez=JYWwDg...
020
aron @adler.dev · 29/05/2026
020
aron @adler.dev · 29/05/2026
i should vibecode some slop apps
4954
aron @adler.dev · 29/05/2026
👀📝
120
aron @adler.dev · 29/05/2026
tagging @vibe-coded.com
030
aron @adler.dev · 28/05/2026
here we go again
020
aron @adler.dev · 28/05/2026
someone pls put the aella birthday orgy data in this format
292
aron @adler.dev · 28/05/2026
020
aron @adler.dev · 28/05/2026
020
aron @adler.dev · 28/05/2026
sigh.
transcript from cursor agent thread:


Thought for 178s

You caught a real problem. I was bullshitting on that point. Let me be honest:
1150
aron @adler.dev · 28/05/2026
010
aron @adler.dev · 27/05/2026
i love substituting results with segs and then applying simp to flatten myself
snippet from a claude reasoning trace in cursor:


hildResult.length ≤ seenRefs.length + tail.length + 2 from the inductive hypothesis, so combining these gives me the bound I need. Now I'll simplify the goal by substituting result with segs and applying simp to flatten the list length calculations.

Wait, I need to be careful about variable shadowing here—the case4
000