File: Mathlib/Tactic/FunProp/Types.lean

full_name: Mathlib.Meta.FunProp.initFn._@.Mathlib.Tactic.FunProp.Types._hyg.7
code: initialize registerTraceClass `Meta.Tactic.fun_prop.attr
goal: IO Unit

full_name: Mathlib.Meta.FunProp.initFn._@.Mathlib.Tactic.FunProp.Types._hyg.50
code: initialize registerTraceClass `Meta.Tactic.fun_prop
goal: IO Unit

full_name: Mathlib.Meta.FunProp.initFn._@.Mathlib.Tactic.FunProp.Types._hyg.93
code: initialize registerTraceClass `Meta.Tactic.fun_prop.step
goal: IO Unit

full_name: Mathlib.Meta.FunProp.initFn._@.Mathlib.Tactic.FunProp.Types._hyg.136
code: initialize registerTraceClass `Meta.Tactic.fun_prop.unify
goal: IO Unit

full_name: Mathlib.Meta.FunProp.initFn._@.Mathlib.Tactic.FunProp.Types._hyg.179
code: initialize registerTraceClass `Meta.Tactic.fun_prop.discharge
goal: IO Unit

full_name: Mathlib.Meta.FunProp.initFn._@.Mathlib.Tactic.FunProp.Types._hyg.222
code: initialize registerTraceClass `Meta.Tactic.fun_prop.apply
goal: IO Unit

full_name: Mathlib.Meta.FunProp.initFn._@.Mathlib.Tactic.FunProp.Types._hyg.265
code: initialize registerTraceClass `Meta.Tactic.fun_prop.unfold
goal: IO Unit

full_name: Mathlib.Meta.FunProp.initFn._@.Mathlib.Tactic.FunProp.Types._hyg.308
code: initialize registerTraceClass `Meta.Tactic.fun_prop.cache
goal: IO Unit

full_name: Mathlib.Meta.FunProp.instBEqOrigin
code: /-- Indicated origin of a function or a statement. -/
inductive Origin where
  /-- It is a constant defined in the environment. -/
  | decl (name : Name)
  /-- It is a free variable in the local context. -/
  | fvar (fvarId : FVarId)
  deriving Inhabited, BEq
goal: BEq Mathlib.Meta.FunProp.Origin

full_name: Mathlib.Meta.FunProp.Origin.decl
code: /-- Indicated origin of a function or a statement. -/
inductive Origin where
  /-- It is a constant defined in the environment. -/
  | decl (name : Name)
  /-- It is a free variable in the local context. -/
  | fvar (fvarId : FVarId)
  deriving Inhabited, BEq
goal: Mathlib.Meta.FunProp.Origin

full_name: Mathlib.Meta.FunProp.instInhabitedOrigin
code: /-- Indicated origin of a function or a statement. -/
inductive Origin where
  /-- It is a constant defined in the environment. -/
  | decl (name : Name)
  /-- It is a free variable in the local context. -/
  | fvar (fvarId : FVarId)
  deriving Inhabited, BEq
goal: Inhabited Mathlib.Meta.FunProp.Origin

full_name: Mathlib.Meta.FunProp.Origin.fvar
code: /-- Indicated origin of a function or a statement. -/
inductive Origin where
  /-- It is a constant defined in the environment. -/
  | decl (name : Name)
  /-- It is a free variable in the local context. -/
  | fvar (fvarId : FVarId)
  deriving Inhabited, BEq
goal: Mathlib.Meta.FunProp.Origin

full_name: Mathlib.Meta.FunProp.Origin
code: /-- Indicated origin of a function or a statement. -/
inductive Origin where
  /-- It is a constant defined in the environment. -/
  | decl (name : Name)
  /-- It is a free variable in the local context. -/
  | fvar (fvarId : FVarId)
  deriving Inhabited, BEq
goal: Type

full_name: Mathlib.Meta.FunProp.Origin.name
code: /-- Name of the origin. -/
def Origin.name (origin : Origin) : Name 
goal: Lean.Name

