ecsolticia's Avatar

ecsolticia

@ecsolticia.seeks.quest

Mathematics, DSLs, automata, computer simulation and big words tickle my fancy. ecsolticia.codeberg.page

43 Followers  |  62 Following  |  197 Posts  |  Joined: 06.05.2025  |  1.9664

Latest posts by ecsolticia.seeks.quest on Bluesky

Not counting yesterday since I took an intentional break away from the project.

08.12.2025 13:33 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Day 4 of working on #logissert, a simple boolean logic DSL with equivalence-aware asserts for boolean functions.

Today I added data structures for representing boolean functions as truth tables, and for mapping symbols to truth tables. Constants are treated as functions with zero arity.

08.12.2025 13:33 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Day 3 of working on #logissert, a simple boolean logic DSL with equivalence-aware asserts for boolean functions.

The parser is "done" (codeberg.org/ecsolticia/l...). Technically, it's not true to the grammar I wrote down in that it ignores sugar syntax, but that's for another time.

06.12.2025 16:03 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Day 2 of working on #logissert

Halfway there to a recursive descent parser for the grammar.

Thought I could write the parser in a day, and I COULD. But that would require me to spend more time on in, and I don't want to do that today.

The parser should be done by tomorrow if nothing comes up.

05.12.2025 15:05 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Building it from scratch again. The existing code wasn't spaghetti or anything, I just don't like how I structured it anymore. Also cutting down on some fluff.

A zero-copy lexer done today. I'm going slow this time as I have other things to do. Will implement the parser tmrw.

Calling it #logissert

04.12.2025 15:27 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Have been on a total break from my usual projects for a while. Too much going on.

02.12.2025 17:25 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
This alignment chart explores what counts as an "interpreter" across two dimensions: implementation (what form the interpreter takes) and input (what it processes).
Implementation Axis
Implementation Purist: An interpreter must be a programβ€”software that executes on a computer.
Implementation Neutral: An interpreter must be electronicβ€”it can be hardware or software, but requires circuits and electricity.
Implementation Rebel: An interpreter can be anythingβ€”no restriction on physical form or medium.
Input Axis
Input Purist: An interpreter works on a programβ€”it must execute formal code or instructions.
Input Neutral: An interpreter works on textβ€”it processes symbolic or written information.
Input Radical: An interpreter works on anythingβ€”no restriction on input type.
Examples Across the Spectrum

Lua (program processing programs)
CPU (electronic processing programs)
CEK-Machine (anything processing programs)
Excel (program processing text)
LLM (electronic processing text)
Shredder (anything processing text)
Doom (program processing anything)
TV (electronic processing anything)
Choir (anything processing anything)

This alignment chart explores what counts as an "interpreter" across two dimensions: implementation (what form the interpreter takes) and input (what it processes). Implementation Axis Implementation Purist: An interpreter must be a programβ€”software that executes on a computer. Implementation Neutral: An interpreter must be electronicβ€”it can be hardware or software, but requires circuits and electricity. Implementation Rebel: An interpreter can be anythingβ€”no restriction on physical form or medium. Input Axis Input Purist: An interpreter works on a programβ€”it must execute formal code or instructions. Input Neutral: An interpreter works on textβ€”it processes symbolic or written information. Input Radical: An interpreter works on anythingβ€”no restriction on input type. Examples Across the Spectrum Lua (program processing programs) CPU (electronic processing programs) CEK-Machine (anything processing programs) Excel (program processing text) LLM (electronic processing text) Shredder (anything processing text) Doom (program processing anything) TV (electronic processing anything) Choir (anything processing anything)

Interpreter alignment chart

15.10.2025 19:56 β€” πŸ‘ 95    πŸ” 15    πŸ’¬ 1    πŸ“Œ 0

this speaks to me

19.11.2025 15:55 β€” πŸ‘ 4    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

the ugly truth they don't want you to know is that the math without numbers is actually more fun than the math with numbers

18.11.2025 13:59 β€” πŸ‘ 74    πŸ” 14    πŸ’¬ 5    πŸ“Œ 0
let F = <X> AND(X, NOT(X))
assert NOT(F)

let OR(x, y) = NOT(AND(
        NOT(x), NOT(y)
))

let XOR(x, y) = AND( NOT(AND(x, y)), OR(x, y) )
let EQ(x, y) = NOT(XOR(x, y))

let T = <X> EQ(X, X)
assert T

let I(x) = <a> OR(
        AND(a, NOT(a)),
        x
)
assert      I(T)
assert NOT( I(F) )

let HalfAdderR(a, b) = XOR(a, b)
let HalfAdderC(a, b) = AND(a, b)

let SumIsNonzero(a, b) = OR( HalfAdderR(a, b), HalfAdderC(a, b) )

let One = T
let Zero = F

assert SumIsNonzero(One, One)
assert SumIsNonzero(One, Zero)
assert SumIsNonzero(Zero, One)
assert NOT(SumIsNonzero(Zero, Zero))

let F = <X> AND(X, NOT(X)) assert NOT(F) let OR(x, y) = NOT(AND( NOT(x), NOT(y) )) let XOR(x, y) = AND( NOT(AND(x, y)), OR(x, y) ) let EQ(x, y) = NOT(XOR(x, y)) let T = <X> EQ(X, X) assert T let I(x) = <a> OR( AND(a, NOT(a)), x ) assert I(T) assert NOT( I(F) ) let HalfAdderR(a, b) = XOR(a, b) let HalfAdderC(a, b) = AND(a, b) let SumIsNonzero(a, b) = OR( HalfAdderR(a, b), HalfAdderC(a, b) ) let One = T let Zero = F assert SumIsNonzero(One, One) assert SumIsNonzero(One, Zero) assert SumIsNonzero(Zero, One) assert NOT(SumIsNonzero(Zero, Zero))

