Zulip Chat Archive
Stream: new members
Topic: What does attribute mean as body of a class definition
Lars Ericson (Dec 11 2020 at 02:22):
It seems like attribute
is the body of this class definition. Is that correct? If so, what does it do:
/-- An additive commutative monoid is an additive monoid with commutative `(+)`. -/
@[protect_proj, ancestor add_monoid add_comm_semigroup]
class add_comm_monoid (M : Type u) extends add_monoid M, add_comm_semigroup M
attribute [to_additive] comm_monoid
Bryan Gin-ge Chen (Dec 11 2020 at 02:36):
No, that's not correct. add_comm_monoid
is simply a class that includes all the fields of add_monoid
and add_comm_semigroup
and nothing else.
Bryan Gin-ge Chen (Dec 11 2020 at 02:38):
attribute
is a built-in command telling Lean to apply a certain attribute, in this case attr#to_additive, to a certain declaration, in this case comm_monoid
. See the reference manual.
Lars Ericson (Dec 11 2020 at 02:43):
Thanks, it was just the formatting was confusing in this file. The use of white space gives a visual cue of relatedness to the prior declaration:
/-- A commutative additive semigroup is a type with an associative commutative `(+)`. -/
@[protect_proj, ancestor add_semigroup]
class add_comm_semigroup (G : Type u) extends add_semigroup G :=
(add_comm : ∀ a b : G, a + b = b + a)
attribute [to_additive] comm_semigroup
section comm_semigroup
variables {G : Type u} [comm_semigroup G]
Last updated: Dec 20 2023 at 11:08 UTC