I have now finished resolving some issues in my system. Here is a short presentation of the current state. In terms of the older system (which had the four parts "static patterns", "variable patterns", "correlations", and "functions of data") this is essentially a completed version of stage 4, constructed in such a way as to allow the other stages to come naturally from it (rather than using it as a catch-all last stage that could do "anything else").
1. Things with Relations:
Each Thing has a unique identity, and can be further distinguished by possessing Relations of various types. These relation-types are arbitrary, created based on what's being modeled. A relation points to another Thing, and that Thing that it points to is called the Value of the relation.
A Class is a defined by a set of constraints on a Thing or set of Things. An Instance of a Class is a thing or set of things which satisfies these Constraints. A set of Constraints is defined by a list of Properties of a thing, or negations of such properties, connected by 'and' or 'or'. Properties may be:
-the Identity of a Thing (so that we could define "the class of all things that are this, this, or this"; in other words, we can define classes by explicitly listing elements.)
-the Identity of relations possessed by a thing (so that we could define "the class of all things which have children", for example.)
-Any properties of the value of a relation of a given type (including the identity of the value, so we could define "all children of Joe", other relations possessed by the value, so we could define "all children of people with jobs", or any other properties)
3. Searches for These Classes
We can search for these classes by testing for Things or sets of Things that satisfy the class definitions. We would normally search in a set space, such as the stream of input. When a class that is a constituent part of some larger class is found, it could trigger a search for that larger part; this would allow us to search only for the smallest parts, and the rest would take care of itself if needed.
4. Searches for New Classes
In addition to looking for already-learned classes, we must look for new ones, based largely on recognizing classes which repeat often. This process will generally be done after searching for old classes, so that new classes build on old ones, using them as constituent parts.