1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: CategoryTheory.Pretriangulated.Triangle.shiftFunctorAdd'_eq
File: Mathlib/CategoryTheory/Triangulated/TriangleShift.lean

tactic: subst h
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
inst✝¹ : HasShift C ℤ
inst✝ : ∀ (n : ℤ), (CategoryTheory.shiftFunctor C n).Additive
a b c : ℤ
h : a + b = c
⊢ CategoryTheory.shiftFunctorAdd' (Triangle C) a b c h = shiftFunctorAdd' C a b c h
state_after: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
inst✝¹ : HasShift C ℤ
inst✝ : ∀ (n : ℤ), (CategoryTheory.shiftFunctor C n).Additive
a b : ℤ
⊢ CategoryTheory.shiftFunctorAdd' (Triangle C) a b (a + b) ⋯ = shiftFunctorAdd' C a b (a + b) ⋯

tactic: rw [shiftFunctorAdd'_eq_shiftFunctorAdd]
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
inst✝¹ : HasShift C ℤ
inst✝ : ∀ (n : ℤ), (CategoryTheory.shiftFunctor C n).Additive
a b : ℤ
⊢ CategoryTheory.shiftFunctorAdd' (Triangle C) a b (a + b) ⋯ = shiftFunctorAdd' C a b (a + b) ⋯
state_after: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
inst✝¹ : HasShift C ℤ
inst✝ : ∀ (n : ℤ), (CategoryTheory.shiftFunctor C n).Additive
a b : ℤ
⊢ shiftFunctorAdd (Triangle C) a b = shiftFunctorAdd' C a b (a + b) ⋯

tactic: apply shiftFunctorAdd_eq
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
inst✝¹ : HasShift C ℤ
inst✝ : ∀ (n : ℤ), (CategoryTheory.shiftFunctor C n).Additive
a b : ℤ
⊢ shiftFunctorAdd (Triangle C) a b = shiftFunctorAdd' C a b (a + b) ⋯
state_after: no goals
Theorem: exists_borelSpace_of_countablyGenerated_of_separatesPoints
File: Mathlib/MeasureTheory/Constructions/BorelSpace/Metric.lean

tactic: rcases measurableEquiv_nat_bool_of_countablyGenerated α with ⟨s, ⟨f⟩⟩
state_before: α✝ : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Sort y
s t u : Set α✝
α : Type u_5
m : MeasurableSpace α
inst✝¹ : CountablyGenerated α
inst✝ : MeasurableSpace.SeparatesPoints α
⊢ ∃ τ, SecondCountableTopology α ∧ T4Space α ∧ BorelSpace α
state_after: case intro.intro
α✝ : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Sort y
s✝ t u : Set α✝
α : Type u_5
m : MeasurableSpace α
inst✝¹ : CountablyGenerated α
inst✝ : MeasurableSpace.SeparatesPoints α
s : Set (ℕ → Bool)
f : α ≃ᵐ ↑s
⊢ ∃ τ, SecondCountableTopology α ∧ T4Space α ∧ BorelSpace α

tactic: letI := induced f inferInstance
state_before: case intro.intro
α✝ : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Sort y
s✝ t u : Set α✝
α : Type u_5
m : MeasurableSpace α
inst✝¹ : CountablyGenerated α
inst✝ : MeasurableSpace.SeparatesPoints α
s : Set (ℕ → Bool)
f : α ≃ᵐ ↑s
⊢ ∃ τ, SecondCountableTopology α ∧ T4Space α ∧ BorelSpace α
state_after: case intro.intro
α✝ : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Sort y
s✝ t u : Set α✝
α : Type u_5
m : MeasurableSpace α
inst✝¹ : CountablyGenerated α
inst✝ : MeasurableSpace.SeparatesPoints α
s : Set (ℕ → Bool)
f : α ≃ᵐ ↑s
this : TopologicalSpace α := induced (⇑f) inferInstance
⊢ ∃ τ, SecondCountableTopology α ∧ T4Space α ∧ BorelSpace α

tactic: let F := f.toEquiv.toHomeomorphOfInducing $ inducing_induced _
state_before: case intro.intro
α✝ : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Sort y
s✝ t u : Set α✝
α : Type u_5
m : MeasurableSpace α
inst✝¹ : CountablyGenerated α
inst✝ : MeasurableSpace.SeparatesPoints α
s : Set (ℕ → Bool)
f : α ≃ᵐ ↑s
this : TopologicalSpace α := induced (⇑f) inferInstance
⊢ ∃ τ, SecondCountableTopology α ∧ T4Space α ∧ BorelSpace α
state_after: case intro.intro
α✝ : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Sort y
s✝ t u : Set α✝
α : Type u_5
m : MeasurableSpace α
inst✝¹ : CountablyGenerated α
inst✝ : MeasurableSpace.SeparatesPoints α
s : Set (ℕ → Bool)
f : α ≃ᵐ ↑s
this : TopologicalSpace α := induced (⇑f) inferInstance
F : α ≃ₜ ↑s := f.toHomeomorphOfInducing ⋯
⊢ ∃ τ, SecondCountableTopology α ∧ T4Space α ∧ BorelSpace α

tactic: exact ⟨inferInstance, F.secondCountableTopology, F.symm.t4Space,
  MeasurableEmbedding.borelSpace f.measurableEmbedding F.inducing⟩
state_before: case intro.intro
α✝ : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ι : Sort y
s✝ t u : Set α✝
α : Type u_5
m : MeasurableSpace α
inst✝¹ : CountablyGenerated α
inst✝ : MeasurableSpace.SeparatesPoints α
s : Set (ℕ → Bool)
f : α ≃ᵐ ↑s
this : TopologicalSpace α := induced (⇑f) inferInstance
F : α ≃ₜ ↑s := f.toHomeomorphOfInducing ⋯
⊢ ∃ τ, SecondCountableTopology α ∧ T4Space α ∧ BorelSpace α
state_after: no goals
Theorem: WeierstrassCurve.natDegree_Ψ₂Sq_le
File: Mathlib/AlgebraicGeometry/EllipticCurve/DivisionPolynomial/Degree.lean

tactic: rw [Ψ₂Sq]
state_before: R : Type u
inst✝ : CommRing R
W : WeierstrassCurve R
⊢ W.Ψ₂Sq.natDegree ≤ 3
state_after: R : Type u
inst✝ : CommRing R
W : WeierstrassCurve R
⊢ (C 4 * X ^ 3 + C W.b₂ * X ^ 2 + C (2 * W.b₄) * X + C W.b₆).natDegree ≤ 3

tactic: compute_degree
state_before: R : Type u
inst✝ : CommRing R
W : WeierstrassCurve R
⊢ (C 4 * X ^ 3 + C W.b₂ * X ^ 2 + C (2 * W.b₄) * X + C W.b₆).natDegree ≤ 3
state_after: no goals
Theorem: Ordinal.IsNormal.le_set'
File: Mathlib/SetTheory/Ordinal/Arithmetic.lean

tactic: simpa [H₂] using H.le_set (g '' p) (p0.image g) b
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
f : Ordinal.{u_4} → Ordinal.{u_5}
o : Ordinal.{u_5}
H : IsNormal f
p : Set α
p0 : p.Nonempty
g : α → Ordinal.{u_4}
b : Ordinal.{u_4}
H₂ : ∀ (o : Ordinal.{u_4}), b ≤ o ↔ ∀ a ∈ p, g a ≤ o
⊢ f b ≤ o ↔ ∀ a ∈ p, f (g a) ≤ o
state_after: no goals
Theorem: IsLocalization.coeffIntegerNormalization_mem_support
File: Mathlib/RingTheory/Localization/Integral.lean

tactic: contrapose h
state_before: R : Type u_1
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_2
inst✝³ : CommRing S
inst✝² : Algebra R S
P : Type u_3
inst✝¹ : CommRing P
inst✝ : IsLocalization M S
p : S[X]
i : ℕ
h : coeffIntegerNormalization M p i ≠ 0
⊢ i ∈ p.support
state_after: R : Type u_1
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_2
inst✝³ : CommRing S
inst✝² : Algebra R S
P : Type u_3
inst✝¹ : CommRing P
inst✝ : IsLocalization M S
p : S[X]
i : ℕ
h : i ∉ p.support
⊢ ¬coeffIntegerNormalization M p i ≠ 0

tactic: rw [Ne, Classical.not_not, coeffIntegerNormalization, dif_neg h]
state_before: R : Type u_1
inst✝⁴ : CommRing R
M : Submonoid R
S : Type u_2
inst✝³ : CommRing S
inst✝² : Algebra R S
P : Type u_3
inst✝¹ : CommRing P
inst✝ : IsLocalization M S
p : S[X]
i : ℕ
h : i ∉ p.support
⊢ ¬coeffIntegerNormalization M p i ≠ 0
state_after: no goals
Theorem: Real.one_rpow
File: Mathlib/Analysis/SpecialFunctions/Pow/Real.lean

tactic: simp [rpow_def]
state_before: x✝ y z x : ℝ
⊢ 1 ^ x = 1
state_after: no goals
Theorem: cmpUsing_eq_lt
File: Mathlib/Init/Data/Ordering/Lemmas.lean

tactic: simp only [cmpUsing, Ordering.ite_eq_lt_distrib, ite_self, if_false_right, and_true]
state_before: α : Type u
lt : α → α → Prop
inst✝ : DecidableRel lt
a b : α
⊢ (cmpUsing lt a b = Ordering.lt) = lt a b
state_after: no goals
Theorem: opensMeasurableSpace_iff_forall_measurableSet
File: Mathlib/MeasureTheory/Constructions/BorelSpace/Basic.lean

tactic: refine ⟨fun h s hs ↦ ?_, fun h ↦ ⟨generateFrom_le h⟩⟩
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
γ₂ : Type u_4
δ : Type u_5
ι : Sort y
s t u : Set α
inst✝¹ : TopologicalSpace α
inst✝ : MeasurableSpace α
⊢ OpensMeasurableSpace α ↔ ∀ (s : Set α), IsOpen s → MeasurableSet s
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
γ₂ : Type u_4
δ : Type u_5
ι : Sort y
s✝ t u : Set α
inst✝¹ : TopologicalSpace α
inst✝ : MeasurableSpace α
h : OpensMeasurableSpace α
s : Set α
hs : IsOpen s
⊢ MeasurableSet s

tactic: exact OpensMeasurableSpace.borel_le _ <| GenerateMeasurable.basic _ hs
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
γ₂ : Type u_4
δ : Type u_5
ι : Sort y
s✝ t u : Set α
inst✝¹ : TopologicalSpace α
inst✝ : MeasurableSpace α
h : OpensMeasurableSpace α
s : Set α
hs : IsOpen s
⊢ MeasurableSet s
state_after: no goals
Theorem: Nat.pow_lt_ascFactorial'
File: Mathlib/Data/Nat/Factorial/Basic.lean

tactic: rw [Nat.pow_succ, ascFactorial, Nat.mul_comm]
state_before: n k : ℕ
⊢ (n + 1) ^ (k + 2) < (n + 1).ascFactorial (k + 2)
state_after: n k : ℕ
⊢ (n + 1) * (n + 1) ^ (k + 1) < (n + 1 + (k + 1)) * (n + 1).ascFactorial (k + 1)

tactic: exact Nat.mul_lt_mul_of_lt_of_le' (Nat.lt_add_of_pos_right k.succ_pos)
  (pow_succ_le_ascFactorial n.succ _) (Nat.pow_pos n.succ_pos)
state_before: n k : ℕ
⊢ (n + 1) * (n + 1) ^ (k + 1) < (n + 1 + (k + 1)) * (n + 1).ascFactorial (k + 1)
state_after: no goals
Theorem: RingQuot.lift_mkRingHom_apply
File: Mathlib/Algebra/RingQuot.lean

tactic: simp_rw [lift_def, preLift_def, mkRingHom_def]
state_before: R : Type uR
inst✝⁴ : Semiring R
S : Type uS
inst✝³ : CommSemiring S
T : Type uT
A : Type uA
inst✝² : Semiring A
inst✝¹ : Algebra S A
r✝ : R → R → Prop
inst✝ : Semiring T
f : R →+* T
r : R → R → Prop
w : ∀ ⦃x y : R⦄, r x y → f x = f y
x : R
⊢ (lift ⟨f, w⟩) ((mkRingHom r) x) = f x
state_after: R : Type uR
inst✝⁴ : Semiring R
S : Type uS
inst✝³ : CommSemiring S
T : Type uT
A : Type uA
inst✝² : Semiring A
inst✝¹ : Algebra S A
r✝ : R → R → Prop
inst✝ : Semiring T
f : R →+* T
r : R → R → Prop
w : ∀ ⦃x y : R⦄, r x y → f x = f y
x : R
⊢ ({
          toFun := fun f =>
            { toFun := fun x => Quot.lift ⇑↑f ⋯ x.toQuot, map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ },
          invFun := fun F =>
            ⟨F.comp
                { toFun := fun x => { toQuot := Quot.mk (Rel r) x }, map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯,
                  map_add' := ⋯ },
              ⋯⟩,
          left_inv := ⋯, right_inv := ⋯ }
        ⟨f, w⟩)
      ({ toFun := fun x => { toQuot := Quot.mk (Rel r) x }, map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯,
          map_add' := ⋯ }
        x) =
    f x

tactic: rfl
state_before: R : Type uR
inst✝⁴ : Semiring R
S : Type uS
inst✝³ : CommSemiring S
T : Type uT
A : Type uA
inst✝² : Semiring A
inst✝¹ : Algebra S A
r✝ : R → R → Prop
inst✝ : Semiring T
f : R →+* T
r : R → R → Prop
w : ∀ ⦃x y : R⦄, r x y → f x = f y
x : R
⊢ ({
          toFun := fun f =>
            { toFun := fun x => Quot.lift ⇑↑f ⋯ x.toQuot, map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ },
          invFun := fun F =>
            ⟨F.comp
                { toFun := fun x => { toQuot := Quot.mk (Rel r) x }, map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯,
                  map_add' := ⋯ },
              ⋯⟩,
          left_inv := ⋯, right_inv := ⋯ }
        ⟨f, w⟩)
      ({ toFun := fun x => { toQuot := Quot.mk (Rel r) x }, map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯,
          map_add' := ⋯ }
        x) =
    f x
state_after: no goals
Theorem: Orientation.norm_div_cos_oangle_sub_right_of_oangle_eq_pi_div_two
File: Mathlib/Geometry/Euclidean/Angle/Oriented/RightAngle.lean

tactic: have hs : (o.oangle y (y - x)).sign = 1 := by
  rw [oangle_sign_sub_right_swap, h, Real.Angle.sign_coe_pi_div_two]
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
hd2 : Fact (finrank ℝ V = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : o.oangle x y = ↑(π / 2)
⊢ ‖y‖ / (o.oangle y (y - x)).cos = ‖y - x‖
state_after: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
hd2 : Fact (finrank ℝ V = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : o.oangle x y = ↑(π / 2)
hs : (o.oangle y (y - x)).sign = 1
⊢ ‖y‖ / (o.oangle y (y - x)).cos = ‖y - x‖

tactic: rw [o.oangle_eq_angle_of_sign_eq_one hs, Real.Angle.cos_coe,
  InnerProductGeometry.norm_div_cos_angle_sub_of_inner_eq_zero
    (o.inner_rev_eq_zero_of_oangle_eq_pi_div_two h)
    (Or.inl (o.right_ne_zero_of_oangle_eq_pi_div_two h))]
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
hd2 : Fact (finrank ℝ V = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : o.oangle x y = ↑(π / 2)
hs : (o.oangle y (y - x)).sign = 1
⊢ ‖y‖ / (o.oangle y (y - x)).cos = ‖y - x‖
state_after: no goals

tactic: rw [oangle_sign_sub_right_swap, h, Real.Angle.sign_coe_pi_div_two]
state_before: V : Type u_1
inst✝¹ : NormedAddCommGroup V
inst✝ : InnerProductSpace ℝ V
hd2 : Fact (finrank ℝ V = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : o.oangle x y = ↑(π / 2)
⊢ (o.oangle y (y - x)).sign = 1
state_after: no goals
Theorem: AffineSubspace.direction_eq_top_iff_of_nonempty
File: Mathlib/LinearAlgebra/AffineSpace/AffineSubspace.lean

tactic: constructor
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
p₁ p₂ : P
s : AffineSubspace k P
h : (↑s).Nonempty
⊢ s.direction = ⊤ ↔ s = ⊤
state_after: case mp
k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
p₁ p₂ : P
s : AffineSubspace k P
h : (↑s).Nonempty
⊢ s.direction = ⊤ → s = ⊤

case mpr
k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
p₁ p₂ : P
s : AffineSubspace k P
h : (↑s).Nonempty
⊢ s = ⊤ → s.direction = ⊤

tactic: intro hd
state_before: case mp
k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
p₁ p₂ : P
s : AffineSubspace k P
h : (↑s).Nonempty
⊢ s.direction = ⊤ → s = ⊤
state_after: case mp
k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
p₁ p₂ : P
s : AffineSubspace k P
h : (↑s).Nonempty
hd : s.direction = ⊤
⊢ s = ⊤

tactic: rw [← direction_top k V P] at hd
state_before: case mp
k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
p₁ p₂ : P
s : AffineSubspace k P
h : (↑s).Nonempty
hd : s.direction = ⊤
⊢ s = ⊤
state_after: case mp
k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
p₁ p₂ : P
s : AffineSubspace k P
h : (↑s).Nonempty
hd : s.direction = ⊤.direction
⊢ s = ⊤

tactic: refine ext_of_direction_eq hd ?_
state_before: case mp
k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
p₁ p₂ : P
s : AffineSubspace k P
h : (↑s).Nonempty
hd : s.direction = ⊤.direction
⊢ s = ⊤
state_after: case mp
k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
p₁ p₂ : P
s : AffineSubspace k P
h : (↑s).Nonempty
hd : s.direction = ⊤.direction
⊢ (↑s ∩ ↑⊤).Nonempty

tactic: simp [h]
state_before: case mp
k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
p₁ p₂ : P
s : AffineSubspace k P
h : (↑s).Nonempty
hd : s.direction = ⊤.direction
⊢ (↑s ∩ ↑⊤).Nonempty
state_after: no goals

tactic: rintro rfl
state_before: case mpr
k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
p₁ p₂ : P
s : AffineSubspace k P
h : (↑s).Nonempty
⊢ s = ⊤ → s.direction = ⊤
state_after: case mpr
k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
p₁ p₂ : P
h : (↑⊤).Nonempty
⊢ ⊤.direction = ⊤

tactic: simp
state_before: case mpr
k : Type u_1
V : Type u_2
P : Type u_3
inst✝² : Ring k
inst✝¹ : AddCommGroup V
inst✝ : Module k V
S : AffineSpace V P
p₁ p₂ : P
h : (↑⊤).Nonempty
⊢ ⊤.direction = ⊤
state_after: no goals
Theorem: RingHom.finite_respectsIso
File: Mathlib/RingTheory/RingHom/Finite.lean

tactic: apply finite_stableUnderComposition.respectsIso
state_before: ⊢ RespectsIso @Finite
state_after: ⊢ ∀ {R S : Type u_1} [inst : CommRing R] [inst_1 : CommRing S] (e : R ≃+* S), e.toRingHom.Finite

tactic: intros
state_before: ⊢ ∀ {R S : Type u_1} [inst : CommRing R] [inst_1 : CommRing S] (e : R ≃+* S), e.toRingHom.Finite
state_after: R✝ S✝ : Type u_1
inst✝¹ : CommRing R✝
inst✝ : CommRing S✝
e✝ : R✝ ≃+* S✝
⊢ e✝.toRingHom.Finite

tactic: exact Finite.of_surjective _ (RingEquiv.toEquiv _).surjective
state_before: R✝ S✝ : Type u_1
inst✝¹ : CommRing R✝
inst✝ : CommRing S✝
e✝ : R✝ ≃+* S✝
⊢ e✝.toRingHom.Finite
state_after: no goals
Theorem: List.eq_iff_join_eq
File: Mathlib/Data/List/Join.lean

tactic: refine ⟨fun H => by simp [H], ?_⟩
state_before: α : Type u_1
β : Type u_2
L L' : List (List α)
⊢ L = L' ↔ L.join = L'.join ∧ map length L = map length L'
state_after: α : Type u_1
β : Type u_2
L L' : List (List α)
⊢ L.join = L'.join ∧ map length L = map length L' → L = L'

tactic: rintro ⟨join_eq, length_eq⟩
state_before: α : Type u_1
β : Type u_2
L L' : List (List α)
⊢ L.join = L'.join ∧ map length L = map length L' → L = L'
state_after: case intro
α : Type u_1
β : Type u_2
L L' : List (List α)
join_eq : L.join = L'.join
length_eq : map length L = map length L'
⊢ L = L'

tactic: apply ext_getElem
state_before: case intro
α : Type u_1
β : Type u_2
L L' : List (List α)
join_eq : L.join = L'.join
length_eq : map length L = map length L'
⊢ L = L'
state_after: case intro.hl
α : Type u_1
β : Type u_2
L L' : List (List α)
join_eq : L.join = L'.join
length_eq : map length L = map length L'
⊢ L.length = L'.length

case intro.h
α : Type u_1
β : Type u_2
L L' : List (List α)
join_eq : L.join = L'.join
length_eq : map length L = map length L'
⊢ ∀ (n : ℕ) (h₁ : n < L.length) (h₂ : n < L'.length), L[n] = L'[n]

tactic: simp [H]
state_before: α : Type u_1
β : Type u_2
L L' : List (List α)
H : L = L'
⊢ L.join = L'.join ∧ map length L = map length L'
state_after: no goals

tactic: have : length (map length L) = length (map length L') := by rw [length_eq]
state_before: case intro.hl
α : Type u_1
β : Type u_2
L L' : List (List α)
join_eq : L.join = L'.join
length_eq : map length L = map length L'
⊢ L.length = L'.length
state_after: case intro.hl
α : Type u_1
β : Type u_2
L L' : List (List α)
join_eq : L.join = L'.join
length_eq : map length L = map length L'
this : (map length L).length = (map length L').length
⊢ L.length = L'.length

tactic: simpa using this
state_before: case intro.hl
α : Type u_1
β : Type u_2
L L' : List (List α)
join_eq : L.join = L'.join
length_eq : map length L = map length L'
this : (map length L).length = (map length L').length
⊢ L.length = L'.length
state_after: no goals

tactic: rw [length_eq]
state_before: α : Type u_1
β : Type u_2
L L' : List (List α)
join_eq : L.join = L'.join
length_eq : map length L = map length L'
⊢ (map length L).length = (map length L').length
state_after: no goals

tactic: intro n h₁ h₂
state_before: case intro.h
α : Type u_1
β : Type u_2
L L' : List (List α)
join_eq : L.join = L'.join
length_eq : map length L = map length L'
⊢ ∀ (n : ℕ) (h₁ : n < L.length) (h₂ : n < L'.length), L[n] = L'[n]
state_after: case intro.h
α : Type u_1
β : Type u_2
L L' : List (List α)
join_eq : L.join = L'.join
length_eq : map length L = map length L'
n : ℕ
h₁ : n < L.length
h₂ : n < L'.length
⊢ L[n] = L'[n]

tactic: rw [← drop_take_succ_join_eq_getElem', ← drop_take_succ_join_eq_getElem', join_eq, length_eq]
state_before: case intro.h
α : Type u_1
β : Type u_2
L L' : List (List α)
join_eq : L.join = L'.join
length_eq : map length L = map length L'
n : ℕ
h₁ : n < L.length
h₂ : n < L'.length
⊢ L[n] = L'[n]
state_after: no goals
Theorem: imaginaryPart_ofReal
File: Mathlib/Data/Complex/Module.lean

tactic: ext1
state_before: A : Type u_1
inst✝³ : AddCommGroup A
inst✝² : Module ℂ A
inst✝¹ : StarAddMonoid A
inst✝ : StarModule ℂ A
r : ℝ
⊢ ℑ ↑r = 0
state_after: case a
A : Type u_1
inst✝³ : AddCommGroup A
inst✝² : Module ℂ A
inst✝¹ : StarAddMonoid A
inst✝ : StarModule ℂ A
r : ℝ
⊢ ↑(ℑ ↑r) = ↑0

tactic: simp [imaginaryPart_apply_coe, conj_ofReal]
state_before: case a
A : Type u_1
inst✝³ : AddCommGroup A
inst✝² : Module ℂ A
inst✝¹ : StarAddMonoid A
inst✝ : StarModule ℂ A
r : ℝ
⊢ ↑(ℑ ↑r) = ↑0
state_after: no goals
Theorem: ModuleCat.disjoint_span_sum
File: Mathlib/Algebra/Category/ModuleCat/Free.lean

tactic: rw [huv, disjoint_comm]
state_before: ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
hv : LinearIndependent R v
u : ι ⊕ ι' → ↑S.X₂
hw : LinearIndependent R (⇑S.g ∘ u ∘ Sum.inr)
hm : Mono S.f
huv : u ∘ Sum.inl = ⇑S.f ∘ v
⊢ Disjoint (span R (range (u ∘ Sum.inl))) (span R (range (u ∘ Sum.inr)))
state_after: ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
hv : LinearIndependent R v
u : ι ⊕ ι' → ↑S.X₂
hw : LinearIndependent R (⇑S.g ∘ u ∘ Sum.inr)
hm : Mono S.f
huv : u ∘ Sum.inl = ⇑S.f ∘ v
⊢ Disjoint (span R (range (u ∘ Sum.inr))) (span R (range (⇑S.f ∘ v)))

tactic: refine Disjoint.mono_right (span_mono (range_comp_subset_range _ _)) ?_
state_before: ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
hv : LinearIndependent R v
u : ι ⊕ ι' → ↑S.X₂
hw : LinearIndependent R (⇑S.g ∘ u ∘ Sum.inr)
hm : Mono S.f
huv : u ∘ Sum.inl = ⇑S.f ∘ v
⊢ Disjoint (span R (range (u ∘ Sum.inr))) (span R (range (⇑S.f ∘ v)))
state_after: ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
hv : LinearIndependent R v
u : ι ⊕ ι' → ↑S.X₂
hw : LinearIndependent R (⇑S.g ∘ u ∘ Sum.inr)
hm : Mono S.f
huv : u ∘ Sum.inl = ⇑S.f ∘ v
⊢ Disjoint (span R (range (u ∘ Sum.inr))) (span R (range ⇑S.f))

tactic: rw [← LinearMap.range_coe, span_eq (LinearMap.range S.f), hS.moduleCat_range_eq_ker]
state_before: ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
hv : LinearIndependent R v
u : ι ⊕ ι' → ↑S.X₂
hw : LinearIndependent R (⇑S.g ∘ u ∘ Sum.inr)
hm : Mono S.f
huv : u ∘ Sum.inl = ⇑S.f ∘ v
⊢ Disjoint (span R (range (u ∘ Sum.inr))) (span R (range ⇑S.f))
state_after: ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
hv : LinearIndependent R v
u : ι ⊕ ι' → ↑S.X₂
hw : LinearIndependent R (⇑S.g ∘ u ∘ Sum.inr)
hm : Mono S.f
huv : u ∘ Sum.inl = ⇑S.f ∘ v
⊢ Disjoint (span R (range (u ∘ Sum.inr))) (LinearMap.ker S.g)

tactic: exact range_ker_disjoint hw
state_before: ι : Type u_1
ι' : Type u_2
R : Type u_3
inst✝ : Ring R
S : ShortComplex (ModuleCat R)
hS : S.Exact
hS' : S.ShortExact
v : ι → ↑S.X₁
hv : LinearIndependent R v
u : ι ⊕ ι' → ↑S.X₂
hw : LinearIndependent R (⇑S.g ∘ u ∘ Sum.inr)
hm : Mono S.f
huv : u ∘ Sum.inl = ⇑S.f ∘ v
⊢ Disjoint (span R (range (u ∘ Sum.inr))) (LinearMap.ker S.g)
state_after: no goals
Theorem: Matrix.unitOfDetInvertible_eq_nonsingInvUnit
File: Mathlib/LinearAlgebra/Matrix/NonsingularInverse.lean

tactic: ext
state_before: l : Type u_1
m : Type u
n : Type u'
α : Type v
inst✝³ : Fintype n
inst✝² : DecidableEq n
inst✝¹ : CommRing α
A B : Matrix n n α
inst✝ : Invertible A.det
⊢ A.unitOfDetInvertible = A.nonsingInvUnit ⋯
state_after: case a.a
l : Type u_1
m : Type u
n : Type u'
α : Type v
inst✝³ : Fintype n
inst✝² : DecidableEq n
inst✝¹ : CommRing α
A B : Matrix n n α
inst✝ : Invertible A.det
i✝ j✝ : n
⊢ ↑A.unitOfDetInvertible i✝ j✝ = ↑(A.nonsingInvUnit ⋯) i✝ j✝

tactic: rfl
state_before: case a.a
l : Type u_1
m : Type u
n : Type u'
α : Type v
inst✝³ : Fintype n
inst✝² : DecidableEq n
inst✝¹ : CommRing α
A B : Matrix n n α
inst✝ : Invertible A.det
i✝ j✝ : n
⊢ ↑A.unitOfDetInvertible i✝ j✝ = ↑(A.nonsingInvUnit ⋯) i✝ j✝
state_after: no goals
Theorem: self_sub_toIocMod
File: Mathlib/Algebra/Order/ToIntervalMod.lean

tactic: rw [toIocMod, sub_sub_cancel]
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b✝ c : α
n : ℤ
a b : α
⊢ b - toIocMod hp a b = toIocDiv hp a b • p
state_after: no goals
Theorem: Pretrivialization.mem_target
File: Mathlib/Topology/FiberBundle/Trivialization.lean

tactic: rw [e.target_eq, prod_univ, mem_preimage]
state_before: ι : Type u_1
B : Type u_2
F : Type u_3
E : B → Type u_4
Z : Type u_5
inst✝¹ : TopologicalSpace B
inst✝ : TopologicalSpace F
proj : Z → B
e : Pretrivialization F proj
x✝ : Z
x : B × F
⊢ x ∈ e.target ↔ x.1 ∈ e.baseSet
state_after: no goals
Theorem: EReal.abs_mul_sign
File: Mathlib/Data/Real/EReal.lean

tactic: rw [EReal.mul_comm, EReal.sign_mul_abs]
state_before: x : EReal
⊢ ↑x.abs * ↑(sign x) = x
state_after: no goals