The Future of Knowledge Systems: CMCC and BRCC Explained
Revolutionizing Business Rules and Knowledge Graphs with a Single Declarative Model

The Future of Knowledge Systems: CMCC and BRCC Explained
ZTS: Zero-to-Sixty Podcast: Transforming Knowledge Forever
The Future of Knowledge Systems: CMCC and BRCC Explained
Abstract
In this episode, we dive deep into the future of knowledge systems, discussing two revolutionary frameworks: the Business Rule Completeness Conjecture (BRCC) and the Conceptual Model Completeness Conjecture (CMCC). These frameworks redefine how businesses, AI, and data-driven applications handle rules, knowledge, and automation.
We explore how CMCC can seamlessly replace OWL, RDF, SWRL, Neo4j, and GraphQL as a unified knowledge layer—eliminating redundancy, making business logic explicit, and preventing data entropy. We also discuss why precomputed relationships, aggregations, and declarative modeling eliminate the need for runtime inference engines, transforming how enterprises and AI systems handle evolving knowledge.
Chapters & Key Takeaways
1. The Problem: Why Business and Knowledge Systems Are Broken
-
Traditional business rules and knowledge representation models (e.g., OWL, RDF, and custom rule engines) create fragmentation.
-
Code-heavy systems introduce drift, inconsistency, and entropy, making maintenance difficult over time.
-
A new paradigm is needed—one that eliminates stepwise logic and imperatively managed rules.
2. What is CMCC and BRCC? The Future of Declarative Knowledge Systems
-
CMCC (Conceptual Model Completeness Conjecture) states that all computable knowledge can be represented using five declarative primitives:
-
Schema (S) – Defines categories of things.
-
Data (D) – Populates those categories.
-
Lookups (L) – Creates structured relationships.
-
Aggregations (A) – Produces roll-up insights.
-
Lambda Calculated Fields (F) – Encodes rules as declarative formulas.
-
-
BRCC (Business Rule Completeness Conjecture) extends CMCC to business logic—asserting that all business rules can be encoded declaratively without code.
3. OWL, RDF, SWRL, Neo4j & GraphQL vs. CMCC: Why CMCC is the Future
-
OWL/RDF are powerful but require runtime reasoning. CMCC materializes logic as first-class fields, eliminating runtime inference needs.
-
Neo4j & Graph Databases rely on runtime graph traversal, while CMCC precomputes relationships and insights for faster querying.
-
GraphQL simplifies API queries but does not solve knowledge representation problems—CMCC does by ensuring precomputed, structured relationships.
4. Case Study: Rebuilding the Pizza Ontology with CMCC
-
The Pizza Ontology, a classic knowledge representation challenge, is fully transformed into a CMCC model.
-
Instead of relying on runtime reasoners, vegetarian classifications, topping relationships, and business rules are stored natively within the schema as lookups, rollups, and formulas.
-
Key insight: By removing external inference steps, CMCC creates a self-maintaining, self-descriptive knowledge system.
5. Beyond Pizza: Finance, Medical Knowledge Graphs, and Supply Chains
-
Finance: CMCC enables real-time regulatory compliance, risk tracking, and portfolio management through declarative logic, reducing the need for separate rule engines.
-
Medical Knowledge Graphs: Diagnoses, symptoms, and treatments can be modeled as data, relationships, and inferences directly within a CMCC schema.
-
Supply Chain Optimization: Aggregating lead times, component dependencies, and risk exposure can be modeled natively, without scripting.
6. AI & LLMs: How CMCC Can Teach AI to Reason Declaratively
-
Current AI models hallucinate because they lack structured, real-world knowledge representation.
-
CMCC provides AI-ready structured knowledge, making it easier for LLMs to perform logic-based inference instead of probabilistic guesswork.
-
Self-maintaining knowledge graphs enable AI to stay accurate without constant fine-tuning.
7. The Business Impact: Why Companies Must Adopt CMCC Now
-
The Biggest Lie in Business Software: Codebases always decay over time—CMCC prevents this by localizing business logic in the schema.
-
Adoption Strategy: Businesses can incrementally migrate by starting with meta-schema extraction from existing systems, replacing imperative logic with declarative definitions.
-
The Future: Within 5 years, CMCC-powered systems will dominate knowledge-driven enterprises.
Executive Summary
The Future of Knowledge Representation is Here
This episode redefines how businesses, AI, and knowledge-driven applications should structure information. By leveraging CMCC (Conceptual Model Completeness Conjecture) and BRCC (Business Rule Completeness Conjecture), we eliminate imperative programming for rules, knowledge fragmentation, and the increasing entropy of complex systems.
Key Insights:
-
Declarative knowledge modeling is the future. CMCC stores logic as schema, not code, eliminating runtime reasoning, imperative scripts, and knowledge drift.
-
AI and businesses will converge on this model. By precomputing relationships and business rules, CMCC ensures that AI and human-driven systems operate on the same transparent, immutable rulebook.
-
The shift to CMCC is inevitable. Companies that adopt schema-driven rule engines will outpace their competitors, making traditional code-based knowledge systems obsolete.
Call to Action:
This is the defining moment for knowledge representation. Whether you’re a business leader, developer, or AI researcher, you need to embrace CMCC now. Want to start? Extract your meta-schema, encode your business rules declaratively, and future-proof your knowledge systems today.
Full Interview Transcript
Conceptual Model Completeness Conjecture (CMCC) & Business Rule Completeness Conjecture (BRCC)
Introduction to CMCC & BRCC
Conceptual Model Completeness Conjecture (CMCC) is a proposed principle that all computable knowledge can be represented entirely within a schema-driven model using just five core primitives: Schema, Data, Lookups, Aggregations (Rollups), and Lambda Calculated Fields.
[zenodo.org](https://zenodo.org/records/14735965# :~:text=The%20Business%20Rule%20Completeness%20Conjecture,aims%20to%20eliminate%20the%20pervasive)
[zenodo.org](https://zenodo.org/records/14759299# :~:text=posits%20that%20all%20declarative%20semantics,Aggregations%29%2C%20and)
In essence, CMCC posits that any computable object or rule – whether a mathematical concept or a business policy – can be modeled declaratively with these primitives, treating time as just another dimension of data.
[zenodo.org](https://zenodo.org/records/14836225# :~:text=the%20Conceptual%20Model%20Completeness%20Conjecture,specific%20languages%20required)
This means all the “knowledge” (the what) resides in the schema and data definitions themselves, requiring no external scripting or specialized rule engines. Higher-order inferences (second-order, third-order, etc.) become first-class citizens in the model – they are captured as additional schema elements (like derived fields or tables) rather than in external code or sidecar rule files. For example, complex inferred facts (like a geometric property or a business decision outcome) can be represented as calculated fields or pre-computed records that update as underlying data changes.
[zenodo.org](https://zenodo.org/records/14836225# :~:text=We%20begin%20by%20gradually%20building,Finally%2C%20we%20compare%20CMCC%20to)
By making even these inferences part of the schema, the model remains self-contained and explicit, eliminating the need for separate reasoning engines or sidecar processes to derive them.Business Rule Completeness Conjecture (BRCC) is the business-focused counterpart to CMCC. Formulated by E.J. Alexandra, BRCC applies the same idea to enterprise and domain models, asserting that all declarative semantics for any business domain or workflow can be unambiguously captured with the same five primitives in an ACID-compliant data environment.
[zenodo.org](https://zenodo.org/records/14735965# :~:text=The%20Business%20Rule%20Completeness%20Conjecture,aims%20to%20eliminate%20the%20pervasive)
In other words, every business rule (no matter how complex) can be decomposed entirely into structured data, relationships, roll-up aggregations, and formulaic calculations within a database schema.
[zenodo.org](https://zenodo.org/records/14735965# :~:text=The%20Business%20Rule%20Completeness%20Conjecture,aims%20to%20eliminate%20the%20pervasive)
The rulebook of the business (the what) is thus fully specified in the conceptual model itself, separate from the imperative application code (the how that executes these rules).
[zenodo.org](https://zenodo.org/records/14735965# :~:text=and%20unambiguously%E2%80%94using%20only%20five%20declarative,The)
Time is treated as just another dimension in the schema, meaning temporal aspects of rules (e.g. “within 30 days” or historical state) can be captured via data and formula, rather than hard-coded logic.
[zenodo.org](https://zenodo.org/records/14735965# :~:text=explicitly%20decoupled%20from%20the%20runtime,attempts%27%E2%80%94no%20such%20counterexample%20has%20emerged)
A key motivation of BRCC is to eliminate the “ripple effect” where a small rule change cascades through multiple code and configuration files in traditional systems.
[zenodo.org](https://zenodo.org/records/14735965# :~:text=explicitly%20decoupled%20from%20the%20runtime,The)
If all rules live in one schema-driven model, a change is localized and the model’s integrity can be automatically checked, preventing the entropy and inconsistencies that often plague evolving business systems.In summary, CMCC/BRCC propose a unified, schema-centric approach to knowledge representation. Instead of scattering logic across code, configuration, and separate rule engines, we formalize everything in a declarative meta-model composed of tables (entities), records (instances), lookup links (relationships), rollup/aggregation fields (derived summaries), and calculated fields (formulas or lambdas).
[zenodo.org](https://zenodo.org/records/14759299# :~:text=posits%20that%20all%20declarative%20semantics,Aggregations%29%2C%20and)
This approach is Turing-complete in expressiveness – any finite computable rule can be encoded using these primitives
[zenodo.org](https://zenodo.org/records/14759299# :~:text=theoretical%20proof%20sketch%2C%20inspired%20by,the%20how)
– yet it remains transparent. All derivations that would traditionally require runtime inference are present in the model at design-time, stored as data or schema. The result is a self-descriptive system where the knowledge (even complex, higher-order knowledge) is fully accessible via the schema’s own API, and nothing is hidden in imperative code. The conjectures are framed to be falsifiable: one can disprove them by finding a rule or concept that cannot be modeled with these five primitives in a relational/ACID environment.
[zenodo.org](https://zenodo.org/records/14735965# :~:text=,attempts%27%E2%80%94no%20such%20counterexample%20has%20emerged)
So far, after decades of practical use and even AI-assisted searches for counterexamples, no such case has been found
[zenodo.org](https://zenodo.org/records/14735965# :~:text=,attempts%27%E2%80%94no%20such%20counterexample%20has%20emerged)
– lending credence to the idea that CMCC and BRCC hold across domains.
Schema-Driven Knowledge Representation
Both CMCC and BRCC advocate for a schema-driven approach to knowledge representation. This means the schema (the structure of data) isn’t just a passive storage design but actively encodes the semantics and rules of the domain. The five primitives each play a role:
-
Schema & Data: At the base, we have an ACID-compliant schema defining tables (or classes) and fields (properties), and data populating those tables
-
[zenodo.org](https://zenodo.org/records/14759299# :~:text=posits%20that%20all%20declarative%20semantics,Aggregations%29%2C%20and)
-
This covers the first-order facts: for example, a table of Employees with records of each employee and columns for their attributes. Traditional modeling stops largely at this level for facts.
-
Lookups (Relationships): Lookups link records between tables, establishing relationships (one-to-many, many-to-many, hierarchies). This corresponds to foreign keys in a database or object references in an ontology. In a knowledge graph sense, lookups are edges connecting nodes. They allow the model to express statements like “Employee X works in Department Y” or “Pizza Z has Topping T” as data relationships rather than hardcoded IDs. These links are part of the schema and thus known to the system, enabling traversals and joins declaratively.
-
Aggregations (Rollups): Rollup fields aggregate data from related records. For instance, a Department record might have a rollup that counts how many employees are linked to it, or a Pizza might have a rollup listing all ingredient categories present among its toppings. Aggregations allow higher-order facts to be computed and stored within the model. Rather than calculating these summaries on the fly in a query, the model definition itself carries them. This is akin to materialized views in SQL or aggregate functions in a report, but here they are first-class fields. Rollups can produce numbers, lists, or other derived values from a set of related records.
-
Lambda Calculated Fields: These are formula fields that compute some result from other fields, using expressions (the term “lambda” implies they can be thought of as inline function definitions). Calculated fields can implement business logic or mathematical rules. For example, a calculated field isHighRisk in a Portfolio table might evaluate to true if more than 50% of investments are in volatile assets, or a field TriangleType might compute whether a triangle is right-angled from its side lengths. These formulas can range from simple arithmetic to multi-step logic referencing lookups and rollups. Essentially, they encode business rules or constraints declaratively. Any rule that could be coded in an if-then or algorithm can instead live as a formula in the schema. The combination of rollups and calculated fields means even second-order or third-order inferences (inferences based on other inferences) are handled inside the model: e.g. one calculated field might depend on an aggregated value from related data, layering logic as needed
-
[zenodo.org](https://zenodo.org/records/14836225# :~:text=We%20begin%20by%20gradually%20building,Finally%2C%20we%20compare%20CMCC%20to)
By using these primitives, the model becomes richly expressive. Higher-order inferences are elevated to first-class model elements. In a traditional system, if you need a complex business rule (say, “if a customer has purchased more than 5 items in the last month and has an average review rating above 4.5, classify them as VIP”), you might implement that in application code or a stored procedure. Under CMCC/BRCC, you would create an aggregation field for “purchases in last month”, another (or a formula) for “average review rating”, and then a calculated field isVIP that checks the conditions – all within the schema. The logic is transparent and versioned with the data model, not buried in code. No external rule engine or sidecar process is needed to evaluate VIP status – any query or application can just read the isVIP field.
Critically, this approach implies a closed-world assumption within the model, akin to how relational databases operate: what is not known in the data is assumed false or nonexistent. This contrasts with the Semantic Web’s typical open-world assumption (where absence of a fact isn’t assumed as false). By working in a closed-world, ACID setting, the model can enforce constraints and completeness. Every required relationship or field either exists or the record is invalid per the schema. This is how BRCC ensures completeness of business rules: everything the business rules demand is either present in the schema/data or the data fails validation. Nothing is implicitly “out there” unmodeled. We will see later how this closed-world, precomputed approach helps eliminate many runtime concerns.
In sum, CMCC and BRCC shift knowledge representation to be schema-centric and self-sufficient. The entire universe of discourse for your domain is intended to live in a single connected schema, with all derivable facts represented explicitly (if not as base data, then as relationships or computed fields). This makes the knowledge base easier to maintain and reason over, since one can inspect the schema and data to discover all truths asserted or implied. The model effectively becomes its own mini-knowledge graph and rule engine combined.
Comparative Analysis with Existing Technologies
The ideas behind CMCC may sound reminiscent of databases, ontologies, and knowledge graphs. Indeed, CMCC/BRCC draw upon concepts from these fields, but aim to extend and generalize them into a unified framework. Below we compare how CMCC relates to several popular paradigms and standards: OWL/RDF (Semantic Web), SWRL (rules), graph databases (Neo4j, ArangoDB), and GraphQL (API query language).
-
OWL/RDF (Semantic Web Ontologies): The Web Ontology Language (OWL) and Resource Description Framework (RDF) are designed for representing knowledge as classes, properties, and individuals (triples). CMCC shares the goal of formally capturing domain semantics, but it addresses some limitations of OWL/RDF. Notably, OWL ontologies often require external reasoning to derive implicit facts. For example, OWL can state that if X is a parent of Y and Y is a brother of Z, then X is an uncle of Z, but you need a reasoner to infer the uncle relationship at runtime. In CMCC, such an inference would be made explicit by a lookup and formula in the schema (e.g., a lookup from person to their siblings’ children, and a calculated field marking uncles). In effect, CMCC moves what would be runtime inference in OWL into design-time computation. This eliminates the need for a separate reasoning engine because the "reasoned" facts are stored as part of the data model.
-
Another distinction is the handling of rules and constraints. OWL by itself is limited in expressiveness for certain constraints (it cannot easily express arithmetic or if-then style rules in the ontology). The Semantic Web community introduced SWRL (Semantic Web Rule Language) to allow rules in combination with OWL
-
[en.wikipedia.org](https://en.wikipedia.org/wiki/Semantic_Web_Rule_Language# :~:text=Language%20to%20express%20rules%20and,logic%20with%20semantic%20web)
-
[en.wikipedia.org](https://en.wikipedia.org/wiki/Semantic_Web_Rule_Language# :~:text=SWRL%20has%20the%20full%20power,5)
-
SWRL is powerful (in fact, it extends OWL DL to First-Order Logic), but this comes “at the price of decidability and practical implementations”
-
[en.wikipedia.org](https://en.wikipedia.org/wiki/Semantic_Web_Rule_Language# :~:text=SWRL%20has%20the%20full%20power,5)
-
– meaning reasoning with unrestricted SWRL can become non-computable or very slow. CMCC’s approach achieves similar expressiveness (thanks to calculated fields which can implement arbitrary computations) but stays within the realm of a database, where all computations are guaranteed to terminate on finite data. Instead of worrying about logic decidability, one leverages the underlying database engine for evaluation. Moreover, any rule added via a formula field immediately materializes its effects in the data, whereas adding a SWRL rule requires running the reasoner to see its implications.Another difference is open-world vs closed-world. OWL assumes an open world: just because a fact isn’t in the ontology doesn’t mean it’s false – it might be unknown. CMCC/BRCC assume a closed world like a typical business database – if a fact isn’t recorded, it’s treated as false or inapplicable. This fits business scenarios where completeness of data is expected (e.g., if an order record lacks a required field, that’s an error, not an invitation to speculate). The closed-world assumption allows CMCC to enforce constraints strictly (e.g., “every pizza must have at least one topping” can be enforced such that any pizza without a topping violates the schema and is considered invalid data). In OWL, one could say a Pizza without topping is inconsistent only by making certain universal restrictions and explicitly stating closure axioms, which is more complex. In CMCC, completeness is built-in – you enumerate all allowed related records or values, and what’s not linked simply isn’t considered present.
-
Finally, CMCC can actually incorporate OWL/RDF content and then output an improved version. Think of taking an OWL ontology (classes, properties, axioms) and mapping it into the five-primitives model: classes become tables, individuals become records, properties become fields/links, and axioms like “hasTopping only VegetarianTopping” become formulaic constraints or flags. Once in this form, we can add any missing pieces (like computed classifications that OWL would infer but weren’t explicitly stated). The enriched model can then be exported back to OWL/RDF, effectively filling in the implicit knowledge as explicit triples or new class definitions. In other words, CMCC can serve as a round-trip transformer: ingest an ontology, make it complete by computing all entailed facts and constraints, then spit out a more explicit ontology. This could result in, for example, an OWL file where previously implicit subclass relationships or property assertions are now directly present, making the ontology more self-sufficient without a reasoner. We will demonstrate this with the Pizza Ontology example later.
-
SWRL and Rule Engines: As mentioned, SWRL is one approach to add rules to an ontology. In the broader sense, businesses often use rule engines or scripting (like Drools, Prolog, or custom code) to implement conditional logic that can’t be expressed in a static model. BRCC challenges the need for those by claiming all such rules can live in the schema. For instance, consider a rule engine that checks “if a customer’s account balance goes below zero, send an alert and mark account as overdrawn.” In a CMCC model, you might have a formula field isOverdrawn = balance < 0 and perhaps a trigger or another table logging alert events when this field becomes true. The key is that the condition itself (balance < 0) is stored as a declarative formula, not buried in an event handler. Many rule engines also support higher-order logic (rules that trigger other rules). CMCC allows similar chaining because one formula field can depend on the result of another, effectively layering logic. The advantage of CMCC here is unification and transparency: rules aren’t a separate layer of code; they are unified with the data model. This reduces internal knowledge dependencies that often occur when rules are separate – e.g., a rule might rely on an internal variable that’s not exposed elsewhere. In CMCC, any intermediate value a rule uses likely becomes a named field in a table, which any part of the system can query or inspect.
-
Graph Databases (Neo4j, ArangoDB): Graph databases like Neo4j store data as nodes and relationships, which is somewhat analogous to storing tables and lookup links in CMCC. Indeed, a CMCC model can be seen as a property graph: each record is a node with properties (fields), and each lookup link is an edge to another node. The big difference is that pure graph databases typically do not enforce a global schema or computed fields by default. They are schema-optional and focus on efficient relationship traversal. If you want to enforce that, say, every “pizza” node must have at least one “hasTopping” edge to a topping node, a graph DB alone won’t ensure that – you’d need to add checks in your application or use constraint mechanisms outside the core graph model. Likewise, if you want a property like “isVegetarian” on a pizza node that depends on its toppings, in Neo4j you might either compute it on the fly via a query or set up a trigger to maintain it. In contrast, CMCC bakes these constraints and computed properties into the model itself. It treats the graph of data as one facet of the model, but also includes the tabular/relational structure and calculations.
-
ArangoDB is interesting because it’s a multi-model database (able to do documents, key-value, and graph in one system). It touts offering graph capabilities along with JSON document storage, etc., whereas Neo4j is purely a graph store
-
[arangodb.com](https://arangodb.com/solutions/comparisons/arangodb-vs-neo4j/# :~:text=ArangoDB%20offers%20the%20same%20functionality,performance%2C%20plus%20several%20additional%20features)
-
In a way, CMCC’s approach is also multi-model: a single CMCC schema can behave like a relational store (tables of records), a document store (each record can be seen as a structured object with fields, possibly including nested lookups), and a graph (the network of links between records). The unification of models is a common theme – ArangoDB allowing documents and graph edges in one database is analogous to CMCC allowing you to represent what would be separate structures (a set of tables, plus a knowledge graph of relationships, plus a set of computed summary tables) all in one integrated meta-schema. By predefining relationships and computations, CMCC can even achieve some of the performance benefits of multi-model integration. For example, ArangoDB notes that you can run ad-hoc queries mixing graph and document data in one go[arangodb.com](https://arangodb.com/solutions/comparisons/arangodb-vs-neo4j/# :~:text=%2A%20Multi,Neo4j%20does%20not%20support%20this)
-
Similarly, in a CMCC model, you could query “Pizza where calories > 1000 and any topping is of type Meat” in one shot, because the schema knows how to join Pizza to Toppings (lookup) and could even have a precomputed calorie total. In a pure graph DB, you’d traverse edges at query time to sum calories; in a pure relational DB without precomputation, you’d join and aggregate at query time. CMCC encourages doing as much as possible at design time (via rollups and formulas), so that query time is fast and straightforward (just reading stored values, or minimal joining).Another point is that graph databases often rely on graph algorithms or pattern matching for inference (e.g., finding transitive connections). CMCC could precompute transitive closures or other graph algorithms results as part of the model if needed (though one must be cautious about storage explosion). For example, if your domain needs to frequently know the connection distance between two nodes, you could have a table that stores reachable nodes or distance counts, maintained by formulas. This is something typically done with procedures in a graph DB, but here again it becomes data.
-
In summary, CMCC extends graph databases by adding strong typing, constraints, and computed logic on top of the graph structure. It minimizes the need for custom scripts or multiple databases by encompassing various data modeling needs in one schema. A practical effect of this is reducing runtime work: expensive graph traversals or repeated join computations can be replaced with direct lookups of precomputed fields. This is essentially pushing work from query-time to design-time (or update-time). We leverage the database’s ability to transactionally maintain those computations whenever data changes, rather than recalculating them from scratch on each query.
-
GraphQL (and API Layers): GraphQL is not a database or knowledge model, but a query language and API layer. It allows clients to request exactly the data structure they need, and behind the scenes resolvers fetch data from databases or services. The relevance here is that GraphQL often sits on top of a complex graph of data sources and must orchestrate them. A common challenge in GraphQL implementations is the N+1 query problem, where naive resolvers make many calls (e.g., one call to fetch a list of objects, then N calls to fetch each object’s sub-data). Techniques like DataLoader batch requests to mitigate this
-
[stackoverflow.com](https://stackoverflow.com/questions/60831980/i-dont-understand-the-graphql-n1-problem# :~:text=Overflow%20stackoverflow,query%20as%20lean%20as%20possible)
-
But fundamentally, GraphQL does not eliminate the need to carefully plan data fetching and joins; it just provides an abstraction. As one discussion notes, GraphQL leaves it to the implementer whether to use SQL joins or separate loader calls, and you might end up doing extra work if not careful
-
[reddit.com](https://www.reddit.com/r/graphql/comments/18lt83f/using_dataloaders_vs_joins/# :~:text=It%E2%80%99s%20faster%20to%20use%20a,for%20your%20expected%20queried%20fields)
-
CMCC can significantly simplify a GraphQL layer. If an enterprise exposes a GraphQL API on top of a CMCC-modeled database, the GraphQL schema can map closely to the underlying tables and fields. Since the conceptual model has already resolved most relationships and computed fields, resolvers become trivial. In many cases, a resolver can just do a single indexed lookup or return a stored field. For example, suppose we have a GraphQL query for pizzas and their toppings and whether they are vegetarian. In a traditional setup, the resolver for Pizza.isVegetarian might have to look at the toppings and calculate on the fly (unless you duplicated that logic in code). With CMCC, isVegetarian is a stored attribute, so the resolver simply reads the value – no extra SQL join or calculation needed. Similarly, a field like Pizza.toppings can be resolved by a direct join that the database can handle efficiently (possibly even without additional queries if using something like PostgreSQL JSON aggregations or if the data is already collocated). In effect, CMCC minimizes GraphQL internal dependencies by precomputing structured data. The GraphQL layer doesn’t need to compose knowledge from disparate sources; the knowledge is already composed in the database.
-
Another aspect is semantic consistency. In complex APIs, sometimes different resolvers might implement overlapping logic (e.g., computing a risk score in two different parts of the API, potentially inconsistently). With a single underlying model, you have one authoritative computation of each piece of semantics. GraphQL just becomes a view layer. This reduces bugs and the aforementioned “entropy-driven decay” where over time different services diverge in how they compute things. If everything derives from one conceptual model, consistency is easier to maintain.
-
As a concrete example, consider the internal workings of GraphQL vs a CMCC approach: A GraphQL server might define a type Human with a field friends: [Human]. It will need a resolver function to fetch those friends from a database by human ID
-
[graphql.org](https://graphql.org/learn/execution/# :~:text=In%20this%20example%2C%20our%20,type)
-
If we want an additional field like friendCount, we either compute length of the friends list in the resolver or add a separate query. In a CMCC approach, the friendCount would likely be a rollup field in the database (count of friendships), so when GraphQL queries it, it’s just reading an integer. No N+1 issue, no separate aggregation query – it was done when the data changed. Essentially, GraphQL benefits from CMCC by treating the database as a single source of truth that already has what clients need. The result is simpler resolver code and potentially fewer database round-trips.
-
Generalization of Model-Driven Systems: We can also view CMCC in the context of model-driven engineering (MDE) and meta-modeling. In MDE, you often have meta-models (like UML class diagrams or domain-specific modeling languages) and maybe code generators or interpreters that act on them. CMCC takes the extra step of making the model executable in a generic way: rather than generating code for each model or requiring a custom interpreter, it leverages a standard database engine to “run” the model. The five primitives are essentially a universal meta-model for any domain. They are analogous to the Meta-Object Facility’s M3 layer (meta-metamodel) which can describe any M2 model
-
[slideplayer.com](https://slideplayer.com/slide/3354151/# :~:text=5%20%20%20%20Meta,134)
-
In fact, CMCC can be seen as a Syntax-Independent Meta-Model (SIMM) for knowledge representation. It’s syntax-independent because it is not tied to OWL syntax, GraphQL schema language, or Java code – it captures concepts in an abstract form (tables, fields, relations) that can be transformed into any concrete syntax needed. This is similar to how a knowledge graph represents facts independently of whether you’ll output them as sentences or database rows.A conversational description by ChatGPT (working with the creator of BRCC) explains that the SIMM approach aims to represent ideas in a way not bound to a specific language, closer to a pure knowledge graph of concepts and relationships
-
File-bppoyjff82ykeqwgym1zbq
-
In that sense, CMCC generalizes the idea of an abstract syntax tree or ontology – it’s a graph of concepts, but one enriched with data processing primitives. Traditional ontologies focus on subclass relationships and properties, but CMCC’s model can also represent computational dependencies (like “this field is the sum of those fields”) as first-class elements. It’s like having an AST that also includes formulas as nodes.Furthermore, whereas tools like GraphQL or OWL each come with their own schema definitions, CMCC’s meta-schema can capture the essence of all of them. It can ingest a GraphQL schema, for example, by creating tables for types and link fields for relationships, and it can equally ingest an OWL ontology by creating tables for classes and possibly additional tables/fields to represent class axioms. After improving or enriching the model, it could output again to those formats. In that way, CMCC acts as a superset or interlingua of knowledge representations – a powerful claim that we’ll back up with implementation details.
In summary, CMCC/BRCC unify the strengths of several paradigms: the rigorous semantics of ontologies, the flexible relationships of graphs, the computation and constraint capabilities of rule engines, and the interface of GraphQL – all under one roof. By precomputing what others leave to query time, CMCC reduces runtime complexity (fewer joins, fewer inference steps on the fly) at the cost of potentially more storage and upfront computation. This trade-off is often beneficial for domains where reads are frequent and speed is critical, since the answers are pre-derived. And because everything lives in one model, consistency is easier to maintain; there’s a single source of truth for both data and logic, minimizing duplication and drift.
Implementation Approach
How can we implement CMCC/BRCC in practice? The good news is that we don’t need to invent a new database from scratch – existing schema-first, no-code databases like Airtable and Baserow provide an ideal substrate. These platforms are essentially user-friendly frontends to relational databases (Airtable uses a proprietary backend with similar characteristics; Baserow uses PostgreSQL under the hood(.
[reddit.com](https://www.reddit.com/r/selfhosted/comments/hwdvda/baserow_an_open_source_nocode_database_and/# :~:text=Reddit%20www,have%20many%20rows%20per%20table)
Crucially, they natively support the five primitives: you define tables and fields (Schema), fill them with records (Data), create linked record fields (Lookups), define rollup fields that aggregate across links, and write formula fields (Calculated Fields) with a spreadsheet-like syntax. They are ACID compliant (PostgreSQL in Baserow guarantees transactionality and consistency, and Airtable’s service ensures consistent state as well). This makes them a practical choice for implementing a CMCC model without writing low-level code.
Baserow and Airtable for CMCC
Baserow (an open-source Airtable alternative) and Airtable can be seen as reference implementations of the kind of environment CMCC needs. In these tools, you can create a base (database) with multiple tables. For each table, you add fields and specify their types (text, number, link to another table, formula, etc.). For instance, in Airtable you can have a Link to another record field which directly links two tables (providing lookup capabilities), and you can add a Rollup field on one table that aggregates a numeric field from all linked records of another table with a function (SUM, COUNT, etc.). You can also add Formula fields where you write expressions in a function language to compute values based on other fields.
This aligns perfectly with the Schema, Data, Lookups, Aggregations, Calculations paradigm. Using such a tool for CMCC means that the modeling process is interactive and schema-driven. One can iteratively add fields or tables to encode new rules, and the system immediately starts computing them on the data.
For example, suppose we’re modeling a simple sales domain: We make a table Orders and a table OrderLines. OrderLines links to an Order (lookup) and has a price. On Orders, we add a rollup field TotalAmount = SUM(OrderLines.price) and a formula field isLarge = TotalAmount > 10000. We have now expressed a business rule (“orders over 10000 are considered large”) entirely in the schema. If we were using a standard SQL database, we could achieve the same with triggers or generated columns, but it would require writing SQL or procedural code. In Airtable/Baserow, it’s a matter of filling out a form for a new field. This lowers the barrier to capturing business logic in the data model itself.
Another benefit is these tools come with APIs out-of-the-box. Baserow automatically provides a REST API and even an OpenAPI schema for any base you create.
[baserow.io](https://baserow.io/docs/apis/rest-api# :~:text=You%20will%20find%20documentation%20and,)
Airtable provides a REST API for bases as well. These APIs allow retrieving the schema (list of tables and fields) and the data easily. In the context of CMCC, this means once you’ve modeled your conceptual domain in Airtable/Baserow, you already have a machine-readable representation (JSON via the API or via export) of the meta-schema. This meta-schema describes your conceptual model in a way a program can ingest – essentially giving you the M2 and M1 layers (and part of M3) in a structured format.Why are Baserow/Airtable particularly “optimal”? Because they handle the heavy lifting of maintaining these computed fields and relationships in real-time. Baserow uses Postgres to store data, and likely triggers or generated columns to maintain formulas; Airtable manages a distributed architecture to compute formula fields on update. Either way, they ensure consistency: if you update an underlying value, all dependent rollups/formulas are re-evaluated and the base stays correct. This ACID compliance and reactive computation is crucial. It means our conceptual model (which might have many interdependencies) always remains in a valid, fully-derived state after each transaction. We don’t have to manually recalc or worry about partial updates.
Of course, one can implement CMCC on any relational database with enough effort – using features like generated columns, materialized views, foreign keys, check constraints, and triggers to simulate the same behavior. But the no-code tools make it much faster to prototype and less error-prone, since much is handled declaratively via the UI.
Meta-Schema and SIMM (M3, M2, M1, M0 Layers)
One powerful aspect of CMCC is that it produces a machine-readable meta-schema of itself. In meta-modeling terms, we have multiple layers:
-
M3 (Meta-Meta-Model): This is the definition of our modeling framework itself. In CMCC, the M3 could be thought of as “a system with tables, fields of certain types (including lookup, rollup, formula), and relationships between them.” It’s analogous to the MOF (Meta Object Facility) in the UML world or to the notion of an abstract syntax for a modeling language
-
[slideplayer.com](https://slideplayer.com/slide/3354151/# :~:text=5%20%20%20%20Meta,134)
-
The five primitives compose the M3 level of SIMM. We don’t always explicitly see M3, but it’s implicitly present as the design of systems like Airtable/Baserow. One could create an explicit M3 representation: for example, a JSON schema or UML diagram that describes what a “Table” is, what a “Field” is, how a “LookupField” refers to another table, etc. In fact, Baserow’s OpenAPI or schema export essentially documents this meta-structure.
-
M2 (Meta-Model): This is the actual conceptual model of a particular domain built using those five primitives. If you are modeling pizzas and toppings, the collection of tables and fields you define (Pizza table, Topping table, their link, etc., plus formula fields) constitute the M2 model. It is an instance of the M3 meta-metamodel (for example, the Pizza table is an instance of the concept “Table” from M3; a field “name” is an instance of the concept “TextField” from M3, a field “isVegetarian” is an instance of “FormulaField” etc.). M2 captures the schema-level knowledge of the domain – types, relationships, rules – but not individual data.
-
M1 (Model / Instances): This is the data that populates your schema. Continuing the example, the M1 layer would be the actual records: a Pizza record called “Margherita”, a Topping record called “Mozzarella” etc. These are instances of the M2 classes (tables). M1 is where the specific facts live (this particular pizza has that particular topping).
-
M0 (Ground data or runtime objects): Depending on interpretation, M0 can be thought of as the actual values or the real-world entities. In MOF terms, M0 is the real thing that the data represents (e.g., an actual pizza in someone’s hand would be M0, the record of it in the database is M1). In a purely digital sense, we might consider the cell values (like the string “Margherita”) as M0 data values, with the record as M1. The distinction between M1 and M0 isn’t critical for our purposes – the key is we have separated the abstract model (schema) from the data.
CMCC’s implementation surfaces these layers via APIs. For instance, using Baserow’s API, one can retrieve a list of tables and fields (M2 metadata), then retrieve records from those tables (M1 data). The M2 metadata itself might be represented in JSON where each field has a type (text, number, link, etc.) – that’s essentially an M3-aware representation because it’s using the concepts of the meta-model. If we were to design a Syntax-Independent Meta-Model (SIMM) exchange format, it would likely look like a structured listing of tables, fields, and formulas in a neutral JSON/YAML or XML. This could be converted to various target syntaxes (OWL, GraphQL, SQL schema, etc.).
Think of SIMM as a universal schema descriptor. It’s like an intermediate representation that captures what the model is without tying it to a particular technology’s syntax. In a conversation comparing SIMM to a programming language framework, ChatGPT summarized: _“SIMM is a conceptual framework for representing knowledge and ideas beyond the scope of programming languages… a structure that represents the meaning or 'idea' of content without being bound to the rules of a particular language”_
File-bppoyjff82ykeqwgym1zbq
This captures the essence: our Airtable/Baserow schema is not an OWL file or a GraphQL SDL, but it contains the same information in a different form. We can go to/from those forms.From an implementation perspective, CMCC models can produce their own schema API. For example, Baserow provides an endpoint to get field configurations. One could use that to programmatically generate other representations. We will show code snippets next that illustrate exporting a CMCC model to OWL, RDF, GraphQL, etc.
Another aspect is constraints and ACID enforcement. The meta-model may include declarative constraints (like a field being required, a uniqueness constraint, etc.). In a Postgres-backed system, these could be actual SQL constraints (NOT NULL, UNIQUE, Foreign Key, CHECK). In Airtable, there are certain built-in constraints (like a link field always references a valid record or remains empty, so referential integrity is ensured). ACID compliance ensures that at M1 (data) level, any transaction either leaves the data satisfying all constraints or aborts. So if we say “every pizza must have at least one topping”, we might implement that by an ACID constraint (e.g., a trigger that rejects a pizza insertion if no toppings linked). This kind of enforcement can complement the aggregator approach (which might only flag a violation). We’ll discuss this more in the Pizza case study.
In short, implementing CMCC means using a system that supports these meta-layers and can enforce rules both through calculations and through transactional integrity. Baserow + Postgres is a great combo for that: formulas handle the computable aspects, Postgres constraints can handle the must-have relationships, and the API gives reflective access to the whole model.
Export/Import Mechanisms & Code Snippets
A true test of a SIMM/CMCC system is the ability to interoperate with other formats. Since the conceptual model is syntax-independent, we should be able to export it to OWL, RDF, GraphQL schema, etc., and also import from those into our model. This requires mappings between the constructs.
Let’s consider a simple example of how one might export a CMCC model to various formats, using pseudo-code to illustrate:
1. Export to OWL/RDF:
We will export our schema (tables, fields) as an OWL ontology. Each table will become an OWL Class. Each lookup field will become an ObjectProperty connecting the domain class (table) to the range class (linked table). Each non-lookup field (say a text or number) can be a DataProperty of the class. We also might want to export some records as OWL individuals (especially if those records represent conceptual instances, like specific Named Pizzas, or specific Topping categories).
python
Copy
Edit
# Pseudo-code for exporting CMCC schema to OWL (Turtle syntax)
print("@prefix : <http://example.com/ontology# > .")
print("@prefix owl: <http://www.w3.org/2002/07/owl# > .")
print("@prefix xsd: <http://www.w3.org/2001/XMLSchema# > .\n")
# Export each table as an OWL class
for table in schema.tables:
class_name = table.name
print(f":{class_name} a owl:Class .")
# Export each field as a property if appropriate
for field in table.fields:
prop_name = field.name
if field.type == "Link": # a lookup linking to another table
range_table = field.linked_table.name
print(f":{prop_name} a owl:ObjectProperty ;")
print(f" owl:domain :{class_name} ;")
print(f" owl:range :{range_table} .")
elif field.type == "Formula" or field.type == "Rollup":
# Formula fields represent derived knowledge.
# We might choose to export them as OWL annotation properties or skip,
# since their logic may not directly translate to OWL without SWRL.
continue
else:
# Data field (text, number, etc) -> DataProperty
datatype = "xsd:string" if field.type=="Text" else "xsd:decimal"
print(f":{prop_name} a owl:DatatypeProperty ;")
print(f" owl:domain :{class_name} ;")
print(f" owl:range {datatype} .")
The above pseudocode would generate an OWL schema. For a Pizza table with a link field hasTopping to a Topping table, it would output something like:
ttl
Copy
Edit
:Pizza a owl:Class .
:Topping a owl:Class .
:hasTopping a owl:ObjectProperty ;
owl:domain :Pizza ;
owl:range :Topping .
:name a owl:DatatypeProperty ;
owl:domain :Topping ;
owl:range xsd:string .
...
We skipped exporting formula fields as OWL properties directly, because an OWL ontology cannot easily represent a computed property like “isVegetarian” unless we translate the formula into an OWL class expression or SWRL rule. A more advanced exporter might do this: e.g., if isVegetarian formula is “no meat toppings”, we could create an OWL class VegetarianPizza and add an equivalence axiom VegetarianPizza ≡ Pizza and (hasTopping only VegetarianTopping). That would capture the logic in OWL terms. We’ll illustrate that concept in the Pizza case study transformation.
We can also export data as RDF triples. For each record, we create an individual of the corresponding class, and for each field value, output triples. Pseudo-code:
python
Copy
Edit
# Continuing OWL/RDF export with individuals
for table in schema.tables:
class_name = table.name
for record in table.records:
indiv = ":" + record.id # or some name/ID for the individual
print(f"{indiv} rdf:type :{class_name} .")
for field in table.fields:
prop = ":" + field.name
if field.type == "Link":
for target in record[field.name]: # iterate linked records
target_indiv = ":" + target.id
print(f"{indiv} {prop} {target_indiv} .")
elif field.type in ["Formula", "Rollup"]:
# We may choose to include derived field values as annotations
val = record[field.name]
print(f"{indiv} {prop} \"{val}\"^^xsd:string .")
else:
val = record[field.name]
if val is not None:
dt = "xsd:string" if field.type=="Text" else "xsd:decimal"
print(f"{indiv} {prop} \"{val}\"^^{dt} .")
This would list out triples like :pizza1 :hasTopping :topping3 . etc., for each relationship, and data properties like :topping3 :name "Mozzarella"^^xsd:string .. Including formula/rollup results as data properties is optional; doing so basically materializes the inference in RDF form (which could be useful for query answering without requiring a SPARQL motion to compute it on the fly).
2. Export to GraphQL Schema:
A GraphQL schema can be derived from the CMCC schema fairly directly. Each table can become a GraphQL type. Each field becomes a field in the GraphQL type. For link fields, if the link is many-to-one or one-to-one, we might output it as a single object field; if it’s one-to-many, we output it as a list of the linked type. Formula fields can be output as fields too, typically scalar types (Int, Float, Boolean, String) depending on what they return.
For example, in our Pizza model, we could generate a GraphQL schema like:
graphql
Copy
Edit
type Pizza {
Name: String
Base: PizzaBase # link to a PizzaBase object
Toppings: [Topping!] # list of linked Topping objects
isVegetarian: Boolean
calories: Int
}
type Topping {
Name: String
Category: String
}
We can also create input types or mutations, but focusing on schema, the idea is clear. Pseudo-code to generate GraphQL type definitions:
python
Copy
Edit
print("schema { query: Query }")
print("type Query {")
# We'll allow querying all records of each type, for simplicity
for table in schema.tables:
print(f" all{table.name}s: [{table.name}!]!")
print("}\n")
for table in schema.tables:
print(f"type {table.name} {{")
for field in table.fields:
gqlName = field.name # we can use field name as is, or capitalize
if field.type == "Link":
linkedType = field.linked_table.name
if field.allow_multiple: # if it's a multi-link (one-to-many)
print(f" {gqlName}: [{linkedType}!]!")
else:
print(f" {gqlName}: {linkedType}")
elif field.type == "Formula" or field.type == "Rollup":
# Determine return type of formula (could derive from expression metadata)
typ = "Boolean" if field.formula_returns_boolean else "Float"
print(f" {gqlName}: {typ}")
else:
baseType = "String"
if field.type in ["Number", "Decimal", "Integer"]:
baseType = "Float" if field.type == "Decimal" else "Int"
elif field.type == "Boolean":
baseType = "Boolean"
print(f" {gqlName}: {baseType}")
print("}")
This would produce GraphQL type definitions for each table. The Query type is added to fetch all records (in practice, one might add more fine-grained queries or allow filtering arguments).
The key point is that GraphQL’s strong typing is satisfied by the CMCC schema. Every field has a known type we can map. And because relationships are explicit, we know, for example, that Pizza.Toppings should be a list of Topping. Many GraphQL implementations have tools to generate schema from database introspection; here we’re effectively doing the same but including computed fields as well.
3. Import from OWL/RDF or GraphQL:
This is the reverse process. We won’t detail the code, but conceptually: Given an OWL ontology, you would create a table for each Class, and fields for each Property. ObjectProperties become link fields (with a target table of the range class). DataProperties become text/number fields. If the OWL had class restrictions, you might translate some into rollups/formulas. For example, an OWL axiom “Pizza hasTopping only VegetarianTopping” might prompt you to add a formula on Pizza that checks that all linked toppings are vegetarian, or to create a constraint/flag field. SWRL rules could be turned into formula fields as well (each rule’s head is essentially a derived assertion – you make a field for it). GraphQL schema import would be easier: each GraphQL type becomes a table, fields similarly. One has to decide how to handle nested types or lists – those likely map to linked tables.
4. ACID Constraint Handling:
While formulas and rollups handle a lot of the logic, some rules are best enforced with integrity constraints to maintain consistency. For instance, uniqueness of an identifier, mandatory links, or complex transactional rules might need the database’s help. In a Postgres environment (like Baserow), we can add constraints or triggers. Let’s show a snippet of SQL DDL that could be generated from our model to enforce certain rules:
Suppose in the Pizza model we want to enforce:
-
Every Pizza must have at least one Topping.
-
A VegetarianTopping cannot be used on a Non-Vegetarian Pizza (just as an arbitrary example of a cross constraint).
We could generate something like:
sql
Copy
Edit
-- Ensure every Pizza has at least one entry in the Pizza_Toppings join table
ALTER TABLE Pizza
ADD CONSTRAINT pizza_has_toppings CHECK (
(SELECT COUNT(*) FROM Pizza_Toppings WHERE Pizza_Toppings.pizza_id = Pizza.id) > 0
);
-- (Pizza_Toppings is an implicit join table for the many-to-many between Pizza and Topping)
-- Ensure Vegetarian topping rule: if a pizza is flagged non-vegetarian, it shouldn't have vegetarian toppings?
-- (This rule might be better enforced in reverse: if topping is meat, pizza can't be marked vegetarian)
-- Example: enforce consistency of isVegetarian flag with contents
ALTER TABLE Pizza
ADD CONSTRAINT pizza_veg_flag_consistent CHECK (
NOT isVegetarian OR -- if not vegetarian, no restriction
-- if isVegetarian true, then no topping on this pizza is non-vegetarian
(SELECT COUNT(*)
FROM Pizza_Toppings pt
JOIN Topping t ON pt.topping_id = t.id
WHERE pt.pizza_id = Pizza.id AND t.isVegetarian = FALSE
) = 0
);
These SQL constraints use subqueries to enforce conditions across related records. They would be automatically checked on every transaction. If someone tried to save a Pizza with no toppings, the first check would fail and the transaction would roll back – preserving model integrity (ACID).
In Airtable, one doesn’t write SQL, but some of these constraints are inherently enforced (a link must point to a valid record, etc.). Others, like a minimum count, are not strictly enforced but could be flagged via a formula. Baserow might not expose adding custom SQL constraints via UI, but since one can self-host and modify, it’s possible. In any case, the approach shows that for every conceptual rule, there’s an equivalent enforcement either via a formula (soft enforcement with flags) or via a database constraint (hard enforcement), or both.
5. Code for Data Sync/Integration:
If integrating with external systems, one might write a script to take the CMCC model and push it to a production database or to generate code. For instance, generating a GraphQL resolver that simply maps to the database fields, or generating a documentation of all rules. The ability to introspect the model’s meta-schema via code is extremely useful for automation.
All these snippets illustrate that a CMCC model is not a dead-end – it can communicate with the rest of the tech world. If anything, it can become a central source from which other representations are derived. This is a reversal of the usual situation where the “truth” might be in code or in an ontology file, and then there’s a database on the side. Here the database model is the truth, and we export other artifacts from it.
Next, let’s ground these ideas with a concrete case study: transforming the classic Pizza Ontology into a CMCC model, and then examining what we gain.
Pizza Ontology Case Study
The Pizza Ontology is a well-known example from the Semantic Web community, often used to demonstrate OWL modeling (classes, restrictions, and reasoning). We will take the core ideas of the Pizza Ontology and go through a step-by-step transformation into the CMCC schema paradigm. Then we’ll show how constraints are enforced in our model (both via aggregations and via ACID), and finally how we can extract a more complete OWL ontology back from the model.
1. Original Pizza Ontology (Brief Overview)
In the standard Pizza OWL ontology (as per the famous tutorial
[cs.cornell.edu](https://www.cs.cornell.edu/courses/cs431/2008sp/Lectures/public/lecture-4-09-08.pdf# :~:text=,or%20fish%29%20toppings%E2%80%9D)
-
), we have concepts like:Class Pizza – with subclasses like
NamedPizza,VegetarianPizza, etc. -
Class PizzaTopping – with subclasses
MeatTopping,VegetableTopping,CheeseTopping, etc. -
Property hasTopping linking a Pizza to one or more PizzaTopping individuals.
-
Property hasBase linking a Pizza to a PizzaBase (like ThinCrust or ThickCrust).
-
Various restrictions, e.g.:
-
MargheritaPizza ≡ Pizza that hasTopping some Mozzarella and hasTopping some Tomato and hasTopping only (Mozzarella or Tomato). This defines a Margherita pizza as having at least those two toppings and no others beyond them. -
VegetarianPizza ≡ Pizza that hasTopping only VegetarianTopping. (Meaning all its toppings are from the vegetarian category; there is also a definition of VegetarianTopping as any topping that is not meat/fish.) -
Cardinality restrictions like
Pizza ≡ hasBase exactly 1 PizzaBase(each pizza has one base) andNamedPizza ≡ Pizza and hasTopping min 1 PizzaTopping(named pizzas must have at least one topping). -
Disjointness: e.g., MeatTopping, VegetableTopping, etc., are disjoint classes (a topping can’t be both meat and veg).
-
Individuals: Instances of bases (ThinCrust, ThickCrust) and possibly some specific named pizzas as individuals or classes depending on the rendition.
-
The ontology leverages reasoning: from the axioms, a reasoner can infer, for example, that a pizza with pepperoni is not vegetarian (because Pepperoni is a MeatTopping and the pizza would violate the vegetarian “only” restriction, making it classify as non-vegetarian implicitly), or that two pizzas with exactly the same set of toppings could be recognized as instances of some named pizza class if one exists.
2. Designing the CMCC Schema for Pizza
Step 1: Identify the main entities (tables). In our schema-driven model, typically each significant class or object type becomes a table. Looking at Pizza Ontology, the obvious tables are:
-
Pizza (the pizzas themselves)
-
Topping (the pizza toppings)
-
Base (pizza bases like thin/thick crust)
We may also consider tables for categories of toppings, or for Named Pizza types if we want to treat named pizza recipes as data. But initially, let’s start with Pizza, Topping, Base.
Step 2: Define fields and relationships. Now we add fields to represent properties and relationships:
-
Pizza table fields:
-
Name(text) – if we want to name pizzas (especially if we treat each pizza instance as a “pizza type” or recipe, e.g., a record for Margherita). -
Base(link to Base table) – corresponds to the hasBase property. One pizza has one base. We set this link to allow only a single selection (one-to-one link). We also mark it as required (non-null) to enforce the “exactly 1 base” rule. -
Toppings(link to Topping table) – corresponds to hasTopping property. One pizza can have many toppings, and each topping can be on many pizzas (many-to-many). In Airtable, this could be a link field allowing multiple selections; under the hood, it’s a join table. -
We might add a
isVegetarianflag (formula, to be defined later). -
We might add fields for each named pizza or category membership, but it could be done via separate tables or formula; hold that thought.
-
-
Topping table fields:
Name(text) – e.g., “Pepperoni”, “Mushroom”.
-
Category(link or single select) – Instead of subclasses MeatTopping, VeggieTopping, etc., in a database we often use a category field. We can have another table ToppingCategory with records “Meat”, “Vegetable”, “Cheese”, etc., and link each Topping to its category. This preserves the taxonomy of toppings as data. Alternatively, we could have boolean fields likeisMeat,isVegetarianon Topping. Let’s do both for demonstration:- Add `Category` link to a ToppingCategory table.-
Also add a formula
isVegetarianon Topping that evaluates to true if Category is not Meat (or if Category is in [Vegetable, Cheese, etc.]). Since in OWL “VegetarianTopping” might be defined as all toppings that are not instances of MeatTopping or FishTopping, we mimic that with a formula: e.g.,isVegetarian = NOT(Category = "Meat" OR Category = "Fish"). This formula field then flags each topping accordingly. -
If needed,
isVegancould similarly be computed (e.g., not cheese, not meat, etc., if that was in scope).
-
-
Base table fields:
-
Name(text) – e.g., “ThinCrust”, “ThickCrust”. -
Could have a
isGlutenFreeboolean or category if we wanted to model base types (though the original pizza ontology might not cover that, we can imagine).
-
-
ToppingCategory table:
-
Name(text) – like “Meat”, “Vegetable”, “Cheese”, “Seafood”. -
Possibly fields to indicate if this category counts as vegetarian. For instance, we can put a boolean
isVegetarianCategoryon each category (true for Vegetable, Cheese, etc.; false for Meat, Seafood). Or simpler, treat anything not explicitly marked non-vegetarian as vegetarian by default in the Topping formula.
-
So far we have our tables and fields analogous to classes and properties. This captures the basic structure.
Step 3: Represent logical constraints and inferences as computed fields or extra tables. Here’s where we translate things like “VegetarianPizza” into the model. There are a couple of ways:
-
Approach A: Add a formula field on Pizza,
isVegetarian, that checks if all its toppings are vegetarian. How to do that? We could use a rollup. For example, create a Rollup fieldNonVegToppingCounton Pizza that does a COUNT of Toppings where Topping.isVegetarian = false. (Some systems allow filtered rollups; if not, roll up all toppings count and another for vegetarian count, etc.) Assuming we can,NonVegToppingCount = COUNTIF(Toppings, NOT(Topping.isVegetarian)). Then defineisVegetarian = (NonVegToppingCount = 0)as a formula (returns true if no non-veg toppings). This effectively encodes the OWL restriction “hasTopping only VegetarianTopping” – if any non-vegetarian topping is present, the flag goes false. -
Approach B: Instead of a formula flag, we could create a separate VegetarianPizza table or a PizzaType classification. However, since pizzas can be multiple things (a pizza could be vegetarian and also be a SpicyPizza, etc.), multi-classing is easier to handle with flags or a join table of classes. For clarity, using formula flags for each property is straightforward.
-
We can similarly add an
isNamedPizzaflag or even identify named pizza types. Perhaps a better design: have a NamedPizza table that lists recipes (Margherita, FourSeasons, etc.) and links to the Toppings required. Then a Pizza record can either reference a NamedPizza or we treat each Pizza record itself as a recipe if we’re not modeling individual pizza orders.
For our case, let’s assume each record in the Pizza table is actually a pizza type (recipe). So “Margherita” will be a Pizza record with Toppings Mozzarella and Tomato, and Base maybe RegularCrust. In OWL, Margherita was a class, but here we simplify by treating it as an instance that represents that concept. We’ll see how to get back to OWL class later.
Now, constraints:
-
At least one topping: We enforce this by schema configuration – the Toppings link field can be made non-empty. Baserow/Airtable might not have a direct “min 1” constraint, but we can simulate:
-
Have a formula
ToppingCount = COUNT(Toppings)(rollup or formula). -
Add a validation that
ToppingCount >= 1. (In Airtable, no explicit validation, but we can at least flag if 0.) -
In Postgres, we could enforce with a CHECK as we showed in SQL snippet.
-
-
Disjoint categories: If Meat and Vegetable are disjoint, our data model inherently ensures a Topping has one category. As long as we don’t assign multiple categories to one topping, it’s disjoint by design. There’s no risk of a topping being both since Category is a single link. So that is handled.
-
Only allowed toppings for a NamedPizza: For something like Margherita’s definition “only mozzarella or tomato”, how to enforce? We could handle this by adding allowed topping list in the NamedPizza table. But since we made Margherita itself a Pizza record with exactly those two toppings, any other topping would simply not be listed. If someone edited that record and added a third topping, it would no longer semantically be a Margherita – our model wouldn’t automatically stop them. However, we could put a constraint: a formula
isMargheritaValid = IF(Name = "Margherita", AND(ToppingCount = 2, CONTAINS(Toppings, "Mozzarella"), CONTAINS(Toppings, "Tomato"), NOT( any other topping)), TRUE). This is clunky in formula form. Another approach is to not allow editing the recipe beyond what’s defined. For now, let’s not enforce the “only” via schema, just trust the data entry or note it. -
Classification of pizzas (VegetarianPizza, etc.): With the
isVegetarianformula in place, each Pizza record automatically gets classified. For example, if we input a Pizza with Pepperoni topping, theNonVegToppingCountwill be >0, thusisVegetarian = false. If we input a Pizza with only veg toppings,isVegetarian = true. So effectively we have partitioned pizzas into vegetarian vs not via data. -
We might also add an
isVegansimilarly (no cheese, etc.), or other categorizations likeisSpicyif we had data for spice level of toppings, etc. The OWL ontology often includes things like SpicyPizza etc.
At this point, our CMCC model is set. Let’s summarize it in a more structured way:
Pizza Table:
-
Fields:
-
Name(Text) -
Base(Link to Base, single, required) -
Toppings(Link to Topping, multiple, required at least one) -
ToppingCount(Formula/Rollup: count of Toppings linked) -
NonVegToppingCount(Rollup: count of linked Toppings where Topping.isVegetarian = false) -
isVegetarian(Formula:NonVegToppingCount = 0) -
(Potentially
isVegan,isGlutenFreeetc, similar pattern if needed)
-
Topping Table:
-
Fields:
-
Name(Text) -
Category(Link to ToppingCategory, single) -
isVegetarian(Formula: true if Category != "Meat" and Category != "Fish"; false if Meat or Fish)
-
Base Table:
-
Fields:
-
Name(Text) -
(could have type if needed, but keep simple)
-
ToppingCategory Table:
-
Fields:
-
Name(Text) -
isVegetarianCategory(Boolean: true for Vegetable, Cheese, etc.; false for Meat, Fish)
-
We could have skipped ToppingCategory and just encoded directly in Topping, but it’s nice to have categories separated.
Named Pizza as Data: If we want to list classic recipes separately (especially if we wanted to track, say, the price of a Margherita vs a Pepperoni pizza), we might have a separate table or we might just treat every Pizza record as a recipe. Let’s assume each Pizza record is a recipe (thus “Margherita” is a Pizza record). If we needed to model actual pizza instances (like an order that is a specific pizza), we might have a separate table for PizzaOrder that links to a Pizza recipe and possibly allows modifications. That’s beyond the ontology’s scope, which dealt only with types, so we won’t complicate it.
3. Enforcing Constraints: Aggregator vs ACID Approaches
With the schema set up, how do we enforce or check the constraints?
-
Aggregator/Formulas (Soft Enforcement): We have added rollups and formulas (
ToppingCount,NonVegToppingCount,isVegetarian) that detect rule compliance. For example,ToppingCounttells us if a Pizza has zero toppings. We could further add a formulahasToppingsOK = ToppingCount > 0which will be false if a pizza has none. This doesn’t prevent the data entry, but it flags it. In Airtable, you might color the field red or something when false. Similarly,isVegetarianis essentially a classification that also flags whether the pizza meets the vegetarian criteria. -
ACID Enforcement (Hard Enforcement): If we are using a true database like Postgres via Baserow, we can implement hard constraints. For instance, in Baserow one could enforce not-empty by a combination of UI and backend constraint. If directly in Postgres, one could add the CHECK constraint we showed earlier to ensure
ToppingCount > 0. One could also enforce via triggers that calculate those counts and throw an exception if a rule is violated. The advantage of ACID enforcement is it keeps bad data out entirely. The disadvantage is it might be inflexible if the user is in the middle of data entry (e.g., creating a Pizza then later adding toppings; a strict constraint might block creating the Pizza without toppings attached in the same transaction).
In our model:
-
hasBase exactly 1: This can be enforced by making the Base field required (not null) and only single-select. Airtable/Baserow can enforce single link by field type settings, and "required" might be enforceable on UI or API level.
-
at least 1 topping: Could enforce with a trigger or just rely on the modeler to not leave it blank. For demonstration, we highlight it with
ToppingCount. -
Vegetarian consistency: Since
isVegetarianis formula-driven, it’s always consistent with the toppings; we don’t allow user to manually set it, so no action needed. If we did have a user-set category like a PizzaCategory table (Veg or Non-Veg), we could enforce consistency by a formula or trigger too.
Aggregator-based handling often suffices for non-critical constraints or where you prefer to allow temporary violations (like a draft pizza being created without toppings then fixed). ACID constraints are used for invariants that must never be broken at any time (like referential integrity, uniqueness, etc.). We have both in our arsenal.
For demonstration, let’s say we implement a Postgres CHECK for topping count, as shown earlier. That would outright prevent a pizza record with zero toppings from committing.
We also consider disjointness: In OWL, disjoint classes can cause inconsistency if an individual is asserted in both. In our model, we naturally don’t assign two categories to one topping, so it’s disjoint. If someone tried to assign multiple categories (which might require breaking our design or messing directly in the DB join table), it would violate the logic. Baserow’s schema won’t allow one Topping to link to two category records if the field is single. So that’s inherently enforced.
Completeness of inference: With our formula fields, we can immediately see the classification of each pizza. For example, once we input all pizza data:
-
The
isVegetarianfield on each pizza will tell us if it’s a VegetarianPizza according to the ontology’s logic. -
We could similarly determine if one pizza instance fits the definition of a NamedPizza class if we encode those definitions. For instance, consider the OWL axiom for Margherita (has only Mozzarella and Tomato). If our Margherita record accidentally had an extra topping, our model wouldn’t automatically say “this is not Margherita” – because we labeled it Margherita manually. In OWL, that extra topping plus the equivalence axiom would make the individual inconsistent or would mean that record cannot be an instance of MargheritaPizza class. To mimic that, we might implement a formula check: e.g., on Pizza record if Name = "Margherita", then verify toppings set == {Mozzarella, Tomato}. If not, flag an error. This is a bit ad-hoc, but it shows we can enforce even specific named recipes rules if we want via formula or constraint.
4. Using the Model and Retrieving Inferences
Now that we have the model, let’s illustrate how higher-order knowledge is readily available:
-
If we list all pizzas and their
isVegetarianfield, we immediately get which ones are vegetarian or not, without running a separate reasoner. In OWL, to get that, you’d run a reasoner to classify individuals under the VegetarianPizza class. -
If we had a field
isMargheritaStyle(just hypothetical) that checks if a pizza’s toppings set equals {Mozzarella, Tomato}, then any pizza that matches that automatically gets that true. We could use that to identify if someone created a pizza that actually is essentially a Margherita (just not named so). The model could thus “discover” that a certain combination meets a known pattern.
One could query the data: e.g., “Find all vegetarian pizzas” translates to a simple filter where isVegetarian = true. Or “Find all pizzas that contain Pepperoni” is where Toppings contains Pepperoni (which is a direct lookup query).
Re-extraction to OWL: Finally, suppose we want to output an OWL ontology from this completed model. We would:
-
Create classes
Pizza,PizzaTopping,PizzaBasein OWL (straight from tables). -
Create individuals for each specific Base (ThinCrust, ThickCrust as instances of PizzaBase class).
-
Create individuals for each Topping (Mozzarella, Tomato as instances of PizzaTopping class, possibly also assert their topping category as type, e.g., Mozzarella rdf:type CheeseTopping).
-
For topping categories, we might create classes MeatTopping, VegetableTopping, etc., and assert each Topping individual as a member of the appropriate one (based on our Category field). Or we could create an ontology class for each category and use rdfs:subClassOf PizzaTopping accordingly (the original pizza ontology did define those classes). If we want the more complete ontology, we can actually infer new subclass relations: For instance, if our data showed no topping that is both meat and veg (which it won’t), that’s consistent with disjointness. We might not infer new subclass axioms beyond what was known (since categories we had were known).
-
Create individuals for each Pizza (each recipe). Now, OWL might consider those individuals or classes. If we want to mimic the original, named pizzas like Margherita were often represented as subclasses of NamedPizza in the tutorial. However, representing each named pizza as an individual is also possible, with an ad-hoc approach. Alternatively, we could output them as OWL classes: For example, generate an OWL class MargheritaPizza and assert it EquivalentTo
Pizza and hasTopping some MozzarellaTopping and hasTopping some TomatoTopping and hasTopping only (MozzarellaTopping or TomatoTopping). That would be very much like the original ontology’s axiom, and our data model gave us the information: we know the required toppings (Mozzarella, Tomato) and no others for Margherita from the record. So yes, we could output each named pizza record as an OWL class with restrictions. This is an example of adding knowledge: originally if we only had individuals, we now create class axioms. -
For
VegetarianPizza, we definitely should create a class in OWL. And since our model computed which pizzas are vegetarian, we can double-check consistency. In OWL,VegetarianPizza ≡ Pizza and hasTopping only VegetarianToppinglikely already exists (or we add it). We can then also assert which specific pizzas (individuals) are instances of VegetarianPizza based on ourisVegetarianfield. This adds explicit type assertions that a reasoner would have deduced. For example, we output:
ruby
Copy
Edit
:Margherita rdf:type :VegetarianPizza .
-
if Margherita had no meat toppings (which it doesn’t). In the original ontology, one might rely on a reasoner to classify Margherita as vegetarian (if MargheritaPizza was defined with only veg toppings, a reasoner can infer it is a subclass of VegetarianPizza, etc.). Here we can explicitly assert it for completeness.
-
If any inconsistency were present (say someone flagged a pizza as vegetarian in name but actually added a meat topping), our model’s
isVegetarianwould be false, and we would catch that. We would not output that pizza as a VegetarianPizza instance. In OWL terms, that inconsistency would have been caught by a reasoner as well. So by having it in the model, we ensured consistency before exporting.
The net result is an OWL ontology that is consistent and more explicit:
-
Every pizza individual has a base and at least one topping (ensured by our model, so we can safely include those as facts).
-
If we choose to encode named pizza definitions as classes, we have those class axioms (identical to original or derived from data).
-
We can include class VegetarianPizza and it’s properly assigned to individuals that qualify.
-
We could include disjointness axioms for topping categories as they were originally.
-
Nothing in the exported ontology is left to guesswork – because the model either prevented or flagged incomplete entries.
In effect, we leveraged the closed-world completeness of the CMCC model to produce an open-world artifact (OWL ontology) that has fewer open gaps. The OWL ontology can still be used with a reasoner, but the heavy lifting was done – it might infer trivial things we already asserted.
This demonstrates the “round-trip” idea: If the original OWL was missing some explicit type assertions that required reasoning, our model likely made them concrete (since we had to decide true/false on vegetarian flag for each pizza, for example, which forced a determination).
To finalize this case study, here’s a snapshot of what a portion of the extracted OWL might look like (in Turtle syntax):
ttl
Copy
Edit
### Classes ###
:Pizza a owl:Class .
:PizzaTopping a owl:Class .
:VegetarianPizza a owl:Class ;
owl:equivalentClass [ a owl:Restriction ;
owl:onProperty :hasTopping ;
owl:allValuesFrom :VegetarianTopping
] .
:MargheritaPizza a owl:Class ;
rdfs:subClassOf :Pizza ;
owl:equivalentClass [
a owl:Class ; owl:intersectionOf (
:Pizza
[ a owl:Restriction ; owl:onProperty :hasTopping ; owl:someValuesFrom :MozzarellaTopping ]
[ a owl:Restriction ; owl:onProperty :hasTopping ; owl:someValuesFrom :TomatoTopping ]
[ a owl:Restriction ; owl:onProperty :hasTopping ;
owl:allValuesFrom [ owl:oneOf (:MozzarellaTopping :TomatoTopping) ]
]
)
] .
### Object Properties ###
:hasTopping a owl:ObjectProperty ; owl:domain :Pizza ; owl:range :PizzaTopping .
:hasBase a owl:ObjectProperty ; owl:domain :Pizza ; owl:range :PizzaBase .
### Individuals (Examples) ###
:ThinCrust a :PizzaBase .
:ThickCrust a :PizzaBase .
:MozzarellaTopping a :CheeseTopping, :VegetarianTopping, :PizzaTopping .
:PepperoniTopping a :MeatTopping, :PizzaTopping .
:Margherita_Recipe a :Pizza, :VegetarianPizza ; # Margherita_Recipe is an individual pizza instance
:hasBase :ThinCrust ;
:hasTopping :MozzarellaTopping, :TomatoTopping .
In the above:
-
We created class
MargheritaPizzawith the logical definition (from the recipe). -
We also created an individual
Margherita_Recipeto represent the actual pizza instance/recipe as a thing (this is optional; the OWL could treat MargheritaPizza as a class only). -
We asserted
Margherita_Recipeis aVegetarianPizzaexplicitly because our model knew it had only veg toppings. If we didn't assert it, a reasoner could infer it since it only has Mozzarella and Tomato which are vegetarian toppings, but we made it explicit. -
Each topping individual got types: e.g., MozzarellaTopping is a CheeseTopping (which presumably we define as a subclass of VegetarianTopping, etc., or directly as VegetarianTopping via multiple classification).
One can see the ontology now has both the general schema and specific instances from our model. It is complete in that any query like “is this pizza vegetarian?” can be answered just by looking at asserted types (or trivial reasoning), because we already computed and assigned those.
Thus, the CMCC model served to validate and enrich the ontology. It’s less likely to contain errors because the schema would have exposed them (e.g., if we tried to declare Margherita vegetarian but accidentally added Pepperoni, our model’s flags would catch the contradiction immediately).
This case study highlights how moving to a schema-driven model doesn’t lose any representational power versus OWL; rather it complements it with real-time enforceability and clarity. We maintained all the original constraints (cardinalities, type restrictions) through a mix of schema design and formulas, and we even encoded the rules like VegetarianPizza directly in the data model.
Applications Beyond Pizza
While the pizza example is somewhat playful, the CMCC/BRCC approach is aimed at solving knowledge management problems in much larger and more critical domains. Here we discuss how it can be applied in finance, medical knowledge graphs, supply chains, and more, and how it helps maintain conceptual integrity at scale.
-
Financial Domain: Consider a finance firm with complex rules for trading, risk management, and regulatory compliance. Traditionally, these rules are spread across spreadsheets, code in different services, and policy documents. Using BRCC, one could create a schema that captures financial instruments, transactions, and all the business rules (e.g., risk exposure limits, approval requirements, pricing formulas) as part of the model. For example, a table of Trades could have formula fields that compute the current exposure, flags that indicate if a trade violates any limit, etc. A table of Limits could define thresholds by category (like credit limits by counterparty, or value-at-risk limits by portfolio) and link to trades, aggregating totals per counterparty/portfolio. All these computations would be continuously updated as trades are added. If a new regulation comes (say, a requirement to report any trade over $1M involving certain jurisdictions), instead of writing new scanning scripts, you’d add a field or table capturing that logic (maybe a formula
isReportableon the Trade table). The benefit is that all stakeholders can see the rule in the schema – it might even be exposed in a UI form rather than hidden in code. The integrity of the financial logic is maintained because any dependency (like “what counts as exposure?”, “which trades are exempt?”) is part of the connected data model, reducing the chance of things falling through the cracks. -
As complexity scales (hundreds of instruments, thousands of trades, dozens of interdependent rules), a well-structured CMCC model acts as a bulwark against entropy. Every concept has one place where it’s defined. If interest rate risk is computed a certain way, that formula field is the single definition used everywhere, instead of many services computing it differently. This consistency prevents the drift that often occurs in large enterprises where, over years, different systems implement slightly different versions of the same rule. Changes are easier: if a formula needs to change, you update the one field definition and all data updates accordingly, rather than chasing instances in code.
-
Medical Knowledge Graphs: In healthcare and medicine, we often need to integrate clinical knowledge (symptoms, diagnoses, treatments) with patient data. A CMCC approach could model, for instance, a knowledge base of diseases, their symptoms, test results, and treatment protocols as tables with relationships and rules. For example, a table Disease with links to Symptom and a formula field
diagnosisCriteriaMetthat checks patient data to see if enough criteria are present. Another table Patient with links to observed symptoms and test results. One could encode diagnostic logic: e.g., if a patient has symptom A and B and lab result X > threshold, then suspect Disease D – this could be a rollup & formula that yields a flag or even creates a suggested diagnosis record. This is similar to an expert system, but implemented with declarative DB constructs rather than a custom rule engine. -
The advantage here is maintenance and integration. Medical guidelines change; new research emerges. Instead of rewriting procedural code, a medical expert or data engineer can update the formula or data in the model. Perhaps a new symptom is linked to a disease with a certain weight or severity; that gets added as a row in a Symptoms table or a new link, and the formulas automatically adjust any patient diagnoses. Conceptual integrity is crucial in medicine – you want one consistent definition of each condition, and you want to avoid the knowledge base decaying as new info is tacked on. By having everything connected in one schema, contradictions or gaps are more evident. If two rules conflict, likely a formula will show an impossible condition (like a boolean that can never be true, etc.), signaling a problem.
-
Furthermore, such a model can integrate with electronic health record systems. For instance, if using Airtable/Baserow, an API or integration could push patient data into the model (or the model could be the source of truth and apps query it). The auditability is improved too: one can inspect how a certain suggestion was derived by looking at the chain of fields, rather than trusting a black-box AI or a labyrinthine codebase.
-
Supply Chain and Manufacturing: These domains have many business rules around inventory levels, lead times, quality checks, etc. A CMCC model might include tables like Part, BillOfMaterials (linking assemblies to parts), Inventory, Order, Supplier, etc., with numerous rules:
-
Lead time calculations (rollup the longest lead time of sub-components, plus some formula).
-
Constraints like “if any part in an assembly is backordered, that assembly is delayed” – which could be a formula flag on Assembly.
-
SupplyChain graph relationships can be represented with link tables (Part A is supplied by Vendor X, who in turn sources materials Y... could be a multi-hop link but can be flattened by computed fields if needed).
-
-
By having the entire chain modelled, one can ask complex questions easily – e.g., “show me all final products that will be delayed if supplier Z in region R has an issue” – because links and rollups can propagate an “at risk” flag upward automatically. Each part could have a formula
isAtRisk = any supplier is at risk OR any sub-part is at risk(propagating risk signals up the BOM). Maintaining such logic in code across ERP, MES, and procurement systems is notoriously error-prone. Instead, a centralized conceptual model can serve as the master logic that those systems subscribe to or query. -
Entropy prevention: Over years, supply chains change (new suppliers, parts replaced, etc.). If changes are logged in one model, the effects (like new lead times or different risk profiles) immediately reflect globally in that model. It prevents scenarios where one team updates their spreadsheet but another team’s system isn’t updated, causing inconsistency. Everyone referring to the same model (via an API or dashboards) sees up-to-date truth.
-
Enterprise Architecture Integration: Enterprises usually have many existing systems (CRM, ERP, custom apps). A CMCC model can be introduced gradually, perhaps starting as a “knowledge hub” that mirrors some critical reference data and rules. There are a few integration strategies:
-
API Layer: Expose the CMCC model via REST/GraphQL to other services. For example, a microservice that needs to know “is this customer eligible for promo X?” could call an API which is served by the CMCC database where that logic lives as a formula. The microservice then doesn’t need to duplicate the promo criteria logic.
-
Event-Driven Updates: When the conceptual model is updated (say a new rule or data change), publish events so that other systems can sync or react. Conversely, capture events from systems (like a new transaction occurred) and feed them into the model to update aggregates.
-
Embedded Database or Materialized Views: In some cases, organizations might periodically dump the CMCC model data into a data warehouse or other systems for reporting. This is straightforward since it’s just data – e.g., a nightly job could pull all tables as CSV or through the API. Because the logic is in the data, even the warehouse gets the computed knowledge (e.g., it will have the
isVIPflag for customers directly, no need to recalc). -
Gradual Rule Migration: You can start by modeling just a subset of rules in CMCC while others remain in code. Over time, as confidence grows, more rules can be migrated into the model, with the code simply fetching results. This also provides a fallback – if one rule really cannot be expressed in the model (no such case known yet, per the conjecture), it can stay in code and one can explicitly note that as an exception.
-
A key aspect in enterprise integration is performance and scalability. One might worry: can a no-code style model handle enterprise scale data? With tools like Postgres under the hood, tens of thousands or even millions of records are feasible, though at some point custom scaling might be needed. Because CMCC encourages precomputation, heavy reads scale well (at the cost of possibly heavier writes when recalculating formulas). For many enterprise use-cases (which are read-heavy), this is a good trade-off.
Also, ensuring conceptual integrity is more than technical, it’s organizational. A CMCC model can serve as a living documentation of business logic. It’s easier for non-developers to review a well-structured Airtable base than to read scattered code. This can reduce miscommunication between business analysts and IT – they literally work in the same model. As complexity scales, this single source of truth approach fights entropy: changes are deliberate and visible, and the model can be tested as a whole for consistency (e.g., you can have a test dataset to see if any constraints break).
One could incorporate automated tests on the model: e.g., if we know certain scenarios should or shouldn’t trigger a rule, we insert sample records and verify the formula outputs. This is analogous to unit tests but directly on the declarative model.
From an industry adoption standpoint, using CMCC doesn’t mean throwing away all existing systems. It can overlay on them. For instance, an AI system that needs a knowledge graph could consume data from the CMCC model exported as RDF. A reporting tool could use the model’s API to get business metrics. A low-code app platform (like Retool or PowerApps) could use the model’s database as its back-end, ensuring that any app built on it inherently respects all business rules (since those are in the DB, the app just sees final fields).
Conclusion & Future Directions
The Conceptual Model Completeness Conjecture (CMCC) and Business Rule Completeness Conjecture (BRCC) present a compelling vision for holistic knowledge management: one where the what of the business (concepts and rules) is fully separated from the how (application code) and encoded in a unified, computable model. By leveraging just five primitives in a schema-driven approach, we can represent anything from a pizza recipe to a regulatory framework declaratively, and have software execute those definitions.
Key advantages of CMCC/BRCC include:
-
Completeness and Consistency: All relevant knowledge is captured in one model, reducing the chance of undocumented or inconsistent rules. The model serves as a single source of truth. As shown, even higher-order inferences are present in the model, meaning we don’t rely on external processes that might go out of sync. This drastically cuts down knowledge duplication and contradictions across an organization.
-
Transparency and Traceability: Rules encoded as formulas or data are visible and understandable (with a bit of training) to stakeholders. It’s much easier to trace why a decision was made – you can follow the chain of computed fields or aggregated data, which is essentially a trace of the inference. Compare this to trying to trace through procedural code spread over microservices for the same answer.
-
Agility in Change: Updating a rule or adding a new concept is a matter of schema change, not a full development cycle. This can shorten the time to adapt to new requirements. Non-developers can often propose or even implement changes directly in a controlled environment (especially using no-code interfaces). The dreaded ripple effects of changes are mitigated because the impact of a change is mostly localized (and where it’s not, the model’s interconnected nature will reveal what downstream formulas break, etc., which can then be addressed). As noted in BRCC’s description, it _aims to eliminate the ripple effect of model evolution_
-
[zenodo.org](https://zenodo.org/records/14735965# :~:text=explicitly%20decoupled%20from%20the%20runtime,attempts%27%E2%80%94no%20such%20counterexample%20has%20emerged)
-
.
-
Interoperability and Portability: Because the model is meta-described and can export to standard formats, it can integrate or transition into different stacks. You’re not locked into one vendor or one specific technology syntax; the SIMM approach ensures you can always translate your model to another form if needed. This opens possibilities for standardizing how such models are shared – perhaps in the future we’ll see an interchange format (much like UML XMI, but more execution-friendly).
-
Reduced Technical Debt: Over time, systems tend to accrue patches and ad-hoc fixes (entropy). A CMCC approach encourages addressing changes at the model level and propagating through, rather than quick patches in code that bypass the model logic. This can result in more robust systems with lower maintenance cost.
-
Empowering Domain Experts: With the right UI, domain experts (like business analysts, risk managers, medical professionals) can directly contribute to the model, because it’s closer to a natural representation of rules (similar to working in a spreadsheet or a well-designed form). This narrows the gap between intent and implementation.
Future Directions:
While the theory is sound and prototypes using Airtable/Baserow are promising
[zenodo.org](https://zenodo.org/records/14836225# :~:text=This%20paper%20demonstrates%20how%20the,modeled%20in%20this%20same%20manner%E2%80%94no)
[zenodo.org](https://zenodo.org/records/14735965# :~:text=The%20Business%20Rule%20Completeness%20Conjecture,aims%20to%20eliminate%20the%20pervasive)
-
, there are areas to develop further:Tooling and UX: We need more advanced tools to design and manage these conceptual models, especially as they grow large. Airtable is user-friendly but may become unwieldy for very large schemas. Future tools could offer semantic search through the model, impact analysis (e.g., “show me all formulas that use field X”), version control for schema changes, and collaborative editing with audit logs. Essentially, an IDE for conceptual modeling, perhaps with features like simulation (running hypotheticals), automated test case generation, etc.
-
Scalability and Performance: While underlying databases like Postgres can scale, extremely large-scale applications (millions of entities, complex formulas) might benefit from optimization. We could see specialized engines or extensions that optimize the five primitives (for example, incremental computation of formulas, distributed execution of rollups). Perhaps the ideas could be implemented in a new kind of database engine optimized for this style of workload (somewhere between an OLTP and OLAP system, since it does transactional updates but also heavy computation). However, it’s notable that existing tech (with indexes, caches, etc.) is already quite powerful for moderate sizes.
-
Standardization of SIMM: If multiple vendors or open-source projects adopt this modeling approach, a standard meta-model format would help portability. One could envision an XML or JSON standard for “schema + formulas + aggregations”. This could become an interchange format between tools (similar to how you can move BPMN diagrams between workflow tools). It might even become an ISO or W3C standard if the approach gains enough traction as a knowledge representation paradigm. This would be the Syntax-Independent Meta-Model specification.
-
Integration of AI and CMCC: In the era of AI and machine learning, one interesting direction is using large language models or other AI to assist in building or verifying the model. For example, given a set of requirements or natural language rules, an LLM could propose how to model them with the five primitives. Or AI could monitor data patterns to suggest new rollups/fields that capture emergent knowledge (like, “we see you often filter these two tables together, consider adding a lookup or computed field for it”). Also, the model can serve as a robust knowledge substrate for AI – instead of embedding a knowledge graph in code, an AI agent could query the CMCC model via its API to get real-time accurate info and even update it as it learns new facts (with human vetting, perhaps). The BRCC paper hints at AI-based attempts to falsify the conjecture (basically using AI to find a rule it can’t model) and none succeeded
-
[zenodo.org](https://zenodo.org/records/14735965# :~:text=,attempts%27%E2%80%94no%20such%20counterexample%20has%20emerged)
-
, which suggests AI itself might acknowledge the generality of the approach.
-
Community and Falsification: The conjectures remain conjectures until proven or a counterexample is found. A future direction is to formalize the proof sketch. The BRCC proof sketch is inspired by Turing-completeness arguments
-
[zenodo.org](https://zenodo.org/records/14759299# :~:text=theoretical%20proof%20sketch%2C%20inspired%20by,the%20how)
-
, but a full formal proof in a computational theory sense could be attempted. Conversely, exploring edge cases that challenge the model is healthy. For example, are there any domains where an iterative or recursive rule is troublesome to model declaratively in this way without artificial limits? (We do have recursion in formulas to some extent, but maybe extremely complex recursive dependencies could be a challenge—though theoretically one can unroll recursion into data, given finite scenarios). By treating CMCC as a hypothesis to be stress-tested, we can improve it. So, the call is open for practitioners and academics: try to find something you genuinely can’t model with schema+data+lookups+aggregations+formulas. This will either strengthen the conjecture (if none found) or refine its boundaries (if found, maybe we extend the primitives or clarify conditions).
-
Adoption and Culture Change: Perhaps the hardest part is convincing organizations to adopt a radically different approach to building systems. This requires demonstrating success stories: e.g., a case where a CMCC-modeled system delivered faster and with fewer bugs than a traditional approach. Over time, a culture of “model the concept first” could take root. This is akin to how agile methods or DevOps had to prove themselves. A future with widespread CMCC adoption would mean business people and developers collaborate on a living model which directly runs much of the logic, rather than lengthy spec->code cycles.
In conclusion, the CMCC and BRCC offer a path to building knowledge systems that are complete, consistent, and adaptable. By making higher-order logic a native part of our data models, we eliminate the chasm between data and rules. The Pizza Ontology example may have been simple, but the same principles scale to corporate knowledge graphs and industry ontologies. The result is a sustainable knowledge infrastructure where the conceptual integrity does not decay but instead strengthens over time – a big step toward truly intelligent information systems.
References:
-
Alexandra, E.J. The Business Rule Completeness Conjecture (BRCC) and Its Proof Sketch, 2025 – Preprint: posits five primitives (Schema, Data, Lookups, Rollups, Calculated Fields) suffice to encode any business rule[zenodo.org](https://zenodo.org/records/14759299# :~:text=posits%20that%20all%20declarative%20semantics,Aggregations%29%2C%20and)
-
[zenodo.org](https://zenodo.org/records/14759299# :~:text=theoretical%20proof%20sketch%2C%20inspired%20by,the%20how)
-
.
-
Alexandra, E.J. Triangleness in an ACID Datastore: An Accessible Onboarding to the CMCC, 2025 – Illustrative example modeling geometry in Airtable; demonstrates higher-order inferences (like right-angle detection) emerging from schema and formulas[zenodo.org](https://zenodo.org/records/14836225# :~:text=We%20begin%20by%20gradually%20building,Finally%2C%20we%20compare%20CMCC%20to)
-
.
-
Semantic Web Rule Language (SWRL) – W3C Submission, 2004. Combining OWL with RuleML for rules; adds expressiveness at cost of decidability[en.wikipedia.org](https://en.wikipedia.org/wiki/Semantic_Web_Rule_Language# :~:text=SWRL%20has%20the%20full%20power,5)
-
.
-
ArangoDB vs Neo4j – Multi-Model vs Single-Model – ArangoDB Blog. Highlights that Neo4j is graph-only while Arango supports multiple data models in one DB[arangodb.com](https://arangodb.com/solutions/comparisons/arangodb-vs-neo4j/# :~:text=ArangoDB%20offers%20the%20same%20functionality,performance%2C%20plus%20several%20additional%20features)
-
, analogous to CMCC’s multi-model approach.
-
GraphQL Documentation – Execution – Describes how GraphQL relies on resolver functions to fulfill fields[graphql.org](https://graphql.org/learn/execution/# :~:text=In%20this%20example%2C%20our%20,type)
-
, indicating logic in code; CMCC can reduce this by moving logic into data.
-
GraphQL N+1 Problem – StackOverflow/Apollo docs. Discusses how naive GraphQL causes many DB calls and solutions like DataLoader[stackoverflow.com](https://stackoverflow.com/questions/60831980/i-dont-understand-the-graphql-n1-problem# :~:text=Overflow%20stackoverflow,query%20as%20lean%20as%20possible)
-
; CMCC’s pre-joined data mitigates this.
You said:
Asume that the above content is for a podcast. Please write write summary information for the podcast - in this json format, based on this podcast content. All of the episodes talk about this being the future, and selling, and talking about the Business Rule Completeness Conjecture and The Conceptual Model Completeness Conjecture. BRCC and CMCC are okay references, but the focus should be on the specifics of this podcast. { "title": "...", "subtitle": "...", "description": "...", ---- 1-2 sentence description ---- ---- Dall-e Prompt - And draw a colorful dall-e image for it as well. "name": "ZTS....", ---- name (in this CamelCased format ZTSTitleForTheEpisode ---- "urlSegment": "...-.....-...", ---- urlSegment (with a url-segment title-for-the-episoden ---- ---- no chapter list in here ---- "dalleImagePrompt": "Draw a bright, imaginative illustration combining..... (or whatever)" } Put it in a code block so that it is formated. ====================================== ## Abstract In this episode, we discuss.... Zero-to-Sixty Podcast summary webapge for the episode page. ## Title of the episode here It Should incode an abstract, chapter list with a 1-2 sentence summary of each chapter. Then a 1-2 page a executive summary at the end - in markdown..
ChatGPT said:
Here’s the JSON metadata for the podcast episode, followed by the full podcast episode summary in markdown.
Podcast Episode Metadata (JSON)
json
Copy
Edit
{
"title": "The Future of Knowledge Systems: CMCC and BRCC Explained",
"subtitle": "Revolutionizing Business Rules and Knowledge Graphs with a Single Declarative Model",
"description": "In this episode, we explore the Business Rule Completeness Conjecture (BRCC) and the Conceptual Model Completeness Conjecture (CMCC), groundbreaking frameworks that unify knowledge representation, business rules, and data modeling. We discuss why traditional programming languages and knowledge graphs fall short, and how CMCC enables fully declarative, self-maintaining knowledge systems.",
"name": "ZTSTransformKnowledgeForever",
"urlSegment": "transforming-knowledge-forever",
"dalleImagePrompt": "Draw a bright, imaginative illustration combining futuristic data visualization, interconnected neural networks, and abstract geometric shapes to represent knowledge graphs and conceptual modeling. The image should have a colorful, high-tech, and dynamic aesthetic, showing digital information flowing seamlessly between structured data points."
}
Podcast Episode Summary (Markdown)
Zero-to-Sixty Podcast: Transforming Knowledge Forever
The Future of Knowledge Systems: CMCC and BRCC Explained
Abstract
In this episode, we dive deep into the future of knowledge systems, discussing two revolutionary frameworks: the Business Rule Completeness Conjecture (BRCC) and the Conceptual Model Completeness Conjecture (CMCC). These frameworks redefine how businesses, AI, and data-driven applications handle rules, knowledge, and automation.
We explore how CMCC can seamlessly replace OWL, RDF, SWRL, Neo4j, and GraphQL as a unified knowledge layer—eliminating redundancy, making business logic explicit, and preventing data entropy. We also discuss why precomputed relationships, aggregations, and declarative modeling eliminate the need for runtime inference engines, transforming how enterprises and AI systems handle evolving knowledge.
Chapters & Key Takeaways
1. The Problem: Why Business and Knowledge Systems Are Broken
-
Traditional business rules and knowledge representation models (e.g., OWL, RDF, and custom rule engines) create fragmentation.
-
Code-heavy systems introduce drift, inconsistency, and entropy, making maintenance difficult over time.
-
A new paradigm is needed—one that eliminates stepwise logic and imperatively managed rules.
2. What is CMCC and BRCC? The Future of Declarative Knowledge Systems
-
CMCC (Conceptual Model Completeness Conjecture) states that all computable knowledge can be represented using five declarative primitives:
-
Schema (S) – Defines categories of things.
-
Data (D) – Populates those categories.
-
Lookups (L) – Creates structured relationships.
-
Aggregations (A) – Produces roll-up insights.
-
Lambda Calculated Fields (F) – Encodes rules as declarative formulas.
-
-
BRCC (Business Rule Completeness Conjecture) extends CMCC to business logic—asserting that all business rules can be encoded declaratively without code.
3. OWL, RDF, SWRL, Neo4j & GraphQL vs. CMCC: Why CMCC is the Future
-
OWL/RDF are powerful but require runtime reasoning. CMCC materializes logic as first-class fields, eliminating runtime inference needs.
-
Neo4j & Graph Databases rely on runtime graph traversal, while CMCC precomputes relationships and insights for faster querying.
-
GraphQL simplifies API queries but does not solve knowledge representation problems—CMCC does by ensuring precomputed, structured relationships.
4. Case Study: Rebuilding the Pizza Ontology with CMCC
-
The Pizza Ontology, a classic knowledge representation challenge, is fully transformed into a CMCC model.
-
Instead of relying on runtime reasoners, vegetarian classifications, topping relationships, and business rules are stored natively within the schema as lookups, rollups, and formulas.
-
Key insight: By removing external inference steps, CMCC creates a self-maintaining, self-descriptive knowledge system.
5. Beyond Pizza: Finance, Medical Knowledge Graphs, and Supply Chains
-
Finance: CMCC enables real-time regulatory compliance, risk tracking, and portfolio management through declarative logic, reducing the need for separate rule engines.
-
Medical Knowledge Graphs: Diagnoses, symptoms, and treatments can be modeled as data, relationships, and inferences directly within a CMCC schema.
-
Supply Chain Optimization: Aggregating lead times, component dependencies, and risk exposure can be modeled natively, without scripting.
6. AI & LLMs: How CMCC Can Teach AI to Reason Declaratively
-
Current AI models hallucinate because they lack structured, real-world knowledge representation.
-
CMCC provides AI-ready structured knowledge, making it easier for LLMs to perform logic-based inference instead of probabilistic guesswork.
-
Self-maintaining knowledge graphs enable AI to stay accurate without constant fine-tuning.
7. The Business Impact: Why Companies Must Adopt CMCC Now
-
The Biggest Lie in Business Software: Codebases always decay over time—CMCC prevents this by localizing business logic in the schema.
-
Adoption Strategy: Businesses can incrementally migrate by starting with meta-schema extraction from existing systems, replacing imperative logic with declarative definitions.
-
The Future: Within 5 years, CMCC-powered systems will dominate knowledge-driven enterprises.
Executive Summary
The Future of Knowledge Representation is Here
This episode redefines how businesses, AI, and knowledge-driven applications should structure information. By leveraging CMCC (Conceptual Model Completeness Conjecture) and BRCC (Business Rule Completeness Conjecture), we eliminate imperative programming for rules, knowledge fragmentation, and the increasing entropy of complex systems.
Key Insights:
-
Declarative knowledge modeling is the future. CMCC stores logic as schema, not code, eliminating runtime reasoning, imperative scripts, and knowledge drift.
-
AI and businesses will converge on this model. By precomputing relationships and business rules, CMCC ensures that AI and human-driven systems operate on the same transparent, immutable rulebook.
-
The shift to CMCC is inevitable. Companies that adopt schema-driven rule engines will outpace their competitors, making traditional code-based knowledge systems obsolete.
Call to Action:
This is the defining moment for knowledge representation. Whether you’re a business leader, developer, or AI researcher, you need to embrace CMCC now. Want to start? Extract your meta-schema, encode your business rules declaratively, and future-proof your knowledge systems today.
This podcast episode is a deep-dive blueprint for the next generation of AI-driven, self-maintaining business and knowledge systems. Listen now, and get ahead of the curve.
🚀 Welcome to the Future of Knowledge Representation. 🚀/

