blob: 50ebd663f3ca438282899f5f5aebbdcd5d6f7ea2 [file] [edit]
set_option structureDiamondWarning false
class Foo (α : Type) extends Add α where
zero : α
class FooComm (α : Type) extends Foo α where
comm (a b : α) : a + b = b + a
class FooAssoc (α : Type) extends Foo α, Mul α where
add_assoc (a b c : α) : (a + b) + c = a + (b + c)
mul_assoc (a b c : α) : (a * b) * c = a * (b * c)
class FooAC (α : Type) extends FooComm α, FooAssoc α where
mul_comm (a b : α) : a * b = b * a
set_option pp.all true
#check FooAC.mk
#print FooAC.toFooAssoc
class FooAssoc' (α : Type) extends FooAssoc α where
one : α
class FooAC' (α : Type) extends FooComm α, FooAssoc' α where
mul_comm (a b : α) : a * b = b * a
#check FooAC'.mk
#print FooAC'.toFooAssoc'
def f [FooAssoc α] (a : α) : α :=
a * a
def g [FooAC' α] (a : α) : α :=
f (a + FooAssoc'.one)