Sorry, there is a lot to it and but I’ll try and backup and give some overview.
Syndicate has a few levels, there is the protocol for publishing assertions and sending messages, there are “dataspaces” that implement observations of data using patterns, and then there is the actor/facet level for structuring concurrency within a program.
“Preserves” is the data language used in the protocol and dataspaces. Preserves does not support things like functions, but it can have embedded references to stateful entities, which can be protocol endpoints.
If I follow the Propagation paper correctly, dataspaces can be used to implement a “propagation network” where the cells are actually formed by the patterns that machines observe. Machines would not be free of state though because if a machine disappears the values it produced would be retracted from the network. This is different from
blackboard-style Tuplespaces where data persists after the publisher vanishes.
The Conversational Concurrency paper does a good comparison of dataspaces with things like Tuplespaces. In practice though the observation and reaction to an observation is seldom done because of the tediousness of creating patterns over patterns.