| /-! | |
| # 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 |