1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Function.Antiperiodic.nat_mul_eq_of_eq_zero
File: Mathlib/Algebra/Periodic.lean

tactic: rwa [Nat.cast_zero, zero_mul]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
f g : α → β
c c₁ c₂ x : α
inst✝¹ : Semiring α
inst✝ : NegZeroClass β
h : Antiperiodic f c
hi : f 0 = 0
⊢ f (↑0 * c) = 0
state_after: no goals

tactic: simp [add_mul, h _, Antiperiodic.nat_mul_eq_of_eq_zero h hi n]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
f g : α → β
c c₁ c₂ x : α
inst✝¹ : Semiring α
inst✝ : NegZeroClass β
h : Antiperiodic f c
hi : f 0 = 0
n : ℕ
⊢ f (↑(n + 1) * c) = 0
state_after: no goals
Theorem: WithTop.image_coe_Icc
File: Mathlib/Order/Interval/Set/WithBotTop.lean

tactic: rw [← preimage_coe_Icc, image_preimage_eq_inter_range, range_coe,
  inter_eq_self_of_subset_left
    (Subset.trans Icc_subset_Iic_self <| Iic_subset_Iio.2 <| coe_lt_top b)]
state_before: α : Type u_1
inst✝ : Preorder α
a b : α
⊢ some '' Icc a b = Icc ↑a ↑b
state_after: no goals
Theorem: Finset.prod_fiberwise_eq_prod_filter
File: Mathlib/Algebra/BigOperators/Group/Finset.lean

tactic: rw [← prod_disjiUnion, disjiUnion_filter_eq]
state_before: ι✝ : Type u_1
κ✝ : Type u_2
α✝ : Type u_3
β : Type u_4
γ : Type u_5
s✝¹ s₁ s₂ : Finset α✝
a : α✝
f✝¹ g✝¹ : α✝ → β
inst✝² : CommMonoid β
ι : Type u_6
κ : Type u_7
α : Type u_8
inst✝¹ : CommMonoid α
s✝ : Finset ι
t✝ : Finset κ
f✝ : ι → α
g✝ : κ → α
inst✝ : DecidableEq κ
s : Finset ι
t : Finset κ
g : ι → κ
f : ι → α
⊢ ∏ j ∈ t, ∏ i ∈ filter (fun i => g i = j) s, f i = ∏ i ∈ filter (fun i => g i ∈ t) s, f i
state_after: no goals
Theorem: Submodule.span_range_eq_iSup
File: Mathlib/LinearAlgebra/Span.lean

tactic: rw [span_eq_iSup_of_singleton_spans, iSup_range]
state_before: R : Type u_1
R₂ : Type u_2
K : Type u_3
M : Type u_4
M₂ : Type u_5
V : Type u_6
S : Type u_7
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
x : M
p p' : Submodule R M
inst✝⁴ : Semiring R₂
σ₁₂ : R →+* R₂
inst✝³ : AddCommMonoid M₂
inst✝² : Module R₂ M₂
F : Type u_8
inst✝¹ : FunLike F M M₂
inst✝ : SemilinearMapClass F σ₁₂ M M₂
s t : Set M
ι : Sort u_9
v : ι → M
⊢ span R (range v) = ⨆ i, span R {v i}
state_after: no goals
Theorem: Finset.length_toList
File: Mathlib/Data/Finset/Card.lean

tactic: rw [toList, ← Multiset.coe_card, Multiset.coe_toList, card_def]
state_before: α : Type u_1
β : Type u_2
R : Type u_3
s✝ t u : Finset α
f : α → β
n : ℕ
s : Finset α
⊢ s.toList.length = s.card
state_after: no goals
Theorem: CharP.ringChar_zero_iff_CharZero
File: Mathlib/Algebra/CharP/Defs.lean

tactic: rw [ringChar.eq_iff, charP_zero_iff_charZero]
state_before: R : Type u_1
inst✝ : NonAssocRing R
⊢ ringChar R = 0 ↔ CharZero R
state_after: no goals
Theorem: CochainComplex.HomComplex.Cochain.ofHom_v_comp_d
File: Mathlib/Algebra/Homology/HomotopyCategory/HomComplex.lean

