import Spec.Courseware.Primitives /-! # Element —— 课程内容的原子单位 ADR-0005:element 实例 = 一个 kind 标签 + 符合该 kind schema 的数据。本模块把这条 编码成一个依赖结构,使"数据必须匹配其 kind"成为类型层面的事实而非运行时校验。 -/ namespace Spec.Courseware variable (P : Primitives) /-- element 实例(`PINNED`, ADR-0005)。 `data` 的类型 `P.ElementData kind` **由 `kind` 决定**——这意味着无法构造一个数据与 其 kind 不符的 element:schema 合规由类型系统而非 checker 保证。 ADR-0005 的 (a) 类信息(逐字稿、重点圈划等"语义性但只在某些 target 浮现"的字段) 属于具体 kind 的 schema,落在 `P.ElementData` 内,不出现在这个通用结构上;(b) 类 信息(html 交互、build/npm)按 ADR-0005 不进 element。交互教具是一种"重型 kind", 其 `ElementData` 只承载题目/配置数据,重实现在模型之外——它在此结构里与例题、定理 同构,仅 `kind` 不同。 -/ structure Element where /-- 该 element 的 kind。 -/ kind : P.KindId /-- 符合 `kind` schema 的数据(类型随 `kind` 而变)。 -/ data : P.ElementData kind end Spec.Courseware