import Spec.Courseware.Model.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 合规由类型系统保证。ADR-0005 的 (a) 类
字段(逐字稿、重点圈划)落在具体 kind 的 `ElementData` 内,不出现在此通用结构上;
交互教具等"重型 kind"在此与例题、定理同构,仅 `kind` 不同,重实现在模型之外。 -/
structure Element where
  /-- 该 element 的 kind。 -/
  kind : P.KindId
  /-- 符合 `kind` schema 的数据(类型随 `kind` 而变)。 -/
  data : P.ElementData kind

end Spec.Courseware