tactic: simp only [ofHom, ofHoms_v_comp_d]
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
R : Type u_1
inst✝¹ : Ring R
inst✝ : Linear R C
F G K L : CochainComplex C ℤ
n m : ℤ
φ : F ⟶ G
p q q' : ℤ
hpq : p + 0 = q
⊢ (ofHom φ).v p q hpq ≫ G.d q q' = φ.f p ≫ G.d p q'
state_after: no goals
Theorem: Quiver.Path.toList_comp
File: Mathlib/Combinatorics/Quiver/Path.lean

tactic: simp
state_before: V : Type u
inst✝ : Quiver V
a b c d : V
p : Path a b
⊢ (p.comp nil).toList = nil.toList ++ p.toList
state_after: no goals

tactic: simp [toList_comp]
state_before: V : Type u
inst✝ : Quiver V
a b c d✝ : V
p : Path a b
x✝ d : V
q : Path b d
a✝ : d ⟶ x✝
⊢ (p.comp (q.cons a✝)).toList = (q.cons a✝).toList ++ p.toList
state_after: no goals
Theorem: Fin.snoc_eq_cons_rotate
File: Mathlib/Logic/Equiv/Fin.lean

tactic: ext ⟨i, h⟩
state_before: m n : ℕ
α : Type u_1
v : Fin n → α
a : α
⊢ snoc v a = fun i => cons a v ((finRotate (n + 1)) i)
state_after: case h.mk
m n : ℕ
α : Type u_1
v : Fin n → α
a : α
i : ℕ
h : i < n + 1
⊢ snoc v a ⟨i, h⟩ = cons a v ((finRotate (n + 1)) ⟨i, h⟩)

tactic: by_cases h' : i < n
state_before: case h.mk
m n : ℕ
α : Type u_1
v : Fin n → α
a : α
i : ℕ
h : i < n + 1
⊢ snoc v a ⟨i, h⟩ = cons a v ((finRotate (n + 1)) ⟨i, h⟩)
state_after: case pos
m n : ℕ
α : Type u_1
v : Fin n → α
a : α
i : ℕ
h : i < n + 1
h' : i < n
⊢ snoc v a ⟨i, h⟩ = cons a v ((finRotate (n + 1)) ⟨i, h⟩)

case neg
m n : ℕ
α : Type u_1
v : Fin n → α
a : α
i : ℕ
h : i < n + 1
h' : ¬i < n
⊢ snoc v a ⟨i, h⟩ = cons a v ((finRotate (n + 1)) ⟨i, h⟩)

