1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Matrix.TransvectionStruct.toMatrix_reindexEquiv
File: Mathlib/LinearAlgebra/Matrix/Transvection.lean

tactic: rcases t with ⟨t_i, t_j, _⟩
state_before: n : Type u_1
p : Type u_2
R : Type u₂
𝕜 : Type u_3
inst✝⁵ : Field 𝕜
inst✝⁴ : DecidableEq n
inst✝³ : DecidableEq p
inst✝² : CommRing R
i j : n
inst✝¹ : Fintype n
inst✝ : Fintype p
e : n ≃ p
t : TransvectionStruct n R
⊢ (reindexEquiv e t).toMatrix = (reindexAlgEquiv R e) t.toMatrix
state_after: case mk
n : Type u_1
p : Type u_2
R : Type u₂
𝕜 : Type u_3
inst✝⁵ : Field 𝕜
inst✝⁴ : DecidableEq n
inst✝³ : DecidableEq p
inst✝² : CommRing R
i j : n
inst✝¹ : Fintype n
inst✝ : Fintype p
e : n ≃ p
t_i t_j : n
hij✝ : t_i ≠ t_j
c✝ : R
⊢ (reindexEquiv e { i := t_i, j := t_j, hij := hij✝, c := c✝ }).toMatrix =
    (reindexAlgEquiv R e) { i := t_i, j := t_j, hij := hij✝, c := c✝ }.toMatrix

tactic: ext a b
state_before: case mk
n : Type u_1
p : Type u_2
R : Type u₂
𝕜 : Type u_3
inst✝⁵ : Field 𝕜
inst✝⁴ : DecidableEq n
inst✝³ : DecidableEq p
inst✝² : CommRing R
i j : n
inst✝¹ : Fintype n
inst✝ : Fintype p
e : n ≃ p
t_i t_j : n
hij✝ : t_i ≠ t_j
c✝ : R
⊢ (reindexEquiv e { i := t_i, j := t_j, hij := hij✝, c := c✝ }).toMatrix =
    (reindexAlgEquiv R e) { i := t_i, j := t_j, hij := hij✝, c := c✝ }.toMatrix
state_after: case mk.a
n : Type u_1
p : Type u_2
R : Type u₂
𝕜 : Type u_3
inst✝⁵ : Field 𝕜
inst✝⁴ : DecidableEq n
inst✝³ : DecidableEq p
inst✝² : CommRing R
i j : n
inst✝¹ : Fintype n
inst✝ : Fintype p
e : n ≃ p
t_i t_j : n
hij✝ : t_i ≠ t_j
c✝ : R
a b : p
⊢ (reindexEquiv e { i := t_i, j := t_j, hij := hij✝, c := c✝ }).toMatrix a b =
    (reindexAlgEquiv R e) { i := t_i, j := t_j, hij := hij✝, c := c✝ }.toMatrix a b

tactic: simp only [reindexEquiv, transvection, mul_boole, Algebra.id.smul_eq_mul, toMatrix_mk,
  submatrix_apply, reindex_apply, DMatrix.add_apply, Pi.smul_apply, reindexAlgEquiv_apply]
state_before: case mk.a
n : Type u_1
p : Type u_2
R : Type u₂
𝕜 : Type u_3
inst✝⁵ : Field 𝕜
inst✝⁴ : DecidableEq n
inst✝³ : DecidableEq p
inst✝² : CommRing R
i j : n
inst✝¹ : Fintype n
inst✝ : Fintype p
e : n ≃ p
t_i t_j : n
hij✝ : t_i ≠ t_j
c✝ : R
a b : p
⊢ (reindexEquiv e { i := t_i, j := t_j, hij := hij✝, c := c✝ }).toMatrix a b =
    (reindexAlgEquiv R e) { i := t_i, j := t_j, hij := hij✝, c := c✝ }.toMatrix a b
state_after: case mk.a
n : Type u_1
p : Type u_2
R : Type u₂
𝕜 : Type u_3
inst✝⁵ : Field 𝕜
inst✝⁴ : DecidableEq n
inst✝³ : DecidableEq p
inst✝² : CommRing R
i j : n
inst✝¹ : Fintype n
inst✝ : Fintype p
e : n ≃ p
t_i t_j : n
hij✝ : t_i ≠ t_j
c✝ : R
a b : p
⊢ (1 + stdBasisMatrix (e t_i) (e t_j) c✝) a b = (1 + stdBasisMatrix t_i t_j c✝) (e.symm a) (e.symm b)

