1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: tendsto_zero_of_norm_tendsto_zero
File: Mathlib/NumberTheory/Padics/Hensel.lean

tactic: simpa using hnorm
state_before: p : ℕ
inst✝ : Fact (Nat.Prime p)
ncs : CauSeq ℤ_[p] norm
F : Polynomial ℤ_[p]
hnorm : Tendsto (fun i => ‖Polynomial.eval (↑ncs i) F‖) atTop (𝓝 0)
⊢ Tendsto (fun e => ‖Polynomial.eval (↑ncs e) F - 0‖) atTop (𝓝 0)
state_after: no goals
Theorem: iSup_union
File: Mathlib/Order/CompleteLattice.lean

tactic: simp_rw [mem_union, iSup_or, iSup_sup_eq]
state_before: α : Type u_1
β : Type u_2
β₂ : Type u_3
γ : Type u_4
ι : Sort u_5
ι' : Sort u_6
κ : ι → Sort u_7
κ' : ι' → Sort u_8
inst✝ : CompleteLattice α
f✝ g s✝ t✝ : ι → α
a b : α
f : β → α
s t : Set β
⊢ ⨆ x ∈ s ∪ t, f x = (⨆ x ∈ s, f x) ⊔ ⨆ x ∈ t, f x
state_after: no goals
Theorem: Subalgebra.centralizer_centralizer_centralizer
File: Mathlib/Algebra/Algebra/Subalgebra/Basic.lean

tactic: apply SetLike.coe_injective
state_before: R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : Semiring B
inst✝ : Algebra R B
S : Subalgebra R A
s : Set A
⊢ centralizer R s.centralizer.centralizer = centralizer R s
state_after: case a
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : Semiring B
inst✝ : Algebra R B
S : Subalgebra R A
s : Set A
⊢ ↑(centralizer R s.centralizer.centralizer) = ↑(centralizer R s)

tactic: simp only [coe_centralizer, Set.centralizer_centralizer_centralizer]
state_before: case a
R : Type u
A : Type v
B : Type w
inst✝⁴ : CommSemiring R
inst✝³ : Semiring A
inst✝² : Algebra R A
inst✝¹ : Semiring B
inst✝ : Algebra R B
S : Subalgebra R A
s : Set A
⊢ ↑(centralizer R s.centralizer.centralizer) = ↑(centralizer R s)
state_after: no goals
Theorem: List.erase_eq_eraseP'
File: .lake/packages/batteries/Batteries/Data/List/Lemmas.lean

tactic: induction l
state_before: α : Type u_1
inst✝ : BEq α
a : α
l : List α
⊢ l.erase a = eraseP (fun x => x == a) l
state_after: case nil
α : Type u_1
inst✝ : BEq α
a : α
⊢ [].erase a = eraseP (fun x => x == a) []

case cons
α : Type u_1
inst✝ : BEq α
a head✝ : α
tail✝ : List α
tail_ih✝ : tail✝.erase a = eraseP (fun x => x == a) tail✝
⊢ (head✝ :: tail✝).erase a = eraseP (fun x => x == a) (head✝ :: tail✝)

tactic: simp
state_before: case nil
α : Type u_1
inst✝ : BEq α
a : α
⊢ [].erase a = eraseP (fun x => x == a) []
state_after: no goals

tactic: next b t ih =>
rw [erase_cons, eraseP_cons, ih]
if h : b == a then simp [h] else simp [h]
state_before: case cons
α : Type u_1
inst✝ : BEq α
a head✝ : α
tail✝ : List α
tail_ih✝ : tail✝.erase a = eraseP (fun x => x == a) tail✝
⊢ (head✝ :: tail✝).erase a = eraseP (fun x => x == a) (head✝ :: tail✝)
state_after: no goals

tactic: rw [erase_cons, eraseP_cons, ih]
state_before: α : Type u_1
inst✝ : BEq α
a b : α
t : List α
ih : t.erase a = eraseP (fun x => x == a) t
⊢ (b :: t).erase a = eraseP (fun x => x == a) (b :: t)
state_after: α : Type u_1
inst✝ : BEq α
a b : α
t : List α
ih : t.erase a = eraseP (fun x => x == a) t
⊢ (if (b == a) = true then t else b :: eraseP (fun x => x == a) t) =
    bif b == a then t else b :: eraseP (fun x => x == a) t

