tasksource/leandojo huggingface dataset:
Theorem: AddLECancellable.lt_add_of_tsub_lt_left
File: Mathlib/Algebra/Order/Sub/Defs.lean

tactic: rw [lt_iff_le_and_ne, ← tsub_le_iff_left]
state_before: α : Type u_1
β : Type ?u.38298
inst✝³ : PartialOrder α
inst✝² : AddCommSemigroup α
inst✝¹ : Sub α
inst✝ : OrderedSub α
a b c d : α
hb : AddLECancellable b
h : a - b < c
⊢ a < b + c

tactic: refine' ⟨h.le, _⟩
state_before: α : Type u_1
β : Type ?u.38298
inst✝³ : PartialOrder α
inst✝² : AddCommSemigroup α
inst✝¹ : Sub α
inst✝ : OrderedSub α
a b c d : α
hb : AddLECancellable b
h : a - b < c
⊢ a - b ≤ c ∧ a ≠ b + c

tactic: rintro rfl
state_before: α : Type u_1
β : Type ?u.38298
inst✝³ : PartialOrder α
inst✝² : AddCommSemigroup α
inst✝¹ : Sub α
inst✝ : OrderedSub α
a b c d : α
hb : AddLECancellable b
h : a - b < c
⊢ a ≠ b + c

tactic: simp [hb] at h
state_before: α : Type u_1
β : Type ?u.38298
inst✝³ : PartialOrder α
inst✝² : AddCommSemigroup α
inst✝¹ : Sub α
inst✝ : OrderedSub α
b c d : α
hb : AddLECancellable b
h : b + c - b < c
⊢ False
Theorem: isPreirreducible_iff_closed_union_closed
File: Mathlib/Topology/SubsetProperties.lean

tactic: refine compl_surjective.forall.trans <| forall_congr' fun z₁ => compl_surjective.forall.trans <|
  forall_congr' fun z₂ => ?_
state_before: α : Type u
β : Type v
ι : Type ?u.198320
π : ι → Type ?u.198325
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
s✝ t s : Set α
⊢ IsPreirreducible s ↔ ∀ (z₁ z₂ : Set α), IsClosed z₁ → IsClosed z₂ → s ⊆ z₁ ∪ z₂ → s ⊆ z₁ ∨ s ⊆ z₂

tactic: simp only [isOpen_compl_iff, ← compl_union, inter_compl_nonempty_iff]
state_before: α : Type u
β : Type v
ι : Type ?u.198320
π : ι → Type ?u.198325
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
s✝ t s z₁ z₂ : Set α
⊢ IsOpen (z₁ᶜ) → IsOpen (z₂ᶜ) → Set.Nonempty (s ∩ z₁ᶜ) → Set.Nonempty (s ∩ z₂ᶜ) → Set.Nonempty (s ∩ (z₁ᶜ ∩ z₂ᶜ)) ↔
    IsClosed z₁ → IsClosed z₂ → s ⊆ z₁ ∪ z₂ → s ⊆ z₁ ∨ s ⊆ z₂

tactic: refine forall₂_congr fun _ _ => ?_
state_before: α : Type u
β : Type v
ι : Type ?u.198320
π : ι → Type ?u.198325
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
s✝ t s z₁ z₂ : Set α
⊢ IsClosed z₁ → IsClosed z₂ → ¬s ⊆ z₁ → ¬s ⊆ z₂ → ¬s ⊆ z₁ ∪ z₂ ↔
    IsClosed z₁ → IsClosed z₂ → s ⊆ z₁ ∪ z₂ → s ⊆ z₁ ∨ s ⊆ z₂

tactic: rw [← and_imp, ← not_or, not_imp_not]
state_before: α : Type u
β : Type v
ι : Type ?u.198320
π : ι → Type ?u.198325
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
s✝ t s z₁ z₂ : Set α
x✝¹ : IsClosed z₁
x✝ : IsClosed z₂
⊢ ¬s ⊆ z₁ → ¬s ⊆ z₂ → ¬s ⊆ z₁ ∪ z₂ ↔ s ⊆ z₁ ∪ z₂ → s ⊆ z₁ ∨ s ⊆ z₂
Theorem: Matrix.lie_transpose
File: Mathlib/Algebra/Lie/SkewAdjoint.lean

tactic: simp
state_before: R : Type u
n : Type w
inst✝² : CommRing R
inst✝¹ : DecidableEq n
inst✝ : Fintype n
J A B : Matrix n n R
⊢ (A * B - B * A)ᵀ = Bᵀ * Aᵀ - Aᵀ * Bᵀ
Theorem: Complex.AbsTheory.abs_conj
File: Mathlib/Data/Complex/Basic.lean