full_name: Mathlib.Meta.FunProp.Origin.getValue
code: /-- Get the expression specified by `origin`. -/
def Origin.getValue (origin : Origin) : MetaM Expr 
goal: Lean.MetaM Lean.Expr

full_name: Mathlib.Meta.FunProp.ppOrigin
code: /-- Pretty print `FunProp.Origin`. -/
def ppOrigin {m} [Monad m] [MonadEnv m] [MonadError m] : Origin → m MessageData
  
goal: Mathlib.Meta.FunProp.Origin → m Lean.MessageData

full_name: Mathlib.Meta.FunProp.ppOrigin'
code: /-- Pretty print `FunProp.Origin`. Returns string unlike `ppOrigin`. -/
def ppOrigin' (origin : Origin) : MetaM String 
goal: Lean.MetaM String

full_name: Mathlib.Meta.FunProp.FunctionData.getFnOrigin
code: /-- Get origin of the head function. -/
def FunctionData.getFnOrigin (fData : FunctionData) : Origin 
goal: Mathlib.Meta.FunProp.Origin

full_name: Mathlib.Meta.FunProp.defaultNamesToUnfold
code: /-- Default names to be considered reducible by `fun_prop` -/
def defaultNamesToUnfold : Array Name 
goal: Array Lean.Name

full_name: Mathlib.Meta.FunProp.Config.constToUnfold
code: /-- `fun_prop` configuration -/
structure Config where
  /-- Name to unfold -/
  constToUnfold : Batteries.RBSet Name Name.quickCmp :=
    .ofArray defaultNamesToUnfold _
  /-- Custom discharger to satisfy theorem hypotheses. -/
  disch : Expr → MetaM (Option Expr) := fun _ => pure .none
  /-- Maximal number of transitions between function properties
  e.g. inferring differentiability from linearity -/
  maxDepth := 200
  /-- current depth -/
  depth := 0
  /-- Stack of used theorem, used to prevent trivial loops. -/
  thmStack : List Origin := []
  /-- Maximum number of steps `fun_prop` can take. -/
  maxSteps := 100000
deriving Inhabited
goal: Batteries.RBSet Lean.Name Lean.Name.quickCmp

full_name: Mathlib.Meta.FunProp.instInhabitedConfig
code: /-- `fun_prop` configuration -/
structure Config where
  /-- Name to unfold -/
  constToUnfold : Batteries.RBSet Name Name.quickCmp :=
    .ofArray defaultNamesToUnfold _
  /-- Custom discharger to satisfy theorem hypotheses. -/
  disch : Expr → MetaM (Option Expr) := fun _ => pure .none
  /-- Maximal number of transitions between function properties
  e.g. inferring differentiability from linearity -/
  maxDepth := 200
  /-- current depth -/
  depth := 0
  /-- Stack of used theorem, used to prevent trivial loops. -/
  thmStack : List Origin := []
  /-- Maximum number of steps `fun_prop` can take. -/
  maxSteps := 100000
deriving Inhabited
goal: Inhabited Mathlib.Meta.FunProp.Config

full_name: Mathlib.Meta.FunProp.Config.depth
code: /-- `fun_prop` configuration -/
structure Config where
  /-- Name to unfold -/
  constToUnfold : Batteries.RBSet Name Name.quickCmp :=
    .ofArray defaultNamesToUnfold _
  /-- Custom discharger to satisfy theorem hypotheses. -/
  disch : Expr → MetaM (Option Expr) := fun _ => pure .none
  /-- Maximal number of transitions between function properties
  e.g. inferring differentiability from linearity -/
  maxDepth := 200
  /-- current depth -/
  depth := 0
  /-- Stack of used theorem, used to prevent trivial loops. -/
  thmStack : List Origin := []
  /-- Maximum number of steps `fun_prop` can take. -/
  maxSteps := 100000
deriving Inhabited
goal: ℕ

