open nat

structure foo [class] :=
(a : nat) (b : nat)

definition i1 [instance] [priority std.priority.default-2] : foo :=
foo.mk 1 1

example : foo.a = 1 :=
rfl

definition i2 [instance] [priority std.priority.default-1] : foo :=
foo.mk 2 2

example : foo.a = 2 :=
rfl

definition i3 [instance] : foo :=
foo.mk 3 3

example : foo.a = 3 :=
rfl

definition i4 [instance] [priority std.priority.default-1] : foo :=
foo.mk 4 4

example : foo.a = 3 :=
rfl

attribute i4 [priority std.priority.default+2]

example : foo.a = 4 :=
rfl

attribute i1 [priority std.priority.default+3]

example : foo.a = 1 :=
rfl

attribute i2 [instance] [priority std.priority.default+4]

example : foo.a = 2 :=
rfl