Why settle for a typical digital logic circuit simulator when you can build your own, but as a computer language instead? I already have a correct implementation of the core functionalities (it's rather simple), but I have yet to fully sort the UI out. Been a fun project so far!

18.11.2025 09:19 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 0    πŸ“Œ 1

Congrats!!

14.11.2025 03:05 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

here's a btw: the lexer and parser are entirely zero-copy

10.11.2025 12:01 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Implied terminal output of `cargo run` on said DSL project:

```
[[tokens]]

1 |[let][OR][(][A][,][B][)][NOT][(][AND][(][NOT][(][A][)][,][NOT][(][B][)][)][)]
2 |[assert][!]
---
Error code 7:
Expected assignment operator '='
  - 
1 | let OR(A, B) NOT(AND( NOT(A), NOT(B) ))
  - -------------^^^
Error occured at line 1, from column 14 to 16
=======
Error code 9:
Expected valid identifier in expression
  - 
2 | assert !
  - -------^
Error occured at line 2, from column 8 to 8
=======
```

Implied terminal output of `cargo run` on said DSL project: ``` [[tokens]] 1 |[let][OR][(][A][,][B][)][NOT][(][AND][(][NOT][(][A][)][,][NOT][(][B][)][)][)] 2 |[assert][!] --- Error code 7: Expected assignment operator '=' - 1 | let OR(A, B) NOT(AND( NOT(A), NOT(B) )) - -------------^^^ Error occured at line 1, from column 14 to 16 ======= Error code 9: Expected valid identifier in expression - 2 | assert ! - -------^ Error occured at line 2, from column 8 to 8 ======= ```

I'm wondering to myself why I approximately quadrupled the amount of development time just for fancier error-reporting for an utterly simple DSL I'm cooking. The rules are simple enough that the errors are generally easy to spot by inspection anyway. But hey, it looks nice! (I think)

10.11.2025 12:01 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Types and other techniques as an accessibility tool for the ADHD brain - Michael Newton
YouTube video by Zig SHOWTIME Types and other techniques as an accessibility tool for the ADHD brain - Michael Newton

there was this great talk at one of the zig conferences where a developer talked about how they preferred static types because of their adhd.

static types are also an accessibility tool

youtu.be/vd1-rAIYV6I

08.11.2025 15:51 β€” πŸ‘ 22    πŸ” 5    πŸ’¬ 1    πŸ“Œ 4
Video thumbnail

Autopilot. Sharp turns.
Symmetry. Periodicity.

09.11.2025 04:54 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

oh and don't forget

❌ rating out of 5
βœ… rating mod 5

09.11.2025 03:01 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

yay

08.11.2025 16:40 β€” πŸ‘ 12    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

When people celebrate the individual genius of folks in science, they should also
mourn the collective loss of genius of folks who were actively discouraged or disadvantaged from a career in science because of the same person(s)

07.11.2025 23:43 β€” πŸ‘ 1348    πŸ” 295    πŸ’¬ 10    πŸ“Œ 14

My intuition is that it can vary based on how serious things get and what exactly it is that you are measuring, but I should clarify... I'm not as well-versed in *applied* statistics to be sure. Just that my interest in cognitive biases helped here :p

For something casual, averaging seems fine tho.

07.11.2025 15:29 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

In this case, if your stats went up just due to October having more days, then thinking that your stats went up in October for some substantial reason would have constituted denominator neglect.

07.11.2025 14:22 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Time for me to infodump! :p

What you just avoided right there is called denominator neglect. It basically means you consider only the number of times something happened, forgetting how many times it could have possibly happened to begin with.

07.11.2025 14:22 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Also because I think just because you're struggling shouldn't mean you can't enjoy games, art, or any form of culture for that matter.

The idea of pirating anything myself does make me slightly uncomfortable nowadays, but that's conveniently when I don't have a need to pirate anymore.

03.11.2025 06:12 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Of course "people" meant generally might have a different response to this, but it wouldn't matter to me. Partly because I've been in precarious situations myself, where spending money on games would've been irresponsible.

03.11.2025 06:12 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

If not for this bias being that strong for me, I would probably have felt like I had lots more to say. Because it really holds me back from expressing a large portion of my thoughts in social situations, since I assume that others must already understand what I might have to say.

30.10.2025 07:41 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

I have this reoccurring bias of assuming that what is obvious to me must be obvious to others too. Unsurprisingly, I often get surprised when I say something that's obvious to me, and someone else labels it insightful or illuminating somehow.

30.10.2025 07:41 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

hi

25.10.2025 16:30 β€” πŸ‘ 3    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

At this point I have to admit I have no idea who anyone means when they refer to "normies"

24.10.2025 14:43 β€” πŸ‘ 27    πŸ” 3    πŸ’¬ 8    πŸ“Œ 0

yes algebra, why lie, when linear was enough?

21.10.2025 22:14 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Preview
Pub subpages & other recent features! Lab Notes 013: publications can now have nested pages β€” illustrated here with pages about embeds, comments, and more

New in Leaflet Publications: subpages!

One of our favorite features from Leaflet docs, now available to turn your blog posts into…

…collections? wikis? project logs? zines? essays with twisty tangents? or other complex creative branching forms :)

Check out this post to see what it looks like!

21.10.2025 19:42 β€” πŸ‘ 123    πŸ” 25    πŸ’¬ 10    πŸ“Œ 10

Recursive descent parsers have become my favorite thing to program recently.

19.10.2025 03:24 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

@ecsolticia.seeks.quest is following 20 prominent accounts