tactic: by_cases ha : e t_i = a <;> by_cases hb : e t_j = b <;> by_cases hab : a = b <;>
  simp [ha, hb, hab, ← e.apply_eq_iff_eq_symm_apply, stdBasisMatrix]
state_before: case mk.a
n : Type u_1
p : Type u_2
R : Type u₂
𝕜 : Type u_3
inst✝⁵ : Field 𝕜
inst✝⁴ : DecidableEq n
inst✝³ : DecidableEq p
inst✝² : CommRing R
i j : n
inst✝¹ : Fintype n
inst✝ : Fintype p
e : n ≃ p
t_i t_j : n
hij✝ : t_i ≠ t_j
c✝ : R
a b : p
⊢ (1 + stdBasisMatrix (e t_i) (e t_j) c✝) a b = (1 + stdBasisMatrix t_i t_j c✝) (e.symm a) (e.symm b)
state_after: no goals
Theorem: CompositionSeries.last_eraseLast_le
File: Mathlib/Order/JordanHolder.lean

tactic: simp [eraseLast, last, s.strictMono.le_iff_le, Fin.le_iff_val_le_val, tsub_le_self]
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
⊢ (eraseLast s).last ≤ last s
state_after: no goals
Theorem: AlgebraicGeometry.isReduced_of_isOpenImmersion
File: Mathlib/AlgebraicGeometry/Properties.lean

tactic: constructor
state_before: X✝ : Scheme
X Y : Scheme
f : X ⟶ Y
H : IsOpenImmersion f
inst✝ : IsReduced Y
⊢ IsReduced X
state_after: case component_reduced
X✝ : Scheme
X Y : Scheme
f : X ⟶ Y
H : IsOpenImmersion f
inst✝ : IsReduced Y
⊢ autoParam (∀ (U : Opens ↑↑X.toPresheafedSpace), _root_.IsReduced ↑Γ(X, U)) _auto✝

tactic: intro U
state_before: case component_reduced
X✝ : Scheme
X Y : Scheme
f : X ⟶ Y
H : IsOpenImmersion f
inst✝ : IsReduced Y
⊢ autoParam (∀ (U : Opens ↑↑X.toPresheafedSpace), _root_.IsReduced ↑Γ(X, U)) _auto✝
state_after: case component_reduced
X✝ : Scheme
X Y : Scheme
f : X ⟶ Y
H : IsOpenImmersion f
inst✝ : IsReduced Y
U : Opens ↑↑X.toPresheafedSpace
⊢ _root_.IsReduced ↑Γ(X, U)

tactic: have : U = f ⁻¹ᵁ f ''ᵁ U := by
  ext1; exact (Set.preimage_image_eq _ H.base_open.inj).symm
state_before: case component_reduced
X✝ : Scheme
X Y : Scheme
f : X ⟶ Y
H : IsOpenImmersion f
inst✝ : IsReduced Y
U : Opens ↑↑X.toPresheafedSpace
⊢ _root_.IsReduced ↑Γ(X, U)
state_after: case component_reduced
X✝ : Scheme
X Y : Scheme
f : X ⟶ Y
H : IsOpenImmersion f
inst✝ : IsReduced Y
U : Opens ↑↑X.toPresheafedSpace
this : U = f ⁻¹ᵁ f ''ᵁ U
⊢ _root_.IsReduced ↑Γ(X, U)

tactic: rw [this]
state_before: case component_reduced
X✝ : Scheme
X Y : Scheme
f : X ⟶ Y
H : IsOpenImmersion f
inst✝ : IsReduced Y
U : Opens ↑↑X.toPresheafedSpace
this : U = f ⁻¹ᵁ f ''ᵁ U
⊢ _root_.IsReduced ↑Γ(X, U)
state_after: case component_reduced
X✝ : Scheme
X Y : Scheme
f : X ⟶ Y
H : IsOpenImmersion f
inst✝ : IsReduced Y
U : Opens ↑↑X.toPresheafedSpace
this : U = f ⁻¹ᵁ f ''ᵁ U
⊢ _root_.IsReduced ↑Γ(X, f ⁻¹ᵁ f ''ᵁ U)

tactic: exact isReduced_of_injective (inv <| f.app (f ''ᵁ U))
  (asIso <| f.app (f ''ᵁ U) : Γ(Y, f ''ᵁ U) ≅ _).symm.commRingCatIsoToRingEquiv.injective
