blob: 9b2e7a89eb56f622589336b5837f51e5822cd10b [file] [edit]
/-!
# Testing structure declarations, including unbracketed parameters
-/
/-!
Structure with no parameters, no type, named constructor, and derived instance
-/
structure NatPair where
mkPair ::
fst : Nat
snd : Nat
deriving Inhabited
/-- info: NatPair : Type -/
#guard_msgs in
#check NatPair
/-- info: NatPair.mkPair (fst snd : Nat) : NatPair -/
#guard_msgs in
#check NatPair.mkPair
/-- info: instInhabitedNatPair -/
#guard_msgs in
#synth Inhabited NatPair
/-!
Structure with type and no parameters
-/
structure Pointed : Type u where
α : Sort u
x : α
/-- info: Pointed.{u} : Type u -/
#guard_msgs in
#check Pointed
/-- info: Pointed.mk.{u} (α : Sort u) (x : α) : Pointed -/
#guard_msgs in
#check Pointed.mk
/-!
Structure with unbracketed parameter, no type, and derived instance
-/
structure Δ n where
val : Fin (n + 1)
deriving Inhabited
/-- info: Δ (n : Nat) : Type -/
#guard_msgs in
#check Δ
/-- info: Δ.mk {n : Nat} (val : Fin (n + 1)) : Δ n -/
#guard_msgs in
#check Δ.mk
/-- info: @instInhabitedΔ -/
#guard_msgs in
#synth ∀ n, Inhabited (Δ n)
/-!
Structure with unbracketed parameters, type, and extends
-/
structure Prod₃ α β γ : Type u extends toProd : α × β where
trd : (γ : Type u)
/-- info: Prod₃.{u} (α β γ : Type u) : Type u -/
#guard_msgs in
#check Prod₃
/-- info: Prod₃.mk.{u} {α β γ : Type u} (toProd : α × β) (trd : γ) : Prod₃ α β γ -/
#guard_msgs in
#check Prod₃.mk
/-- info: Prod₃.toProd.{u} {α β γ : Type u} (self : Prod₃ α β γ) : α × β -/
#guard_msgs in
#check Prod₃.toProd
/-!
Structure with no type and mixture of bracketed and unbracketed parameters
-/
structure IsLt {n} (i : Fin n) j where
pf : i < j
/-- info: IsLt {n : Nat} (i j : Fin n) : Prop -/
#guard_msgs in
#check IsLt
/-- info: IsLt.mk {n : Nat} {i j : Fin n} (pf : i < j) : IsLt i j -/
#guard_msgs in
#check IsLt.mk
/-!
Structure with type and mixture of bracketed and unbracketed parameters
-/
structure Eval {n} (F : Fin n → Sort u) i : Sort (max 1 u) where
value : F i
/-- info: Eval.{u} {n : Nat} (F : Fin n → Sort u) (i : Fin n) : Sort (max 1 u) -/
#guard_msgs in
#check Eval
/-- info: Eval.mk.{u} {n : Nat} {F : Fin n → Sort u} {i : Fin n} (value : F i) : Eval F i -/
#guard_msgs in
#check Eval.mk