File: Mathlib/Tactic/FunProp/Core.lean

full_name: Mathlib.Meta.FunProp.synthesizeInstance
code: /-- Synthesize instance of type `type` and
  1. assign it to `x` if `x` is meta variable
  2. check it is equal to `x` -/
def synthesizeInstance (thmId : Origin) (x type : Expr) : MetaM Bool 
goal: Lean.MetaM Bool

full_name: Mathlib.Meta.FunProp.synthesizeArgs
code: /-- Synthesize arguments `xs` either with typeclass synthesis, with funProp or with discharger. -/
def synthesizeArgs (thmId : Origin) (xs : Array Expr) (bis : Array BinderInfo)
    (funProp : Expr → FunPropM (Option Result)) :
    FunPropM Bool 
goal: Mathlib.Meta.FunProp.FunPropM Bool

full_name: Mathlib.Meta.FunProp.tryTheoremCore
code: /-- Try to apply theorem - core function -/
def tryTheoremCore (xs : Array Expr) (bis : Array BinderInfo) (val : Expr) (type : Expr) (e : Expr)
    (thmId : Origin) (funProp : Expr → FunPropM (Option Result)) : FunPropM (Option Result) 
goal: Mathlib.Meta.FunProp.FunPropM (Option Mathlib.Meta.FunProp.Result)

full_name: Mathlib.Meta.FunProp.tryTheoremWithHint?
code: /-- Try to apply a theorem provided some of the theorem arguments. -/
def tryTheoremWithHint? (e : Expr) (thmOrigin : Origin)
    (hint : Array (Nat×Expr))
    (funProp : Expr → FunPropM (Option Result)) (newMCtxDepth : Bool := false) :
    FunPropM (Option Result) 
goal: Mathlib.Meta.FunProp.FunPropM (Option Mathlib.Meta.FunProp.Result)

full_name: Mathlib.Meta.FunProp.tryTheorem?
code: /-- Try to apply a theorem -/
def tryTheorem? (e : Expr) (thmOrigin : Origin) (funProp : Expr → FunPropM (Option Result))
    (newMCtxDepth : Bool := false) : FunPropM (Option Result) 
goal: Mathlib.Meta.FunProp.FunPropM (Option Mathlib.Meta.FunProp.Result)

full_name: Mathlib.Meta.FunProp.applyIdRule
code: /-- Apply lambda calculus rule P fun x => x` -/
def applyIdRule (funPropDecl : FunPropDecl) (e X : Expr)
    (funProp : Expr → FunPropM (Option Result)) : FunPropM (Option Result) 
goal: Mathlib.Meta.FunProp.FunPropM (Option Mathlib.Meta.FunProp.Result)

full_name: Mathlib.Meta.FunProp.applyConstRule
code: /-- Apply lambda calculus rule P fun x => y` -/
def applyConstRule (funPropDecl : FunPropDecl) (e X y : Expr)
    (funProp : Expr → FunPropM (Option Result)) : FunPropM (Option Result) 
goal: Mathlib.Meta.FunProp.FunPropM (Option Mathlib.Meta.FunProp.Result)