state_before: case component_reduced
X✝ : Scheme
X Y : Scheme
f : X ⟶ Y
H : IsOpenImmersion f
inst✝ : IsReduced Y
U : Opens ↑↑X.toPresheafedSpace
this : U = f ⁻¹ᵁ f ''ᵁ U
⊢ _root_.IsReduced ↑Γ(X, f ⁻¹ᵁ f ''ᵁ U)
state_after: no goals

tactic: ext1
state_before: X✝ : Scheme
X Y : Scheme
f : X ⟶ Y
H : IsOpenImmersion f
inst✝ : IsReduced Y
U : Opens ↑↑X.toPresheafedSpace
⊢ U = f ⁻¹ᵁ f ''ᵁ U
state_after: case h
X✝ : Scheme
X Y : Scheme
f : X ⟶ Y
H : IsOpenImmersion f
inst✝ : IsReduced Y
U : Opens ↑↑X.toPresheafedSpace
⊢ ↑U = ↑(f ⁻¹ᵁ f ''ᵁ U)

tactic: exact (Set.preimage_image_eq _ H.base_open.inj).symm
state_before: case h
X✝ : Scheme
X Y : Scheme
f : X ⟶ Y
H : IsOpenImmersion f
inst✝ : IsReduced Y
U : Opens ↑↑X.toPresheafedSpace
⊢ ↑U = ↑(f ⁻¹ᵁ f ''ᵁ U)
state_after: no goals
Theorem: Complex.conj_eq_iff_real
File: Mathlib/Data/Complex/Basic.lean

tactic: rw [e, conj_ofReal]
state_before: z : ℂ
x✝ : ∃ r, z = ↑r
h : ℝ
e : z = ↑h
⊢ (starRingEnd ℂ) z = z
state_after: no goals
Theorem: List.pwFilter_eq_self
File: .lake/packages/batteries/Batteries/Data/List/Pairwise.lean

tactic: refine ⟨fun e => e ▸ pairwise_pwFilter l, fun p => ?_⟩
state_before: α : Type u_1
R : α → α → Prop
inst✝ : DecidableRel R
l : List α
⊢ pwFilter R l = l ↔ Pairwise R l
state_after: α : Type u_1
R : α → α → Prop
inst✝ : DecidableRel R
l : List α
p : Pairwise R l
⊢ pwFilter R l = l

tactic: induction l with
| nil => rfl
| cons x l IH =>
  let ⟨al, p⟩ := pairwise_cons.1 p
  rw [pwFilter_cons_of_pos fun b hb => ?_, IH p]
  rw [IH p] at hb
  exact al _ hb
state_before: α : Type u_1
R : α → α → Prop
inst✝ : DecidableRel R
l : List α
p : Pairwise R l
⊢ pwFilter R l = l
state_after: no goals

tactic: rfl
state_before: case nil
α : Type u_1
R : α → α → Prop
inst✝ : DecidableRel R
p : Pairwise R []
⊢ pwFilter R [] = []
state_after: no goals

