大多数实例使用 Lean.Parser.Command.declaration : commandwhere 语法来定义各个方法:
instance ::= ... |instance ((priority := prio))?`attrKind` 匹配 `("scoped" <|> "local")?`,用于属性之前,例如 `@[local simp]`。declId?`declId` 匹配 `foo` 或 `foo.{u,v}`:一个标识符,后面可以跟一个宇宙名称列表。declSig where structInstField*`declSig` 匹配类型必需的声明签名:先是一列绑定器,随后是 `: type`。
然而,类型类本身是归纳类型,因此可以使用任何具有合适类型的表达式来构造实例:
instance ::= ... |instance ((priority := prio))?`attrKind` 匹配 `("scoped" <|> "local")?`,用于属性之前,例如 `@[local simp]`。declId?`declId` 匹配 `foo` 或 `foo.{u,v}`:一个标识符,后面可以跟一个宇宙名称列表。declSig := term`declSig` 匹配类型必需的声明签名:先是一列绑定器,随后是 `: type`。终止提示依次为 `termination_by` 和 `decreasing_by`。
实例也可以通过分情况进行定义;然而,除了 Decidable 实例外,这个特性很少被使用:
instance ::= ... |instance ((priority := prio))?`attrKind` 匹配 `("scoped" <|> "local")?`,用于属性之前,例如 `@[local simp]`。declId?`declId` 匹配 `foo` 或 `foo.{u,v}`:一个标识符,后面可以跟一个宇宙名称列表。declSig (| term => term)*`declSig` 匹配类型必需的声明签名:先是一列绑定器,随后是 `: type`。终止提示依次为 `termination_by` 和 `decreasing_by`。