funProp
missing function from standard library #
Check if a
can be obtained by removing elements from b
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Telescope consuming only let bindings
Equations
- Mathlib.Meta.FunProp.letTelescope e k = Lean.Meta.map2MetaM (fun {α : Type} (k : Array Lean.Expr → Lean.Expr → Lean.MetaM α) => Mathlib.Meta.FunProp.letTelescopeImpl e k) k
Instances For
Swaps bvars indices i
and j
NOTE: the indices i
and j
do not correspond to the n
in bvar n
. Rather
they behave like indices in Expr.lowerLooseBVars
, Expr.liftLooseBVars
, etc.
TODO: This has to have a better implementation, but I'm still beyond confused with how bvar indices work
Equations
- One or more equations did not get rendered due to their size.
Instances For
For #[x₁, .., xₙ]
create (x₁, .., xₙ)
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
For (x₀, .., xₙ₋₁)
return xᵢ
but as a product projection.
We need to know the total size of the product to be considered.
For example for xyz : X × Y × Z
mkProdProj xyz 1 3
returnsxyz.snd.fst
.mkProdProj xyz 1 2
returnsxyz.snd
.
Instances For
For an element of a product type(of sizen
) xs
create an array of all possible projections
i.e. #[xs.1, xs.2.1, xs.2.2.1, ..., xs.2..2]
Equations
- Mathlib.Meta.FunProp.mkProdSplitElem xs n = Array.mapM (fun (i : Nat) => Mathlib.Meta.FunProp.mkProdProj xs i n) (Array.range n)
Instances For
Uncurry function f
in n
arguments.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Apply the given arguments to f
, beta-reducing if f
is a lambda expression. This variant
does beta-reduction through let bindings without inlining them.
Example
beta' (fun x => let y := x * x; fun z => x + y + z) #[a,b]
==>
let y := a * a; a + y + b
Equations
- Mathlib.Meta.FunProp.betaThroughLet f args = Mathlib.Meta.FunProp.betaThroughLetAux f args.toList
Instances For
Beta reduces head of an expression, (fun x => e) a
==> e[x/a]
. This version applies
arguments through let bindings without inlining them.
Example
headBeta' ((fun x => let y := x * x; fun z => x + y + z) a b)
==>
let y := a * a; a + y + b
Equations
- Mathlib.Meta.FunProp.headBetaThroughLet e = if Lean.Expr.isHeadBetaTargetFn true e.getAppFn = true then Mathlib.Meta.FunProp.betaThroughLet e.getAppFn e.getAppArgs else e