File: Mathlib/Tactic/FunProp/Decl.lean

full_name: Mathlib.Meta.FunProp.FunPropDecl.funPropName
code: /-- Basic information about function property

To use `funProp` to prove a function property `P : (α→β)→Prop` one has to provide `FunPropDecl`.
-/
structure FunPropDecl where
  /-- function transformation name -/
  funPropName : Name
  /-- path for discrimination tree -/
  path : Array DiscrTree.Key
  /-- argument index of a function this function property talks about.
  For example, this would be 4 for `@Continuous α β _ _ f` -/
  funArgId : Nat
  deriving Inhabited, BEq
goal: Lean.Name

full_name: Mathlib.Meta.FunProp.instInhabitedFunPropDecl
code: /-- Basic information about function property

To use `funProp` to prove a function property `P : (α→β)→Prop` one has to provide `FunPropDecl`.
-/
structure FunPropDecl where
  /-- function transformation name -/
  funPropName : Name
  /-- path for discrimination tree -/
  path : Array DiscrTree.Key
  /-- argument index of a function this function property talks about.
  For example, this would be 4 for `@Continuous α β _ _ f` -/
  funArgId : Nat
  deriving Inhabited, BEq
goal: Inhabited Mathlib.Meta.FunProp.FunPropDecl

full_name: Mathlib.Meta.FunProp.FunPropDecl.path
code: /-- Basic information about function property

To use `funProp` to prove a function property `P : (α→β)→Prop` one has to provide `FunPropDecl`.
-/
structure FunPropDecl where
  /-- function transformation name -/
  funPropName : Name
  /-- path for discrimination tree -/
  path : Array DiscrTree.Key
  /-- argument index of a function this function property talks about.
  For example, this would be 4 for `@Continuous α β _ _ f` -/
  funArgId : Nat
  deriving Inhabited, BEq
goal: Array Lean.Meta.DiscrTree.Key

full_name: Mathlib.Meta.FunProp.FunPropDecl.funArgId
code: /-- Basic information about function property

To use `funProp` to prove a function property `P : (α→β)→Prop` one has to provide `FunPropDecl`.
-/
structure FunPropDecl where
  /-- function transformation name -/
  funPropName : Name
  /-- path for discrimination tree -/
  path : Array DiscrTree.Key
  /-- argument index of a function this function property talks about.
  For example, this would be 4 for `@Continuous α β _ _ f` -/
  funArgId : Nat
  deriving Inhabited, BEq
goal: Nat

full_name: Mathlib.Meta.FunProp.FunPropDecl
code: /-- Basic information about function property

To use `funProp` to prove a function property `P : (α→β)→Prop` one has to provide `FunPropDecl`.
-/
structure FunPropDecl where
  /-- function transformation name -/
  funPropName : Name
  /-- path for discrimination tree -/
  path : Array DiscrTree.Key
  /-- argument index of a function this function property talks about.
  For example, this would be 4 for `@Continuous α β _ _ f` -/
  funArgId : Nat
  deriving Inhabited, BEq
goal: Type

full_name: Mathlib.Meta.FunProp.instBEqFunPropDecl
code: /-- Basic information about function property

To use `funProp` to prove a function property `P : (α→β)→Prop` one has to provide `FunPropDecl`.
-/
structure FunPropDecl where
  /-- function transformation name -/
  funPropName : Name
  /-- path for discrimination tree -/
  path : Array DiscrTree.Key
  /-- argument index of a function this function property talks about.
  For example, this would be 4 for `@Continuous α β _ _ f` -/
  funArgId : Nat
  deriving Inhabited, BEq
goal: BEq Mathlib.Meta.FunProp.FunPropDecl

full_name: Mathlib.Meta.FunProp.FunPropDecls
code: /-- Discrimination tree for function properties. -/
structure FunPropDecls where
  /-- Discrimination tree for function properties. -/
  decls : DiscrTree FunPropDecl := {}
  deriving Inhabited