tactic: rw [finRotate_of_lt h', Fin.snoc, Fin.cons, dif_pos h']
state_before: case pos
m n : ℕ
α : Type u_1
v : Fin n → α
a : α
i : ℕ
h : i < n + 1
h' : i < n
⊢ snoc v a ⟨i, h⟩ = cons a v ((finRotate (n + 1)) ⟨i, h⟩)
state_after: case pos
m n : ℕ
α : Type u_1
v : Fin n → α
a : α
i : ℕ
h : i < n + 1
h' : i < n
⊢ _root_.cast ⋯ (v (⟨i, h⟩.castLT h')) = cases a v ⟨i + 1, ⋯⟩

tactic: rfl
state_before: case pos
m n : ℕ
α : Type u_1
v : Fin n → α
a : α
i : ℕ
h : i < n + 1
h' : i < n
⊢ _root_.cast ⋯ (v (⟨i, h⟩.castLT h')) = cases a v ⟨i + 1, ⋯⟩
state_after: no goals

tactic: have h'' : n = i := by
  simp only [not_lt] at h'
  exact (Nat.eq_of_le_of_lt_succ h' h).symm
state_before: case neg
m n : ℕ
α : Type u_1
v : Fin n → α
a : α
i : ℕ
h : i < n + 1
h' : ¬i < n
⊢ snoc v a ⟨i, h⟩ = cons a v ((finRotate (n + 1)) ⟨i, h⟩)
state_after: case neg
m n : ℕ
α : Type u_1
v : Fin n → α
a : α
i : ℕ
h : i < n + 1
h' : ¬i < n
h'' : n = i
⊢ snoc v a ⟨i, h⟩ = cons a v ((finRotate (n + 1)) ⟨i, h⟩)

tactic: subst h''
state_before: case neg
m n : ℕ
α : Type u_1
v : Fin n → α
a : α
i : ℕ
h : i < n + 1
h' : ¬i < n
h'' : n = i
⊢ snoc v a ⟨i, h⟩ = cons a v ((finRotate (n + 1)) ⟨i, h⟩)
state_after: case neg
m n : ℕ
α : Type u_1
v : Fin n → α
a : α
h : n < n + 1
h' : ¬n < n
⊢ snoc v a ⟨n, h⟩ = cons a v ((finRotate (n + 1)) ⟨n, h⟩)

tactic: rw [finRotate_last', Fin.snoc, Fin.cons, dif_neg (lt_irrefl _)]
state_before: case neg
m n : ℕ
α : Type u_1
v : Fin n → α
a : α
h : n < n + 1
h' : ¬n < n
⊢ snoc v a ⟨n, h⟩ = cons a v ((finRotate (n + 1)) ⟨n, h⟩)
state_after: case neg
m n : ℕ
α : Type u_1
v : Fin n → α
a : α
h : n < n + 1
h' : ¬n < n
⊢ _root_.cast ⋯ a = cases a v ⟨0, ⋯⟩

tactic: rfl
state_before: case neg
m n : ℕ
α : Type u_1
v : Fin n → α
a : α
h : n < n + 1
h' : ¬n < n
⊢ _root_.cast ⋯ a = cases a v ⟨0, ⋯⟩
state_after: no goals

tactic: simp only [not_lt] at h'
state_before: m n : ℕ
α : Type u_1
v : Fin n → α
a : α
i : ℕ
h : i < n + 1
h' : ¬i < n
⊢ n = i
state_after: m n : ℕ
α : Type u_1
v : Fin n → α
a : α
i : ℕ
h : i < n + 1
h' : n ≤ i
⊢ n = i

tactic: exact (Nat.eq_of_le_of_lt_succ h' h).symm
state_before: m n : ℕ
α : Type u_1
v : Fin n → α
a : α
i : ℕ
h : i < n + 1
h' : n ≤ i
⊢ n = i
state_after: no goals
Theorem: MvPolynomial.rank_R
File: Mathlib/FieldTheory/Finite/Polynomial.lean

tactic: rw [rank_finsupp_self']
state_before: σ K : Type u
inst✝² : Fintype K
inst✝¹ : Field K
inst✝ : Fintype σ
⊢ Module.rank K (↑{s | ∀ (n : σ), s n ≤ Fintype.card K - 1} →₀ K) = #↑{s | ∀ (n : σ), s n ≤ Fintype.card K - 1}
state_after: no goals

tactic: refine Quotient.sound ⟨Equiv.subtypeEquiv Finsupp.equivFunOnFinite fun f => ?_⟩
state_before: σ K : Type u
inst✝² : Fintype K
inst✝¹ : Field K
inst✝ : Fintype σ
⊢ #↑{s | ∀ (n : σ), s n ≤ Fintype.card K - 1} = #↑{s | ∀ (n : σ), s n < Fintype.card K}
state_after: σ K : Type u
inst✝² : Fintype K
inst✝¹ : Field K
inst✝ : Fintype σ
f : σ →₀ ℕ
⊢ f ∈ {s | ∀ (n : σ), s n ≤ Fintype.card K - 1} ↔ Finsupp.equivFunOnFinite f ∈ {s | ∀ (n : σ), s n < Fintype.card K}

tactic: refine forall_congr' fun n => le_tsub_iff_right ?_
state_before: σ K : Type u
inst✝² : Fintype K
inst✝¹ : Field K
inst✝ : Fintype σ
f : σ →₀ ℕ
⊢ f ∈ {s | ∀ (n : σ), s n ≤ Fintype.card K - 1} ↔ Finsupp.equivFunOnFinite f ∈ {s | ∀ (n : σ), s n < Fintype.card K}
state_after: σ K : Type u
inst✝² : Fintype K
inst✝¹ : Field K
inst✝ : Fintype σ
f : σ →₀ ℕ
n : σ
⊢ 1 ≤ Fintype.card K

tactic: exact Fintype.card_pos_iff.2 ⟨0⟩
state_before: σ K : Type u
inst✝² : Fintype K
inst✝¹ : Field K
inst✝ : Fintype σ
f : σ →₀ ℕ
n : σ
⊢ 1 ≤ Fintype.card K
state_after: no goals
Theorem: Nat.factorial_eq_mul_doubleFactorial
File: Mathlib/Data/Nat/Factorial/DoubleFactorial.lean

tactic: rw [doubleFactorial_add_two, factorial, factorial_eq_mul_doubleFactorial _, mul_comm _ k‼,
  mul_assoc]
state_before: k : ℕ
⊢ (k + 1 + 1)! = (k + 1 + 1)‼ * (k + 1)‼
state_after: no goals
Theorem: QuaternionAlgebra.Basis.i_mul_k
File: Mathlib/Algebra/QuaternionBasis.lean

tactic: rw [← i_mul_j, ← mul_assoc, i_mul_i, smul_mul_assoc, one_mul]
state_before: R : Type u_1
A : Type u_2
B : Type u_3
inst✝⁴ : CommRing R
inst✝³ : Ring A
inst✝² : Ring B
inst✝¹ : Algebra R A
inst✝ : Algebra R B
c₁ c₂ : R
q : Basis A c₁ c₂
⊢ q.i * q.k = c₁ • q.j
state_after: no goals
Theorem: SetTheory.PGame.Numeric.isOption
File: Mathlib/SetTheory/Surreal/Basic.lean

tactic: cases h
state_before: x' x : PGame
h : x'.IsOption x
hx : x.Numeric
⊢ x'.Numeric
state_after: case moveLeft
x : PGame
hx : x.Numeric
i✝ : x.LeftMoves
⊢ (x.moveLeft i✝).Numeric

case moveRight
x : PGame
hx : x.Numeric
i✝ : x.RightMoves
⊢ (x.moveRight i✝).Numeric

tactic: apply hx.moveLeft
state_before: case moveLeft
x : PGame
hx : x.Numeric
i✝ : x.LeftMoves
⊢ (x.moveLeft i✝).Numeric
state_after: no goals

tactic: apply hx.moveRight
state_before: case moveRight
x : PGame
hx : x.Numeric
i✝ : x.RightMoves
⊢ (x.moveRight i✝).Numeric
state_after: no goals
Theorem: HurwitzZeta.hasSum_nat_hurwitzZetaEven
File: Mathlib/NumberTheory/LSeries/HurwitzZetaEven.lean

tactic: refine (hasSum_int_hurwitzZetaEven a hs).nat_add_neg_add_one.congr_fun fun n ↦ ?_
state_before: a : ℝ
s : ℂ
hs : 1 < s.re
⊢ HasSum (fun n => (1 / ↑|↑n + a| ^ s + 1 / ↑|↑n + 1 - a| ^ s) / 2) (hurwitzZetaEven (↑a) s)
state_after: a : ℝ
s : ℂ
hs : 1 < s.re
n : ℕ
⊢ (1 / ↑|↑n + a| ^ s + 1 / ↑|↑n + 1 - a| ^ s) / 2 = 1 / ↑|↑↑n + a| ^ s / 2 + 1 / ↑|↑(-(↑n + 1)) + a| ^ s / 2

tactic: simp only [← abs_neg (n + 1 - a), neg_sub', sub_neg_eq_add, add_div, Int.cast_natCast,
  Int.cast_neg, Int.cast_add, Int.cast_one]
state_before: a : ℝ
s : ℂ
hs : 1 < s.re
n : ℕ
⊢ (1 / ↑|↑n + a| ^ s + 1 / ↑|↑n + 1 - a| ^ s) / 2 = 1 / ↑|↑↑n + a| ^ s / 2 + 1 / ↑|↑(-(↑n + 1)) + a| ^ s / 2
state_after: no goals
Theorem: Nat.exists_mul_self
File: Mathlib/Data/Nat/Defs.lean

tactic: rw [← hn, sqrt_eq]
state_before: a b c d m n✝ k : ℕ
p q : ℕ → Prop
x : ℕ
x✝ : ∃ n, n * n = x
n : ℕ
hn : n * n = x
⊢ x.sqrt * x.sqrt = x
state_after: no goals
Theorem: MvPolynomial.range_evalᵢ
File: Mathlib/FieldTheory/Finite/Polynomial.lean

tactic: rw [evalᵢ, LinearMap.range_comp, range_subtype]
state_before: σ K : Type u
inst✝² : Fintype K
inst✝¹ : Field K
inst✝ : Finite σ
⊢ range (evalᵢ σ K) = ⊤
state_after: σ K : Type u
inst✝² : Fintype K
inst✝¹ : Field K
inst✝ : Finite σ
⊢ Submodule.map (evalₗ K σ) (restrictDegree σ K (Fintype.card K - 1)) = ⊤

tactic: exact map_restrict_dom_evalₗ K σ
state_before: σ K : Type u
inst✝² : Fintype K
inst✝¹ : Field K
inst✝ : Finite σ
⊢ Submodule.map (evalₗ K σ) (restrictDegree σ K (Fintype.card K - 1)) = ⊤
state_after: no goals
Theorem: Basis.toDual_range
File: Mathlib/LinearAlgebra/Dual.lean

tactic: refine eq_top_iff'.2 fun f => ?_
state_before: R : Type uR
M : Type uM
K : Type uK
V : Type uV
ι : Type uι
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : DecidableEq ι
b : Basis ι R M
inst✝ : _root_.Finite ι
⊢ range b.toDual = ⊤
state_after: R : Type uR
M : Type uM
K : Type uK
V : Type uV
ι : Type uι
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : DecidableEq ι
b : Basis ι R M
inst✝ : _root_.Finite ι
f : Dual R M
⊢ f ∈ range b.toDual

tactic: let lin_comb : ι →₀ R := Finsupp.equivFunOnFinite.symm fun i => f (b i)
state_before: R : Type uR
M : Type uM
K : Type uK
V : Type uV
ι : Type uι
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : DecidableEq ι
b : Basis ι R M
inst✝ : _root_.Finite ι
f : Dual R M
⊢ f ∈ range b.toDual
state_after: R : Type uR
M : Type uM
K : Type uK
V : Type uV
ι : Type uι
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : DecidableEq ι
b : Basis ι R M
inst✝ : _root_.Finite ι
f : Dual R M
lin_comb : ι →₀ R := Finsupp.equivFunOnFinite.symm fun i => f (b i)
⊢ f ∈ range b.toDual

tactic: refine ⟨Finsupp.total ι M R b lin_comb, b.ext fun i => ?_⟩
state_before: R : Type uR
M : Type uM
K : Type uK
V : Type uV
ι : Type uι
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : DecidableEq ι
b : Basis ι R M
inst✝ : _root_.Finite ι
f : Dual R M
lin_comb : ι →₀ R := Finsupp.equivFunOnFinite.symm fun i => f (b i)
⊢ f ∈ range b.toDual
state_after: R : Type uR
M : Type uM
K : Type uK
V : Type uV
ι : Type uι
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : DecidableEq ι
b : Basis ι R M
inst✝ : _root_.Finite ι
f : Dual R M
lin_comb : ι →₀ R := Finsupp.equivFunOnFinite.symm fun i => f (b i)
i : ι
⊢ (b.toDual ((Finsupp.total ι M R ⇑b) lin_comb)) (b i) = f (b i)

tactic: rw [b.toDual_eq_repr _ i, repr_total b]
state_before: R : Type uR
M : Type uM
K : Type uK
V : Type uV
ι : Type uι
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : DecidableEq ι
b : Basis ι R M
inst✝ : _root_.Finite ι
f : Dual R M
lin_comb : ι →₀ R := Finsupp.equivFunOnFinite.symm fun i => f (b i)
i : ι
⊢ (b.toDual ((Finsupp.total ι M R ⇑b) lin_comb)) (b i) = f (b i)
state_after: R : Type uR
M : Type uM
K : Type uK
V : Type uV
ι : Type uι
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : DecidableEq ι
b : Basis ι R M
inst✝ : _root_.Finite ι
f : Dual R M
lin_comb : ι →₀ R := Finsupp.equivFunOnFinite.symm fun i => f (b i)
i : ι
⊢ lin_comb i = f (b i)

tactic: rfl
state_before: R : Type uR
M : Type uM
K : Type uK
V : Type uV
ι : Type uι
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : DecidableEq ι
b : Basis ι R M
inst✝ : _root_.Finite ι
f : Dual R M
lin_comb : ι →₀ R := Finsupp.equivFunOnFinite.symm fun i => f (b i)
i : ι
⊢ lin_comb i = f (b i)
state_after: no goals
Theorem: Orientation.rotation_oangle_eq_iff_norm_eq
File: Mathlib/Geometry/Euclidean/Angle/Oriented/Rotation.lean

tactic: constructor
state_before: V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
⊢ (o.rotation (o.oangle x y)) x = y ↔ ‖x‖ = ‖y‖
state_after: case mp
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
⊢ (o.rotation (o.oangle x y)) x = y → ‖x‖ = ‖y‖

case mpr
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
⊢ ‖x‖ = ‖y‖ → (o.rotation (o.oangle x y)) x = y

tactic: intro h
state_before: case mp
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
⊢ (o.rotation (o.oangle x y)) x = y → ‖x‖ = ‖y‖
state_after: case mp
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : (o.rotation (o.oangle x y)) x = y
⊢ ‖x‖ = ‖y‖

tactic: rw [← h, LinearIsometryEquiv.norm_map]
state_before: case mp
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : (o.rotation (o.oangle x y)) x = y
⊢ ‖x‖ = ‖y‖
state_after: no goals

tactic: intro h
state_before: case mpr
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
⊢ ‖x‖ = ‖y‖ → (o.rotation (o.oangle x y)) x = y
state_after: case mpr
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : ‖x‖ = ‖y‖
⊢ (o.rotation (o.oangle x y)) x = y

tactic: rw [o.eq_iff_oangle_eq_zero_of_norm_eq] <;> simp [h]
state_before: case mpr
V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
h : ‖x‖ = ‖y‖
⊢ (o.rotation (o.oangle x y)) x = y
state_after: no goals
Theorem: MvPolynomial.eq_zero_of_eval_eq_zero
File: Mathlib/FieldTheory/Finite/Polynomial.lean

tactic: rwa [ker_evalₗ, mem_bot] at this
state_before: σ K : Type u
inst✝² : Fintype K
inst✝¹ : Field K
inst✝ : Finite σ
p : MvPolynomial σ K
h : ∀ (v : σ → K), (eval v) p = 0
hp : p ∈ restrictDegree σ K (Fintype.card K - 1)
p' : R σ K := ⟨p, hp⟩
this : p' ∈ ker (evalᵢ σ K)
⊢ p' = 0
state_after: no goals
Theorem: Polynomial.natDegree_sub_C
File: Mathlib/Algebra/Polynomial/Degree/Definitions.lean

tactic: rw [sub_eq_add_neg, ← C_neg, natDegree_add_C]
state_before: R : Type u
S : Type v
a✝ b c d : R
n m : ℕ
inst✝ : Ring R
p q : R[X]
a : R
⊢ (p - C a).natDegree = p.natDegree
state_after: no goals
Theorem: CharTwo.bit0_eq_zero
File: Mathlib/Algebra/CharP/Two.lean

tactic: funext
state_before: R : Type u_1
ι : Type u_2
inst✝¹ : Semiring R
inst✝ : CharP R 2
⊢ bit0 = 0
state_after: case h
R : Type u_1
ι : Type u_2
inst✝¹ : Semiring R
inst✝ : CharP R 2
x✝ : R
⊢ bit0 x✝ = 0 x✝

tactic: exact add_self_eq_zero _
state_before: case h
R : Type u_1
ι : Type u_2
inst✝¹ : Semiring R
inst✝ : CharP R 2
x✝ : R
⊢ bit0 x✝ = 0 x✝
state_after: no goals
Theorem: InnerProductSpace.Core.normSq_eq_zero
File: Mathlib/Analysis/InnerProductSpace/Basic.lean

tactic: simp only [normSq, ext_iff, map_zero, inner_self_im, eq_self_iff_true, and_true_iff]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
inst✝² : _root_.RCLike 𝕜
inst✝¹ : AddCommGroup F
inst✝ : Module 𝕜 F
c : Core 𝕜 F
x : F
⊢ normSq x = 0 ↔ ⟪x, x⟫_𝕜 = 0
state_after: no goals
Theorem: Stream'.WSeq.get?_ofSeq
File: Mathlib/Data/Seq/WSeq.lean

tactic: dsimp [get?]
state_before: α : Type u
β : Type v
γ : Type w
s : Seq α
n : ℕ
⊢ (↑s).get? n = Computation.pure (s.get? n)
state_after: α : Type u
β : Type v
γ : Type w
s : Seq α
n : ℕ
⊢ ((↑s).drop n).head = Computation.pure (s.get? n)

tactic: rw [dropn_ofSeq, head_ofSeq, Seq.head_dropn]
state_before: α : Type u
β : Type v
γ : Type w
s : Seq α
n : ℕ
⊢ ((↑s).drop n).head = Computation.pure (s.get? n)
state_after: no goals
Theorem: Submonoid.prod_eq_top_iff
File: Mathlib/Algebra/Group/Submonoid/Operations.lean

tactic: simp only [eq_top_iff, le_prod_iff, ← (gc_map_comap _).le_iff_le, ← mrange_eq_map, mrange_fst,
  mrange_snd]
state_before: M : Type u_1
N : Type u_2
P : Type u_3
inst✝³ : MulOneClass M
inst✝² : MulOneClass N
inst✝¹ : MulOneClass P
S : Submonoid M
A : Type u_4
inst✝ : SetLike A M
hA : SubmonoidClass A M
S' : A
s : Submonoid M
t : Submonoid N
⊢ s.prod t = ⊤ ↔ s = ⊤ ∧ t = ⊤
state_after: no goals
Theorem: SimpleGraph.Subgraph.IsMatching.toEdge_eq_toEdge_of_adj
File: Mathlib/Combinatorics/SimpleGraph/Matching.lean

tactic: rw [h.toEdge_eq_of_adj hv ha, h.toEdge_eq_of_adj hw (M.symm ha), Subtype.mk_eq_mk, Sym2.eq_swap]
state_before: V : Type u
G : SimpleGraph V
M✝ M : G.Subgraph
v w : V
h : M.IsMatching
hv : v ∈ M.verts
hw : w ∈ M.verts
ha : M.Adj v w
⊢ h.toEdge ⟨v, hv⟩ = h.toEdge ⟨w, hw⟩
state_after: no goals
Theorem: Polynomial.prod_multiset_root_eq_finset_root
File: Mathlib/Algebra/Polynomial/Roots.lean

tactic: simp only [count_roots, Finset.prod_multiset_map_count]
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : CommRing R
inst✝¹ : IsDomain R
p q : R[X]
inst✝ : DecidableEq R
⊢ (Multiset.map (fun a => X - C a) p.roots).prod = ∏ a ∈ p.roots.toFinset, (X - C a) ^ rootMultiplicity a p
state_after: no goals
Theorem: DiscreteQuotient.eq_of_forall_proj_eq
File: Mathlib/Topology/DiscreteQuotient.lean

tactic: rw [← mem_singleton_iff, ← connectedComponent_eq_singleton, connectedComponent_eq_iInter_isClopen,
  mem_iInter]
state_before: α : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁴ : TopologicalSpace X
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Z
S : DiscreteQuotient X
inst✝¹ : T2Space X
inst✝ : CompactSpace X
disc : TotallyDisconnectedSpace X
x y : X
h : ∀ (Q : DiscreteQuotient X), Q.proj x = Q.proj y
⊢ x = y
state_after: α : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁴ : TopologicalSpace X
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Z
S : DiscreteQuotient X
inst✝¹ : T2Space X
inst✝ : CompactSpace X
disc : TotallyDisconnectedSpace X
x y : X
h : ∀ (Q : DiscreteQuotient X), Q.proj x = Q.proj y
⊢ ∀ (i : { s // IsClopen s ∧ y ∈ s }), x ∈ ↑i

tactic: rintro ⟨U, hU1, hU2⟩
state_before: α : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁴ : TopologicalSpace X
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Z
S : DiscreteQuotient X
inst✝¹ : T2Space X
inst✝ : CompactSpace X
disc : TotallyDisconnectedSpace X
x y : X
h : ∀ (Q : DiscreteQuotient X), Q.proj x = Q.proj y
⊢ ∀ (i : { s // IsClopen s ∧ y ∈ s }), x ∈ ↑i
state_after: case mk.intro
α : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁴ : TopologicalSpace X
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Z
S : DiscreteQuotient X
inst✝¹ : T2Space X
inst✝ : CompactSpace X
disc : TotallyDisconnectedSpace X
x y : X
h : ∀ (Q : DiscreteQuotient X), Q.proj x = Q.proj y
U : Set X
hU1 : IsClopen U
hU2 : y ∈ U
⊢ x ∈ ↑⟨U, ⋯⟩

tactic: exact (Quotient.exact' (h (ofIsClopen hU1))).mpr hU2
state_before: case mk.intro
α : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁴ : TopologicalSpace X
inst✝³ : TopologicalSpace Y
inst✝² : TopologicalSpace Z
S : DiscreteQuotient X
inst✝¹ : T2Space X
inst✝ : CompactSpace X
disc : TotallyDisconnectedSpace X
x y : X
h : ∀ (Q : DiscreteQuotient X), Q.proj x = Q.proj y
U : Set X
hU1 : IsClopen U
hU2 : y ∈ U
⊢ x ∈ ↑⟨U, ⋯⟩
state_after: no goals