tactic: if h : b == a then simp [h] else simp [h]
state_before: α : Type u_1
inst✝ : BEq α
a b : α
t : List α
ih : t.erase a = eraseP (fun x => x == a) t
⊢ (if (b == a) = true then t else b :: eraseP (fun x => x == a) t) =
    bif b == a then t else b :: eraseP (fun x => x == a) t
state_after: no goals

tactic: simp [h]
state_before: α : Type u_1
inst✝ : BEq α
a b : α
t : List α
ih : t.erase a = eraseP (fun x => x == a) t
h : (b == a) = true
⊢ (if (b == a) = true then t else b :: eraseP (fun x => x == a) t) =
    bif b == a then t else b :: eraseP (fun x => x == a) t
state_after: no goals

tactic: simp [h]
state_before: α : Type u_1
inst✝ : BEq α
a b : α
t : List α
ih : t.erase a = eraseP (fun x => x == a) t
h : ¬(b == a) = true
⊢ (if (b == a) = true then t else b :: eraseP (fun x => x == a) t) =
    bif b == a then t else b :: eraseP (fun x => x == a) t
state_after: no goals
Theorem: Equiv.swap_apply_of_ne_of_ne
File: Mathlib/Logic/Equiv/Basic.lean

tactic: simp (config := { contextual := true }) [swap_apply_def]
state_before: α : Sort u_1
inst✝ : DecidableEq α
a b x : α
⊢ x ≠ a → x ≠ b → (swap a b) x = x
state_after: no goals
Theorem: Rat.den_dvd
File: Mathlib/Data/Rat/Lemmas.lean

tactic: by_cases b0 : b = 0
state_before: a b : ℤ
⊢ ↑(a /. b).den ∣ b
state_after: case pos
a b : ℤ
b0 : b = 0
⊢ ↑(a /. b).den ∣ b

case neg
a b : ℤ
b0 : ¬b = 0
⊢ ↑(a /. b).den ∣ b

tactic: cases' e : a /. b with n d h c
state_before: case neg
a b : ℤ
b0 : ¬b = 0
⊢ ↑(a /. b).den ∣ b
state_after: case neg.mk'
a b : ℤ
b0 : ¬b = 0
n : ℤ
d : ℕ
h : d ≠ 0
c : n.natAbs.Coprime d
e : a /. b = { num := n, den := d, den_nz := h, reduced := c }
⊢ ↑{ num := n, den := d, den_nz := h, reduced := c }.den ∣ b

