The Following Are Equivalent (TFAE) #
This file provides the tactics tfae_have
and tfae_finish
for proving goals of the form
TFAE [P₁, P₂, ...]
.
An arrow of the form ←
, →
, or ↔
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
tfae_have
introduces hypotheses for proving goals of the form TFAE [P₁, P₂, ...]
. Specifically,
tfae_have i arrow j
introduces a hypothesis of type Pᵢ arrow Pⱼ
to the local context,
where arrow
can be →
, ←
, or ↔
. Note that i
and j
are natural number indices (beginning
at 1) used to specify the propositions P₁, P₂, ...
that appear in the TFAE
goal list. A proof
is required afterward, typically via a tactic block.
example (h : P → R) : TFAE [P, Q, R] := by
tfae_have 1 → 3
· exact h
...
The resulting context now includes tfae_1_to_3 : P → R
.
The introduced hypothesis can be given a custom name, in analogy to have
syntax:
tfae_have h : 2 ↔ 3
Once sufficient hypotheses have been introduced by tfae_have
, tfae_finish
can be used to close
the goal.
example : TFAE [P, Q, R] := by
tfae_have 1 → 2
· /- proof of P → Q -/
tfae_have 2 → 1
· /- proof of Q → P -/
tfae_have 2 ↔ 3
· /- proof of Q ↔ R -/
tfae_finish
Equations
- One or more equations did not get rendered due to their size.
Instances For
tfae_finish
is used to close goals of the form TFAE [P₁, P₂, ...]
once a sufficient collection
of hypotheses of the form Pᵢ → Pⱼ
or Pᵢ ↔ Pⱼ
have been introduced to the local context.
tfae_have
can be used to conveniently introduce these hypotheses; see tfae_have
.
Example:
example : TFAE [P, Q, R] := by
tfae_have 1 → 2
· /- proof of P → Q -/
tfae_have 2 → 1
· /- proof of Q → P -/
tfae_have 2 ↔ 3
· /- proof of Q ↔ R -/
tfae_finish
Equations
- Mathlib.Tactic.TFAE.tfaeFinish = Lean.ParserDescr.node `Mathlib.Tactic.TFAE.tfaeFinish 1024 (Lean.ParserDescr.nonReservedSymbol "tfae_finish" false)
Instances For
Setup #
Extract a list of Prop
expressions from an expression of the form TFAE [P₁, P₂, ...]
as
long as [P₁, P₂, ...]
is an explicit list.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Convert an expression representing an explicit list into a list of expressions.
Proof construction #
Generate a proof of Chain (· → ·) P l
. We assume P : Prop
and l : List Prop
, and that l
is an explicit list.
tfae_have
components #
Construct a name for a hypothesis introduced by tfae_have
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The core of tfae_have
, which behaves like haveLetCore
in Mathlib.Tactic.Have
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Turn syntax for a given index into a natural number, as long as it lies between 1
and
maxIndex
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Construct an expression for the type Pj → Pi
, Pi → Pj
, or Pi ↔ Pj
given expressions
Pi Pj : Q(Prop)
and impArrow
syntax arr
, depending on whether arr
is ←
, →
, or ↔
respectively.
Equations
- One or more equations did not get rendered due to their size.