tasksource/leandojo huggingface dataset:
Theorem: nilpotent_iff_lowerCentralSeries
File: Mathlib/GroupTheory/Nilpotent.lean

tactic: rw [nilpotent_iff_finite_descending_central_series]
state_before: G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : Normal H
⊢ Group.IsNilpotent G ↔ ∃ n, lowerCentralSeries G n = ⊥

tactic: constructor
state_before: G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : Normal H
⊢ (∃ n H, IsDescendingCentralSeries H ∧ H n = ⊥) ↔ ∃ n, lowerCentralSeries G n = ⊥

tactic: rintro ⟨n, H, ⟨h0, hs⟩, hn⟩
state_before: case mp
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : Normal H
⊢ (∃ n H, IsDescendingCentralSeries H ∧ H n = ⊥) → ∃ n, lowerCentralSeries G n = ⊥

tactic: use n
state_before: case mp.intro.intro.intro.intro
G : Type u_1
inst✝¹ : Group G
H✝ : Subgroup G
inst✝ : Normal H✝
n : ℕ
H : ℕ → Subgroup G
hn : H n = ⊥
h0 : H 0 = ⊤
hs : ∀ (x : G) (n : ℕ), x ∈ H n → ∀ (g : G), x * g * x⁻¹ * g⁻¹ ∈ H (n + 1)
⊢ ∃ n, lowerCentralSeries G n = ⊥

tactic: rw [eq_bot_iff, ← hn]
state_before: case mp.intro.intro.intro.intro
G : Type u_1
inst✝¹ : Group G
H✝ : Subgroup G
inst✝ : Normal H✝
n : ℕ
H : ℕ → Subgroup G
hn : H n = ⊥
h0 : H 0 = ⊤
hs : ∀ (x : G) (n : ℕ), x ∈ H n → ∀ (g : G), x * g * x⁻¹ * g⁻¹ ∈ H (n + 1)
⊢ lowerCentralSeries G n = ⊥

tactic: exact descending_central_series_ge_lower H ⟨h0, hs⟩ n
state_before: case mp.intro.intro.intro.intro
G : Type u_1
inst✝¹ : Group G
H✝ : Subgroup G
inst✝ : Normal H✝
n : ℕ
H : ℕ → Subgroup G
hn : H n = ⊥
h0 : H 0 = ⊤
hs : ∀ (x : G) (n : ℕ), x ∈ H n → ∀ (g : G), x * g * x⁻¹ * g⁻¹ ∈ H (n + 1)
⊢ lowerCentralSeries G n ≤ H n

tactic: rintro ⟨n, hn⟩
state_before: case mpr
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : Normal H
⊢ (∃ n, lowerCentralSeries G n = ⊥) → ∃ n H, IsDescendingCentralSeries H ∧ H n = ⊥

tactic: exact ⟨n, lowerCentralSeries G, lowerCentralSeries_isDescendingCentralSeries, hn⟩
state_before: case mpr.intro
G : Type u_1
inst✝¹ : Group G
H : Subgroup G
inst✝ : Normal H
n : ℕ
hn : lowerCentralSeries G n = ⊥
⊢ ∃ n H, IsDescendingCentralSeries H ∧ H n = ⊥
Theorem: ZFSet.mem_of_mem_sInter
File: Mathlib/SetTheory/ZFC/Basic.lean

tactic: rcases eq_empty_or_nonempty x with (rfl | hx)
state_before: x y z : ZFSet
hy : y ∈ ⋂₀ x
hz : z ∈ x
⊢ y ∈ z

tactic: exact (not_mem_empty z hz).elim
state_before: case inl
y z : ZFSet
hy : y ∈ ⋂₀ ∅
hz : z ∈ ∅
⊢ y ∈ z

tactic: exact (mem_sInter hx).1 hy z hz
state_before: case inr
x y z : ZFSet
hy : y ∈ ⋂₀ x
hz : z ∈ x
hx : ZFSet.Nonempty x
⊢ y ∈ z
Theorem: Subgroup.noncommPiCoprod_range
File: Mathlib/GroupTheory/NoncommPiCoprod.lean