tactic: rw [mk'_eq_divInt, divInt_eq_iff b0 (ne_of_gt (Int.natCast_pos.2 (Nat.pos_of_ne_zero h)))] at e
state_before: case neg.mk'
a b : ℤ
b0 : ¬b = 0
n : ℤ
d : ℕ
h : d ≠ 0
c : n.natAbs.Coprime d
e : a /. b = { num := n, den := d, den_nz := h, reduced := c }
⊢ ↑{ num := n, den := d, den_nz := h, reduced := c }.den ∣ b
state_after: case neg.mk'
a b : ℤ
b0 : ¬b = 0
n : ℤ
d : ℕ
h : d ≠ 0
c : n.natAbs.Coprime d
e : a * ↑d = n * b
⊢ ↑{ num := n, den := d, den_nz := h, reduced := c }.den ∣ b

tactic: refine Int.dvd_natAbs.1 <| Int.natCast_dvd_natCast.2 <| c.symm.dvd_of_dvd_mul_left ?_
state_before: case neg.mk'
a b : ℤ
b0 : ¬b = 0
n : ℤ
d : ℕ
h : d ≠ 0
c : n.natAbs.Coprime d
e : a * ↑d = n * b
⊢ ↑{ num := n, den := d, den_nz := h, reduced := c }.den ∣ b
state_after: case neg.mk'
a b : ℤ
b0 : ¬b = 0
n : ℤ
d : ℕ
h : d ≠ 0
c : n.natAbs.Coprime d
e : a * ↑d = n * b
⊢ d ∣ n.natAbs * b.natAbs

tactic: rw [← Int.natAbs_mul, ← Int.natCast_dvd_natCast, Int.dvd_natAbs, ← e]
state_before: case neg.mk'
a b : ℤ
b0 : ¬b = 0
n : ℤ
d : ℕ
h : d ≠ 0
c : n.natAbs.Coprime d
e : a * ↑d = n * b
⊢ d ∣ n.natAbs * b.natAbs
state_after: case neg.mk'
a b : ℤ
b0 : ¬b = 0
n : ℤ
d : ℕ
h : d ≠ 0
c : n.natAbs.Coprime d
e : a * ↑d = n * b
⊢ ↑d ∣ a * ↑d

tactic: simp
state_before: case neg.mk'
a b : ℤ
b0 : ¬b = 0
n : ℤ
d : ℕ
h : d ≠ 0
c : n.natAbs.Coprime d
e : a * ↑d = n * b
⊢ ↑d ∣ a * ↑d
state_after: no goals

tactic: simp [b0]
state_before: case pos
a b : ℤ
b0 : b = 0
⊢ ↑(a /. b).den ∣ b
state_after: no goals
Theorem: Orthonormal.isHilbertSum
File: Mathlib/Analysis/InnerProductSpace/l2Space.lean

tactic: convert hsp
state_before: ι : Type u_1
𝕜 : Type u_2
inst✝⁴ : RCLike 𝕜
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
V : (i : ι) → G i →ₗᵢ[𝕜] E
F : ι → Submodule 𝕜 E
v : ι → E
hv : Orthonormal 𝕜 v
hsp : ⊤ ≤ (span 𝕜 (Set.range v)).topologicalClosure
⊢ ⊤ ≤ (⨆ i, LinearMap.range (LinearIsometry.toSpanSingleton 𝕜 E ⋯).toLinearMap).topologicalClosure
state_after: case h.e'_4.h.e'_9
ι : Type u_1
𝕜 : Type u_2
inst✝⁴ : RCLike 𝕜
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
V : (i : ι) → G i →ₗᵢ[𝕜] E
F : ι → Submodule 𝕜 E
v : ι → E
hv : Orthonormal 𝕜 v
hsp : ⊤ ≤ (span 𝕜 (Set.range v)).topologicalClosure
⊢ ⨆ i, LinearMap.range (LinearIsometry.toSpanSingleton 𝕜 E ⋯).toLinearMap = span 𝕜 (Set.range v)

tactic: simp [← LinearMap.span_singleton_eq_range, ← Submodule.span_iUnion]
state_before: case h.e'_4.h.e'_9
ι : Type u_1
𝕜 : Type u_2
inst✝⁴ : RCLike 𝕜
E : Type u_3
inst✝³ : NormedAddCommGroup E
inst✝² : InnerProductSpace 𝕜 E
cplt : CompleteSpace E
G : ι → Type u_4
inst✝¹ : (i : ι) → NormedAddCommGroup (G i)
inst✝ : (i : ι) → InnerProductSpace 𝕜 (G i)
V : (i : ι) → G i →ₗᵢ[𝕜] E
F : ι → Submodule 𝕜 E
v : ι → E
hv : Orthonormal 𝕜 v
hsp : ⊤ ≤ (span 𝕜 (Set.range v)).topologicalClosure
⊢ ⨆ i, LinearMap.range (LinearIsometry.toSpanSingleton 𝕜 E ⋯).toLinearMap = span 𝕜 (Set.range v)
state_after: no goals
Theorem: upperCentralSeries_eq_top_iff_nilpotencyClass_le
File: Mathlib/GroupTheory/Nilpotent.lean

tactic: constructor
state_before: G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hG : Group.IsNilpotent G
n : ℕ
⊢ upperCentralSeries G n = ⊤ ↔ Group.nilpotencyClass G ≤ n
state_after: case mp
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hG : Group.IsNilpotent G
n : ℕ
⊢ upperCentralSeries G n = ⊤ → Group.nilpotencyClass G ≤ n

case mpr
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hG : Group.IsNilpotent G
n : ℕ
⊢ Group.nilpotencyClass G ≤ n → upperCentralSeries G n = ⊤

tactic: intro h
state_before: case mp
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hG : Group.IsNilpotent G
n : ℕ
⊢ upperCentralSeries G n = ⊤ → Group.nilpotencyClass G ≤ n
state_after: case mp
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hG : Group.IsNilpotent G
n : ℕ
h : upperCentralSeries G n = ⊤
⊢ Group.nilpotencyClass G ≤ n

tactic: exact Nat.find_le h
state_before: case mp
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hG : Group.IsNilpotent G
n : ℕ
h : upperCentralSeries G n = ⊤
⊢ Group.nilpotencyClass G ≤ n
state_after: no goals

tactic: intro h
state_before: case mpr
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hG : Group.IsNilpotent G
n : ℕ
⊢ Group.nilpotencyClass G ≤ n → upperCentralSeries G n = ⊤
state_after: case mpr
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hG : Group.IsNilpotent G
n : ℕ
h : Group.nilpotencyClass G ≤ n
⊢ upperCentralSeries G n = ⊤

tactic: rw [eq_top_iff, ← upperCentralSeries_nilpotencyClass]
state_before: case mpr
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hG : Group.IsNilpotent G
n : ℕ
h : Group.nilpotencyClass G ≤ n
⊢ upperCentralSeries G n = ⊤
state_after: case mpr
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hG : Group.IsNilpotent G
n : ℕ
h : Group.nilpotencyClass G ≤ n
⊢ upperCentralSeries G (Group.nilpotencyClass G) ≤ upperCentralSeries G n

tactic: exact upperCentralSeries_mono _ h
state_before: case mpr
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : H.Normal
hG : Group.IsNilpotent G
n : ℕ
h : Group.nilpotencyClass G ≤ n
⊢ upperCentralSeries G (Group.nilpotencyClass G) ≤ upperCentralSeries G n
state_after: no goals
Theorem: AnalyticAt.meromorphicAt
File: Mathlib/Analysis/Analytic/Meromorphic.lean

tactic: simpa only [pow_zero, one_smul]
state_before: 𝕜 : Type u_1
inst✝² : NontriviallyNormedField 𝕜
E : Type u_2
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace 𝕜 E
f : 𝕜 → E
x : 𝕜
hf : AnalyticAt 𝕜 f x
⊢ AnalyticAt 𝕜 (fun z => (z - x) ^ 0 • f z) x
state_after: no goals
Theorem: SimpleGraph.Subgraph.le_induce_union_right
File: Mathlib/Combinatorics/SimpleGraph/Subgraph.lean

tactic: exact (sup_le_iff.mp le_induce_union).2
state_before: ι : Sort u_1
V : Type u
W : Type v
G : SimpleGraph V
G' G'' : G.Subgraph
s s' : Set V
⊢ G'.induce s' ≤ G'.induce (s ∪ s')
state_after: no goals
Theorem: Multiset.nodup_iff_ne_cons_cons
File: Mathlib/Data/Multiset/Nodup.lean

