File: Mathlib/Tactic/FunProp/Mor.lean

full_name: Mathlib.Meta.FunProp.Mor.isCoeFunName
code: /-- Is `name` a coerction from some function space to functiosn? -/
def isCoeFunName (name : Name) : CoreM Bool 
goal: Lean.CoreM Bool

full_name: Mathlib.Meta.FunProp.Mor.isCoeFun
code: /-- Is `e` a coerction from some function space to functiosn? -/
def isCoeFun (e : Expr) : MetaM Bool 
goal: Lean.MetaM Bool

full_name: Mathlib.Meta.FunProp.Mor.App.coe
code: /-- Morphism application -/
structure App where
  /-- morphism coercion -/
  coe : Expr
  /-- bundled morphism -/
  fn  : Expr
  /-- morphism argument -/
  arg : Expr
goal: Lean.Expr

full_name: Mathlib.Meta.FunProp.Mor.App.fn
code: /-- Morphism application -/
structure App where
  /-- morphism coercion -/
  coe : Expr
  /-- bundled morphism -/
  fn  : Expr
  /-- morphism argument -/
  arg : Expr
goal: Lean.Expr

full_name: Mathlib.Meta.FunProp.Mor.App.arg
code: /-- Morphism application -/
structure App where
  /-- morphism coercion -/
  coe : Expr
  /-- bundled morphism -/
  fn  : Expr
  /-- morphism argument -/
  arg : Expr
goal: Lean.Expr

full_name: Mathlib.Meta.FunProp.Mor.App
code: /-- Morphism application -/
structure App where
  /-- morphism coercion -/
  coe : Expr
  /-- bundled morphism -/
  fn  : Expr
  /-- morphism argument -/
  arg : Expr
goal: Type

full_name: Mathlib.Meta.FunProp.Mor.isMorApp?
code: /-- Is `e` morphism application? -/
def isMorApp? (e : Expr) : MetaM (Option App) 
goal: Lean.MetaM (Option Mathlib.Meta.FunProp.Mor.App)

full_name: Mathlib.Meta.FunProp.Mor.whnfPred
code: /--
Weak normal head form of an expression involving morphism applications. Additionally, `pred`
can specify which when to unfold definitions.

For example calling this on `coe (f a) b` will put `f` in weak normal head form instead of `coe`.
 -/
partial def whnfPred (e : Expr) (pred : Expr → MetaM Bool) (cfg : WhnfCoreConfig := {}) :
    MetaM Expr 
goal: Lean.MetaM Lean.Expr

full_name: Mathlib.Meta.FunProp.Mor.whnf
code: /--
Weak normal head form of an expression involving morphism applications.

For example calling this on `coe (f a) b` will put `f` in weak normal head form instead of `coe`.
 -/
def whnf (e : Expr)  (cfg : WhnfCoreConfig := {}) : MetaM Expr 
goal: Lean.MetaM Lean.Expr

full_name: Mathlib.Meta.FunProp.Mor.instInhabitedArg
code: /-- Argument of morphism application that stores corresponding coercion if necessary -/
structure Arg where
  /-- argument of type `α` -/
  expr : Expr
  /-- coercion `F → α → β` -/
  coe : Option Expr := none
  deriving Inhabited
goal: Inhabited Mathlib.Meta.FunProp.Mor.Arg

full_name: Mathlib.Meta.FunProp.Mor.Arg
code: /-- Argument of morphism application that stores corresponding coercion if necessary -/
structure Arg where
  /-- argument of type `α` -/
  expr : Expr
  /-- coercion `F → α → β` -/
  coe : Option Expr := none
  deriving Inhabited
goal: Type

full_name: Mathlib.Meta.FunProp.Mor.Arg.expr
code: /-- Argument of morphism application that stores corresponding coercion if necessary -/
structure Arg where
  /-- argument of type `α` -/
  expr : Expr
  /-- coercion `F → α → β` -/
  coe : Option Expr := none
  deriving Inhabited
goal: Lean.Expr

full_name: Mathlib.Meta.FunProp.Mor.Arg.coe
code: /-- Argument of morphism application that stores corresponding coercion if necessary -/
structure Arg where
  /-- argument of type `α` -/
  expr : Expr
  /-- coercion `F → α → β` -/
  coe : Option Expr := none
  deriving Inhabited
goal: Option Lean.Expr

full_name: Mathlib.Meta.FunProp.Mor.app
code: /-- Morphism application -/
def app (f : Expr) (arg : Arg) : Expr 
goal: Lean.Expr

full_name: Mathlib.Meta.FunProp.Mor.withApp
code: /-- Given `e = f a₁ a₂ ... aₙ`, returns `k f #[a₁, ..., aₙ]` where `f` can be bundled morphism. -/
partial def withApp {α} (e : Expr) (k : Expr → Array Arg → MetaM α) : MetaM α 
goal: Lean.MetaM α

full_name: Mathlib.Meta.FunProp.Mor.withApp.go
code: /-- Given `e = f a₁ a₂ ... aₙ`, returns `k f #[a₁, ..., aₙ]` where `f` can be bundled morphism. -/
partial def withApp {α} (e : Expr) (k : Expr → Array Arg → MetaM α) : MetaM α 
goal: Lean.Expr → Array Mathlib.Meta.FunProp.Mor.Arg → Lean.MetaM α

full_name: Mathlib.Meta.FunProp.Mor.getAppFn
code: /--
If the given expression is a sequence of morphism applications `f a₁ .. aₙ`, return `f`.
Otherwise return the input expression.
-/
def getAppFn (e : Expr) : MetaM Expr 
goal: Lean.MetaM Lean.Expr

full_name: Mathlib.Meta.FunProp.Mor.getAppArgs
code: /-- Given `f a₁ a₂ ... aₙ`, returns `#[a₁, ..., aₙ]` where `f` can be bundled morphism. -/
def getAppArgs (e : Expr) : MetaM (Array Arg) 
goal: Lean.MetaM (Array Mathlib.Meta.FunProp.Mor.Arg)

full_name: Mathlib.Meta.FunProp.Mor.mkAppN
code: /-- `mkAppN f #[a₀, ..., aₙ]` ==> `f a₀ a₁ .. aₙ` where `f` can be bundled morphism. -/
def mkAppN (f : Expr) (xs : Array Arg) : Expr 
goal: Lean.Expr