/-! # Delaborating structure instances -/ structure A where x : Nat /-! Basic example -/ /-- info: { x := 1 } : A -/ #guard_msgs in #check { x := 1 : A } /-! pp.all -/ set_option pp.all true in /-- info: A.mk (@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))) : A -/ #guard_msgs in #check { x := 1 : A } structure B extends A where y : Nat /-! Check flattening of parent structures. -/ /-- info: { x := 1 } : A -/ #guard_msgs in #check {x := 1 : A} /-- info: { x := 1, y := 2 } : B -/ #guard_msgs in #check {x := 1, y := 2 : B} /-! No flattening of parent structures -/ section set_option pp.structureInstances.flatten false /-- info: { x := 1 } : A -/ #guard_msgs in #check {x := 1 : A} /-- info: { toA := { x := 1 }, y := 2 } : B -/ #guard_msgs in #check {x := 1, y := 2 : B} end /-! Not a true parent structure, so no flattening. -/ structure B' where toA : A y : Nat /-- info: { toA := { x := 1 }, y := 2 } : B' -/ #guard_msgs in #check {toA := {x := 1}, y := 2 : B'} /-! Check that this handles parameters. -/ structure C (n : Nat) where x : Fin n structure D (n : Nat) extends C n where y : Nat /-- info: { x := 1, y := 2 } : D 3 -/ #guard_msgs in #check {x := 1, y := 2 : D 3} /-! Show type -/ set_option pp.structureInstanceTypes true in /-- info: { x := 0 : A } : A -/ #guard_msgs in #check { x := 0 : A } /-! Omit default values -/ /-- info: { } : Lean.Meta.Simp.Config -/ #guard_msgs in #check { : Lean.Meta.Simp.Config } structure E where n : Nat := 0 /-- info: { } : E -/ #guard_msgs in #check { : E } /-- info: { n := 1 } : E -/ #guard_msgs in #check { n := 1 : E } set_option pp.structureInstances.defaults true in /-- info: { n := 0 } : E -/ #guard_msgs in #check { : E } structure F extends E where m : Nat := 1 /-- info: { } : F -/ #guard_msgs in #check { : F } set_option pp.structureInstances.defaults true in /-- info: { n := 0, m := 1 } : F -/ #guard_msgs in #check { : F } /-- info: { n := 1 } : F -/ #guard_msgs in #check { n := 1 : F } /-- info: { m := 2 } : F -/ #guard_msgs in #check { m := 2 : F } /-! Omit default values, with parameter handling -/ structure G (n : Nat) where m := n /-- info: { } : G 3 -/ #guard_msgs in #check { : G 3 } /-- info: { m := 2 } : G 3 -/ #guard_msgs in #check { m := 2 : G 3 } /-! Explicit mode turns off structure instance notation iff there are parameters -/ set_option pp.explicit true in /-- info: { } : E -/ #guard_msgs in #check { : E } set_option pp.explicit true in /-- info: @G.mk (@OfNat.ofNat Nat (nat_lit 3) (instOfNatNat (nat_lit 3))) (@OfNat.ofNat Nat (nat_lit 3) (instOfNatNat (nat_lit 3))) : G (@OfNat.ofNat Nat (nat_lit 3) (instOfNatNat (nat_lit 3))) -/ #guard_msgs in #check { : G 3 } /-! If universe levels need to be shown, structure instance notation is turned off -/ structure U (α : Type _) where x : α /-- info: { x := 1 } : U Nat -/ #guard_msgs in #check { x := 1 : U Nat } set_option pp.universes true in /-- info: U.mk.{0} 1 : U.{0} Nat -/ #guard_msgs in #check { x := 1 : U Nat } /-! Dependence of default value -/ structure H where x : Nat y : Nat := x /-- info: { x := 1 } : H -/ #guard_msgs in #check { x := 1 : H } /-! Diamond inheritance -/ structure D1 where x := 1 structure D2 extends D1 where structure D3 extends D1 where x := 3 structure D4 extends D2, D3 /-- info: { } : D1 -/ #guard_msgs in #check { : D1 } set_option pp.structureInstances.defaults true in /-- info: { x := 1 } : D1 -/ #guard_msgs in #check { : D1 } /-- info: { } : D2 -/ #guard_msgs in #check { : D2 } set_option pp.structureInstances.defaults true in /-- info: { x := 1 } : D2 -/ #guard_msgs in #check { : D2 } /-- info: { } : D3 -/ #guard_msgs in #check { : D3 } set_option pp.structureInstances.defaults true in /-- info: { x := 3 } : D3 -/ #guard_msgs in #check { : D3 } /-- info: { } : D4 -/ #guard_msgs in #check { : D4 } set_option pp.structureInstances.defaults true in /-- info: { x := 3 } : D4 -/ #guard_msgs in #check { : D4 } /-! Inheritance with parameters -/ namespace Test1 structure A (α : Type) [Inhabited α] where x : α := default structure B (β : Type) [Inhabited β] extends A β where /-- info: { } : B Nat -/ #guard_msgs in #check { : B Nat } set_option pp.structureInstances.defaults true in /-- info: { x := default } : B Nat -/ #guard_msgs in #check { : B Nat } -- Only reducible defeq, so the `x` fields is still included: /-- info: { x := 0 } : B Nat -/ #guard_msgs in #check { x := 0 : B Nat } end Test1