tactic: rwa [cons_add, cons_add, zero_add] at s_eq
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s✝ t✝ : Multiset α
a✝ : α
s : Multiset α
h : ∀ (a : α) (t : Multiset α), s ≠ a ::ₘ a ::ₘ t
a : α
le : a ::ₘ a ::ₘ 0 ≤ s
t : Multiset α
s_eq : s = a ::ₘ a ::ₘ 0 + t
⊢ s = a ::ₘ a ::ₘ t
state_after: no goals
Theorem: Rack.self_invAct_act_eq
File: Mathlib/Algebra/Quandle.lean

tactic: have h := @self_act_invAct_eq _ _ (op x) (op y)
state_before: R : Type u_1
inst✝ : Rack R
x y : R
⊢ (x ◃⁻¹ x) ◃ y = x ◃ y
state_after: R : Type u_1
inst✝ : Rack R
x y : R
h : (op x ◃ op x) ◃⁻¹ op y = op x ◃⁻¹ op y
⊢ (x ◃⁻¹ x) ◃ y = x ◃ y

tactic: simpa using h
state_before: R : Type u_1
inst✝ : Rack R
x y : R
h : (op x ◃ op x) ◃⁻¹ op y = op x ◃⁻¹ op y
⊢ (x ◃⁻¹ x) ◃ y = x ◃ y
state_after: no goals
Theorem: geom_sum_pos_iff
File: Mathlib/Algebra/GeomSum.lean

