From asi
Models database schemas distinguishing entities (tables), attributes (columns), and mappings (foreign keys). Foundation for ACSets and AlgebraicJulia data structures.
npx claudepluginhub plurigrid/asi --plugin asiThis skill uses the workspace's default tool permissions.
**Trit**: +1 (PLUS - generator)
Models knowledge domains with Ologs using category theory: declares objects as concepts, morphisms as functional relations, and equations as constraints. Foundations for database schemas and conceptual modeling in CatColab.
Creates validated models of entities, relationships, and constraints for database schemas (SQL/NoSQL/graph), knowledge graphs, ontologies, API data models, and taxonomies.
Designs normalized relational database schemas for PostgreSQL and MySQL from requirements, generating DDL, constraints, indexes, relationships, and migrations.
Share bugs, ideas, or general feedback.
Trit: +1 (PLUS - generator) Color: Green (#32CD32)
Schemas in CatColab upgrade ologs by explicitly distinguishing:
This is the foundation for ACSets (Attributed C-Sets), the core data structure of AlgebraicJulia.
A schema is a profunctor or displayed category:
┌─────────────────────────────────────────────────────┐
│ SCHEMA │
├─────────────────────────────────────────────────────┤
│ Entities (Ob): │
│ Person, Company, Project │
│ │
│ AttrTypes (Data): │
│ String, Int, Date, Bool │
│ │
│ Mappings (Hom): │
│ works_at: Person → Company │
│ leads: Person → Project │
│ │
│ Attributes (Attr): │
│ name: Person → String │
│ age: Person → Int │
│ founded: Company → Date │
└─────────────────────────────────────────────────────┘
// Schema double theory in catlog
pub fn th_schema() -> DiscreteDblTheory {
let mut cat = FpCategory::new();
// Object types
cat.add_ob_generator(name("Entity"));
cat.add_ob_generator(name("AttrType"));
// Morphism types
cat.add_mor_generator(name("Mapping"), name("Entity"), name("Entity"));
cat.add_mor_generator(name("Attr"), name("Entity"), name("AttrType"));
cat.into()
}
{
"type": "ObDecl",
"name": "Person",
"theory_type": "Entity",
"description": "people in the system"
}
{
"type": "ObDecl",
"name": "String",
"theory_type": "AttrType",
"description": "text values"
}
{
"type": "MorDecl",
"name": "employer",
"dom": "Person",
"cod": "Company",
"theory_type": "Mapping",
"description": "the company this person works for"
}
{
"type": "MorDecl",
"name": "salary",
"dom": "Person",
"cod": "Int",
"theory_type": "Attr",
"description": "annual salary in dollars"
}
A CatColab schema defines the type; an ACSet is an instance:
# Schema defines structure
@present SchPerson(FreeSchema) begin
Person::Ob
Company::Ob
employer::Hom(Person, Company)
Name::AttrType
name::Attr(Person, Name)
end
# ACSet populates data
people = @acset SchPerson begin
Person = 3
Company = 2
employer = [1, 1, 2]
name = ["Alice", "Bob", "Charlie"]
end
Entities: Customer, Order, Product, Category
AttrTypes: String, Int, Float, DateTime
Mappings:
placed_by: Order → Customer
contains: Order → Product (many-to-many via junction)
in_category: Product → Category
Attributes:
email: Customer → String
total: Order → Float
price: Product → Float
name: Category → String
Entities: User, Post, Comment, Group
AttrTypes: String, DateTime, Int
Mappings:
author: Post → User
on_post: Comment → Post
member_of: User → Group
Attributes:
username: User → String
content: Post → String
timestamp: Post → DateTime
likes: Post → Int
Schemas compose via pullback and pushout:
Schema A Schema B
\ /
\ pullback /
\ /
▼ ▼
Schema A ×_C B
catcolab-ologs (-1) ⊗ topos-catcolab (0) ⊗ catcolab-schemas (+1) = 0 ✓
database-design (-1) ⊗ acsets-relational-thinking (0) ⊗ catcolab-schemas (+1) = 0 ✓
# Create schema
just catcolab-new schema "my-database"
# Generate Julia ACSet code
just catcolab-export my-database --format=julia
# Create instance (diagram)
just catcolab-instance my-database "sample-data"
# Migrate schema
just catcolab-migrate old-schema new-schema
Skill Name: catcolab-schemas Type: Database Schema Design Trit: +1 (PLUS) GF(3): Conserved via triadic composition