tactic: let ⟨al, p⟩ := pairwise_cons.1 p
state_before: case cons
α : Type u_1
R : α → α → Prop
inst✝ : DecidableRel R
x : α
l : List α
IH : Pairwise R l → pwFilter R l = l
p : Pairwise R (x :: l)
⊢ pwFilter R (x :: l) = x :: l
state_after: case cons
α : Type u_1
R : α → α → Prop
inst✝ : DecidableRel R
x : α
l : List α
IH : Pairwise R l → pwFilter R l = l
p✝ : Pairwise R (x :: l)
al : ∀ (a' : α), a' ∈ l → R x a'
p : Pairwise R l
⊢ pwFilter R (x :: l) = x :: l

tactic: rw [pwFilter_cons_of_pos fun b hb => ?_, IH p]
state_before: case cons
α : Type u_1
R : α → α → Prop
inst✝ : DecidableRel R
x : α
l : List α
IH : Pairwise R l → pwFilter R l = l
p✝ : Pairwise R (x :: l)
al : ∀ (a' : α), a' ∈ l → R x a'
p : Pairwise R l
⊢ pwFilter R (x :: l) = x :: l
state_after: α : Type u_1
R : α → α → Prop
inst✝ : DecidableRel R
x : α
l : List α
IH : Pairwise R l → pwFilter R l = l
p✝ : Pairwise R (x :: l)
al : ∀ (a' : α), a' ∈ l → R x a'
p : Pairwise R l
b : α
hb : b ∈ pwFilter R l
⊢ R x b

tactic: rw [IH p] at hb
state_before: α : Type u_1
R : α → α → Prop
inst✝ : DecidableRel R
x : α
l : List α
IH : Pairwise R l → pwFilter R l = l
p✝ : Pairwise R (x :: l)
al : ∀ (a' : α), a' ∈ l → R x a'
p : Pairwise R l
b : α
hb : b ∈ pwFilter R l
⊢ R x b
state_after: α : Type u_1
R : α → α → Prop
inst✝ : DecidableRel R
x : α
l : List α
IH : Pairwise R l → pwFilter R l = l
p✝ : Pairwise R (x :: l)
al : ∀ (a' : α), a' ∈ l → R x a'
p : Pairwise R l
b : α
hb : b ∈ l
⊢ R x b

tactic: exact al _ hb
state_before: α : Type u_1
R : α → α → Prop
inst✝ : DecidableRel R
x : α
l : List α
IH : Pairwise R l → pwFilter R l = l
p✝ : Pairwise R (x :: l)
al : ∀ (a' : α), a' ∈ l → R x a'
p : Pairwise R l
b : α
hb : b ∈ l
⊢ R x b
state_after: no goals
Theorem: Algebra.discr_not_zero_of_basis
File: Mathlib/RingTheory/Discriminant.lean

tactic: rw [discr_def, traceMatrix_of_basis, ← LinearMap.BilinForm.nondegenerate_iff_det_ne_zero]
state_before: A : Type u
B : Type v
C : Type z
ι : Type w
inst✝¹⁶ : DecidableEq ι
inst✝¹⁵ : CommRing A
inst✝¹⁴ : CommRing B
inst✝¹³ : Algebra A B
inst✝¹² : CommRing C
inst✝¹¹ : Algebra A C
ι' : Type u_1
inst✝¹⁰ : Fintype ι'
inst✝⁹ : Fintype ι
inst✝⁸ : DecidableEq ι'
K : Type u
L : Type v
E : Type z
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Field E
inst✝⁴ : Algebra K L
inst✝³ : Algebra K E
inst✝² : Module.Finite K L
inst✝¹ : IsAlgClosed E
inst✝ : IsSeparable K L
b : Basis ι K L
⊢ discr K ⇑b ≠ 0
state_after: A : Type u
B : Type v
C : Type z
ι : Type w
inst✝¹⁶ : DecidableEq ι
inst✝¹⁵ : CommRing A
inst✝¹⁴ : CommRing B
inst✝¹³ : Algebra A B
inst✝¹² : CommRing C
inst✝¹¹ : Algebra A C
ι' : Type u_1
inst✝¹⁰ : Fintype ι'
inst✝⁹ : Fintype ι
inst✝⁸ : DecidableEq ι'
K : Type u
L : Type v
E : Type z
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Field E
inst✝⁴ : Algebra K L
inst✝³ : Algebra K E
inst✝² : Module.Finite K L
inst✝¹ : IsAlgClosed E
inst✝ : IsSeparable K L
b : Basis ι K L
⊢ (traceForm K L).Nondegenerate

tactic: exact traceForm_nondegenerate _ _
state_before: A : Type u
B : Type v
C : Type z
ι : Type w
inst✝¹⁶ : DecidableEq ι
inst✝¹⁵ : CommRing A
inst✝¹⁴ : CommRing B
inst✝¹³ : Algebra A B
inst✝¹² : CommRing C
inst✝¹¹ : Algebra A C
ι' : Type u_1
inst✝¹⁰ : Fintype ι'
inst✝⁹ : Fintype ι
inst✝⁸ : DecidableEq ι'
K : Type u
L : Type v
E : Type z
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Field E
inst✝⁴ : Algebra K L
inst✝³ : Algebra K E
inst✝² : Module.Finite K L
inst✝¹ : IsAlgClosed E
inst✝ : IsSeparable K L
b : Basis ι K L
⊢ (traceForm K L).Nondegenerate
state_after: no goals
Theorem: NNRat.cast_add_of_ne_zero
File: Mathlib/Data/Rat/Cast/Defs.lean

tactic: rw [add_def, cast_divNat_of_ne_zero, cast_def, cast_def, mul_comm _ q.den,
  (Nat.commute_cast _ _).div_add_div (Nat.commute_cast _ _) hq hr]
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
inst✝ : DivisionSemiring α
q r : ℚ≥0
hq : ↑q.den ≠ 0
hr : ↑r.den ≠ 0
⊢ ↑(q + r) = ↑q + ↑r
state_after: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
inst✝ : DivisionSemiring α
q r : ℚ≥0
hq : ↑q.den ≠ 0
hr : ↑r.den ≠ 0
⊢ ↑(q.num * r.den + q.den * r.num) / ↑(q.den * r.den) = (↑q.num * ↑r.den + ↑q.den * ↑r.num) / (↑q.den * ↑r.den)

case hb
F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
inst✝ : DivisionSemiring α
q r : ℚ≥0
hq : ↑q.den ≠ 0
hr : ↑r.den ≠ 0
⊢ ↑(q.den * r.den) ≠ 0

tactic: push_cast
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
inst✝ : DivisionSemiring α
q r : ℚ≥0
hq : ↑q.den ≠ 0
hr : ↑r.den ≠ 0
⊢ ↑(q.num * r.den + q.den * r.num) / ↑(q.den * r.den) = (↑q.num * ↑r.den + ↑q.den * ↑r.num) / (↑q.den * ↑r.den)
state_after: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
inst✝ : DivisionSemiring α
q r : ℚ≥0
hq : ↑q.den ≠ 0
hr : ↑r.den ≠ 0
⊢ (↑q.num * ↑r.den + ↑q.den * ↑r.num) / (↑q.den * ↑r.den) = (↑q.num * ↑r.den + ↑q.den * ↑r.num) / (↑q.den * ↑r.den)

tactic: rfl
state_before: F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
inst✝ : DivisionSemiring α
q r : ℚ≥0
hq : ↑q.den ≠ 0
hr : ↑r.den ≠ 0
⊢ (↑q.num * ↑r.den + ↑q.den * ↑r.num) / (↑q.den * ↑r.den) = (↑q.num * ↑r.den + ↑q.den * ↑r.num) / (↑q.den * ↑r.den)
state_after: no goals

tactic: push_cast
state_before: case hb
F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
inst✝ : DivisionSemiring α
q r : ℚ≥0
hq : ↑q.den ≠ 0
hr : ↑r.den ≠ 0
⊢ ↑(q.den * r.den) ≠ 0
state_after: case hb
F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
inst✝ : DivisionSemiring α
q r : ℚ≥0
hq : ↑q.den ≠ 0
hr : ↑r.den ≠ 0
⊢ ↑q.den * ↑r.den ≠ 0

tactic: exact mul_ne_zero hq hr
state_before: case hb
F : Type u_1
ι : Type u_2
α : Type u_3
β : Type u_4
inst✝ : DivisionSemiring α
q r : ℚ≥0
hq : ↑q.den ≠ 0
hr : ↑r.den ≠ 0
⊢ ↑q.den * ↑r.den ≠ 0
state_after: no goals
Theorem: IntermediateField.mem_adjoin_simple_iff
File: Mathlib/FieldTheory/Adjoin.lean

tactic: simp only [adjoin, mem_mk, Subring.mem_toSubsemiring, Subfield.mem_toSubring,
  Subfield.mem_closure_iff, ← Algebra.adjoin_eq_ring_closure, Subalgebra.mem_toSubring,
  Algebra.adjoin_singleton_eq_range_aeval, AlgHom.mem_range, exists_exists_eq_and]
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S : Set E
α x : E
⊢ x ∈ adjoin F {α} ↔ ∃ r s, x = (aeval α) r / (aeval α) s
state_after: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S : Set E
α x : E
⊢ (∃ a a_1, (aeval α) a / (aeval α) a_1 = x) ↔ ∃ r s, x = (aeval α) r / (aeval α) s

tactic: tauto
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S : Set E
α x : E
⊢ (∃ a a_1, (aeval α) a / (aeval α) a_1 = x) ↔ ∃ r s, x = (aeval α) r / (aeval α) s
state_after: no goals
Theorem: CategoryTheory.Limits.hasTerminal_of_hasTerminal_of_preservesLimit
File: Mathlib/CategoryTheory/Limits/Preserves/Shapes/Terminal.lean

tactic: haveI := HasLimit.mk ⟨_, isLimitOfHasTerminalOfPreservesLimit G⟩
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
D : Type u₂
inst✝² : Category.{v₂, u₂} D
G : C ⥤ D
X : C
inst✝¹ : HasTerminal C
inst✝ : PreservesLimit (Functor.empty C) G
F : Discrete PEmpty.{1} ⥤ D
⊢ HasLimit F
state_after: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
D : Type u₂
inst✝² : Category.{v₂, u₂} D
G : C ⥤ D
X : C
inst✝¹ : HasTerminal C
inst✝ : PreservesLimit (Functor.empty C) G
F : Discrete PEmpty.{1} ⥤ D
this : HasLimit (Functor.empty D)
⊢ HasLimit F

tactic: apply hasLimitOfIso F.uniqueFromEmpty.symm
state_before: C : Type u₁
inst✝³ : Category.{v₁, u₁} C
D : Type u₂
inst✝² : Category.{v₂, u₂} D
G : C ⥤ D
X : C
inst✝¹ : HasTerminal C
inst✝ : PreservesLimit (Functor.empty C) G
F : Discrete PEmpty.{1} ⥤ D
this : HasLimit (Functor.empty D)
⊢ HasLimit F
state_after: no goals
Theorem: EuclideanGeometry.angle_pos_of_angle_eq_pi_div_two
File: Mathlib/Geometry/Euclidean/Angle/Unoriented/RightAngle.lean

tactic: rw [angle, ← inner_eq_zero_iff_angle_eq_pi_div_two, real_inner_comm, ← neg_eq_zero, ←
  inner_neg_left, neg_vsub_eq_vsub_rev] at h
state_before: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p₁ p₂ p₃ : P
h : ∠ p₁ p₂ p₃ = π / 2
h0 : p₁ ≠ p₂ ∨ p₃ = p₂
⊢ 0 < ∠ p₂ p₃ p₁
state_after: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p₁ p₂ p₃ : P
h : ⟪p₂ -ᵥ p₃, p₁ -ᵥ p₂⟫_ℝ = 0
h0 : p₁ ≠ p₂ ∨ p₃ = p₂
⊢ 0 < ∠ p₂ p₃ p₁

tactic: rw [← @vsub_ne_zero V, eq_comm, ← @vsub_eq_zero_iff_eq V, or_comm] at h0
state_before: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p₁ p₂ p₃ : P
h : ⟪p₂ -ᵥ p₃, p₁ -ᵥ p₂⟫_ℝ = 0
h0 : p₁ ≠ p₂ ∨ p₃ = p₂
⊢ 0 < ∠ p₂ p₃ p₁
state_after: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p₁ p₂ p₃ : P
h : ⟪p₂ -ᵥ p₃, p₁ -ᵥ p₂⟫_ℝ = 0
h0 : p₂ -ᵥ p₃ = 0 ∨ p₁ -ᵥ p₂ ≠ 0
⊢ 0 < ∠ p₂ p₃ p₁

tactic: rw [angle, ← vsub_add_vsub_cancel p₁ p₂ p₃, add_comm]
state_before: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p₁ p₂ p₃ : P
h : ⟪p₂ -ᵥ p₃, p₁ -ᵥ p₂⟫_ℝ = 0
h0 : p₂ -ᵥ p₃ = 0 ∨ p₁ -ᵥ p₂ ≠ 0
⊢ 0 < ∠ p₂ p₃ p₁
state_after: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p₁ p₂ p₃ : P
h : ⟪p₂ -ᵥ p₃, p₁ -ᵥ p₂⟫_ℝ = 0
h0 : p₂ -ᵥ p₃ = 0 ∨ p₁ -ᵥ p₂ ≠ 0
⊢ 0 < InnerProductGeometry.angle (p₂ -ᵥ p₃) (p₂ -ᵥ p₃ + (p₁ -ᵥ p₂))

tactic: exact angle_add_pos_of_inner_eq_zero h h0
state_before: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
p₁ p₂ p₃ : P
h : ⟪p₂ -ᵥ p₃, p₁ -ᵥ p₂⟫_ℝ = 0
h0 : p₂ -ᵥ p₃ = 0 ∨ p₁ -ᵥ p₂ ≠ 0
⊢ 0 < InnerProductGeometry.angle (p₂ -ᵥ p₃) (p₂ -ᵥ p₃ + (p₁ -ᵥ p₂))
state_after: no goals
Theorem: Equiv.Set.sumCompl_symm_apply_compl
File: Mathlib/Logic/Equiv/Set.lean

tactic: cases' x with x hx
state_before: α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
s : Set α
inst✝ : DecidablePred fun x => x ∈ s
x : ↑sᶜ
⊢ (Set.sumCompl s).symm ↑x = Sum.inr x
state_after: case mk
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
s : Set α
inst✝ : DecidablePred fun x => x ∈ s
x : α
hx : x ∈ sᶜ
⊢ (Set.sumCompl s).symm ↑⟨x, hx⟩ = Sum.inr ⟨x, hx⟩

tactic: exact Set.sumCompl_symm_apply_of_not_mem hx
state_before: case mk
α✝ : Sort u
β : Sort v
γ : Sort w
α : Type u_1
s : Set α
inst✝ : DecidablePred fun x => x ∈ s
x : α
hx : x ∈ sᶜ
⊢ (Set.sumCompl s).symm ↑⟨x, hx⟩ = Sum.inr ⟨x, hx⟩
state_after: no goals
Theorem: Int.negOnePow_abs
File: Mathlib/Algebra/Ring/NegOnePow.lean

tactic: obtain h|h := abs_choice n <;> simp only [h, negOnePow_neg]
state_before: n : ℤ
⊢ |n|.negOnePow = n.negOnePow
state_after: no goals
Theorem: ContinuedFraction.convergents_eq_convergents'
File: Mathlib/Algebra/ContinuedFractions/ConvergentsEquiv.lean

tactic: ext n
state_before: K : Type u_1
n : ℕ
inst✝ : LinearOrderedField K
c : ContinuedFraction K
⊢ (↑↑c).convergents = (↑↑c).convergents'
state_after: case a
K : Type u_1
n✝ : ℕ
inst✝ : LinearOrderedField K
c : ContinuedFraction K
n : ℕ
⊢ (↑↑c).convergents.get n = Stream'.get (↑↑c).convergents' n

tactic: apply convergents_eq_convergents'
state_before: case a
K : Type u_1
n✝ : ℕ
inst✝ : LinearOrderedField K
c : ContinuedFraction K
n : ℕ
⊢ (↑↑c).convergents.get n = Stream'.get (↑↑c).convergents' n
state_after: case a.s_pos
K : Type u_1
n✝ : ℕ
inst✝ : LinearOrderedField K
c : ContinuedFraction K
n : ℕ
⊢ ∀ {gp : Pair K} {m : ℕ}, m < n → (↑↑c).s.get? m = some gp → 0 < gp.a ∧ 0 < gp.b

tactic: intro gp m _ s_nth_eq
state_before: case a.s_pos
K : Type u_1
n✝ : ℕ
inst✝ : LinearOrderedField K
c : ContinuedFraction K
n : ℕ
⊢ ∀ {gp : Pair K} {m : ℕ}, m < n → (↑↑c).s.get? m = some gp → 0 < gp.a ∧ 0 < gp.b
state_after: case a.s_pos
K : Type u_1
n✝ : ℕ
inst✝ : LinearOrderedField K
c : ContinuedFraction K
n : ℕ
gp : Pair K
m : ℕ
a✝ : m < n
s_nth_eq : (↑↑c).s.get? m = some gp
⊢ 0 < gp.a ∧ 0 < gp.b

tactic: exact ⟨zero_lt_one.trans_le ((c : SimpleContinuedFraction K).property m gp.a
  (part_num_eq_s_a s_nth_eq)).symm.le, c.property m gp.b <| part_denom_eq_s_b s_nth_eq⟩
state_before: case a.s_pos
K : Type u_1
n✝ : ℕ
inst✝ : LinearOrderedField K
c : ContinuedFraction K
n : ℕ
gp : Pair K
m : ℕ
a✝ : m < n
s_nth_eq : (↑↑c).s.get? m = some gp
⊢ 0 < gp.a ∧ 0 < gp.b
state_after: no goals
Theorem: Fin.snoc_init_self
File: Mathlib/Data/Fin/Tuple/Basic.lean

tactic: ext j
state_before: m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
⊢ snoc (init q) (q (last n)) = q
state_after: case h
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
⊢ snoc (init q) (q (last n)) j = q j

tactic: by_cases h : j.val < n
state_before: case h
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
⊢ snoc (init q) (q (last n)) j = q j
state_after: case pos
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
⊢ snoc (init q) (q (last n)) j = q j

case neg
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ¬↑j < n
⊢ snoc (init q) (q (last n)) j = q j

tactic: simp only [init, snoc, h, cast_eq, dite_true, castSucc_castLT]
state_before: case pos
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ↑j < n
⊢ snoc (init q) (q (last n)) j = q j
state_after: no goals

tactic: rw [eq_last_of_not_lt h]
state_before: case neg
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ¬↑j < n
⊢ snoc (init q) (q (last n)) j = q j
state_after: case neg
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ¬↑j < n
⊢ snoc (init q) (q (last n)) (last n) = q (last n)

tactic: simp
state_before: case neg
m n : ℕ
α : Fin (n + 1) → Type u
x : α (last n)
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.castSucc
i : Fin n
y : α i.castSucc
z : α (last n)
j : Fin (n + 1)
h : ¬↑j < n
⊢ snoc (init q) (q (last n)) (last n) = q (last n)
state_after: no goals
Theorem: HasStrictDerivAt.comp_hasStrictFDerivAt_of_eq
File: Mathlib/Analysis/Calculus/Deriv/Comp.lean

tactic: rw [hy] at hh
state_before: 𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
F : Type v
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace 𝕜 F
E : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
f✝ f₀ f₁ g : 𝕜 → F
f'✝ f₀' f₁' g' : F
x✝ : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
𝕜' : Type u_1
inst✝³ : NontriviallyNormedField 𝕜'
inst✝² : NormedAlgebra 𝕜 𝕜'
inst✝¹ : NormedSpace 𝕜' F
inst✝ : IsScalarTower 𝕜 𝕜' F
s' t' : Set 𝕜'
h : 𝕜 → 𝕜'
h₁ : 𝕜 → 𝕜
h₂ : 𝕜' → 𝕜'
h' h₂' : 𝕜'
h₁' : 𝕜
g₁ : 𝕜' → F
g₁' : F
L' : Filter 𝕜'
y : 𝕜'
f : E → 𝕜'
f' : E →L[𝕜] 𝕜'
x : E
hh : HasStrictDerivAt h₂ h₂' y
hf : HasStrictFDerivAt f f' x
hy : y = f x
⊢ HasStrictFDerivAt (h₂ ∘ f) (h₂' • f') x
state_after: 𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
F : Type v
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace 𝕜 F
E : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
f✝ f₀ f₁ g : 𝕜 → F
f'✝ f₀' f₁' g' : F
x✝ : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
𝕜' : Type u_1
inst✝³ : NontriviallyNormedField 𝕜'
inst✝² : NormedAlgebra 𝕜 𝕜'
inst✝¹ : NormedSpace 𝕜' F
inst✝ : IsScalarTower 𝕜 𝕜' F
s' t' : Set 𝕜'
h : 𝕜 → 𝕜'
h₁ : 𝕜 → 𝕜
h₂ : 𝕜' → 𝕜'
h' h₂' : 𝕜'
h₁' : 𝕜
g₁ : 𝕜' → F
g₁' : F
L' : Filter 𝕜'
y : 𝕜'
f : E → 𝕜'
f' : E →L[𝕜] 𝕜'
x : E
hh : HasStrictDerivAt h₂ h₂' (f x)
hf : HasStrictFDerivAt f f' x
hy : y = f x
⊢ HasStrictFDerivAt (h₂ ∘ f) (h₂' • f') x

tactic: exact hh.comp_hasStrictFDerivAt x hf
state_before: 𝕜 : Type u
inst✝⁸ : NontriviallyNormedField 𝕜
F : Type v
inst✝⁷ : NormedAddCommGroup F
inst✝⁶ : NormedSpace 𝕜 F
E : Type w
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
f✝ f₀ f₁ g : 𝕜 → F
f'✝ f₀' f₁' g' : F
x✝ : 𝕜
s t : Set 𝕜
L L₁ L₂ : Filter 𝕜
𝕜' : Type u_1
inst✝³ : NontriviallyNormedField 𝕜'
inst✝² : NormedAlgebra 𝕜 𝕜'
inst✝¹ : NormedSpace 𝕜' F
inst✝ : IsScalarTower 𝕜 𝕜' F
s' t' : Set 𝕜'
h : 𝕜 → 𝕜'
h₁ : 𝕜 → 𝕜
h₂ : 𝕜' → 𝕜'
h' h₂' : 𝕜'
h₁' : 𝕜
g₁ : 𝕜' → F
g₁' : F
L' : Filter 𝕜'
y : 𝕜'
f : E → 𝕜'
f' : E →L[𝕜] 𝕜'
x : E
hh : HasStrictDerivAt h₂ h₂' (f x)
hf : HasStrictFDerivAt f f' x
hy : y = f x
⊢ HasStrictFDerivAt (h₂ ∘ f) (h₂' • f') x
state_after: no goals