Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions docs/ontology/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,10 @@ Coverage: 145 / 1408 fallacies (10.3 %) — the fully-reconciled skos-only subse

See [`argumentum-owl-validation-2026-07-12.md`](argumentum-owl-validation-2026-07-12.md) for the layer-by-layer validation report.

### Consumable CSV exports (Layer 3, for downstream consumers)

The AIF attack-graph (Layer 3 above) is also exported as **consumable CSV** in [`aif-export/`](aif-export/README.md) — bipartite typed attack-edges (Fallacies 145 + Virtues 222), OWL good-tenor edges (Virtues 222 → 14 schemes), canonical concepts, the taxonomy tree, and inter-fallacy semantic relations. Reproducible via `python tools/aif-attack-graph-export.py` + `python tools/aif-virtues-export.py` (read-only on sources). Consumers: CoursIA ICT #7289 / uplift #5721, Layer C v1.0 #790.

---

## 4. Regeneration
Expand Down
44 changes: 42 additions & 2 deletions docs/ontology/aif-export/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ Same AIF attack graph, extracted from `argumentum.owl` AnnotationAssertions (`ai

`source_fragment --[relation]--> target_fragment`. These are the OWL's generic semantic relations between fallacy individuals. **NOT AIF attack-edges** — a different, complementary graph.

> **Count reconciliation note.** This file holds **1734 distinct** directed edges (exact `(s,p,o)` triples deduplicated). The ontology README §2 Layer 2 reports **1985** — that count is the **raw emitted assertions** (pre-dedup): the OWL serializer (OWLSharp) emits 243 exact-duplicate triples (a serializer idempotency quirk, not a data issue). Raw parse = 1977 ≈ README 1985 (the -8 delta is one schema self-definition counted per verb, 8 verbs). Symmetric verbs (`mirrors`, `isRelatedTo`, `inverts`, `opposes`) are emitted bidirectionally as two distinct triples `(A,p,B)` + `(B,p,A)` — both are kept here (they are not duplicates). A consumer should use this deduplicated file; the raw count matches the README.

| Relation | Count | Semantics (loose) |
|---|---:|---|
| `isRelatedTo` | 606 | generic relatedness (bidirectional in source) |
Expand All @@ -94,13 +96,51 @@ The CSV has no PK→IRI column, so a 1:1 row↔individual mapping cannot be esta

---

## Virtues companion export (V-A + V-B)

The companion script `tools/aif-virtues-export.py` extends the AIF export to the Virtues Taxonomy. **The Virtues carry a DOUBLE AIF modelling** of the same 222-virtue population — two complementary views, never merged:

| View | Source | Predicate | Edges | Semantics |
|---|---|---|---:|---|
| **V-A** attack-graph | Virtues CSV | `AIF_attackType` + `AIF_attackedNode` | 222 | how the virtue ATTACKS a bad reasoning (counter-argument, bipartite: virtue → node-TYPE RA/I/CA) |
| **V-B** good-tenor | `argumentum_virtues.owl` | `aif#goodTenorOf` | 222 | how the virtue EMBODIES a canonical AIF argument SCHEME (Rule/Commitment/Bias/Sign/…) |

**Not redundant, not contradictory.** A virtue can attack a bad reasoning (V-A) by embodying a good argument scheme (V-B). V-A and V-B point to the **same vocabulary of 14 canonical AIF schemes** (`Argument from Rule`, `Commitment`, `Bias`, `Sign`, `Verbal Classification`, `Cause to Effect`, `Witness Testimony`, `Position to Know`, `Values`, `Analogy`, `Expert Opinion`, `Example`, `Consequences`, `Danger`) but via different predicates.

### Contrast with Fallacies (#828)

Fallacies carry **only** the CSV attack-graph (V-A) — there is no `goodTenorOf` in `argumentum.owl`. The Virtues are the **dual**: they carry BOTH views. **Do NOT fuse `Fallacies-attacks` + `Virtues-attacks` into one homogeneous graph** — Virtues-attacks encode counter-arguments to fallacies, a different semantics from Fallacies-attacking-nodes.

### Artefacts (Virtues)

| File | Rows | Content |
|---|---:|---|
| `aif-virtues-attack-edges.csv` | 222 | V-A bipartite attack-edges (PK-keyed). `skos_exception_ref` holds the FR critical-question the virtue poses. |
| `aif-virtues-good-tenor.csv` | 222 | V-B virtue→scheme edges (camelCase IRI → `Argument from X`). |
| `aif-virtues-canonical-concepts.csv` | 14 | AIF schemes referenced via skos (= the V-B scheme set). |
| `aif-virtues-schemes.csv` | 14 | Scheme distribution (Rule 50, Commitment 40, Bias 27, …). |

V-A axiom: 222/222 respected (undercut→RA 206, undermine→I 13, rebut→CA 3, 0 violations). 222/222 virtues carry a skos ref.

### Cross-family coherence (Fallacies ↔ Virtues) — empirical note

The two families reference **disjoint AIF vocabularies** (intersection = 0):

| Family | Naming convention | Distinct concepts | Example |
|---|---|---:|---|
| Fallacies (#828) | `<Topic>_<Type>` suffix (`_Inference` / `_Conflict` / `_Scheme`) | 60 | `CauseToEffect_Inference`, `Bias_Inference`, `Commitment_Conflict` |
| Virtues (#829) | `Argument from <Topic>` readable form | 14 | `Argument from Cause to Effect`, `Argument from Bias`, `Argument from Commitment` |

Both conventions **co-exist as declared classes** in the source AIF ontology (`Ontology/Resources/AIF.owl`: 125 `_Type` forms + 15 `Argument from X` forms). A lexical alignment is *inferrable* in several cases (e.g. `Bias_Inference` ↔ `Argument from Bias`, `CauseToEffect_Inference` ↔ `Argument from Cause to Effect`) but **no materialised mapping table exists** in the source data. This export therefore does **not** unify the two vocabularies — a consumer that needs a unified AIF concept space must build that mapping explicitly (a modelling decision, not an export). Documented to prevent the false assumption that Fallacies-concepts and Virtues-concepts are pre-aligned.

## Re-run

```bash
python tools/aif-attack-graph-export.py
python tools/aif-attack-graph-export.py # Fallacies (5 CSVs)
python tools/aif-virtues-export.py # Virtues (4 CSVs)
```

Idempotent, 0 external dependency (Python stdlib + `xml.etree`), runtime ~3s. Overwrites the 5 CSVs in this directory. 0 write to the source CSV/OWL.
Idempotent, 0 external dependency (Python stdlib + `xml.etree`), runtime ~3s each. Overwrites the CSVs in this directory. 0 write to the source CSV/OWL.

---

Expand Down
Loading
Loading