tactic: simp [noncommPiCoprod, MonoidHom.noncommPiCoprod_range]
state_before: G : Type u_1
inst✝ : Group G
ι : Type u_2
hdec : DecidableEq ι
hfin : Fintype ι
H : ι → Subgroup G
f g : (i : ι) → { x // x ∈ H i }
hcomm : ∀ (i j : ι), i ≠ j → ∀ (x y : G), x ∈ H i → y ∈ H j → Commute x y
⊢ MonoidHom.range (noncommPiCoprod hcomm) = ⨆ (i : ι), H i
Theorem: Ideal.le_mul_of_no_prime_factors
File: Mathlib/RingTheory/DedekindDomain/Ideal.lean

tactic: simp only [← Ideal.dvd_iff_le] at coprime hJ hK ⊢
state_before: R : Type u_1
A : Type ?u.1183773
K✝ : Type ?u.1183776
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Field K✝
inst✝² : IsDomain A
inst✝¹ : IsDomain R
inst✝ : IsDedekindDomain R
I J K : Ideal R
coprime : ∀ (P : Ideal R), J ≤ P → K ≤ P → ¬IsPrime P
hJ : I ≤ J
hK : I ≤ K
⊢ I ≤ J * K

tactic: by_cases hJ0 : J = 0
state_before: R : Type u_1
A : Type ?u.1183773
K✝ : Type ?u.1183776
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Field K✝
inst✝² : IsDomain A
inst✝¹ : IsDomain R
inst✝ : IsDedekindDomain R
I J K : Ideal R
coprime : ∀ (P : Ideal R), P ∣ J → P ∣ K → ¬IsPrime P
hJ : J ∣ I
hK : K ∣ I
⊢ J * K ∣ I

tactic: obtain ⟨I', rfl⟩ := hK
state_before: case neg
R : Type u_1
A : Type ?u.1183773
K✝ : Type ?u.1183776
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Field K✝
inst✝² : IsDomain A
inst✝¹ : IsDomain R
inst✝ : IsDedekindDomain R
I J K : Ideal R
coprime : ∀ (P : Ideal R), P ∣ J → P ∣ K → ¬IsPrime P
hJ : J ∣ I
hK : K ∣ I
hJ0 : ¬J = 0
⊢ J * K ∣ I

tactic: rw [mul_comm]
state_before: case neg.intro
R : Type u_1
A : Type ?u.1183773
K✝ : Type ?u.1183776
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Field K✝
inst✝² : IsDomain A
inst✝¹ : IsDomain R
inst✝ : IsDedekindDomain R
J K : Ideal R
coprime : ∀ (P : Ideal R), P ∣ J → P ∣ K → ¬IsPrime P
hJ0 : ¬J = 0
I' : Ideal R
hJ : J ∣ K * I'
⊢ J * K ∣ K * I'

tactic: refine mul_dvd_mul_left K
  (UniqueFactorizationMonoid.dvd_of_dvd_mul_right_of_no_prime_factors (b := K) hJ0 ?_ hJ)
state_before: case neg.intro
R : Type u_1
A : Type ?u.1183773
K✝ : Type ?u.1183776
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Field K✝
inst✝² : IsDomain A
inst✝¹ : IsDomain R
inst✝ : IsDedekindDomain R
J K : Ideal R
coprime : ∀ (P : Ideal R), P ∣ J → P ∣ K → ¬IsPrime P
hJ0 : ¬J = 0
I' : Ideal R
hJ : J ∣ K * I'
⊢ K * J ∣ K * I'

tactic: exact fun hPJ hPK => mt Ideal.isPrime_of_prime (coprime _ hPJ hPK)
state_before: case neg.intro
R : Type u_1
A : Type ?u.1183773
K✝ : Type ?u.1183776
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Field K✝
inst✝² : IsDomain A
inst✝¹ : IsDomain R
inst✝ : IsDedekindDomain R
J K : Ideal R
coprime : ∀ (P : Ideal R), P ∣ J → P ∣ K → ¬IsPrime P
hJ0 : ¬J = 0
I' : Ideal R
hJ : J ∣ K * I'
⊢ ∀ {d : Ideal R}, d ∣ J → d ∣ K → ¬Prime d

tactic: simpa only [hJ0, MulZeroClass.zero_mul] using hJ
state_before: case pos
R : Type u_1
A : Type ?u.1183773
K✝ : Type ?u.1183776
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Field K✝
inst✝² : IsDomain A
inst✝¹ : IsDomain R
inst✝ : IsDedekindDomain R
I J K : Ideal R
coprime : ∀ (P : Ideal R), P ∣ J → P ∣ K → ¬IsPrime P
hJ : J ∣ I
hK : K ∣ I
hJ0 : J = 0
⊢ J * K ∣ I
Theorem: BilinForm.comp_id_id
File: Mathlib/LinearAlgebra/BilinearForm.lean

tactic: ext
state_before: R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type ?u.519958
M₁ : Type ?u.519961
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type ?u.520570
M₂ : Type ?u.520573
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type ?u.520760
M₃ : Type ?u.520763
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type ?u.521351
K : Type ?u.521354
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B : BilinForm R M
⊢ comp B LinearMap.id LinearMap.id = B

tactic: rfl
state_before: case H
R : Type u_1
M : Type u_2
inst✝¹⁶ : Semiring R
inst✝¹⁵ : AddCommMonoid M
inst✝¹⁴ : Module R M
R₁ : Type ?u.519958
M₁ : Type ?u.519961
inst✝¹³ : Ring R₁
inst✝¹² : AddCommGroup M₁
inst✝¹¹ : Module R₁ M₁
R₂ : Type ?u.520570
M₂ : Type ?u.520573
inst✝¹⁰ : CommSemiring R₂
inst✝⁹ : AddCommMonoid M₂
inst✝⁸ : Module R₂ M₂
R₃ : Type ?u.520760
M₃ : Type ?u.520763
inst✝⁷ : CommRing R₃
inst✝⁶ : AddCommGroup M₃
inst✝⁵ : Module R₃ M₃
V : Type ?u.521351
K : Type ?u.521354
inst✝⁴ : Field K
inst✝³ : AddCommGroup V
inst✝² : Module K V
B✝ : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
B : BilinForm R M
x✝ y✝ : M
⊢ bilin (comp B LinearMap.id LinearMap.id) x✝ y✝ = bilin B x✝ y✝
Theorem: RatFunc.mk_eq_mk
File: Mathlib/FieldTheory/RatFunc.lean

tactic: rw [mk_def_of_ne _ hq, mk_def_of_ne _ hq', ofFractionRing_injective.eq_iff,
  IsLocalization.mk'_eq_iff_eq', (IsFractionRing.injective K[X] (FractionRing K[X])).eq_iff]
state_before: K : Type u
inst✝¹ : CommRing K
inst✝ : IsDomain K
p q p' q' : K[X]
hq : q ≠ 0
hq' : q' ≠ 0
⊢ RatFunc.mk p q = RatFunc.mk p' q' ↔ p * q' = p' * q
Theorem: Finset.biUnion_inter
File: Mathlib/Data/Finset/Basic.lean

tactic: ext x
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.509507
inst✝ : DecidableEq β
s✝ s₁ s₂ : Finset α
t✝ t₁ t₂ : α → Finset β
s : Finset α
f : α → Finset β
t : Finset β
⊢ Finset.biUnion s f ∩ t = Finset.biUnion s fun x => f x ∩ t

tactic: simp only [mem_biUnion, mem_inter]
state_before: case a
α : Type u_1
β : Type u_2
γ : Type ?u.509507
inst✝ : DecidableEq β
s✝ s₁ s₂ : Finset α
t✝ t₁ t₂ : α → Finset β
s : Finset α
f : α → Finset β
t : Finset β
x : β
⊢ x ∈ Finset.biUnion s f ∩ t ↔ x ∈ Finset.biUnion s fun x => f x ∩ t

tactic: tauto
state_before: case a
α : Type u_1
β : Type u_2
γ : Type ?u.509507
inst✝ : DecidableEq β
s✝ s₁ s₂ : Finset α
t✝ t₁ t₂ : α → Finset β
s : Finset α
f : α → Finset β
t : Finset β
x : β
⊢ (∃ a, a ∈ s ∧ x ∈ f a) ∧ x ∈ t ↔ ∃ a, a ∈ s ∧ x ∈ f a ∧ x ∈ t
Theorem: IsOpen.isClopenable
File: Mathlib/Topology/MetricSpace/Polish.lean

tactic: simpa using hs.isClosed_compl.isClopenable.compl
state_before: α : Type u_1
β : Type ?u.68026
inst✝¹ : TopologicalSpace α
inst✝ : PolishSpace α
s : Set α
hs : IsOpen s
⊢ IsClopenable s
Theorem: ContinuousOn.measurableEmbedding
File: Mathlib/MeasureTheory/Constructions/Polish.lean

tactic: intro u hu
state_before: α : Type ?u.323269
inst✝⁵ : TopologicalSpace α
ι : Type ?u.323275
γ : Type u_1
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
inst✝³ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_2
tβ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
f : γ → β
hs : MeasurableSet s
f_cont : ContinuousOn f s
f_inj : InjOn f s
⊢ ∀ ⦃s_1 : Set ↑s⦄, MeasurableSet s_1 → MeasurableSet (restrict s f '' s_1)

tactic: have A : MeasurableSet (((↑) : s → γ) '' u) :=
  (MeasurableEmbedding.subtype_coe hs).measurableSet_image.2 hu
state_before: α : Type ?u.323269
inst✝⁵ : TopologicalSpace α
ι : Type ?u.323275
γ : Type u_1
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
inst✝³ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_2
tβ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
f : γ → β
hs : MeasurableSet s
f_cont : ContinuousOn f s
f_inj : InjOn f s
u : Set ↑s
hu : MeasurableSet u
⊢ MeasurableSet (restrict s f '' u)

tactic: have B : MeasurableSet (f '' (((↑) : s → γ) '' u)) :=
  A.image_of_continuousOn_injOn (f_cont.mono (Subtype.coe_image_subset s u))
    (f_inj.mono (Subtype.coe_image_subset s u))
state_before: α : Type ?u.323269
inst✝⁵ : TopologicalSpace α
ι : Type ?u.323275
γ : Type u_1
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
inst✝³ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_2
tβ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
f : γ → β
hs : MeasurableSet s
f_cont : ContinuousOn f s
f_inj : InjOn f s
u : Set ↑s
hu : MeasurableSet u
A : MeasurableSet (Subtype.val '' u)
⊢ MeasurableSet (restrict s f '' u)

tactic: rwa [← image_comp] at B
state_before: α : Type ?u.323269
inst✝⁵ : TopologicalSpace α
ι : Type ?u.323275
γ : Type u_1
tγ : TopologicalSpace γ
inst✝⁴ : PolishSpace γ
inst✝³ : MeasurableSpace γ
hγb : BorelSpace γ
β : Type u_2
tβ : TopologicalSpace β
inst✝² : T2Space β
inst✝¹ : MeasurableSpace β
inst✝ : BorelSpace β
s : Set γ
f : γ → β
hs : MeasurableSet s
f_cont : ContinuousOn f s
f_inj : InjOn f s
u : Set ↑s
hu : MeasurableSet u
A : MeasurableSet (Subtype.val '' u)
B : MeasurableSet (f '' (Subtype.val '' u))
⊢ MeasurableSet (restrict s f '' u)
Theorem: strictConvexOn_of_deriv2_pos
File: Mathlib/Analysis/Calculus/MeanValue.lean

tactic: rwa [interior_interior]
state_before: E : Type ?u.460143
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type ?u.460239
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
D : Set ℝ
hD : Convex ℝ D
f : ℝ → ℝ
hf : ContinuousOn f D
hf'' : ∀ (x : ℝ), x ∈ interior D → 0 < (deriv^[2]) f x
⊢ ∀ (x : ℝ), x ∈ interior (interior D) → 0 < deriv (deriv f) x
Theorem: Nat.psub_eq_none
File: Mathlib/Data/Nat/PSub.lean

tactic: cases s : psub m n <;> simp [eq_comm]
state_before: m n : ℕ
⊢ psub m n = none ↔ m < n

tactic: show m < n
state_before: case none
m n : ℕ
s : psub m n = none
⊢ m < n

tactic: refine' lt_of_not_ge fun h => _
state_before: case none
m n : ℕ
s : psub m n = none
⊢ m < n

tactic: cases' le.dest h with k e
state_before: case none
m n : ℕ
s : psub m n = none
h : m ≥ n
⊢ False

tactic: injection s.symm.trans (psub_eq_some.2 <| (add_comm _ _).trans e)
state_before: case none.intro
m n : ℕ
s : psub m n = none
h : m ≥ n
k : ℕ
e : n + k = m
⊢ False

tactic: show n ≤ m
state_before: case some
m n val✝ : ℕ
s : psub m n = some val✝
⊢ n ≤ m

tactic: rw [← psub_eq_some.1 s]
state_before: case some
m n val✝ : ℕ
s : psub m n = some val✝
⊢ n ≤ m

tactic: apply Nat.le_add_left
state_before: case some
m n val✝ : ℕ
s : psub m n = some val✝
⊢ n ≤ val✝ + n
Theorem: CofiniteTopology.nhds_eq
File: Mathlib/Topology/Constructions.lean

tactic: ext U
state_before: α : Type u
β : Type v
γ : Type ?u.18094
δ : Type ?u.18097
ε : Type ?u.18100
ζ : Type ?u.18103
a : CofiniteTopology α
⊢ 𝓝 a = pure a ⊔ cofinite

tactic: rw [mem_nhds_iff]
state_before: case a
α : Type u
β : Type v
γ : Type ?u.18094
δ : Type ?u.18097
ε : Type ?u.18100
ζ : Type ?u.18103
a : CofiniteTopology α
U : Set (CofiniteTopology α)
⊢ U ∈ 𝓝 a ↔ U ∈ pure a ⊔ cofinite

tactic: constructor
state_before: case a
α : Type u
β : Type v
γ : Type ?u.18094
δ : Type ?u.18097
ε : Type ?u.18100
ζ : Type ?u.18103
a : CofiniteTopology α
U : Set (CofiniteTopology α)
⊢ (∃ t, t ⊆ U ∧ IsOpen t ∧ a ∈ t) ↔ U ∈ pure a ⊔ cofinite

tactic: rintro ⟨V, hVU, V_op, haV⟩
state_before: case a.mp
α : Type u
β : Type v
γ : Type ?u.18094
δ : Type ?u.18097
ε : Type ?u.18100
ζ : Type ?u.18103
a : CofiniteTopology α
U : Set (CofiniteTopology α)
⊢ (∃ t, t ⊆ U ∧ IsOpen t ∧ a ∈ t) → U ∈ pure a ⊔ cofinite

tactic: exact mem_sup.mpr ⟨hVU haV, mem_of_superset (V_op ⟨_, haV⟩) hVU⟩
state_before: case a.mp.intro.intro.intro
α : Type u
β : Type v
γ : Type ?u.18094
δ : Type ?u.18097
ε : Type ?u.18100
ζ : Type ?u.18103
a : CofiniteTopology α
U V : Set (CofiniteTopology α)
hVU : V ⊆ U
V_op : IsOpen V
haV : a ∈ V
⊢ U ∈ pure a ⊔ cofinite

tactic: rintro ⟨hU : a ∈ U, hU' : Uᶜ.Finite⟩
state_before: case a.mpr
α : Type u
β : Type v
γ : Type ?u.18094
δ : Type ?u.18097
ε : Type ?u.18100
ζ : Type ?u.18103
a : CofiniteTopology α
U : Set (CofiniteTopology α)
⊢ U ∈ pure a ⊔ cofinite → ∃ t, t ⊆ U ∧ IsOpen t ∧ a ∈ t

tactic: exact ⟨U, Subset.rfl, fun _ => hU', hU⟩
state_before: case a.mpr.intro
α : Type u
β : Type v
γ : Type ?u.18094
δ : Type ?u.18097
ε : Type ?u.18100
ζ : Type ?u.18103
a : CofiniteTopology α
U : Set (CofiniteTopology α)
hU : a ∈ U
hU' : Set.Finite (Uᶜ)
⊢ ∃ t, t ⊆ U ∧ IsOpen t ∧ a ∈ t
Theorem: Rat.mk_denom_ne_zero_of_ne_zero
File: Mathlib/Data/Rat/Defs.lean

tactic: simpa [this] using hqnd
state_before: a b c q : ℚ
n d : ℤ
hq : q ≠ 0
hqnd : q = n /. d
this : d = 0
⊢ q = 0
Theorem: MeasureTheory.Content.sup_le
File: Mathlib/MeasureTheory/Measure/Content.lean

tactic: simp only [apply_eq_coe_toFun]
state_before: G : Type w
inst✝ : TopologicalSpace G
μ : Content G
K₁ K₂ : Compacts G
⊢ (fun s => ↑(toFun μ s)) (K₁ ⊔ K₂) ≤ (fun s => ↑(toFun μ s)) K₁ + (fun s => ↑(toFun μ s)) K₂

tactic: norm_cast
state_before: G : Type w
inst✝ : TopologicalSpace G
μ : Content G
K₁ K₂ : Compacts G
⊢ ↑(toFun μ (K₁ ⊔ K₂)) ≤ ↑(toFun μ K₁) + ↑(toFun μ K₂)

tactic: exact μ.sup_le' _ _
state_before: G : Type w
inst✝ : TopologicalSpace G
μ : Content G
K₁ K₂ : Compacts G
⊢ toFun μ (K₁ ⊔ K₂) ≤ toFun μ K₁ + toFun μ K₂
Theorem: Equiv.Perm.Disjoint.support_mul
File: Mathlib/GroupTheory/Perm/Support.lean

tactic: refine' le_antisymm (support_mul_le _ _) fun a => _
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f g : Perm α
h : Disjoint f g
⊢ support (f * g) = support f ∪ support g

tactic: rw [mem_union, mem_support, mem_support, mem_support, mul_apply, ← not_and_or, not_imp_not]
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f g : Perm α
h : Disjoint f g
a : α
⊢ a ∈ support f ∪ support g → a ∈ support (f * g)

tactic: exact
  (h a).elim (fun hf h => ⟨hf, f.apply_eq_iff_eq.mp (h.trans hf.symm)⟩) fun hg h =>
    ⟨(congr_arg f hg).symm.trans h, hg⟩
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f g : Perm α
h : Disjoint f g
a : α
⊢ ↑f (↑g a) = a → ↑f a = a ∧ ↑g a = a
Theorem: rank_finsupp_self
File: Mathlib/LinearAlgebra/FreeModule/Rank.lean

tactic: simp [rank_finsupp]
state_before: R : Type u
M : Type v
N : Type w
inst✝⁷ : Ring R
inst✝⁶ : StrongRankCondition R
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
inst✝³ : Module.Free R M
inst✝² : AddCommGroup N
inst✝¹ : Module R N
inst✝ : Module.Free R N
ι : Type w
⊢ Module.rank R (ι →₀ R) = Cardinal.lift (#ι)
Theorem: Polynomial.mem_nthRootsFinset
File: Mathlib/Data/Polynomial/RingDivision.lean

tactic: rw [nthRootsFinset, mem_toFinset, mem_nthRoots h]
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]
n : ℕ
h : 0 < n
x : R
⊢ x ∈ nthRootsFinset n R ↔ x ^ n = 1
Theorem: Rat.preimage_cast_Ico
File: Mathlib/Data/Rat/Cast.lean

tactic: ext x
state_before: F : Type ?u.70752
ι : Type ?u.70755
α : Type ?u.70758
β : Type ?u.70761
K : Type u_1
inst✝ : LinearOrderedField K
a b : ℚ
⊢ Rat.cast ⁻¹' Ico ↑a ↑b = Ico a b

tactic: simp
state_before: case h
F : Type ?u.70752
ι : Type ?u.70755
α : Type ?u.70758
β : Type ?u.70761
K : Type u_1
inst✝ : LinearOrderedField K
a b x : ℚ
⊢ x ∈ Rat.cast ⁻¹' Ico ↑a ↑b ↔ x ∈ Ico a b
Theorem: List.rotate'_zero
File: Mathlib/Data/List/Rotate.lean

tactic: cases l <;> rfl
state_before: α : Type u
l : List α
⊢ rotate' l 0 = l
Theorem: disjoint_iSup₂_iff
File: Mathlib/Order/CompleteBooleanAlgebra.lean

tactic: simp_rw [disjoint_iSup_iff]
state_before: α : Type u
β : Type v
ι : Sort w
κ : ι → Sort u_1
inst✝ : Frame α
s t : Set α
a b : α
f : (i : ι) → κ i → α
⊢ Disjoint a (⨆ (i : ι) (j : κ i), f i j) ↔ ∀ (i : ι) (j : κ i), Disjoint a (f i j)
Theorem: min_choice
File: Mathlib/Order/MinMax.lean

tactic: cases le_total a b <;> simp [*]
state_before: α : Type u
β : Type v
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
s : Set α
a✝ b✝ c d a b : α
⊢ min a b = a ∨ min a b = b
Theorem: NNReal.coe_iSup
File: Mathlib/Data/Real/NNReal.lean

tactic: rw [iSup, iSup, coe_sSup, ← Set.range_comp]
state_before: ι : Sort u_1
s : ι → ℝ≥0
⊢ ↑(⨆ (i : ι), s i) = ⨆ (i : ι), ↑(s i)

tactic: rfl
state_before: ι : Sort u_1
s : ι → ℝ≥0
⊢ sSup (Set.range (toReal ∘ fun i => s i)) = sSup (Set.range fun i => ↑(s i))
Theorem: UniqueFactorizationMonoid.prime_of_normalized_factor
File: Mathlib/RingTheory/UniqueFactorizationDomain.lean

tactic: rw [normalizedFactors, factors]
state_before: α : Type u_1
inst✝³ : CancelCommMonoidWithZero α
inst✝² : DecidableEq α
inst✝¹ : NormalizationMonoid α
inst✝ : UniqueFactorizationMonoid α
a : α
⊢ ∀ (x : α), x ∈ normalizedFactors a → Prime x

tactic: split_ifs with ane0
state_before: α : Type u_1
inst✝³ : CancelCommMonoidWithZero α
inst✝² : DecidableEq α
inst✝¹ : NormalizationMonoid α
inst✝ : UniqueFactorizationMonoid α
a : α
⊢ ∀ (x : α),
    x ∈
        Multiset.map (↑normalize)
          (if h : a = 0 then 0 else Classical.choose (_ : ∃ f, (∀ (b : α), b ∈ f → Prime b) ∧ Multiset.prod f ~ᵤ a)) →
      Prime x

tactic: intro x hx
state_before: case inr
α : Type u_1
inst✝³ : CancelCommMonoidWithZero α
inst✝² : DecidableEq α
inst✝¹ : NormalizationMonoid α
inst✝ : UniqueFactorizationMonoid α
a : α
ane0 : ¬a = 0
⊢ ∀ (x : α),
    x ∈
        Multiset.map (fun x => ↑normalize x)
          (Classical.choose (_ : ∃ f, (∀ (b : α), b ∈ f → Prime b) ∧ Multiset.prod f ~ᵤ a)) →
      Prime x

tactic: rcases Multiset.mem_map.1 hx with ⟨y, ⟨hy, rfl⟩⟩
state_before: case inr
α : Type u_1
inst✝³ : CancelCommMonoidWithZero α
inst✝² : DecidableEq α
inst✝¹ : NormalizationMonoid α
inst✝ : UniqueFactorizationMonoid α
a : α
ane0 : ¬a = 0
x : α
hx :
  x ∈
    Multiset.map (fun x => ↑normalize x)
      (Classical.choose (_ : ∃ f, (∀ (b : α), b ∈ f → Prime b) ∧ Multiset.prod f ~ᵤ a))
⊢ Prime x

tactic: rw [(normalize_associated _).prime_iff]
state_before: case inr.intro.intro
α : Type u_1
inst✝³ : CancelCommMonoidWithZero α
inst✝² : DecidableEq α
inst✝¹ : NormalizationMonoid α
inst✝ : UniqueFactorizationMonoid α
a : α
ane0 : ¬a = 0
y : α
hy : y ∈ Classical.choose (_ : ∃ f, (∀ (b : α), b ∈ f → Prime b) ∧ Multiset.prod f ~ᵤ a)
hx :
  ↑normalize y ∈
    Multiset.map (fun x => ↑normalize x)
      (Classical.choose (_ : ∃ f, (∀ (b : α), b ∈ f → Prime b) ∧ Multiset.prod f ~ᵤ a))
⊢ Prime (↑normalize y)

tactic: exact (Classical.choose_spec (UniqueFactorizationMonoid.exists_prime_factors a ane0)).1 y hy
state_before: case inr.intro.intro
α : Type u_1
inst✝³ : CancelCommMonoidWithZero α
inst✝² : DecidableEq α
inst✝¹ : NormalizationMonoid α
inst✝ : UniqueFactorizationMonoid α
a : α
ane0 : ¬a = 0
y : α
hy : y ∈ Classical.choose (_ : ∃ f, (∀ (b : α), b ∈ f → Prime b) ∧ Multiset.prod f ~ᵤ a)
hx :
  ↑normalize y ∈
    Multiset.map (fun x => ↑normalize x)
      (Classical.choose (_ : ∃ f, (∀ (b : α), b ∈ f → Prime b) ∧ Multiset.prod f ~ᵤ a))
⊢ Prime y

tactic: simp
state_before: case inl
α : Type u_1
inst✝³ : CancelCommMonoidWithZero α
inst✝² : DecidableEq α
inst✝¹ : NormalizationMonoid α
inst✝ : UniqueFactorizationMonoid α
a : α
ane0 : a = 0
⊢ ∀ (x : α), x ∈ Multiset.map (fun x => ↑normalize x) 0 → Prime x
Theorem: Set.biInter_iUnion
File: Mathlib/Data/Set/Lattice.lean

tactic: simp [@iInter_comm _ ι]
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.174319
ι : Sort u_3
ι' : Sort ?u.174325
ι₂ : Sort ?u.174328
κ : ι → Sort ?u.174333
κ₁ : ι → Sort ?u.174338
κ₂ : ι → Sort ?u.174343
κ' : ι' → Sort ?u.174348
s : ι → Set α
t : α → Set β
⊢ (⋂ (x : α) (_ : x ∈ ⋃ (i : ι), s i), t x) = ⋂ (i : ι) (x : α) (_ : x ∈ s i), t x
Theorem: tsum_zero'
File: Mathlib/Topology/Algebra/InfiniteSum/Basic.lean

tactic: classical
  rw [tsum_def, dif_pos summable_zero]
  suffices ∀ x : α, HasSum (fun _ : β => (0 : α)) x → x = 0 by
    exact this _ (Classical.choose_spec _)
  intro x hx
  contrapose! hx
  simp only [HasSum, tendsto_nhds, Finset.sum_const_zero, Filter.mem_atTop_sets, ge_iff_le,
    Finset.le_eq_subset, Set.mem_preimage, not_forall, not_exists, exists_prop, exists_and_right]
  refine ⟨{0}ᶜ, ⟨isOpen_compl_iff.mpr hz, by simpa [hx] using fun x ↦ ⟨x, subset_refl _⟩⟩⟩
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.304545
δ : Type ?u.304548
inst✝¹ : AddCommMonoid α
inst✝ : TopologicalSpace α
hz : IsClosed {0}
⊢ (∑' (x : β), 0) = 0

tactic: rw [tsum_def, dif_pos summable_zero]
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.304545
δ : Type ?u.304548
inst✝¹ : AddCommMonoid α
inst✝ : TopologicalSpace α
hz : IsClosed {0}
⊢ (∑' (x : β), 0) = 0

tactic: suffices ∀ x : α, HasSum (fun _ : β => (0 : α)) x → x = 0 by
  exact this _ (Classical.choose_spec _)
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.304545
δ : Type ?u.304548
inst✝¹ : AddCommMonoid α
inst✝ : TopologicalSpace α
hz : IsClosed {0}
⊢ Classical.choose (_ : Summable fun x => 0) = 0

tactic: intro x hx
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.304545
δ : Type ?u.304548
inst✝¹ : AddCommMonoid α
inst✝ : TopologicalSpace α
hz : IsClosed {0}
⊢ ∀ (x : α), HasSum (fun x => 0) x → x = 0

tactic: contrapose! hx
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.304545
δ : Type ?u.304548
inst✝¹ : AddCommMonoid α
inst✝ : TopologicalSpace α
hz : IsClosed {0}
x : α
hx : HasSum (fun x => 0) x
⊢ x = 0

tactic: simp only [HasSum, tendsto_nhds, Finset.sum_const_zero, Filter.mem_atTop_sets, ge_iff_le,
  Finset.le_eq_subset, Set.mem_preimage, not_forall, not_exists, exists_prop, exists_and_right]
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.304545
δ : Type ?u.304548
inst✝¹ : AddCommMonoid α
inst✝ : TopologicalSpace α
hz : IsClosed {0}
x : α
hx : x ≠ 0
⊢ ¬HasSum (fun x => 0) x

tactic: refine ⟨{0}ᶜ, ⟨isOpen_compl_iff.mpr hz, by simpa [hx] using fun x ↦ ⟨x, subset_refl _⟩⟩⟩
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.304545
δ : Type ?u.304548
inst✝¹ : AddCommMonoid α
inst✝ : TopologicalSpace α
hz : IsClosed {0}
x : α
hx : x ≠ 0
⊢ ∃ x_1, IsOpen x_1 ∧ x ∈ x_1 ∧ ∀ (x : Finset β), (∃ x_2, x ⊆ x_2) ∧ ¬0 ∈ x_1

tactic: exact this _ (Classical.choose_spec _)
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.304545
δ : Type ?u.304548
inst✝¹ : AddCommMonoid α
inst✝ : TopologicalSpace α
hz : IsClosed {0}
this : ∀ (x : α), HasSum (fun x => 0) x → x = 0
⊢ Classical.choose (_ : Summable fun x => 0) = 0

tactic: simpa [hx] using fun x ↦ ⟨x, subset_refl _⟩
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.304545
δ : Type ?u.304548
inst✝¹ : AddCommMonoid α
inst✝ : TopologicalSpace α
hz : IsClosed {0}
x : α
hx : x ≠ 0
⊢ x ∈ {0}ᶜ ∧ ∀ (x : Finset β), (∃ x_1, x ⊆ x_1) ∧ ¬0 ∈ {0}ᶜ