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
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 3returnsxyz.snd.fst.mkProdProj xyz 1 2returnsxyz.snd.
Equations
- One or more equations did not get rendered due to their size.
- Mathlib.Meta.FunProp.mkProdProj x i 0 = pure x
- Mathlib.Meta.FunProp.mkProdProj x i 1 = pure x
- Mathlib.Meta.FunProp.mkProdProj x 0 n = Lean.Meta.mkAppM `Prod.fst #[x]
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
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