tactic: refine ⟨fun h => ?_, ?_⟩
state_before: α : Type u
β : Type u_1
n : ℕ
x : α
inst✝ : LinearOrderedRing α
hn : n ≠ 0
⊢ 0 < ∑ i ∈ range n, x ^ i ↔ Odd n ∨ 0 < x + 1
state_after: case refine_1
α : Type u
β : Type u_1
n : ℕ
x : α
inst✝ : LinearOrderedRing α
hn : n ≠ 0
h : 0 < ∑ i ∈ range n, x ^ i
⊢ Odd n ∨ 0 < x + 1

case refine_2
α : Type u
β : Type u_1
n : ℕ
x : α
inst✝ : LinearOrderedRing α
hn : n ≠ 0
⊢ Odd n ∨ 0 < x + 1 → 0 < ∑ i ∈ range n, x ^ i

tactic: rw [or_iff_not_imp_left, ← not_le, ← Nat.even_iff_not_odd]
state_before: case refine_1
α : Type u
β : Type u_1
n : ℕ
x : α
inst✝ : LinearOrderedRing α
hn : n ≠ 0
h : 0 < ∑ i ∈ range n, x ^ i
⊢ Odd n ∨ 0 < x + 1
state_after: case refine_1
α : Type u
β : Type u_1
n : ℕ
x : α
inst✝ : LinearOrderedRing α
hn : n ≠ 0
h : 0 < ∑ i ∈ range n, x ^ i
⊢ Even n → ¬x + 1 ≤ 0

tactic: refine fun hn hx => h.not_le ?_
state_before: case refine_1
α : Type u
β : Type u_1
n : ℕ
x : α
inst✝ : LinearOrderedRing α
hn : n ≠ 0
h : 0 < ∑ i ∈ range n, x ^ i
⊢ Even n → ¬x + 1 ≤ 0
state_after: case refine_1
α : Type u
β : Type u_1
n : ℕ
x : α
inst✝ : LinearOrderedRing α
hn✝ : n ≠ 0
h : 0 < ∑ i ∈ range n, x ^ i
hn : Even n
hx : x + 1 ≤ 0
⊢ ∑ i ∈ range n, x ^ i ≤ 0

tactic: simpa [if_pos hn] using geom_sum_alternating_of_le_neg_one hx n
state_before: case refine_1
α : Type u
β : Type u_1
n : ℕ
x : α
inst✝ : LinearOrderedRing α
hn✝ : n ≠ 0
h : 0 < ∑ i ∈ range n, x ^ i
hn : Even n
hx : x + 1 ≤ 0
⊢ ∑ i ∈ range n, x ^ i ≤ 0
state_after: no goals