tactic: simp
state_before: z : ℂ
⊢ Real.sqrt (↑normSq (↑(starRingEnd ℂ) z)) = Real.sqrt (↑normSq z)
Theorem: MulSalemSpencer.mul_left
File: Mathlib/Combinatorics/Additive/SalemSpencer.lean

tactic: rintro _ _ _ ⟨b, hb, rfl⟩ ⟨c, hc, rfl⟩ ⟨d, hd, rfl⟩ h
state_before: F : Type ?u.77288
α : Type u_1
β : Type ?u.77294
𝕜 : Type ?u.77297
E : Type ?u.77300
inst✝ : CancelCommMonoid α
s : Set α
a : α
hs : MulSalemSpencer s
⊢ MulSalemSpencer ((fun x x_1 => x * x_1) a '' s)

tactic: rw [mul_mul_mul_comm, mul_mul_mul_comm a d] at h
state_before: case intro.intro.intro.intro.intro.intro
F : Type ?u.77288
α : Type u_1
β : Type ?u.77294
𝕜 : Type ?u.77297
E : Type ?u.77300
inst✝ : CancelCommMonoid α
s : Set α
a : α
hs : MulSalemSpencer s
b : α
hb : b ∈ s
c : α
hc : c ∈ s
d : α
hd : d ∈ s
h : (fun x x_1 => x * x_1) a b * (fun x x_1 => x * x_1) a c = (fun x x_1 => x * x_1) a d * (fun x x_1 => x * x_1) a d
⊢ (fun x x_1 => x * x_1) a b = (fun x x_1 => x * x_1) a c

tactic: rw [hs hb hc hd (mul_left_cancel h)]
state_before: case intro.intro.intro.intro.intro.intro
F : Type ?u.77288
α : Type u_1
β : Type ?u.77294
𝕜 : Type ?u.77297
E : Type ?u.77300
inst✝ : CancelCommMonoid α
s : Set α
a : α
hs : MulSalemSpencer s
b : α
hb : b ∈ s
c : α
hc : c ∈ s
d : α
hd : d ∈ s
h : a * a * (b * c) = a * a * (d * d)
⊢ (fun x x_1 => x * x_1) a b = (fun x x_1 => x * x_1) a c
Theorem: bne_self_eq_false
File: src/lean/Init/SimpLemmas.lean

tactic: simp [bne]
state_before: α : Type u_1
inst✝¹ : BEq α
inst✝ : LawfulBEq α
a : α
⊢ (a != a) = false
Theorem: Ordinal.mul_lt_omega_opow
File: Mathlib/SetTheory/Ordinal/Principal.lean

tactic: rcases zero_or_succ_or_limit c with (rfl | ⟨c, rfl⟩ | l)
state_before: a b c : Ordinal
c0 : 0 < c
ha : a < ω ^ c
hb : b < ω
⊢ a * b < ω ^ c

tactic: exact (lt_irrefl _).elim c0
state_before: case inl
a b : Ordinal
hb : b < ω
c0 : 0 < 0
ha : a < ω ^ 0
⊢ a * b < ω ^ 0

tactic: rw [opow_succ] at ha
state_before: case inr.inl.intro
a b : Ordinal
hb : b < ω
c : Ordinal
c0 : 0 < succ c
ha : a < ω ^ succ c
⊢ a * b < ω ^ succ c

tactic: rcases((mul_isNormal <| opow_pos _ omega_pos).limit_lt omega_isLimit).1 ha with ⟨n, hn, an⟩
state_before: case inr.inl.intro
a b : Ordinal
hb : b < ω
c : Ordinal
c0 : 0 < succ c
ha : a < ω ^ c * ω
⊢ a * b < ω ^ succ c

