The expression represented by a SplitInfo.
Instances For
Introduces fvars for all varying parts of a SplitInfo and provides the abstract
SplitInfo and fvars to the continuation.
For ite/dite, introduces c : Prop, dec : Decidable c, t : mα (or t : c → mα),
e : mα (or e : ¬c → mα).
For matcher, introduces discriminant fvars and alternative fvars, builds a non-dependent
motive fun _ ... _ => mα, and adjusts matcher universe levels.
The abstract SplitInfo satisfies abstractInfo.expr = abstractProgram.
For matcher, the abstract MatcherApp stores eta-expanded fvar alts so that
splitWith/matcherApp.transform can instantiateLambda them directly (no patching needed).
Since eta-expanded alts like fun n => alt n can cause expensive higher-order unification in
backward rule patterns, callers building backward rules should eta-reduce them first (e.g.
via Expr.eta on the alt arguments of abstractInfo.expr).