# Documentation

Lean.PrettyPrinter.Delaborator.Basic

The delaborator is the first stage of the pretty printer, and the inverse of the elaborator: it turns fully elaborated Expr core terms back into surface-level Syntax, omitting some implicit information again and using higher-level syntax abstractions like notations where possible. The exact behavior can be customized using pretty printer options; activating pp.all should guarantee that the delaborator is injective and that re-elaborating the resulting Syntax round-trips.

Pretty printer options can be given not only for the whole term, but also specific subterms. This is used both when automatically refining pp options until round-trip and when interactively selecting pp options for a subterm (both TBD). The association of options to subterms is done by assigning a unique, synthetic Nat position to each subterm derived from its position in the full term. This position is added to the corresponding Syntax object so that elaboration errors and interactions with the pretty printer output can be traced back to the subterm.

The delaborator is extensible via the [delab] attribute.

Instances For
• We attach Elab.Info at various locations in the Syntax output in order to convey its semantics. While the elaborator emits InfoTrees, here we have no real text location tree to traverse, so we use a flattened map.

• See SubExpr.nextExtraPos.

Instances For
Equations
• Lean.PrettyPrinter.Delaborator.instInhabitedDelabM = { default := throw default }
@[inline]
Equations
Equations
• Lean.PrettyPrinter.Delaborator.failure =
Equations
Equations
• Lean.PrettyPrinter.Delaborator.instOrElseDelabM = { orElse := Lean.PrettyPrinter.Delaborator.orElse }
Equations
• One or more equations did not get rendered due to their size.
Equations
• One or more equations did not get rendered due to their size.
Equations
• One or more equations did not get rendered due to their size.
Equations
• One or more equations did not get rendered due to their size.
Equations
• One or more equations did not get rendered due to their size.

Evaluate option accessor, using subterm-specific options if set.

Equations
Equations
• = do let b ← if then d else failure
Equations
• = do let b ← if then failure else d

Set the given option at the current position and execute x in this context.

Equations
• One or more equations did not get rendered due to their size.
Equations
Equations
Equations
• One or more equations did not get rendered due to their size.
Equations
• One or more equations did not get rendered due to their size.
Equations
• One or more equations did not get rendered due to their size.
@[inline]
Equations
Equations
• One or more equations did not get rendered due to their size.
Equations
• One or more equations did not get rendered due to their size.
Equations
• One or more equations did not get rendered due to their size.
Equations
• One or more equations did not get rendered due to their size.
Equations
• One or more equations did not get rendered due to their size.
Equations
• One or more equations did not get rendered due to their size.
Equations
• One or more equations did not get rendered due to their size.
def Lean.PrettyPrinter.delab (e : Lean.Expr) (optionsPerPos : ) :

"Delaborate" the given term into surface-level syntax using the default and given subterm-specific options.

Equations