goal: Type

full_name: Mathlib.Meta.FunProp.instInhabitedFunPropDecls
code: /-- Discrimination tree for function properties. -/
structure FunPropDecls where
  /-- Discrimination tree for function properties. -/
  decls : DiscrTree FunPropDecl := {}
  deriving Inhabited
goal: Inhabited Mathlib.Meta.FunProp.FunPropDecls

full_name: Mathlib.Meta.FunProp.FunPropDecls.decls
code: /-- Discrimination tree for function properties. -/
structure FunPropDecls where
  /-- Discrimination tree for function properties. -/
  decls : DiscrTree FunPropDecl := {}
  deriving Inhabited
goal: Lean.Meta.DiscrTree Mathlib.Meta.FunProp.FunPropDecl

full_name: Mathlib.Meta.FunProp.FunPropDeclsExt
code: /-- -/
abbrev FunPropDeclsExt 
goal: Type

full_name: Mathlib.Meta.FunProp.funPropDeclsExt
code: /-- Extension storing function properties tracked and used by the `fun_prop` attribute and tactic,
including, for example, `Continuous`, `Measurable`, `Differentiable`, etc. -/
initialize funPropDeclsExt : FunPropDeclsExt ←
  registerSimpleScopedEnvExtension {
    name := by exact decl_name%
    initial := {}
    addEntry := fun d e =>
      {d with decls := d.decls.insertCore e.path e}
  }
goal: Mathlib.Meta.FunProp.FunPropDeclsExt

full_name: Mathlib.Meta.FunProp.initFn._@.Mathlib.Tactic.FunProp.Decl._hyg.178
code: /-- Extension storing function properties tracked and used by the `fun_prop` attribute and tactic,
including, for example, `Continuous`, `Measurable`, `Differentiable`, etc. -/
initialize funPropDeclsExt : FunPropDeclsExt ←
  registerSimpleScopedEnvExtension {
    name := by exact decl_name%
    initial := {}
    addEntry := fun d e =>
      {d with decls := d.decls.insertCore e.path e}
  }
goal: IO Mathlib.Meta.FunProp.FunPropDeclsExt

full_name: Mathlib.Meta.FunProp.addFunPropDecl
code: /-- Register new function property. -/
def addFunPropDecl (declName : Name) : MetaM Unit 
goal: Lean.MetaM Unit

full_name: Mathlib.Meta.FunProp.getFunProp?
code: /-- Is `e` a function property statement? If yes return function property declaration and
the function it talks about. -/
def getFunProp? (e : Expr) : MetaM (Option (FunPropDecl × Expr)) 
goal: Lean.MetaM (Option (Mathlib.Meta.FunProp.FunPropDecl × Lean.Expr))

full_name: Mathlib.Meta.FunProp.isFunProp
code: /-- Is `e` a function property statement? -/
def isFunProp (e : Expr) : MetaM Bool 
goal: Lean.MetaM Bool

full_name: Mathlib.Meta.FunProp.getFunPropDecl?
code: /-- Returns function property declaration from `e = P f`. -/
def getFunPropDecl? (e : Expr) : MetaM (Option FunPropDecl) 
goal: Lean.MetaM (Option Mathlib.Meta.FunProp.FunPropDecl)

full_name: Mathlib.Meta.FunProp.getFunPropFun?
code: /-- Returns function `f` from `e = P f` and `P` is function property. -/
def getFunPropFun? (e : Expr) : MetaM (Option Expr) 
goal: Lean.MetaM (Option Lean.Expr)

full_name: Mathlib.Meta.FunProp.tacticToDischarge
code: /-- Turn tactic syntax into a discharger function. -/
def tacticToDischarge (tacticCode : TSyntax `tactic) : Expr → MetaM (Option Expr) 
goal: Lean.Expr → Lean.MetaM (Option Lean.Expr)