full_name: Mathlib.Meta.FunProp.applyProjRule
code: /-- Apply lambda calculus rule P fun f => f i` -/
def applyProjRule (funPropDecl : FunPropDecl) (e x XY : Expr)
    (funProp : Expr → FunPropM (Option Result)) : FunPropM (Option Result) 
goal: Mathlib.Meta.FunProp.FunPropM (Option Mathlib.Meta.FunProp.Result)

full_name: Mathlib.Meta.FunProp.applyCompRule
code: /-- Apply lambda calculus rule `P f → P g → P fun x => f (g x)` -/
def applyCompRule (funPropDecl : FunPropDecl) (e f g : Expr)
    (funProp : Expr → FunPropM (Option Result)) : FunPropM (Option Result) 
goal: Mathlib.Meta.FunProp.FunPropM (Option Mathlib.Meta.FunProp.Result)

full_name: Mathlib.Meta.FunProp.applyPiRule
code: /-- Apply lambda calculus rule `∀ y, P (f · y) → P fun x y => f x y` -/
def applyPiRule (funPropDecl : FunPropDecl) (e f : Expr)
    (funProp : Expr → FunPropM (Option Result)) : FunPropM (Option Result) 
goal: Mathlib.Meta.FunProp.FunPropM (Option Mathlib.Meta.FunProp.Result)

full_name: Mathlib.Meta.FunProp.letCase
code: /-- Prove function property of `fun x => let y := g x; f x y`. -/
def letCase (funPropDecl : FunPropDecl) (e : Expr) (f : Expr)
    (funProp : Expr → FunPropM (Option Result)) :
    FunPropM (Option Result) 
goal: Mathlib.Meta.FunProp.FunPropM (Option Mathlib.Meta.FunProp.Result)

full_name: Mathlib.Meta.FunProp.applyMorRules
code: /-- Prove function property of using "morphism theorems" e.g. bundled linear map is linear map.  -/
def applyMorRules (funPropDecl : FunPropDecl) (e : Expr) (fData : FunctionData)
    (funProp : Expr → FunPropM (Option Result)) : FunPropM (Option Result) 
goal: Mathlib.Meta.FunProp.FunPropM (Option Mathlib.Meta.FunProp.Result)

full_name: Mathlib.Meta.FunProp.applyTransitionRules
code: /-- Prove function property of using "transition theorems" e.g. continuity from linearity.  -/
def applyTransitionRules (e : Expr) (funProp : Expr → FunPropM (Option Result)) :
    FunPropM (Option Result) 
goal: Mathlib.Meta.FunProp.FunPropM (Option Mathlib.Meta.FunProp.Result)

full_name: Mathlib.Meta.FunProp.removeArgRule
code: /-- Try to remove applied argument. -/
def removeArgRule (funPropDecl : FunPropDecl) (e : Expr) (fData : FunctionData)
    (funProp : Expr → FunPropM (Option Result)) :
    FunPropM (Option Result) 
goal: Mathlib.Meta.FunProp.FunPropM (Option Mathlib.Meta.FunProp.Result)

full_name: Mathlib.Meta.FunProp.bvarAppCase
code: /-- Prove function property of `fun f => f x₁ ... xₙ`. -/
def bvarAppCase (funPropDecl : FunPropDecl) (e : Expr) (fData : FunctionData)
    (funProp : Expr → FunPropM (Option Result)) : FunPropM (Option Result) 
goal: Mathlib.Meta.FunProp.FunPropM (Option Mathlib.Meta.FunProp.Result)

full_name: Mathlib.Meta.FunProp.getDeclTheorems
code: /-- Get candidate theorems from the environment for function property `funPropDecl` and
function `funName`. -/
def getDeclTheorems (funPropDecl : FunPropDecl) (funName : Name)
    (mainArgs : Array Nat) (appliedArgs : Nat) : MetaM (Array FunctionTheorem) 
goal: Lean.MetaM (Array Mathlib.Meta.FunProp.FunctionTheorem)

full_name: Mathlib.Meta.FunProp.getLocalTheorems
code: /-- Get candidate theorems from the local context for function property `funPropDecl` and
function `funName`. -/
def getLocalTheorems (funPropDecl : FunPropDecl) (funOrigin : Origin)
    (mainArgs : Array Nat) (appliedArgs : Nat) : FunPropM (Array FunctionTheorem) 
goal: Mathlib.Meta.FunProp.FunPropM (Array Mathlib.Meta.FunProp.FunctionTheorem)

full_name: Mathlib.Meta.FunProp.tryTheorems
code: /-- Try to apply theorems `thms` to `e` -/
def tryTheorems (funPropDecl : FunPropDecl) (e : Expr) (fData : FunctionData)
    (thms : Array FunctionTheorem) (funProp : Expr → FunPropM (Option Result)) :
    FunPropM (Option Result) 
goal: Mathlib.Meta.FunProp.FunPropM (Option Mathlib.Meta.FunProp.Result)

full_name: Mathlib.Meta.FunProp.fvarAppCase
code: /-- Prove function property of `fun x => f x₁ ... xₙ` where `f` is free variable. -/
def fvarAppCase (funPropDecl : FunPropDecl) (e : Expr) (fData : FunctionData)
    (funProp : Expr → FunPropM (Option Result)) : FunPropM (Option Result) 
goal: Mathlib.Meta.FunProp.FunPropM (Option Mathlib.Meta.FunProp.Result)

full_name: Mathlib.Meta.FunProp.constAppCase
code: /-- Prove function property of `fun x => f x₁ ... xₙ` where `f` is declared function. -/
def constAppCase (funPropDecl : FunPropDecl) (e : Expr) (fData : FunctionData)
    (funProp : Expr → FunPropM (Option Result)) : FunPropM (Option Result) 
goal: Mathlib.Meta.FunProp.FunPropM (Option Mathlib.Meta.FunProp.Result)

full_name: Mathlib.Meta.FunProp.cacheResult
code: /-- Cache result if it does not have any subgoals. -/
def cacheResult (e : Expr) (r : Result) : FunPropM Result 
goal: Mathlib.Meta.FunProp.FunPropM Mathlib.Meta.FunProp.Result