tactic: apply (mul_le_mul_right' (le_of_lt an) _).trans_lt
state_before: case inr.inl.intro.intro.intro
a b : Ordinal
hb : b < ω
c : Ordinal
c0 : 0 < succ c
ha : a < ω ^ c * ω
n : Ordinal
hn : n < ω
an : a < (fun x x_1 => x * x_1) (ω ^ c) n
⊢ a * b < ω ^ succ c

tactic: rw [opow_succ, mul_assoc, mul_lt_mul_iff_left (opow_pos _ omega_pos)]
state_before: case inr.inl.intro.intro.intro
a b : Ordinal
hb : b < ω
c : Ordinal
c0 : 0 < succ c
ha : a < ω ^ c * ω
n : Ordinal
hn : n < ω
an : a < (fun x x_1 => x * x_1) (ω ^ c) n
⊢ (fun x x_1 => x * x_1) (ω ^ c) n * b < ω ^ succ c

tactic: exact principal_mul_omega hn hb
state_before: case inr.inl.intro.intro.intro
a b : Ordinal
hb : b < ω
c : Ordinal
c0 : 0 < succ c
ha : a < ω ^ c * ω
n : Ordinal
hn : n < ω
an : a < (fun x x_1 => x * x_1) (ω ^ c) n
⊢ n * b < ω

tactic: rcases((opow_isNormal one_lt_omega).limit_lt l).1 ha with ⟨x, hx, ax⟩
state_before: case inr.inr
a b c : Ordinal
c0 : 0 < c
ha : a < ω ^ c
hb : b < ω
l : IsLimit c
⊢ a * b < ω ^ c

tactic: refine' (mul_le_mul' (le_of_lt ax) (le_of_lt hb)).trans_lt _
state_before: case inr.inr.intro.intro
a b c : Ordinal
c0 : 0 < c
ha : a < ω ^ c
hb : b < ω
l : IsLimit c
x : Ordinal
hx : x < c
ax : a < (fun x x_1 => x ^ x_1) ω x
⊢ a * b < ω ^ c

tactic: rw [← opow_succ, opow_lt_opow_iff_right one_lt_omega]
state_before: case inr.inr.intro.intro
a b c : Ordinal
c0 : 0 < c
ha : a < ω ^ c
hb : b < ω
l : IsLimit c
x : Ordinal
hx : x < c
ax : a < (fun x x_1 => x ^ x_1) ω x
⊢ (fun x x_1 => x ^ x_1) ω x * ω < ω ^ c

tactic: exact l.2 _ hx
state_before: case inr.inr.intro.intro
a b c : Ordinal
c0 : 0 < c
ha : a < ω ^ c
hb : b < ω
l : IsLimit c
x : Ordinal
hx : x < c
ax : a < (fun x x_1 => x ^ x_1) ω x
⊢ succ x < c
Theorem: MvPolynomial.isNoetherianRing_fin_0
File: Mathlib/RingTheory/Polynomial/Basic.lean

tactic: apply isNoetherianRing_of_ringEquiv R
state_before: R : Type u
S : Type ?u.780222
σ : Type v
M : Type w
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : AddCommGroup M
inst✝¹ : Module R M
inst✝ : IsNoetherianRing R
⊢ IsNoetherianRing (MvPolynomial (Fin 0) R)

tactic: symm
state_before: case f
R : Type u
S : Type ?u.780222
σ : Type v
M : Type w
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : AddCommGroup M
inst✝¹ : Module R M
inst✝ : IsNoetherianRing R
⊢ R ≃+* MvPolynomial (Fin 0) R

tactic: apply MvPolynomial.isEmptyRingEquiv R (Fin 0)
state_before: case f
R : Type u
S : Type ?u.780222
σ : Type v
M : Type w
inst✝⁴ : CommRing R
inst✝³ : CommRing S
inst✝² : AddCommGroup M
inst✝¹ : Module R M
inst✝ : IsNoetherianRing R
⊢ MvPolynomial (Fin 0) R ≃+* R
Theorem: IsComplete.isClosed
File: Mathlib/Topology/UniformSpace/CompleteSeparated.lean

tactic: let f := 𝓝[s] a
state_before: α : Type u_1
inst✝¹ : UniformSpace α
inst✝ : SeparatedSpace α
s : Set α
h : IsComplete s
a : α
ha : ClusterPt a (𝓟 s)
⊢ a ∈ s

tactic: have : Cauchy f := cauchy_nhds.mono' ha inf_le_left
state_before: α : Type u_1
inst✝¹ : UniformSpace α
inst✝ : SeparatedSpace α
s : Set α
h : IsComplete s
a : α
ha : ClusterPt a (𝓟 s)
f : Filter α := 𝓝[s] a
⊢ a ∈ s

tactic: rcases h f this inf_le_right with ⟨y, ys, fy⟩
state_before: α : Type u_1
inst✝¹ : UniformSpace α
inst✝ : SeparatedSpace α
s : Set α
h : IsComplete s
a : α
ha : ClusterPt a (𝓟 s)
f : Filter α := 𝓝[s] a
this : Cauchy f
⊢ a ∈ s