tactic: rintro (hn | hx')
state_before: case refine_2
α : Type u
β : Type u_1
n : ℕ
x : α
inst✝ : LinearOrderedRing α
hn : n ≠ 0
⊢ Odd n ∨ 0 < x + 1 → 0 < ∑ i ∈ range n, x ^ i
state_after: case refine_2.inl
α : Type u
β : Type u_1
n : ℕ
x : α
inst✝ : LinearOrderedRing α
hn✝ : n ≠ 0
hn : Odd n
⊢ 0 < ∑ i ∈ range n, x ^ i

case refine_2.inr
α : Type u
β : Type u_1
n : ℕ
x : α
inst✝ : LinearOrderedRing α
hn : n ≠ 0
hx' : 0 < x + 1
⊢ 0 < ∑ i ∈ range n, x ^ i

tactic: exact hn.geom_sum_pos
state_before: case refine_2.inl
α : Type u
β : Type u_1
n : ℕ
x : α
inst✝ : LinearOrderedRing α
hn✝ : n ≠ 0
hn : Odd n
⊢ 0 < ∑ i ∈ range n, x ^ i
state_after: no goals

tactic: exact geom_sum_pos' hx' hn
state_before: case refine_2.inr
α : Type u
β : Type u_1
n : ℕ
x : α
inst✝ : LinearOrderedRing α
hn : n ≠ 0
hx' : 0 < x + 1
⊢ 0 < ∑ i ∈ range n, x ^ i
state_after: no goals
Theorem: generalized_tube_lemma
File: Mathlib/Topology/Compactness/Compact.lean

tactic: rw [← hn.mem_nhdsSet, hs.nhdsSet_prod_eq ht,
  ((hasBasis_nhdsSet _).prod (hasBasis_nhdsSet _)).mem_iff] at hp
state_before: X : Type u
Y : Type v
ι : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
s t✝ : Set X
hs : IsCompact s
t : Set Y
ht : IsCompact t
n : Set (X × Y)
hn : IsOpen n
hp : s ×ˢ t ⊆ n
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ s ⊆ u ∧ t ⊆ v ∧ u ×ˢ v ⊆ n
state_after: X : Type u
Y : Type v
ι : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
s t✝ : Set X
hs : IsCompact s
t : Set Y
ht : IsCompact t
n : Set (X × Y)
hn : IsOpen n
hp : ∃ i, ((IsOpen i.1 ∧ s ⊆ i.1) ∧ IsOpen i.2 ∧ t ⊆ i.2) ∧ i.1 ×ˢ i.2 ⊆ n
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ s ⊆ u ∧ t ⊆ v ∧ u ×ˢ v ⊆ n

tactic: rcases hp with ⟨⟨u, v⟩, ⟨⟨huo, hsu⟩, hvo, htv⟩, hn⟩
state_before: X : Type u
Y : Type v
ι : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
s t✝ : Set X
hs : IsCompact s
t : Set Y
ht : IsCompact t
n : Set (X × Y)
hn : IsOpen n
hp : ∃ i, ((IsOpen i.1 ∧ s ⊆ i.1) ∧ IsOpen i.2 ∧ t ⊆ i.2) ∧ i.1 ×ˢ i.2 ⊆ n
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ s ⊆ u ∧ t ⊆ v ∧ u ×ˢ v ⊆ n
state_after: case intro.mk.intro.intro.intro.intro
X : Type u
Y : Type v
ι : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
s t✝ : Set X
hs : IsCompact s
t : Set Y
ht : IsCompact t
n : Set (X × Y)
hn✝ : IsOpen n
u : Set X
v : Set Y
hn : (u, v).1 ×ˢ (u, v).2 ⊆ n
huo : IsOpen (u, v).1
hsu : s ⊆ (u, v).1
hvo : IsOpen (u, v).2
htv : t ⊆ (u, v).2
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ s ⊆ u ∧ t ⊆ v ∧ u ×ˢ v ⊆ n

tactic: exact ⟨u, v, huo, hvo, hsu, htv, hn⟩
state_before: case intro.mk.intro.intro.intro.intro
X : Type u
Y : Type v
ι : Type u_1
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
s t✝ : Set X
hs : IsCompact s
t : Set Y
ht : IsCompact t
n : Set (X × Y)
hn✝ : IsOpen n
u : Set X
v : Set Y
hn : (u, v).1 ×ˢ (u, v).2 ⊆ n
huo : IsOpen (u, v).1
hsu : s ⊆ (u, v).1
hvo : IsOpen (u, v).2
htv : t ⊆ (u, v).2
⊢ ∃ u v, IsOpen u ∧ IsOpen v ∧ s ⊆ u ∧ t ⊆ v ∧ u ×ˢ v ⊆ n
state_after: no goals
Theorem: Option.mem_toList
File: Mathlib/Data/Option/Defs.lean

tactic: cases o <;> simp [toList, eq_comm]
state_before: α : Type u_1
β : Type u_2
a : α
o : Option α
⊢ a ∈ o.toList ↔ a ∈ o
state_after: no goals
Theorem: Multiset.union_zero
File: Mathlib/Data/Multiset/Basic.lean

tactic: simp [union_def]
state_before: α : Type u_1
β : Type v
γ : Type u_2
inst✝ : DecidableEq α
s t u : Multiset α
a b : α
⊢ s ∪ 0 = s
state_after: no goals
Theorem: WeierstrassCurve.map_b₄
File: Mathlib/AlgebraicGeometry/EllipticCurve/Weierstrass.lean

tactic: simp only [b₄, map_a₁, map_a₃, map_a₄]
state_before: R : Type u
inst✝¹ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝ : CommRing A
φ : R →+* A
⊢ (W.map φ).b₄ = φ W.b₄
state_after: R : Type u
inst✝¹ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝ : CommRing A
φ : R →+* A
⊢ 2 * φ W.a₄ + φ W.a₁ * φ W.a₃ = φ (2 * W.a₄ + W.a₁ * W.a₃)

tactic: map_simp
state_before: R : Type u
inst✝¹ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝ : CommRing A
φ : R →+* A
⊢ 2 * φ W.a₄ + φ W.a₁ * φ W.a₃ = φ (2 * W.a₄ + W.a₁ * W.a₃)
state_after: no goals
Theorem: Matrix.mulVec_injective_iff
File: Mathlib/LinearAlgebra/Matrix/ToLin.lean

tactic: change Function.Injective (fun x ↦ _) ↔ _
state_before: R✝ : Type u_1
inst✝² : CommSemiring R✝
k : Type u_2
l : Type u_3
m : Type u_4
n : Type u_5
inst✝¹ : Fintype n
R : Type u_6
inst✝ : CommRing R
M : Matrix m n R
⊢ Function.Injective M.mulVec ↔ LinearIndependent R fun i => Mᵀ i
state_after: R✝ : Type u_1
inst✝² : CommSemiring R✝
k : Type u_2
l : Type u_3
m : Type u_4
n : Type u_5
inst✝¹ : Fintype n
R : Type u_6
inst✝ : CommRing R
M : Matrix m n R
⊢ (Function.Injective fun x => M *ᵥ x) ↔ LinearIndependent R fun i => Mᵀ i

tactic: simp_rw [← M.vecMul_transpose, vecMul_injective_iff]
state_before: R✝ : Type u_1
inst✝² : CommSemiring R✝
k : Type u_2
l : Type u_3
m : Type u_4
n : Type u_5
inst✝¹ : Fintype n
R : Type u_6
inst✝ : CommRing R
M : Matrix m n R
⊢ (Function.Injective fun x => M *ᵥ x) ↔ LinearIndependent R fun i => Mᵀ i
state_after: no goals
Theorem: mul_lt_mul''
File: Mathlib/Algebra/Order/Ring/Defs.lean

tactic: classical
exact Decidable.mul_lt_mul''
state_before: α : Type u
β : Type u_1
inst✝ : StrictOrderedSemiring α
a b c d : α
⊢ a < c → b < d → 0 ≤ a → 0 ≤ b → a * b < c * d
state_after: no goals

tactic: exact Decidable.mul_lt_mul''
state_before: α : Type u
β : Type u_1
inst✝ : StrictOrderedSemiring α
a b c d : α
⊢ a < c → b < d → 0 ≤ a → 0 ≤ b → a * b < c * d
state_after: no goals
Theorem: WithTop.coe_mul_eq_bind
File: Mathlib/Algebra/Order/Ring/WithTop.lean

tactic: simp [top_mul, ha]
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : MulZeroClass α
a✝ b : WithTop α
a : α
ha : a ≠ 0
⊢ ↑a * ⊤ = Option.bind ⊤ fun b => Option.some (a * b)
state_after: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : MulZeroClass α
a✝ b : WithTop α
a : α
ha : a ≠ 0
⊢ ⊤ = Option.bind ⊤ fun b => Option.some (a * b)

tactic: rfl
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : MulZeroClass α
a✝ b : WithTop α
a : α
ha : a ≠ 0
⊢ ⊤ = Option.bind ⊤ fun b => Option.some (a * b)
state_after: no goals
Theorem: Ordinal.IsNormal.bsup
File: Mathlib/SetTheory/Ordinal/Arithmetic.lean

tactic: haveI := type_ne_zero_iff_nonempty.1 h
state_before: α✝ : Type u_1
β : Type u_2
γ : Type u_3
r✝ : α✝ → α✝ → Prop
s : β → β → Prop
t : γ → γ → Prop
f : Ordinal.{max u v} → Ordinal.{max u w}
H : IsNormal f
o : Ordinal.{u}
α : Type u
r : α → α → Prop
x✝ : IsWellOrder α r
g : (a : Ordinal.{u}) → a < type r → Ordinal.{max u v}
h : type r ≠ 0
⊢ f ((type r).bsup g) = (type r).bsup fun a h => f (g a h)
state_after: α✝ : Type u_1
β : Type u_2
γ : Type u_3
r✝ : α✝ → α✝ → Prop
s : β → β → Prop
t : γ → γ → Prop
f : Ordinal.{max u v} → Ordinal.{max u w}
H : IsNormal f
o : Ordinal.{u}
α : Type u
r : α → α → Prop
x✝ : IsWellOrder α r
g : (a : Ordinal.{u}) → a < type r → Ordinal.{max u v}
h : type r ≠ 0
this : Nonempty α
⊢ f ((type r).bsup g) = (type r).bsup fun a h => f (g a h)

tactic: rw [← sup_eq_bsup' r, IsNormal.sup.{_, v, w} H, ← sup_eq_bsup' r] <;> rfl
state_before: α✝ : Type u_1
β : Type u_2
γ : Type u_3
r✝ : α✝ → α✝ → Prop
s : β → β → Prop
t : γ → γ → Prop
f : Ordinal.{max u v} → Ordinal.{max u w}
H : IsNormal f
o : Ordinal.{u}
α : Type u
r : α → α → Prop
x✝ : IsWellOrder α r
g : (a : Ordinal.{u}) → a < type r → Ordinal.{max u v}
h : type r ≠ 0
this : Nonempty α
⊢ f ((type r).bsup g) = (type r).bsup fun a h => f (g a h)
state_after: no goals
Theorem: Continuous.matrix_fromBlocks
File: Mathlib/Topology/Instances/Matrix.lean

tactic: rintro (i | i) (j | j) <;> refine Continuous.matrix_elem ?_ i j <;> assumption
state_before: X : Type u_1
α : Type u_2
l : Type u_3
m : Type u_4
n : Type u_5
p : Type u_6
S : Type u_7
R : Type u_8
m' : l → Type u_9
n' : l → Type u_10
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace R
A : X → Matrix n l R
B : X → Matrix n m R
C : X → Matrix p l R
D : X → Matrix p m R
hA : Continuous A
hB : Continuous B
hC : Continuous C
hD : Continuous D
⊢ ∀ (i : n ⊕ p) (j : l ⊕ m), Continuous fun a => fromBlocks (A a) (B a) (C a) (D a) i j
state_after: no goals
Theorem: toIocDiv_add_left
File: Mathlib/Algebra/Order/ToIntervalMod.lean

tactic: rw [add_comm, toIocDiv_add_right]
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b✝ c : α
n : ℤ
a b : α
⊢ toIocDiv hp a (p + b) = toIocDiv hp a b + 1
state_after: no goals
Theorem: FractionalIdeal.mul_def
File: Mathlib/RingTheory/FractionalIdeal/Basic.lean

tactic: simp only [← mul_eq_mul, mul]
state_before: R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : FractionalIdeal S P
⊢ I * J = ⟨↑I * ↑J, ⋯⟩
state_after: no goals
Theorem: ProbabilityTheory.measure_cdf
File: Mathlib/Probability/Cdf.lean

tactic: refine Measure.ext_of_Iic (cdf μ).measure μ (fun a ↦ ?_)
state_before: μ : Measure ℝ
inst✝ : IsProbabilityMeasure μ
⊢ (cdf μ).measure = μ
state_after: μ : Measure ℝ
inst✝ : IsProbabilityMeasure μ
a : ℝ
⊢ (cdf μ).measure (Iic a) = μ (Iic a)

tactic: rw [StieltjesFunction.measure_Iic _ (tendsto_cdf_atBot μ), sub_zero, ofReal_cdf]
state_before: μ : Measure ℝ
inst✝ : IsProbabilityMeasure μ
a : ℝ
⊢ (cdf μ).measure (Iic a) = μ (Iic a)
state_after: no goals
Theorem: Real.zero_rpow
File: Mathlib/Analysis/SpecialFunctions/Pow/Real.lean

tactic: simp [rpow_def, *]
state_before: x✝ y z x : ℝ
h : x ≠ 0
⊢ 0 ^ x = 0
state_after: no goals