By the way, we finally made rholang what it was intended to be. There’s a proper data definition language so that users can define data types. However, not just static structures, nor merely mutable structures, but structures that have behavior, i.e. whole languages. So, you don’t just send rholang programs on channels, but programs from any user defined language. The channel types say what kind of user defined programs can be carried. Meanwhile, the for-compression has added a where clause: for( pattern <- channel where condition )P. Conditions may be expressed in a variety of different logics, where a logic is generated from a user defined language. This allows for both dynamic and static typing. Conditions can check behavior, as well as structure or properties. The crown of the construction is that the conditions can be fuzzy. They don’t have to be Boolean valued. They can be the positive reals, or even the complex numbers. In these cases we don’t do a state change, but instead run a simulation (such as Gillespie). This is exactly the divide in agentic processing: reading and writing on a channel is observable behavior, while evaluating the condition is internal processing, aka inference. The whole language is tiny, self-describing, and covers every programming discipline proposed so far.