File: Mathlib/Tactic/Explode/Datatypes.lean

full_name: Mathlib.Explode.initFn._@.Mathlib.Tactic.Explode.Datatypes._hyg.6
code: initialize registerTraceClass `explode
goal: IO Unit

full_name: Mathlib.Explode.Status.intro
code: /-- How to display pipes (`│`) for this entry in the Fitch table . -/
inductive Status where
  /-- `├` Start intro (top-level) -/
  | sintro : Status
  /-- `Entry.depth` * `│` + `┌` Normal intro -/
  | intro  : Status
  /-- `Entry.depth` * `│` + `├` Continuation intro -/
  | cintro : Status
  /-- `Entry.depth` * `│` -/
  | lam    : Status
  /-- `Entry.depth` * `│` -/
  | reg    : Status
  deriving Inhabited
goal: Mathlib.Explode.Status

full_name: Mathlib.Explode.instInhabitedStatus
code: /-- How to display pipes (`│`) for this entry in the Fitch table . -/
inductive Status where
  /-- `├` Start intro (top-level) -/
  | sintro : Status
  /-- `Entry.depth` * `│` + `┌` Normal intro -/
  | intro  : Status
  /-- `Entry.depth` * `│` + `├` Continuation intro -/
  | cintro : Status
  /-- `Entry.depth` * `│` -/
  | lam    : Status
  /-- `Entry.depth` * `│` -/
  | reg    : Status
  deriving Inhabited
goal: Inhabited Mathlib.Explode.Status

full_name: Mathlib.Explode.Status.cintro
code: /-- How to display pipes (`│`) for this entry in the Fitch table . -/
inductive Status where
  /-- `├` Start intro (top-level) -/
  | sintro : Status
  /-- `Entry.depth` * `│` + `┌` Normal intro -/
  | intro  : Status
  /-- `Entry.depth` * `│` + `├` Continuation intro -/
  | cintro : Status
  /-- `Entry.depth` * `│` -/
  | lam    : Status
  /-- `Entry.depth` * `│` -/
  | reg    : Status
  deriving Inhabited
goal: Mathlib.Explode.Status

full_name: Mathlib.Explode.Status.sintro
code: /-- How to display pipes (`│`) for this entry in the Fitch table . -/
inductive Status where
  /-- `├` Start intro (top-level) -/
  | sintro : Status
  /-- `Entry.depth` * `│` + `┌` Normal intro -/
  | intro  : Status
  /-- `Entry.depth` * `│` + `├` Continuation intro -/
  | cintro : Status
  /-- `Entry.depth` * `│` -/
  | lam    : Status
  /-- `Entry.depth` * `│` -/
  | reg    : Status
  deriving Inhabited
goal: Mathlib.Explode.Status

full_name: Mathlib.Explode.Status.reg
code: /-- How to display pipes (`│`) for this entry in the Fitch table . -/
inductive Status where
  /-- `├` Start intro (top-level) -/
  | sintro : Status
  /-- `Entry.depth` * `│` + `┌` Normal intro -/
  | intro  : Status
  /-- `Entry.depth` * `│` + `├` Continuation intro -/
  | cintro : Status
  /-- `Entry.depth` * `│` -/
  | lam    : Status
  /-- `Entry.depth` * `│` -/
  | reg    : Status
  deriving Inhabited
goal: Mathlib.Explode.Status

full_name: Mathlib.Explode.Status
code: /-- How to display pipes (`│`) for this entry in the Fitch table . -/
inductive Status where
  /-- `├` Start intro (top-level) -/
  | sintro : Status
  /-- `Entry.depth` * `│` + `┌` Normal intro -/
  | intro  : Status
  /-- `Entry.depth` * `│` + `├` Continuation intro -/
  | cintro : Status
  /-- `Entry.depth` * `│` -/
  | lam    : Status
  /-- `Entry.depth` * `│` -/
  | reg    : Status
  deriving Inhabited
goal: Type

full_name: Mathlib.Explode.Status.lam
code: /-- How to display pipes (`│`) for this entry in the Fitch table . -/
inductive Status where
  /-- `├` Start intro (top-level) -/
  | sintro : Status
  /-- `Entry.depth` * `│` + `┌` Normal intro -/
  | intro  : Status
  /-- `Entry.depth` * `│` + `├` Continuation intro -/
  | cintro : Status
  /-- `Entry.depth` * `│` -/
  | lam    : Status
  /-- `Entry.depth` * `│` -/
  | reg    : Status
  deriving Inhabited
goal: Mathlib.Explode.Status

full_name: Mathlib.Explode.Entry.type
code: /-- The row in the Fitch table. -/
structure Entry where
  /-- A type of this expression as a `MessageData`. Make sure to use `addMessageContext`. -/
  type     : MessageData
  /-- The row number, starting from `0`. This is set by `Entries.add`. -/
  line     : Option Nat := none
  /-- How many `if`s (aka lambda-abstractions) this row is nested under. -/
  depth    : Nat
  /-- What `Status` this entry has - this only affects how `│`s are displayed. -/
  status   : Status
  /-- What to display in the "theorem applied" column.
  Make sure to use `addMessageContext` if needed. -/
  thm      : MessageData
  /-- Which other lines (aka rows) this row depends on.
  `none` means that the dependency has been filtered out of the table. -/
  deps     : List (Option Nat)
  /-- Whether or not to use this in future deps lists. Generally controlled by the `select` function
  passed to `explodeCore`. Exception: `∀I` may ignore this for introduced hypotheses. -/
  useAsDep : Bool
goal: Lean.MessageData

full_name: Mathlib.Explode.Entry.thm
code: /-- The row in the Fitch table. -/
structure Entry where
  /-- A type of this expression as a `MessageData`. Make sure to use `addMessageContext`. -/
  type     : MessageData
  /-- The row number, starting from `0`. This is set by `Entries.add`. -/
  line     : Option Nat := none
  /-- How many `if`s (aka lambda-abstractions) this row is nested under. -/
  depth    : Nat
  /-- What `Status` this entry has - this only affects how `│`s are displayed. -/
  status   : Status
  /-- What to display in the "theorem applied" column.
  Make sure to use `addMessageContext` if needed. -/
  thm      : MessageData
  /-- Which other lines (aka rows) this row depends on.
  `none` means that the dependency has been filtered out of the table. -/
  deps     : List (Option Nat)
  /-- Whether or not to use this in future deps lists. Generally controlled by the `select` function
  passed to `explodeCore`. Exception: `∀I` may ignore this for introduced hypotheses. -/
  useAsDep : Bool
goal: Lean.MessageData

full_name: Mathlib.Explode.Entry.line
code: /-- The row in the Fitch table. -/
structure Entry where
  /-- A type of this expression as a `MessageData`. Make sure to use `addMessageContext`. -/
  type     : MessageData
  /-- The row number, starting from `0`. This is set by `Entries.add`. -/
  line     : Option Nat := none
  /-- How many `if`s (aka lambda-abstractions) this row is nested under. -/
  depth    : Nat
  /-- What `Status` this entry has - this only affects how `│`s are displayed. -/
  status   : Status
  /-- What to display in the "theorem applied" column.
  Make sure to use `addMessageContext` if needed. -/
  thm      : MessageData
  /-- Which other lines (aka rows) this row depends on.
  `none` means that the dependency has been filtered out of the table. -/
  deps     : List (Option Nat)
  /-- Whether or not to use this in future deps lists. Generally controlled by the `select` function
  passed to `explodeCore`. Exception: `∀I` may ignore this for introduced hypotheses. -/
  useAsDep : Bool
goal: Option Nat

full_name: Mathlib.Explode.Entry.depth
code: /-- The row in the Fitch table. -/
structure Entry where
  /-- A type of this expression as a `MessageData`. Make sure to use `addMessageContext`. -/
  type     : MessageData
  /-- The row number, starting from `0`. This is set by `Entries.add`. -/
  line     : Option Nat := none
  /-- How many `if`s (aka lambda-abstractions) this row is nested under. -/
  depth    : Nat
  /-- What `Status` this entry has - this only affects how `│`s are displayed. -/
  status   : Status
  /-- What to display in the "theorem applied" column.
  Make sure to use `addMessageContext` if needed. -/
  thm      : MessageData
  /-- Which other lines (aka rows) this row depends on.
  `none` means that the dependency has been filtered out of the table. -/
  deps     : List (Option Nat)
  /-- Whether or not to use this in future deps lists. Generally controlled by the `select` function
  passed to `explodeCore`. Exception: `∀I` may ignore this for introduced hypotheses. -/
  useAsDep : Bool
goal: Nat

full_name: Mathlib.Explode.Entry.status
code: /-- The row in the Fitch table. -/
structure Entry where
  /-- A type of this expression as a `MessageData`. Make sure to use `addMessageContext`. -/
  type     : MessageData
  /-- The row number, starting from `0`. This is set by `Entries.add`. -/
  line     : Option Nat := none
  /-- How many `if`s (aka lambda-abstractions) this row is nested under. -/
  depth    : Nat
  /-- What `Status` this entry has - this only affects how `│`s are displayed. -/
  status   : Status
  /-- What to display in the "theorem applied" column.
  Make sure to use `addMessageContext` if needed. -/
  thm      : MessageData
  /-- Which other lines (aka rows) this row depends on.
  `none` means that the dependency has been filtered out of the table. -/
  deps     : List (Option Nat)
  /-- Whether or not to use this in future deps lists. Generally controlled by the `select` function
  passed to `explodeCore`. Exception: `∀I` may ignore this for introduced hypotheses. -/
  useAsDep : Bool
goal: Mathlib.Explode.Status

full_name: Mathlib.Explode.Entry
code: /-- The row in the Fitch table. -/
structure Entry where
  /-- A type of this expression as a `MessageData`. Make sure to use `addMessageContext`. -/
  type     : MessageData
  /-- The row number, starting from `0`. This is set by `Entries.add`. -/
  line     : Option Nat := none
  /-- How many `if`s (aka lambda-abstractions) this row is nested under. -/
  depth    : Nat
  /-- What `Status` this entry has - this only affects how `│`s are displayed. -/
  status   : Status
  /-- What to display in the "theorem applied" column.
  Make sure to use `addMessageContext` if needed. -/
  thm      : MessageData
  /-- Which other lines (aka rows) this row depends on.
  `none` means that the dependency has been filtered out of the table. -/
  deps     : List (Option Nat)
  /-- Whether or not to use this in future deps lists. Generally controlled by the `select` function
  passed to `explodeCore`. Exception: `∀I` may ignore this for introduced hypotheses. -/
  useAsDep : Bool
goal: Type

full_name: Mathlib.Explode.Entry.useAsDep
code: /-- The row in the Fitch table. -/
structure Entry where
  /-- A type of this expression as a `MessageData`. Make sure to use `addMessageContext`. -/
  type     : MessageData
  /-- The row number, starting from `0`. This is set by `Entries.add`. -/
  line     : Option Nat := none
  /-- How many `if`s (aka lambda-abstractions) this row is nested under. -/
  depth    : Nat
  /-- What `Status` this entry has - this only affects how `│`s are displayed. -/
  status   : Status
  /-- What to display in the "theorem applied" column.
  Make sure to use `addMessageContext` if needed. -/
  thm      : MessageData
  /-- Which other lines (aka rows) this row depends on.
  `none` means that the dependency has been filtered out of the table. -/
  deps     : List (Option Nat)
  /-- Whether or not to use this in future deps lists. Generally controlled by the `select` function
  passed to `explodeCore`. Exception: `∀I` may ignore this for introduced hypotheses. -/
  useAsDep : Bool
goal: Bool

full_name: Mathlib.Explode.Entry.deps
code: /-- The row in the Fitch table. -/
structure Entry where
  /-- A type of this expression as a `MessageData`. Make sure to use `addMessageContext`. -/
  type     : MessageData
  /-- The row number, starting from `0`. This is set by `Entries.add`. -/
  line     : Option Nat := none
  /-- How many `if`s (aka lambda-abstractions) this row is nested under. -/
  depth    : Nat
  /-- What `Status` this entry has - this only affects how `│`s are displayed. -/
  status   : Status
  /-- What to display in the "theorem applied" column.
  Make sure to use `addMessageContext` if needed. -/
  thm      : MessageData
  /-- Which other lines (aka rows) this row depends on.
  `none` means that the dependency has been filtered out of the table. -/
  deps     : List (Option Nat)
  /-- Whether or not to use this in future deps lists. Generally controlled by the `select` function
  passed to `explodeCore`. Exception: `∀I` may ignore this for introduced hypotheses. -/
  useAsDep : Bool
goal: List (Option Nat)

full_name: Mathlib.Explode.Entry.line!
code: /-- Get the `line` for an `Entry` that has been added to the `Entries` structure. -/
def Entry.line! (entry : Entry) : Nat 
goal: Nat

full_name: Mathlib.Explode.Entries
code: /-- Instead of simply keeping a list of entries (`List Entry`), we create a datatype `Entries`
that allows us to compare expressions faster. -/
structure Entries : Type where
  /-- Allows us to compare `Expr`s fast. -/
  s : ExprMap Entry
  /-- Simple list of `Expr`s. -/
  l : List Entry
  deriving Inhabited
goal: Type

full_name: Mathlib.Explode.instInhabitedEntries
code: /-- Instead of simply keeping a list of entries (`List Entry`), we create a datatype `Entries`
that allows us to compare expressions faster. -/
structure Entries : Type where
  /-- Allows us to compare `Expr`s fast. -/
  s : ExprMap Entry
  /-- Simple list of `Expr`s. -/
  l : List Entry
  deriving Inhabited
goal: Inhabited Mathlib.Explode.Entries

full_name: Mathlib.Explode.Entries.l
code: /-- Instead of simply keeping a list of entries (`List Entry`), we create a datatype `Entries`
that allows us to compare expressions faster. -/
structure Entries : Type where
  /-- Allows us to compare `Expr`s fast. -/
  s : ExprMap Entry
  /-- Simple list of `Expr`s. -/
  l : List Entry
  deriving Inhabited
goal: List Mathlib.Explode.Entry

full_name: Mathlib.Explode.Entries.s
code: /-- Instead of simply keeping a list of entries (`List Entry`), we create a datatype `Entries`
that allows us to compare expressions faster. -/
structure Entries : Type where
  /-- Allows us to compare `Expr`s fast. -/
  s : ExprMap Entry
  /-- Simple list of `Expr`s. -/
  l : List Entry
  deriving Inhabited
goal: Lean.ExprMap Mathlib.Explode.Entry

full_name: Mathlib.Explode.Entries.find?
code: /-- Find a row where `Entry.expr` == `e`. -/
def Entries.find? (es : Entries) (e : Expr) : Option Entry 
goal: Option Mathlib.Explode.Entry

full_name: Mathlib.Explode.Entries.size
code: /-- Length of our entries. -/
def Entries.size (es : Entries) : Nat 
goal: Nat

full_name: Mathlib.Explode.Entries.add
code: /-- Add the entry unless it already exists. Sets the `line` field to the next
available value. -/
def Entries.add (entries : Entries) (expr : Expr) (entry : Entry) : Entry × Entries 
goal: Mathlib.Explode.Entry × Mathlib.Explode.Entries

full_name: Mathlib.Explode.Entries.addSynonym
code: /-- Add a pre-existing entry to the `ExprMap` for an additional expression.
This is used by `let` bindings where `expr` is an fvar. -/
def Entries.addSynonym (entries : Entries) (expr : Expr) (entry : Entry) : Entries 
goal: Mathlib.Explode.Entries