tactic: rwa [(tendsto_nhds_unique' ha inf_le_left fy : a = y)]
state_before: case intro.intro
α : Type u_1
inst✝¹ : UniformSpace α
inst✝ : SeparatedSpace α
s : Set α
h : IsComplete s
a : α
ha : ClusterPt a (𝓟 s)
f : Filter α := 𝓝[s] a
this : Cauchy f
y : α
ys : y ∈ s
fy : f ≤ 𝓝 y
⊢ a ∈ s
Theorem: Finset.update_piecewise_of_not_mem
File: Mathlib/Data/Finset/Basic.lean

tactic: rw [update_piecewise]
state_before: α : Type u_1
β : Type ?u.308822
γ : Type ?u.308825
δ : α → Sort u_2
s : Finset α
f g : (i : α) → δ i
inst✝¹ : (j : α) → Decidable (j ∈ s)
inst✝ : DecidableEq α
i : α
hi : ¬i ∈ s
v : δ i
⊢ update (piecewise s f g) i v = piecewise s f (update g i v)

tactic: refine' s.piecewise_congr (fun j hj => update_noteq _ _ _) fun _ _ => rfl
state_before: α : Type u_1
β : Type ?u.308822
γ : Type ?u.308825
δ : α → Sort u_2
s : Finset α
f g : (i : α) → δ i
inst✝¹ : (j : α) → Decidable (j ∈ s)
inst✝ : DecidableEq α
i : α
hi : ¬i ∈ s
v : δ i
⊢ piecewise s (update f i v) (update g i v) = piecewise s f (update g i v)

tactic: exact fun h => hi (h ▸ hj)
state_before: α : Type u_1
β : Type ?u.308822
γ : Type ?u.308825
δ : α → Sort u_2
s : Finset α
f g : (i : α) → δ i
inst✝¹ : (j : α) → Decidable (j ∈ s)
inst✝ : DecidableEq α
i : α
hi : ¬i ∈ s
v : δ i
j : α
hj : j ∈ s
⊢ j ≠ i
Theorem: Asymptotics.IsBigOWith.weaken
File: Mathlib/Analysis/Asymptotics/Asymptotics.lean

tactic: gcongr
state_before: α : Type u_1
β : Type ?u.29021
E : Type u_2
F : Type ?u.29027
G : Type ?u.29030
E' : Type ?u.29033
F' : Type u_3
G' : Type ?u.29039
E'' : Type ?u.29042
F'' : Type ?u.29045
G'' : Type ?u.29048
R : Type ?u.29051
R' : Type ?u.29054
𝕜 : Type ?u.29057
𝕜' : Type ?u.29060
inst✝¹² : Norm E
inst✝¹¹ : Norm F
inst✝¹⁰ : Norm G
inst✝⁹ : SeminormedAddCommGroup E'
inst✝⁸ : SeminormedAddCommGroup F'
inst✝⁷ : SeminormedAddCommGroup G'
inst✝⁶ : NormedAddCommGroup E''
inst✝⁵ : NormedAddCommGroup F''
inst✝⁴ : NormedAddCommGroup G''
inst✝³ : SeminormedRing R
inst✝² : SeminormedRing R'
inst✝¹ : NormedField 𝕜
inst✝ : NormedField 𝕜'
c c' c₁ c₂ : ℝ
f : α → E
g : α → F
k : α → G
f' : α → E'
g' : α → F'
k' : α → G'
f'' : α → E''
g'' : α → F''
k'' : α → G''
l l' : Filter α
h : IsBigOWith c l f g'
hc : c ≤ c'
x : α
hx : x ∈ {x | (fun x => ‖f x‖ ≤ c * ‖g' x‖) x}
⊢ c * ‖g' x‖ ≤ c' * ‖g' x‖
Theorem: hyperoperation_two_two_eq_four
File: Mathlib/Data/Nat/Hyperoperation.lean

tactic: induction' n with nn nih
state_before: n : ℕ
⊢ hyperoperation (n + 1) 2 2 = 4

tactic: rw [hyperoperation_one]
state_before: case zero

⊢ hyperoperation (Nat.zero + 1) 2 2 = 4

tactic: rw [hyperoperation_recursion, hyperoperation_ge_two_eq_self, nih]
state_before: case succ
nn : ℕ
nih : hyperoperation (nn + 1) 2 2 = 4
⊢ hyperoperation (Nat.succ nn + 1) 2 2 = 4
Theorem: MeasureTheory.L1.SimpleFunc.setToL1S_mono
File: Mathlib/MeasureTheory/Integral/SetToL1.lean

tactic: rw [← sub_nonneg] at hfg ⊢
state_before: α : Type u_1
E : Type ?u.748247
F : Type ?u.748250
F' : Type ?u.748253
G : Type ?u.748256
𝕜 : Type ?u.748259
p : ℝ≥0∞
inst✝¹² : NormedAddCommGroup E
inst✝¹¹ : NormedSpace ℝ E
inst✝¹⁰ : NormedAddCommGroup F
inst✝⁹ : NormedSpace ℝ F
inst✝⁸ : NormedAddCommGroup F'
inst✝⁷ : NormedSpace ℝ F'
inst✝⁶ : NormedAddCommGroup G
m : MeasurableSpace α
μ : Measure α
inst✝⁵ : NormedField 𝕜
inst✝⁴ : NormedSpace 𝕜 E
G'' : Type u_2
G' : Type u_3
inst✝³ : NormedLatticeAddCommGroup G'
inst✝² : NormedSpace ℝ G'
inst✝¹ : NormedLatticeAddCommGroup G''
inst✝ : NormedSpace ℝ G''
T : Set α → G'' →L[ℝ] G'
h_zero : ∀ (s : Set α), MeasurableSet s → ↑↑μ s = 0 → T s = 0
h_add : FinMeasAdditive μ T
hT_nonneg : ∀ (s : Set α), MeasurableSet s → ↑↑μ s < ⊤ → ∀ (x : G''), 0 ≤ x → 0 ≤ ↑(T s) x
f g : { x // x ∈ simpleFunc G'' 1 μ }
hfg : f ≤ g
⊢ setToL1S T f ≤ setToL1S T g

tactic: rw [← setToL1S_sub h_zero h_add]
state_before: α : Type u_1
E : Type ?u.748247
F : Type ?u.748250
F' : Type ?u.748253
G : Type ?u.748256
𝕜 : Type ?u.748259
p : ℝ≥0∞
inst✝¹² : NormedAddCommGroup E
inst✝¹¹ : NormedSpace ℝ E
inst✝¹⁰ : NormedAddCommGroup F
inst✝⁹ : NormedSpace ℝ F
inst✝⁸ : NormedAddCommGroup F'
inst✝⁷ : NormedSpace ℝ F'
inst✝⁶ : NormedAddCommGroup G
m : MeasurableSpace α
μ : Measure α
inst✝⁵ : NormedField 𝕜
inst✝⁴ : NormedSpace 𝕜 E
G'' : Type u_2
G' : Type u_3
inst✝³ : NormedLatticeAddCommGroup G'
inst✝² : NormedSpace ℝ G'
inst✝¹ : NormedLatticeAddCommGroup G''
inst✝ : NormedSpace ℝ G''
T : Set α → G'' →L[ℝ] G'
h_zero : ∀ (s : Set α), MeasurableSet s → ↑↑μ s = 0 → T s = 0
h_add : FinMeasAdditive μ T
hT_nonneg : ∀ (s : Set α), MeasurableSet s → ↑↑μ s < ⊤ → ∀ (x : G''), 0 ≤ x → 0 ≤ ↑(T s) x
f g : { x // x ∈ simpleFunc G'' 1 μ }
hfg✝ : f ≤ g
hfg : 0 ≤ g - f
⊢ 0 ≤ setToL1S T g - setToL1S T f

tactic: exact setToL1S_nonneg h_zero h_add hT_nonneg hfg
state_before: α : Type u_1
E : Type ?u.748247
F : Type ?u.748250
F' : Type ?u.748253
G : Type ?u.748256
𝕜 : Type ?u.748259
p : ℝ≥0∞
inst✝¹² : NormedAddCommGroup E
inst✝¹¹ : NormedSpace ℝ E
inst✝¹⁰ : NormedAddCommGroup F
inst✝⁹ : NormedSpace ℝ F
inst✝⁸ : NormedAddCommGroup F'
inst✝⁷ : NormedSpace ℝ F'
inst✝⁶ : NormedAddCommGroup G
m : MeasurableSpace α
μ : Measure α
inst✝⁵ : NormedField 𝕜
inst✝⁴ : NormedSpace 𝕜 E
G'' : Type u_2
G' : Type u_3
inst✝³ : NormedLatticeAddCommGroup G'
inst✝² : NormedSpace ℝ G'
inst✝¹ : NormedLatticeAddCommGroup G''
inst✝ : NormedSpace ℝ G''
T : Set α → G'' →L[ℝ] G'
h_zero : ∀ (s : Set α), MeasurableSet s → ↑↑μ s = 0 → T s = 0
h_add : FinMeasAdditive μ T
hT_nonneg : ∀ (s : Set α), MeasurableSet s → ↑↑μ s < ⊤ → ∀ (x : G''), 0 ≤ x → 0 ≤ ↑(T s) x
f g : { x // x ∈ simpleFunc G'' 1 μ }
hfg✝ : f ≤ g
hfg : 0 ≤ g - f
⊢ 0 ≤ setToL1S (fun s => T s) (g - f)
Theorem: AList.lookupFinsupp_support
File: Mathlib/Data/Finsupp/AList.lean

tactic: simp only [lookupFinsupp, ne_eq, Finsupp.coe_mk]
state_before: α : Type u_1
M : Type u_2
inst✝² : Zero M
inst✝¹ : DecidableEq α
inst✝ : DecidableEq M
l : AList fun _x => M
⊢ (lookupFinsupp l).support = toFinset (List.keys (filter (fun x => decide (x.snd ≠ 0)) l.entries))

tactic: congr
state_before: α : Type u_1
M : Type u_2
inst✝² : Zero M
inst✝¹ : DecidableEq α
inst✝ : DecidableEq M
l : AList fun _x => M
⊢ toFinset (List.keys (filter (fun x => decide ¬x.snd = 0) l.entries)) =
    toFinset (List.keys (filter (fun x => decide ¬x.snd = 0) l.entries))

tactic: . apply Subsingleton.elim
state_before: case h.e_2.h
α : Type u_1
M : Type u_2
inst✝² : Zero M
inst✝¹ : DecidableEq α
inst✝ : DecidableEq M
l : AList fun _x => M
⊢ (fun a b => Classical.decEq α a b) = fun a b => inst✝¹ a b

case h.e_3.h.e_a.e_p
α : Type u_1
M : Type u_2
inst✝² : Zero M
inst✝¹ : DecidableEq α
inst✝ : DecidableEq M
l : AList fun _x => M
⊢ (fun x => decide ¬x.snd = 0) = fun x => decide ¬x.snd = 0

tactic: . funext ; congr
state_before: case h.e_3.h.e_a.e_p
α : Type u_1
M : Type u_2
inst✝² : Zero M
inst✝¹ : DecidableEq α
inst✝ : DecidableEq M
l : AList fun _x => M
⊢ (fun x => decide ¬x.snd = 0) = fun x => decide ¬x.snd = 0

tactic: apply Subsingleton.elim
state_before: case h.e_2.h
α : Type u_1
M : Type u_2
inst✝² : Zero M
inst✝¹ : DecidableEq α
inst✝ : DecidableEq M
l : AList fun _x => M
⊢ (fun a b => Classical.decEq α a b) = fun a b => inst✝¹ a b

tactic: funext
state_before: case h.e_3.h.e_a.e_p
α : Type u_1
M : Type u_2
inst✝² : Zero M
inst✝¹ : DecidableEq α
inst✝ : DecidableEq M
l : AList fun _x => M
⊢ (fun x => decide ¬x.snd = 0) = fun x => decide ¬x.snd = 0

tactic: congr
state_before: case h.e_3.h.e_a.e_p.h
α : Type u_1
M : Type u_2
inst✝² : Zero M
inst✝¹ : DecidableEq α
inst✝ : DecidableEq M
l : AList fun _x => M
x✝ : (_ : α) × M
⊢ (decide ¬x✝.snd = 0) = decide ¬x✝.snd = 0
Theorem: Stirling.stirlingSeq_one
File: Mathlib/Analysis/SpecialFunctions/Stirling.lean

tactic: rw [stirlingSeq, pow_one, factorial_one, cast_one, mul_one, mul_one_div, one_div_div]
state_before: ⊢ stirlingSeq 1 = exp 1 / Real.sqrt 2
Theorem: Ordinal.lt_sup
File: Mathlib/SetTheory/Ordinal/Arithmetic.lean

tactic: simpa only [not_forall, not_le] using not_congr (@sup_le_iff.{_, v} _ f a)
state_before: α : Type ?u.282487
β : Type ?u.282490
γ : Type ?u.282493
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
ι : Type u
f : ι → Ordinal
a : Ordinal
⊢ a < sup f ↔ ∃ i, a < f i
Theorem: EMetric.mem_iff_infEdist_zero_of_closed
File: Mathlib/Topology/MetricSpace/HausdorffDistance.lean

tactic: rw [← mem_closure_iff_infEdist_zero, h.closure_eq]
state_before: ι : Sort ?u.17353
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
x y : α
s t : Set α
Φ : α → β
h : IsClosed s
⊢ x ∈ s ↔ infEdist x s = 0
Theorem: Equiv.Perm.support_swap_mul_eq
File: Mathlib/GroupTheory/Perm/Support.lean

tactic: by_cases hx : f x = x
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
x : α
h : ↑f (↑f x) ≠ x
⊢ support (swap x (↑f x) * f) = support f \ {x}

tactic: ext z
state_before: case neg
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
x : α
h : ↑f (↑f x) ≠ x
hx : ¬↑f x = x
⊢ support (swap x (↑f x) * f) = support f \ {x}

tactic: by_cases hzx : z = x
state_before: case neg.a
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
x : α
h : ↑f (↑f x) ≠ x
hx : ¬↑f x = x
z : α
⊢ z ∈ support (swap x (↑f x) * f) ↔ z ∈ support f \ {x}

tactic: by_cases hzf : z = f x
state_before: case neg
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
x : α
h : ↑f (↑f x) ≠ x
hx : ¬↑f x = x
z : α
hzx : ¬z = x
⊢ z ∈ support (swap x (↑f x) * f) ↔ z ∈ support f \ {x}

tactic: by_cases hzfx : f z = x
state_before: case neg
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
x : α
h : ↑f (↑f x) ≠ x
hx : ¬↑f x = x
z : α
hzx : ¬z = x
hzf : ¬z = ↑f x
⊢ z ∈ support (swap x (↑f x) * f) ↔ z ∈ support f \ {x}

tactic: simp [hx, sdiff_singleton_eq_erase, not_mem_support.mpr hx, erase_eq_of_not_mem]
state_before: case pos
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
x : α
h : ↑f (↑f x) ≠ x
hx : ↑f x = x
⊢ support (swap x (↑f x) * f) = support f \ {x}

tactic: simp [hzx]
state_before: case pos
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
x : α
h : ↑f (↑f x) ≠ x
hx : ¬↑f x = x
z : α
hzx : z = x
⊢ z ∈ support (swap x (↑f x) * f) ↔ z ∈ support f \ {x}

tactic: simp [hzf, hx, h, swap_apply_of_ne_of_ne]
state_before: case pos
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
x : α
h : ↑f (↑f x) ≠ x
hx : ¬↑f x = x
z : α
hzx : ¬z = x
hzf : z = ↑f x
⊢ z ∈ support (swap x (↑f x) * f) ↔ z ∈ support f \ {x}

tactic: simp [Ne.symm hzx, hzx, Ne.symm hzf, hzfx]
state_before: case pos
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
x : α
h : ↑f (↑f x) ≠ x
hx : ¬↑f x = x
z : α
hzx : ¬z = x
hzf : ¬z = ↑f x
hzfx : ↑f z = x
⊢ z ∈ support (swap x (↑f x) * f) ↔ z ∈ support f \ {x}

tactic: simp [Ne.symm hzx, hzx, Ne.symm hzf, hzfx, f.injective.ne hzx, swap_apply_of_ne_of_ne]
state_before: case neg
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Fintype α
f✝ g f : Perm α
x : α
h : ↑f (↑f x) ≠ x
hx : ¬↑f x = x
z : α
hzx : ¬z = x
hzf : ¬z = ↑f x
hzfx : ¬↑f z = x
⊢ z ∈ support (swap x (↑f x) * f) ↔ z ∈ support f \ {x}
Theorem: EuclideanDomain.div_dvd_of_dvd
File: Mathlib/Algebra/EuclideanDomain/Basic.lean

tactic: by_cases hq : q = 0
state_before: R : Type u
inst✝ : EuclideanDomain R
p q : R
hpq : q ∣ p
⊢ p / q ∣ p

tactic: use q
state_before: case neg
R : Type u
inst✝ : EuclideanDomain R
p q : R
hpq : q ∣ p
hq : ¬q = 0
⊢ p / q ∣ p

tactic: rw [mul_comm, ← EuclideanDomain.mul_div_assoc _ hpq, mul_comm,
  EuclideanDomain.mul_div_cancel _ hq]
state_before: case neg
R : Type u
inst✝ : EuclideanDomain R
p q : R
hpq : q ∣ p
hq : ¬q = 0
⊢ p = p / q * q

tactic: rw [hq, zero_dvd_iff] at hpq
state_before: case pos
R : Type u
inst✝ : EuclideanDomain R
p q : R
hpq : q ∣ p
hq : q = 0
⊢ p / q ∣ p

tactic: rw [hpq]
state_before: case pos
R : Type u
inst✝ : EuclideanDomain R
p q : R
hpq : p = 0
hq : q = 0
⊢ p / q ∣ p

tactic: exact dvd_zero _
state_before: case pos
R : Type u
inst✝ : EuclideanDomain R
p q : R
hpq : p = 0
hq : q = 0
⊢ 0 / q ∣ 0
Theorem: Finset.sdiff_singleton_eq_self
File: Mathlib/Data/Finset/Basic.lean

tactic: simp [ha]
state_before: α : Type u_1
β : Type ?u.266452
γ : Type ?u.266455
inst✝ : DecidableEq α
s t u v : Finset α
a b : α
ha : ¬a ∈ s
⊢ _root_.Disjoint {a} s
Theorem: Affine.Simplex.ext
File: Mathlib/LinearAlgebra/AffineSpace/Independent.lean

tactic: cases s1
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
n : ℕ
s1 s2 : Simplex k P n
h : ∀ (i : Fin (n + 1)), points s1 i = points s2 i
⊢ s1 = s2

tactic: cases s2
state_before: case mk
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
n : ℕ
s2 : Simplex k P n
points✝ : Fin (n + 1) → P
Independent✝ : AffineIndependent k points✝
h : ∀ (i : Fin (n + 1)), points { points := points✝, Independent := Independent✝ } i = points s2 i
⊢ { points := points✝, Independent := Independent✝ } = s2

tactic: congr with i
state_before: case mk.mk
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
n : ℕ
points✝¹ : Fin (n + 1) → P
Independent✝¹ : AffineIndependent k points✝¹
points✝ : Fin (n + 1) → P
Independent✝ : AffineIndependent k points✝
h :
  ∀ (i : Fin (n + 1)),
    points { points := points✝¹, Independent := Independent✝¹ } i =
      points { points := points✝, Independent := Independent✝ } i
⊢ { points := points✝¹, Independent := Independent✝¹ } = { points := points✝, Independent := Independent✝ }

tactic: exact h i
state_before: case mk.mk.e_points.h
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
n : ℕ
points✝¹ : Fin (n + 1) → P
Independent✝¹ : AffineIndependent k points✝¹
points✝ : Fin (n + 1) → P
Independent✝ : AffineIndependent k points✝
h :
  ∀ (i : Fin (n + 1)),
    points { points := points✝¹, Independent := Independent✝¹ } i =
      points { points := points✝, Independent := Independent✝ } i
i : Fin (n + 1)
⊢ points✝¹ i = points✝ i
Theorem: associated_isUnit_mul_left_iff
File: Mathlib/Algebra/Associated.lean

tactic: rw [mul_comm]
state_before: α : Type ?u.166351
β✝ : Type ?u.166354
γ : Type ?u.166357
δ : Type ?u.166360
β : Type u_1
inst✝ : CommMonoid β
u a b : β
hu : IsUnit u
⊢ u * a ~ᵤ b ↔ a ~ᵤ b

tactic: exact associated_mul_isUnit_left_iff hu
state_before: α : Type ?u.166351
β✝ : Type ?u.166354
γ : Type ?u.166357
δ : Type ?u.166360
β : Type u_1
inst✝ : CommMonoid β
u a b : β
hu : IsUnit u
⊢ a * u ~ᵤ b ↔ a ~ᵤ b
Theorem: EMetric.hausdorffEdist_closure
File: Mathlib/Topology/MetricSpace/HausdorffDistance.lean

tactic: simp
state_before: ι : Sort ?u.54219
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
x y : α
s t u : Set α
Φ : α → β
⊢ hausdorffEdist (closure s) (closure t) = hausdorffEdist s t
Theorem: Finset.Ioo_insert_right
File: Mathlib/Data/Finset/LocallyFinite.lean

tactic: rw [← coe_inj, coe_insert, coe_Ioo, coe_Ioc, Set.insert_eq, Set.union_comm, Set.Ioo_union_right h]
state_before: ι : Type ?u.94924
α : Type u_1
inst✝² : PartialOrder α
inst✝¹ : LocallyFiniteOrder α
a b c : α
inst✝ : DecidableEq α
h : a < b
⊢ insert b (Ioo a b) = Ioc a b
Theorem: Matrix.ext_iff_blocks
File: Mathlib/Data/Matrix/Block.lean

tactic: rw [← fromBlocks_toBlocks A, ← fromBlocks_toBlocks B, h₁₁, h₁₂, h₂₁, h₂₂]
state_before: l : Type u_4
m : Type u_3
n : Type u_2
o : Type u_1
p : Type ?u.5734
q : Type ?u.5737
m' : o → Type ?u.5742
n' : o → Type ?u.5747
p' : o → Type ?u.5752
R : Type ?u.5755
S : Type ?u.5758
α : Type u_5
β : Type ?u.5764
A B : Matrix (n ⊕ o) (l ⊕ m) α
x✝ :
  toBlocks₁₁ A = toBlocks₁₁ B ∧ toBlocks₁₂ A = toBlocks₁₂ B ∧ toBlocks₂₁ A = toBlocks₂₁ B ∧ toBlocks₂₂ A = toBlocks₂₂ B
h₁₁ : toBlocks₁₁ A = toBlocks₁₁ B
h₁₂ : toBlocks₁₂ A = toBlocks₁₂ B
h₂₁ : toBlocks₂₁ A = toBlocks₂₁ B
h₂₂ : toBlocks₂₂ A = toBlocks₂₂ B
⊢ A = B