full_name: Mathlib.Meta.FunProp.Config.maxSteps
code: /-- `fun_prop` configuration -/
structure Config where
  /-- Name to unfold -/
  constToUnfold : Batteries.RBSet Name Name.quickCmp :=
    .ofArray defaultNamesToUnfold _
  /-- Custom discharger to satisfy theorem hypotheses. -/
  disch : Expr → MetaM (Option Expr) := fun _ => pure .none
  /-- Maximal number of transitions between function properties
  e.g. inferring differentiability from linearity -/
  maxDepth := 200
  /-- current depth -/
  depth := 0
  /-- Stack of used theorem, used to prevent trivial loops. -/
  thmStack : List Origin := []
  /-- Maximum number of steps `fun_prop` can take. -/
  maxSteps := 100000
deriving Inhabited
goal: ℕ

full_name: Mathlib.Meta.FunProp.Config.disch
code: /-- `fun_prop` configuration -/
structure Config where
  /-- Name to unfold -/
  constToUnfold : Batteries.RBSet Name Name.quickCmp :=
    .ofArray defaultNamesToUnfold _
  /-- Custom discharger to satisfy theorem hypotheses. -/
  disch : Expr → MetaM (Option Expr) := fun _ => pure .none
  /-- Maximal number of transitions between function properties
  e.g. inferring differentiability from linearity -/
  maxDepth := 200
  /-- current depth -/
  depth := 0
  /-- Stack of used theorem, used to prevent trivial loops. -/
  thmStack : List Origin := []
  /-- Maximum number of steps `fun_prop` can take. -/
  maxSteps := 100000
deriving Inhabited
goal: Lean.Expr → Lean.MetaM (Option Lean.Expr)

full_name: Mathlib.Meta.FunProp.Config.thmStack
code: /-- `fun_prop` configuration -/
structure Config where
  /-- Name to unfold -/
  constToUnfold : Batteries.RBSet Name Name.quickCmp :=
    .ofArray defaultNamesToUnfold _
  /-- Custom discharger to satisfy theorem hypotheses. -/
  disch : Expr → MetaM (Option Expr) := fun _ => pure .none
  /-- Maximal number of transitions between function properties
  e.g. inferring differentiability from linearity -/
  maxDepth := 200
  /-- current depth -/
  depth := 0
  /-- Stack of used theorem, used to prevent trivial loops. -/
  thmStack : List Origin := []
  /-- Maximum number of steps `fun_prop` can take. -/
  maxSteps := 100000
deriving Inhabited
goal: List Mathlib.Meta.FunProp.Origin

full_name: Mathlib.Meta.FunProp.Config
code: /-- `fun_prop` configuration -/
structure Config where
  /-- Name to unfold -/
  constToUnfold : Batteries.RBSet Name Name.quickCmp :=
    .ofArray defaultNamesToUnfold _
  /-- Custom discharger to satisfy theorem hypotheses. -/
  disch : Expr → MetaM (Option Expr) := fun _ => pure .none
  /-- Maximal number of transitions between function properties
  e.g. inferring differentiability from linearity -/
  maxDepth := 200
  /-- current depth -/
  depth := 0
  /-- Stack of used theorem, used to prevent trivial loops. -/
  thmStack : List Origin := []
  /-- Maximum number of steps `fun_prop` can take. -/
  maxSteps := 100000
deriving Inhabited
goal: Type

full_name: Mathlib.Meta.FunProp.Config.maxDepth
code: /-- `fun_prop` configuration -/
structure Config where
  /-- Name to unfold -/
  constToUnfold : Batteries.RBSet Name Name.quickCmp :=
    .ofArray defaultNamesToUnfold _
  /-- Custom discharger to satisfy theorem hypotheses. -/
  disch : Expr → MetaM (Option Expr) := fun _ => pure .none
  /-- Maximal number of transitions between function properties
  e.g. inferring differentiability from linearity -/
  maxDepth := 200
  /-- current depth -/
  depth := 0
  /-- Stack of used theorem, used to prevent trivial loops. -/
  thmStack : List Origin := []
  /-- Maximum number of steps `fun_prop` can take. -/
  maxSteps := 100000
deriving Inhabited
goal: ℕ

full_name: Mathlib.Meta.FunProp.State
code: /-- `fun_prop` state -/
structure State where
  /-- Simp's cache is used as the `funProp` tactic is designed to be used inside of simp and utilize
  its cache -/
  cache : Simp.Cache := {}
  /-- Count the number of steps and stop when maxSteps is reached. -/
  numSteps := 0
  /-- Log progress and failures messages that should be displayed to the user at the end. -/
  msgLog : List String := []
