# UKO Layer 2 Paradigm Vocabularies

## Overview

Layer 2 of the Unified Knowledge Ontology (UKO) refines the Layer 1
`uko-code:` domain with paradigm-specific specializations for three
programming paradigms:

- **Object-Oriented** (`uko-oo:`) — classes, interfaces, methods, attributes
- **Functional** (`uko-func:`) — pure functions, type classes, monads
- **Procedural** (`uko-proc:`) — procedural functions, globals, headers, structs, macros

Each paradigm defines OWL classes that subclass Layer 1 or Layer 0 concepts,
and extends the parent `uko-code:` DetailLevelMap with paradigm-specific
named levels.

Based on `docs/specification.md` ~lines 42333-42422, 24923-25027.

## Namespace Prefixes

| Prefix | IRI | Layer |
|--------|-----|-------|
| `uko-oo:` | `https://cleveragents.ai/ontology/uko/oo#` | 2 |
| `uko-func:` | `https://cleveragents.ai/ontology/uko/func#` | 2 |
| `uko-proc:` | `https://cleveragents.ai/ontology/uko/proc#` | 2 |

## Object-Oriented Vocabulary (`uko-oo:`)

### Classes

| Class | Superclasses | Description |
|-------|-------------|-------------|
| `uko-oo:Class` | `uko-code:TypeDefinition`, `uko:Container` | An OO class that contains methods and attributes. |
| `uko-oo:Interface` | `uko-code:TypeDefinition`, `uko:Boundary` | An interface or abstract base class. |
| `uko-oo:Method` | `uko-code:Callable` | A method defined within a class. |
| `uko-oo:Attribute` | `uko:Atom` | A class or instance attribute. |

### Properties

| Property | Domain | Range | subPropertyOf |
|----------|--------|-------|---------------|
| `uko-oo:inheritsFrom` | `uko-oo:Class` | `uko-oo:Class` | `uko:dependsOn` |
| `uko-oo:implements` | `uko-oo:Class` | `uko-oo:Interface` | `uko:dependsOn` |

### DetailLevelMap Insertions

The OO map inserts two levels into the `uko-code:` base map:

| Depth | Name | Origin | Content |
|-------|------|--------|---------|
| 3 | `CLASS_HIERARCHY` | **uko-oo:** | Inheritance chains and interface implementations |
| 7 | `VISIBILITY_ANNOTATED` | **uko-oo:** | Public/protected/private modifiers |

The full effective map with reassigned depths is documented in
`docs/specification.md` ~lines 24991-25004.

## Functional Vocabulary (`uko-func:`)

### Classes

| Class | Superclasses | Description |
|-------|-------------|-------------|
| `uko-func:PureFunction` | `uko-code:Callable` | A pure function with no side effects. |
| `uko-func:TypeClass` | `uko-code:TypeDefinition`, `uko:Boundary` | A type class defining a set of operations for types. |
| `uko-func:Monad` | `uko-code:TypeDefinition` | A monadic type encapsulating computation context. |

### DetailLevelMap

Uses the same named levels as `uko-code:` without insertions.

## Procedural Vocabulary (`uko-proc:`)

### Classes

| Class | Superclasses | Description |
|-------|-------------|-------------|
| `uko-proc:ProceduralFunction` | `uko-code:Callable` | A procedural function declaration. |
| `uko-proc:GlobalVariable` | `uko:Atom` | A global variable declaration. |
| `uko-proc:HeaderFile` | `uko:Container` | A header file defining exported declarations. |
| `uko-proc:StructDefinition` | `uko-code:TypeDefinition` | A C-style struct type definition. |
| `uko-proc:Macro` | `uko:Atom` | A preprocessor macro definition. |

### DetailLevelMap

Uses the same named levels as `uko-code:` without insertions.

## DetailLevelMap Inheritance

The inheritance chain resolves named levels by walking up the map hierarchy:

```
Layer 3 (uko-py:) -> Layer 2 (uko-oo:) -> Layer 1 (uko-code:) -> Layer 0 (uko:)
```

When a named level is requested, the system looks up the name in the most
specific map first, then walks up to parent maps until a match is found.
Integer depths are used directly (clamped to `max_depth`).

### Insertion Mechanics

When a child map inserts a new named level (e.g., `CLASS_HIERARCHY` after
`MEMBER_LISTING`), all subsequent levels shift upward by one to maintain
consecutive integer numbering.

## Python API

### `DetailLevelMapBuilder`

```python
from cleveragents.acms.uko.detail_level_maps import (
    CODE_DETAIL_LEVEL_MAP,
    DetailLevelMapBuilder,
)

builder = DetailLevelMapBuilder(CODE_DETAIL_LEVEL_MAP, "uko-oo:")
builder.insert_after("MEMBER_LISTING", "CLASS_HIERARCHY")
builder.insert_after("SIGNATURES_WITH_DOCS", "VISIBILITY_ANNOTATED")
oo_map = builder.build()

assert oo_map.resolve("CLASS_HIERARCHY") == 3
assert oo_map.resolve("FULL_SOURCE") == 11
```

### `VocabularyRegistry`

```python
from cleveragents.acms.uko.vocabularies import (
    get_oo_vocabulary,
    get_func_vocabulary,
    get_proc_vocabulary,
)
from cleveragents.acms.uko.vocabulary_registry import VocabularyRegistry

registry = VocabularyRegistry(
    vocabularies=(
        get_oo_vocabulary(),
        get_func_vocabulary(),
        get_proc_vocabulary(),
    )
)
oo = registry.get_by_prefix("uko-oo:")
assert oo is not None
assert oo.get_class("Class") is not None
```

## Parent-Layer Dependencies

Layer 2 vocabularies reference these Layer 1 URIs via `rdfs:subClassOf`:

- `https://cleveragents.ai/ontology/uko/code#TypeDefinition`
- `https://cleveragents.ai/ontology/uko/code#Callable`

Layer 2 vocabularies also reference these Layer 0 URIs via
`rdfs:subClassOf` or `rdfs:subPropertyOf`:

- `https://cleveragents.ai/ontology/uko#Container` — superclass of `uko-oo:Class`, `uko-proc:HeaderFile`
- `https://cleveragents.ai/ontology/uko#Atom` — superclass of `uko-oo:Attribute`, `uko-proc:GlobalVariable`, `uko-proc:Macro`
- `https://cleveragents.ai/ontology/uko#Boundary` — superclass of `uko-oo:Interface`, `uko-func:TypeClass`
- `https://cleveragents.ai/ontology/uko#dependsOn` — superproperty of `uko-oo:inheritsFrom`, `uko-oo:implements`

All URIs are defined in `docs/ontology/uko.ttl` and will be fully wired
when the Layer 1 Python module (`uko-code:`) is implemented.

## Limitations

- Layer 1 (`uko-code:`) Python module is not yet implemented; the Python
  code works standalone with the `DetailLevelMap` from `crp.py`.
- Turtle files are validated by the `UKOLoader` but not by a full
  OWL reasoner.
- The procedural vocabulary classes are inferred from the spec's rendering
  tables rather than explicit Turtle definitions.