goal: Type

full_name: Mathlib.Meta.FunProp.State.numSteps
code: /-- `fun_prop` state -/
structure State where
  /-- Simp's cache is used as the `funProp` tactic is designed to be used inside of simp and utilize
  its cache -/
  cache : Simp.Cache := {}
  /-- Count the number of steps and stop when maxSteps is reached. -/
  numSteps := 0
  /-- Log progress and failures messages that should be displayed to the user at the end. -/
  msgLog : List String := []
goal: ℕ

full_name: Mathlib.Meta.FunProp.State.cache
code: /-- `fun_prop` state -/
structure State where
  /-- Simp's cache is used as the `funProp` tactic is designed to be used inside of simp and utilize
  its cache -/
  cache : Simp.Cache := {}
  /-- Count the number of steps and stop when maxSteps is reached. -/
  numSteps := 0
  /-- Log progress and failures messages that should be displayed to the user at the end. -/
  msgLog : List String := []
goal: Lean.Meta.Simp.Cache

full_name: Mathlib.Meta.FunProp.State.msgLog
code: /-- `fun_prop` state -/
structure State where
  /-- Simp's cache is used as the `funProp` tactic is designed to be used inside of simp and utilize
  its cache -/
  cache : Simp.Cache := {}
  /-- Count the number of steps and stop when maxSteps is reached. -/
  numSteps := 0
  /-- Log progress and failures messages that should be displayed to the user at the end. -/
  msgLog : List String := []
goal: List String

full_name: Mathlib.Meta.FunProp.Config.addThm
code: /-- Log used theorem -/
def Config.addThm (cfg : Config) (thmId : Origin) : Config 
goal: Mathlib.Meta.FunProp.Config

full_name: Mathlib.Meta.FunProp.Config.increaseDepth
code: /-- Increase depth -/
def Config.increaseDepth (cfg : Config) : Config 
goal: Mathlib.Meta.FunProp.Config

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

full_name: Mathlib.Meta.FunProp.Result
code: /-- Result of `funProp`, it is a proof of function property `P f` -/
structure Result where
  /-- -/
  proof : Expr
goal: Type

full_name: Mathlib.Meta.FunProp.Result.proof
code: /-- Result of `funProp`, it is a proof of function property `P f` -/
structure Result where
  /-- -/
  proof : Expr
goal: Lean.Expr

full_name: Mathlib.Meta.FunProp.previouslyUsedThm
code: /-- Check if previously used theorem was `thmOrigin`. -/
def previouslyUsedThm (thmOrigin : Origin) : FunPropM Bool 
goal: Mathlib.Meta.FunProp.FunPropM Bool

full_name: Mathlib.Meta.FunProp.withTheorem
code: /-- Puts the theorem to the stack of used theorems. -/
def withTheorem {α} (thmOrigin : Origin) (go : FunPropM α) : FunPropM α 
goal: Mathlib.Meta.FunProp.FunPropM α

full_name: Mathlib.Meta.FunProp.defaultUnfoldPred
code: /-- Default names to unfold -/
def defaultUnfoldPred : Name → Bool 
goal: Lean.Name → Bool

full_name: Mathlib.Meta.FunProp.unfoldNamePred
code: /-- Get predicate on names indicating if theys shoulds be unfolded. -/
def unfoldNamePred : FunPropM (Name → Bool) 
goal: Mathlib.Meta.FunProp.FunPropM (Lean.Name → Bool)

full_name: Mathlib.Meta.FunProp.increaseSteps
code: /-- Increase heartbeat, throws error when `maxSteps` was reached -/
def increaseSteps : FunPropM Unit 
goal: Mathlib.Meta.FunProp.FunPropM Unit

full_name: Mathlib.Meta.FunProp.logError
code: /-- Log error message that will displayed to the user at the end. -/
def logError (msg : String) : FunPropM Unit 
goal: Mathlib.Meta.FunProp.FunPropM Unit