tasksource/leandojo huggingface dataset:
Theorem: MeasureTheory.SimpleFunc.snorm'_eq
File: Mathlib/MeasureTheory/Function/SimpleFuncDenseLp.lean

tactic: have h_map : (fun a => (‖f a‖₊ : ℝ≥0∞) ^ p) = f.map fun a : F => (‖a‖₊ : ℝ≥0∞) ^ p := by
  simp; rfl
state_before: α : Type u_1
β : Type ?u.1108791
ι : Type ?u.1108794
E : Type ?u.1108797
F : Type u_2
𝕜 : Type ?u.1108803
inst✝² : MeasurableSpace α
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedAddCommGroup F
μ✝ : Measure α
p✝ : ℝ≥0∞
p : ℝ
f : α →ₛ F
μ : Measure α
⊢ snorm' (↑f) p μ = (∑ y in SimpleFunc.range f, ↑‖y‖₊ ^ p * ↑↑μ (↑f ⁻¹' {y})) ^ (1 / p)

tactic: rw [snorm', h_map, lintegral_eq_lintegral, map_lintegral]
state_before: α : Type u_1
β : Type ?u.1108791
ι : Type ?u.1108794
E : Type ?u.1108797
F : Type u_2
𝕜 : Type ?u.1108803
inst✝² : MeasurableSpace α
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedAddCommGroup F
μ✝ : Measure α
p✝ : ℝ≥0∞
p : ℝ
f : α →ₛ F
μ : Measure α
h_map : (fun a => ↑‖↑f a‖₊ ^ p) = ↑(map (fun a => ↑‖a‖₊ ^ p) f)
⊢ snorm' (↑f) p μ = (∑ y in SimpleFunc.range f, ↑‖y‖₊ ^ p * ↑↑μ (↑f ⁻¹' {y})) ^ (1 / p)

tactic: simp
state_before: α : Type u_1
β : Type ?u.1108791
ι : Type ?u.1108794
E : Type ?u.1108797
F : Type u_2
𝕜 : Type ?u.1108803
inst✝² : MeasurableSpace α
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedAddCommGroup F
μ✝ : Measure α
p✝ : ℝ≥0∞
p : ℝ
f : α →ₛ F
μ : Measure α
⊢ (fun a => ↑‖↑f a‖₊ ^ p) = ↑(map (fun a => ↑‖a‖₊ ^ p) f)

tactic: rfl
state_before: α : Type u_1
β : Type ?u.1108791
ι : Type ?u.1108794
E : Type ?u.1108797
F : Type u_2
𝕜 : Type ?u.1108803
inst✝² : MeasurableSpace α
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedAddCommGroup F
μ✝ : Measure α
p✝ : ℝ≥0∞
p : ℝ
f : α →ₛ F
μ : Measure α
⊢ (fun a => ↑‖↑f a‖₊ ^ p) = (fun a => ↑‖a‖₊ ^ p) ∘ ↑f
Theorem: Set.image2_comm
File: Mathlib/Data/Set/NAry.lean

tactic: simp_rw [h_comm]
state_before: α : Type u_2
α' : Type ?u.40713
β : Type u_3
β' : Type ?u.40719
γ : Type u_1
γ' : Type ?u.40725
δ : Type ?u.40728
δ' : Type ?u.40731
ε : Type ?u.40734
ε' : Type ?u.40737
ζ : Type ?u.40740
ζ' : Type ?u.40743
ν : Type ?u.40746
f f' : α → β → γ
g✝ g' : α → β → γ → δ
s s' : Set α
t t' : Set β
u u' : Set γ
v : Set δ
a a' : α
b b' : β
c c' : γ
d d' : δ
g : β → α → γ
h_comm : ∀ (a : α) (b : β), f a b = g b a
⊢ image2 (fun a b => f b a) t s = image2 g t s
Theorem: Polynomial.natDegree_pow
File: Mathlib/Data/Polynomial/RingDivision.lean

tactic: simp [hp0, hn0]
state_before: R : Type u
S : Type v
T : Type w
a b : R
n✝ : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p✝ q p : R[X]
n : ℕ
hp0 : p = 0
hn0 : n = 0
⊢ natDegree (p ^ n) = n * natDegree p

tactic: rw [hp0, zero_pow (Nat.pos_of_ne_zero hn0)]
state_before: R : Type u
S : Type v
T : Type w
a b : R
n✝ : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p✝ q p : R[X]
n : ℕ
hp0 : p = 0
hn0 : ¬n = 0
⊢ natDegree (p ^ n) = n * natDegree p

tactic: simp
state_before: R : Type u
S : Type v
T : Type w
a b : R
n✝ : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p✝ q p : R[X]
n : ℕ
hp0 : p = 0
hn0 : ¬n = 0
⊢ natDegree 0 = n * natDegree 0

tactic: rw [← leadingCoeff_pow, Ne.def, leadingCoeff_eq_zero]
state_before: R : Type u
S : Type v
T : Type w
a b : R
n✝ : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p✝ q p : R[X]
n : ℕ
hp0 : ¬p = 0
⊢ leadingCoeff p ^ n ≠ 0

tactic: exact pow_ne_zero _ hp0
state_before: R : Type u
S : Type v
T : Type w
a b : R
n✝ : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p✝ q p : R[X]
n : ℕ
hp0 : ¬p = 0
⊢ ¬p ^ n = 0
Theorem: dvd_and_not_dvd_iff
File: Mathlib/Algebra/GroupWithZero/Divisibility.lean

tactic: simp [hx0] at hyx
state_before: α : Type u_1
inst✝ : CancelCommMonoidWithZero α
x y : α
x✝ : x ∣ y ∧ ¬y ∣ x
d : α
hd : y = x * d
hyx : ¬y ∣ x
hx0 : x = 0
⊢ False

tactic: rw [hd, mul_assoc, ← he, mul_one]
state_before: α : Type u_1
inst✝ : CancelCommMonoidWithZero α
x y : α
x✝¹ : x ∣ y ∧ ¬y ∣ x
d : α
hd : y = x * d
hyx : ¬y ∣ x
x✝ : d ∣ 1
e : α
he : 1 = d * e
⊢ x = y * e

tactic: conv =>
lhs
rw [he, hdx]
simp [mul_assoc]
state_before: α : Type u_1
inst✝ : CancelCommMonoidWithZero α
x y : α
x✝¹ : DvdNotUnit x y
hx0 : x ≠ 0
d : α
hdu : ¬IsUnit d
hdx : y = x * d
x✝ : y ∣ x
e : α
he : x = y * e
⊢ x * 1 = x * (d * e)
Theorem: Monoid.not_isTorsionFree_iff
File: Mathlib/GroupTheory/Torsion.lean

tactic: simp_rw [IsTorsionFree, Ne.def, not_forall, Classical.not_not, exists_prop]
state_before: G : Type u_1
H : Type ?u.209046
inst✝ : Monoid G
⊢ ¬IsTorsionFree G ↔ ∃ g, g ≠ 1 ∧ IsOfFinOrder g
Theorem: Ideal.hasBasis_nhds_adic
File: Mathlib/Topology/Algebra/Nonarchimedean/AdicTopology.lean

tactic: letI := I.adicTopology
state_before: R : Type u_1
inst✝ : CommRing R
I : Ideal R
x : R
⊢ HasBasis (𝓝 x) (fun _n => True) fun n => (fun y => x + y) '' ↑(I ^ n)

tactic: have := I.hasBasis_nhds_zero_adic.map fun y => x + y
state_before: R : Type u_1
inst✝ : CommRing R
I : Ideal R
x : R
this : TopologicalSpace R := adicTopology I
⊢ HasBasis (𝓝 x) (fun _n => True) fun n => (fun y => x + y) '' ↑(I ^ n)

tactic: rwa [map_add_left_nhds_zero x] at this
state_before: R : Type u_1
inst✝ : CommRing R
I : Ideal R
x : R
this✝ : TopologicalSpace R := adicTopology I
this : HasBasis (Filter.map (fun y => x + y) (𝓝 0)) (fun _n => True) fun i => (fun y => x + y) '' ↑(I ^ i)
⊢ HasBasis (𝓝 x) (fun _n => True) fun n => (fun y => x + y) '' ↑(I ^ n)
Theorem: support_fderiv_subset
File: Mathlib/Analysis/Calculus/FDeriv/Basic.lean

tactic: rw [← not_imp_not, not_mem_tsupport_iff_eventuallyEq, nmem_support]
state_before: 𝕜 : Type u_3
E : Type u_1
F : Type u_2
inst✝⁴ : NontriviallyNormedField 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
f : E → F
x : E
⊢ x ∈ support (fderiv 𝕜 f) → x ∈ tsupport f

tactic: exact fun hx => hx.fderiv_eq.trans <| fderiv_const_apply 0
state_before: 𝕜 : Type u_3
E : Type u_1
F : Type u_2
inst✝⁴ : NontriviallyNormedField 𝕜
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace 𝕜 E
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace 𝕜 F
f : E → F
x : E
⊢ f =ᶠ[𝓝 x] 0 → fderiv 𝕜 f x = 0
Theorem: Equiv.mul_swap_eq_swap_mul
File: Mathlib/GroupTheory/Perm/Basic.lean

tactic: rw [swap_mul_eq_mul_swap, Perm.inv_apply_self, Perm.inv_apply_self]
state_before: α : Type u
β : Type v
inst✝ : DecidableEq α
f : Perm α
x y : α
⊢ f * swap x y = swap (↑f x) (↑f y) * f
Theorem: mul_sub_mul_div_mul_neg_iff
File: Mathlib/Algebra/Order/Field/Basic.lean

tactic: rw [mul_comm b c, ← div_sub_div _ _ hc hd, sub_lt_zero]
state_before: ι : Type ?u.192047
α : Type u_1
β : Type ?u.192053
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hc : c ≠ 0
hd : d ≠ 0
⊢ (a * d - b * c) / (c * d) < 0 ↔ a / c < b / d
Theorem: Complex.nat_cast_re
File: Mathlib/Data/Complex/Basic.lean

tactic: rw [← ofReal_nat_cast, ofReal_re]
state_before: n : ℕ
⊢ (↑n).re = ↑n
Theorem: Option.naturality
File: Mathlib/Control/Traversable/Instances.lean

tactic: cases' x with x <;> simp! [*, functor_norm, ApplicativeTransformation.preserves_map,
  ApplicativeTransformation.preserves_seq, ApplicativeTransformation.preserves_pure]
state_before: F G : Type u → Type u
inst✝³ : Applicative F
inst✝² : Applicative G
inst✝¹ : LawfulApplicative F
inst✝ : LawfulApplicative G
η : ApplicativeTransformation F G
α : Type u_1
β : Type u
f : α → F β
x : Option α
⊢ (fun {α} => ApplicativeTransformation.app η α) (Option.traverse f x) =
    Option.traverse ((fun {α} => ApplicativeTransformation.app η α) ∘ f) x
Theorem: List.foldr_hom
File: Std/Data/List/Lemmas.lean

tactic: induction l <;> simp [*, H]
state_before: β₁ : Type u_1
β₂ : Type u_2
α : Type u_3
f : β₁ → β₂
g₁ : α → β₁ → β₁
g₂ : α → β₂ → β₂
l : List α
init : β₁
H : ∀ (x : α) (y : β₁), g₂ x (f y) = f (g₁ x y)
⊢ foldr g₂ (f init) l = f (foldr g₁ init l)
Theorem: Subgroup.mem_closure_singleton
File: Mathlib/GroupTheory/Subgroup/Basic.lean

tactic: refine'
  ⟨fun hy => closure_induction hy _ _ _ _, fun ⟨n, hn⟩ =>
    hn ▸ zpow_mem (subset_closure <| mem_singleton x) n⟩
state_before: G : Type u_1
G' : Type ?u.216540
inst✝² : Group G
inst✝¹ : Group G'
A : Type ?u.216549
inst✝ : AddGroup A
H K : Subgroup G
k : Set G
x y : G
⊢ y ∈ closure {x} ↔ ∃ n, x ^ n = y

tactic: rintro _ ⟨n, rfl⟩
state_before: case refine'_4
G : Type u_1
G' : Type ?u.216540
inst✝² : Group G
inst✝¹ : Group G'
A : Type ?u.216549
inst✝ : AddGroup A
H K : Subgroup G
k : Set G
x y : G
hy : y ∈ closure {x}
⊢ ∀ (x_1 : G), (∃ n, x ^ n = x_1) → ∃ n, x ^ n = x_1⁻¹

tactic: exact ⟨-n, zpow_neg x n⟩
state_before: case refine'_4.intro
G : Type u_1
G' : Type ?u.216540
inst✝² : Group G
inst✝¹ : Group G'
A : Type ?u.216549
inst✝ : AddGroup A
H K : Subgroup G
k : Set G
x y : G
hy : y ∈ closure {x}
n : ℤ
⊢ ∃ n_1, x ^ n_1 = (x ^ n)⁻¹

tactic: intro y hy
state_before: case refine'_1
G : Type u_1
G' : Type ?u.216540
inst✝² : Group G
inst✝¹ : Group G'
A : Type ?u.216549
inst✝ : AddGroup A
H K : Subgroup G
k : Set G
x y : G
hy : y ∈ closure {x}
⊢ ∀ (x_1 : G), x_1 ∈ {x} → ∃ n, x ^ n = x_1

tactic: rw [eq_of_mem_singleton hy]
state_before: case refine'_1
G : Type u_1
G' : Type ?u.216540
inst✝² : Group G
inst✝¹ : Group G'
A : Type ?u.216549
inst✝ : AddGroup A
H K : Subgroup G
k : Set G
x y✝ : G
hy✝ : y✝ ∈ closure {x}
y : G
hy : y ∈ {x}
⊢ ∃ n, x ^ n = y

tactic: exact ⟨1, zpow_one x⟩
state_before: case refine'_1
G : Type u_1
G' : Type ?u.216540
inst✝² : Group G
inst✝¹ : Group G'
A : Type ?u.216549
inst✝ : AddGroup A
H K : Subgroup G
k : Set G
x y✝ : G
hy✝ : y✝ ∈ closure {x}
y : G
hy : y ∈ {x}
⊢ ∃ n, x ^ n = x

tactic: exact ⟨0, zpow_zero x⟩
state_before: case refine'_2
G : Type u_1
G' : Type ?u.216540
inst✝² : Group G
inst✝¹ : Group G'
A : Type ?u.216549
inst✝ : AddGroup A
H K : Subgroup G
k : Set G
x y : G
hy : y ∈ closure {x}
⊢ ∃ n, x ^ n = 1

tactic: rintro _ _ ⟨n, rfl⟩ ⟨m, rfl⟩
state_before: case refine'_3
G : Type u_1
G' : Type ?u.216540
inst✝² : Group G
inst✝¹ : Group G'
A : Type ?u.216549
inst✝ : AddGroup A
H K : Subgroup G
k : Set G
x y : G
hy : y ∈ closure {x}
⊢ ∀ (x_1 y : G), (∃ n, x ^ n = x_1) → (∃ n, x ^ n = y) → ∃ n, x ^ n = x_1 * y

tactic: exact ⟨n + m, zpow_add x n m⟩
state_before: case refine'_3.intro.intro
G : Type u_1
G' : Type ?u.216540
inst✝² : Group G
inst✝¹ : Group G'
A : Type ?u.216549
inst✝ : AddGroup A
H K : Subgroup G
k : Set G
x y : G
hy : y ∈ closure {x}
n m : ℤ
⊢ ∃ n_1, x ^ n_1 = x ^ n * x ^ m
Theorem: SimpleGraph.Walk.mem_darts_reverse
File: Mathlib/Combinatorics/SimpleGraph/Connectivity.lean

tactic: simp
state_before: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v : V
d : Dart G
p : Walk G u v
⊢ d ∈ darts (reverse p) ↔ Dart.symm d ∈ darts p
Theorem: multiplicity.get_one_right
File: Mathlib/RingTheory/Multiplicity.lean

tactic: rw [PartENat.get_eq_iff_eq_coe, eq_coe_iff, _root_.pow_zero]
state_before: α : Type u_1
inst✝¹ : Monoid α
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
a : α
ha : Finite a 1
⊢ Part.get (multiplicity a 1) ha = 0

tactic: simp [not_dvd_one_of_finite_one_right ha]
state_before: α : Type u_1
inst✝¹ : Monoid α
inst✝ : DecidableRel fun x x_1 => x ∣ x_1
a : α
ha : Finite a 1
⊢ 1 ∣ 1 ∧ ¬a ^ (0 + 1) ∣ 1
Theorem: Nat.Partrec.none
File: Mathlib/Computability/Partrec.lean

tactic: simp at h
state_before: n a : ℕ
x✝ : a ∈ Nat.rfind fun n_1 => (fun m => decide (m = 0)) <$> (↑fun x => 1) (Nat.pair n n_1)
h : (Nat.rfind fun n_1 => (fun m => decide (m = 0)) <$> (↑fun x => 1) (Nat.pair n n_1)).Dom
h✝ : Part.get (Nat.rfind fun n_1 => (fun m => decide (m = 0)) <$> (↑fun x => 1) (Nat.pair n n_1)) h = a
⊢ False
Theorem: List.bagInter_sublist_left
File: Mathlib/Data/List/Lattice.lean

tactic: simp
state_before: α : Type u_1
l l₁ l₂✝ : List α
p : α → Prop
a : α
inst✝ : DecidableEq α
l₂ : List α
⊢ List.bagInter [] l₂ <+ []

tactic: by_cases h : b ∈ l₂ <;> simp only [h, cons_bagInter_of_pos, cons_bagInter_of_neg, not_false_iff]
state_before: α : Type u_1
l l₁✝ l₂✝ : List α
p : α → Prop
a : α
inst✝ : DecidableEq α
b : α
l₁ l₂ : List α
⊢ List.bagInter (b :: l₁) l₂ <+ b :: l₁

tactic: exact (bagInter_sublist_left _ _).cons_cons _
state_before: case pos
α : Type u_1
l l₁✝ l₂✝ : List α
p : α → Prop
a : α
inst✝ : DecidableEq α
b : α
l₁ l₂ : List α
h : b ∈ l₂
⊢ b :: List.bagInter l₁ (List.erase l₂ b) <+ b :: l₁

tactic: apply sublist_cons_of_sublist
state_before: case neg
α : Type u_1
l l₁✝ l₂✝ : List α
p : α → Prop
a : α
inst✝ : DecidableEq α
b : α
l₁ l₂ : List α
h : ¬b ∈ l₂
⊢ List.bagInter l₁ l₂ <+ b :: l₁

tactic: apply bagInter_sublist_left
state_before: case neg.a
α : Type u_1
l l₁✝ l₂✝ : List α
p : α → Prop
a : α
inst✝ : DecidableEq α
b : α
l₁ l₂ : List α
h : ¬b ∈ l₂
⊢ List.bagInter l₁ l₂ <+ l₁
Theorem: Real.Angle.neg_eq_self_iff
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Angle.lean

tactic: rw [eq_comm, eq_neg_self_iff]
state_before: θ : Angle
⊢ -θ = θ ↔ θ = 0 ∨ θ = ↑π
Theorem: continuousOn_of_locally_continuousOn
File: Mathlib/Topology/ContinuousOn.lean

tactic: intro x xs
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.347413
δ : Type ?u.347416
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f : α → β
s : Set α
h : ∀ (x : α), x ∈ s → ∃ t, IsOpen t ∧ x ∈ t ∧ ContinuousOn f (s ∩ t)
⊢ ContinuousOn f s

tactic: rcases h x xs with ⟨t, open_t, xt, ct⟩
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.347413
δ : Type ?u.347416
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f : α → β
s : Set α
h : ∀ (x : α), x ∈ s → ∃ t, IsOpen t ∧ x ∈ t ∧ ContinuousOn f (s ∩ t)
x : α
xs : x ∈ s
⊢ ContinuousWithinAt f s x

tactic: have := ct x ⟨xs, xt⟩
state_before: case intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type ?u.347413
δ : Type ?u.347416
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f : α → β
s : Set α
h : ∀ (x : α), x ∈ s → ∃ t, IsOpen t ∧ x ∈ t ∧ ContinuousOn f (s ∩ t)
x : α
xs : x ∈ s
t : Set α
open_t : IsOpen t
xt : x ∈ t
ct : ContinuousOn f (s ∩ t)
⊢ ContinuousWithinAt f s x

tactic: rwa [ContinuousWithinAt, ← nhdsWithin_restrict _ xt open_t] at this
state_before: case intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type ?u.347413
δ : Type ?u.347416
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
f : α → β
s : Set α
h : ∀ (x : α), x ∈ s → ∃ t, IsOpen t ∧ x ∈ t ∧ ContinuousOn f (s ∩ t)
x : α
xs : x ∈ s
t : Set α
open_t : IsOpen t
xt : x ∈ t
ct : ContinuousOn f (s ∩ t)
this : ContinuousWithinAt f (s ∩ t) x
⊢ ContinuousWithinAt f s x
Theorem: eq_and_eq_of_le_of_le_of_mul_le
File: Mathlib/Algebra/Group/UniqueProds.lean

tactic: haveI := Mul.to_covariantClass_right A
state_before: A : Type u_1
inst✝⁴ : Mul A
inst✝³ : LinearOrder A
inst✝² : CovariantClass A A (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
inst✝¹ : CovariantClass A A (Function.swap fun x x_1 => x * x_1) fun x x_1 => x < x_1
inst✝ : ContravariantClass A A (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b a0 b0 : A
ha : a0 ≤ a
hb : b0 ≤ b
ab : a * b ≤ a0 * b0
⊢ a = a0 ∧ b = b0

tactic: have ha' : ¬a0 * b0 < a * b → ¬a0 < a := mt fun h ↦ mul_lt_mul_of_lt_of_le h hb
state_before: A : Type u_1
inst✝⁴ : Mul A
inst✝³ : LinearOrder A
inst✝² : CovariantClass A A (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
inst✝¹ : CovariantClass A A (Function.swap fun x x_1 => x * x_1) fun x x_1 => x < x_1
inst✝ : ContravariantClass A A (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b a0 b0 : A
ha : a0 ≤ a
hb : b0 ≤ b
ab : a * b ≤ a0 * b0
this : CovariantClass A A (Function.swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
⊢ a = a0 ∧ b = b0

tactic: have hb' : ¬a0 * b0 < a * b → ¬b0 < b := mt fun h ↦ mul_lt_mul_of_le_of_lt ha h
state_before: A : Type u_1
inst✝⁴ : Mul A
inst✝³ : LinearOrder A
inst✝² : CovariantClass A A (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
inst✝¹ : CovariantClass A A (Function.swap fun x x_1 => x * x_1) fun x x_1 => x < x_1
inst✝ : ContravariantClass A A (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b a0 b0 : A
ha : a0 ≤ a
hb : b0 ≤ b
ab : a * b ≤ a0 * b0
this : CovariantClass A A (Function.swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
ha' : ¬a0 * b0 < a * b → ¬a0 < a
⊢ a = a0 ∧ b = b0

tactic: push_neg  at ha' hb'
state_before: A : Type u_1
inst✝⁴ : Mul A
inst✝³ : LinearOrder A
inst✝² : CovariantClass A A (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
inst✝¹ : CovariantClass A A (Function.swap fun x x_1 => x * x_1) fun x x_1 => x < x_1
inst✝ : ContravariantClass A A (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b a0 b0 : A
ha : a0 ≤ a
hb : b0 ≤ b
ab : a * b ≤ a0 * b0
this : CovariantClass A A (Function.swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
ha' : ¬a0 * b0 < a * b → ¬a0 < a
hb' : ¬a0 * b0 < a * b → ¬b0 < b
⊢ a = a0 ∧ b = b0

tactic: exact ⟨ha.antisymm' (ha' ab), hb.antisymm' (hb' ab)⟩
state_before: A : Type u_1
inst✝⁴ : Mul A
inst✝³ : LinearOrder A
inst✝² : CovariantClass A A (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
inst✝¹ : CovariantClass A A (Function.swap fun x x_1 => x * x_1) fun x x_1 => x < x_1
inst✝ : ContravariantClass A A (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b a0 b0 : A
ha : a0 ≤ a
hb : b0 ≤ b
ab : a * b ≤ a0 * b0
this : CovariantClass A A (Function.swap fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
ha' : a * b ≤ a0 * b0 → a ≤ a0
hb' : a * b ≤ a0 * b0 → b ≤ b0
⊢ a = a0 ∧ b = b0
Theorem: Filter.principal_coprod_principal
File: Mathlib/Order/Filter/Prod.lean

tactic: rw [Filter.coprod, comap_principal, comap_principal, sup_principal, Set.prod_eq, compl_inter,
  preimage_compl, preimage_compl, compl_compl, compl_compl]
state_before: α : Type u_1
β : Type u_2
γ : Type ?u.62155
δ : Type ?u.62158
ι : Sort ?u.62161
f : Filter α
g : Filter β
s : Set α
t : Set β
⊢ Filter.coprod (𝓟 s) (𝓟 t) = 𝓟 ((sᶜ ×ˢ tᶜ)ᶜ)
Theorem: Finset.filter_and
File: Mathlib/Data/Finset/Basic.lean

tactic: simp [mem_filter, mem_inter, and_comm, and_left_comm, and_self_iff, and_assoc]
state_before: α : Type u_1
β : Type ?u.394516
γ : Type ?u.394519
p q : α → Prop
inst✝² : DecidablePred p
inst✝¹ : DecidablePred q
inst✝ : DecidableEq α
s : Finset α
x✝ : α
⊢ x✝ ∈ filter (fun a => p a ∧ q a) s ↔ x✝ ∈ filter p s ∩ filter q s
Theorem: IsSubgroup.eq_trivial_iff
File: Mathlib/Deprecated/Subgroup.lean

tactic: simp only [Set.ext_iff, IsSubgroup.mem_trivial]
state_before: G : Type u_1
H : Type ?u.34551
A : Type ?u.34554
a a₁ a₂ b c : G
inst✝ : Group G
s : Set G
hs : IsSubgroup s
⊢ s = trivial G ↔ ∀ (x : G), x ∈ s → x = 1

tactic: exact ⟨fun h x => (h x).1, fun h x => ⟨h x, fun hx => hx.symm ▸ hs.toIsSubmonoid.one_mem⟩⟩
state_before: G : Type u_1
H : Type ?u.34551
A : Type ?u.34554
a a₁ a₂ b c : G
inst✝ : Group G
s : Set G
hs : IsSubgroup s
⊢ (∀ (x : G), x ∈ s ↔ x = 1) ↔ ∀ (x : G), x ∈ s → x = 1
Theorem: SModEq.eval
File: Mathlib/LinearAlgebra/SModEq.lean

tactic: rw [SModEq.def] at h⊢
state_before: R✝ : Type ?u.82108
inst✝⁵ : Ring R✝
M : Type ?u.82114
inst✝⁴ : AddCommGroup M
inst✝³ : Module R✝ M
U U₁ U₂ : Submodule R✝ M
x✝ x₁ x₂ y✝ y₁ y₂ z z₁ z₂ : M
N : Type ?u.83145
inst✝² : AddCommGroup N
inst✝¹ : Module R✝ N
V V₁ V₂ : Submodule R✝ N
R : Type u_1
inst✝ : CommRing R
I : Ideal R
x y : R
h : x ≡ y [SMOD I]
f : R[X]
⊢ Polynomial.eval x f ≡ Polynomial.eval y f [SMOD I]

tactic: show Ideal.Quotient.mk I (f.eval x) = Ideal.Quotient.mk I (f.eval y)
state_before: R✝ : Type ?u.82108
inst✝⁵ : Ring R✝
M : Type ?u.82114
inst✝⁴ : AddCommGroup M
inst✝³ : Module R✝ M
U U₁ U₂ : Submodule R✝ M
x✝ x₁ x₂ y✝ y₁ y₂ z z₁ z₂ : M
N : Type ?u.83145
inst✝² : AddCommGroup N
inst✝¹ : Module R✝ N
V V₁ V₂ : Submodule R✝ N
R : Type u_1
inst✝ : CommRing R
I : Ideal R
x y : R
h : Submodule.Quotient.mk x = Submodule.Quotient.mk y
f : R[X]
⊢ Submodule.Quotient.mk (Polynomial.eval x f) = Submodule.Quotient.mk (Polynomial.eval y f)

tactic: replace h : Ideal.Quotient.mk I x = Ideal.Quotient.mk I y := h
state_before: R✝ : Type ?u.82108
inst✝⁵ : Ring R✝
M : Type ?u.82114
inst✝⁴ : AddCommGroup M
inst✝³ : Module R✝ M
U U₁ U₂ : Submodule R✝ M
x✝ x₁ x₂ y✝ y₁ y₂ z z₁ z₂ : M
N : Type ?u.83145
inst✝² : AddCommGroup N
inst✝¹ : Module R✝ N
V V₁ V₂ : Submodule R✝ N
R : Type u_1
inst✝ : CommRing R
I : Ideal R
x y : R
h : Submodule.Quotient.mk x = Submodule.Quotient.mk y
f : R[X]
⊢ ↑(Ideal.Quotient.mk I) (Polynomial.eval x f) = ↑(Ideal.Quotient.mk I) (Polynomial.eval y f)

tactic: rw [← Polynomial.eval₂_at_apply, ← Polynomial.eval₂_at_apply, h]
state_before: R✝ : Type ?u.82108
inst✝⁵ : Ring R✝
M : Type ?u.82114
inst✝⁴ : AddCommGroup M
inst✝³ : Module R✝ M
U U₁ U₂ : Submodule R✝ M
x✝ x₁ x₂ y✝ y₁ y₂ z z₁ z₂ : M
N : Type ?u.83145
inst✝² : AddCommGroup N
inst✝¹ : Module R✝ N
V V₁ V₂ : Submodule R✝ N
R : Type u_1
inst✝ : CommRing R
I : Ideal R
x y : R
f : R[X]
h : ↑(Ideal.Quotient.mk I) x = ↑(Ideal.Quotient.mk I) y
⊢ ↑(Ideal.Quotient.mk I) (Polynomial.eval x f) = ↑(Ideal.Quotient.mk I) (Polynomial.eval y f)
Theorem: BilinForm.flip_flip
File: Mathlib/LinearAlgebra/BilinearForm.lean

tactic: ext A
state_before: R : Type u_2
M : Type u_3
inst✝¹⁵ : Semiring R
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : Module R M
R₁ : Type ?u.234780
M₁ : Type ?u.234783
inst✝¹² : Ring R₁
inst✝¹¹ : AddCommGroup M₁
inst✝¹⁰ : Module R₁ M₁
R₂ : Type u_1
M₂ : Type ?u.235395
inst✝⁹ : CommSemiring R₂
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R₂ M₂
R₃ : Type ?u.235582
M₃ : Type ?u.235585
inst✝⁶ : CommRing R₃
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R₃ M₃
V : Type ?u.236173
K : Type ?u.236176
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
inst✝ : Algebra R₂ R
⊢ LinearEquiv.trans (flipHom R₂) (flipHom R₂) = LinearEquiv.refl R₂ (BilinForm R M)

tactic: simp
state_before: case h.H
R : Type u_2
M : Type u_3
inst✝¹⁵ : Semiring R
inst✝¹⁴ : AddCommMonoid M
inst✝¹³ : Module R M
R₁ : Type ?u.234780
M₁ : Type ?u.234783
inst✝¹² : Ring R₁
inst✝¹¹ : AddCommGroup M₁
inst✝¹⁰ : Module R₁ M₁
R₂ : Type u_1
M₂ : Type ?u.235395
inst✝⁹ : CommSemiring R₂
inst✝⁸ : AddCommMonoid M₂
inst✝⁷ : Module R₂ M₂
R₃ : Type ?u.235582
M₃ : Type ?u.235585
inst✝⁶ : CommRing R₃
inst✝⁵ : AddCommGroup M₃
inst✝⁴ : Module R₃ M₃
V : Type ?u.236173
K : Type ?u.236176
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
B : BilinForm R M
B₁ : BilinForm R₁ M₁
B₂ : BilinForm R₂ M₂
D : BilinForm R M
D₁ : BilinForm R₁ M₁
inst✝ : Algebra R₂ R
A : BilinForm R M
x✝ y✝ : M
⊢ bilin (↑(LinearEquiv.trans (flipHom R₂) (flipHom R₂)) A) x✝ y✝ =
    bilin (↑(LinearEquiv.refl R₂ (BilinForm R M)) A) x✝ y✝
Theorem: RatFunc.num_mul_dvd
File: Mathlib/FieldTheory/RatFunc.lean

tactic: by_cases hx : x = 0
state_before: K : Type u
inst✝ : Field K
x y : RatFunc K
⊢ num (x * y) ∣ num x * num y

tactic: by_cases hy : y = 0
state_before: case neg
K : Type u
inst✝ : Field K
x y : RatFunc K
hx : ¬x = 0
⊢ num (x * y) ∣ num x * num y

tactic: rw [num_dvd (mul_ne_zero (num_ne_zero hx) (num_ne_zero hy))]
state_before: case neg
K : Type u
inst✝ : Field K
x y : RatFunc K
hx : ¬x = 0
hy : ¬y = 0
⊢ num (x * y) ∣ num x * num y

tactic: refine' ⟨x.denom * y.denom, mul_ne_zero (denom_ne_zero x) (denom_ne_zero y), _⟩
state_before: case neg
K : Type u
inst✝ : Field K
x y : RatFunc K
hx : ¬x = 0
hy : ¬y = 0
⊢ ∃ q hq, x * y = ↑(algebraMap K[X] (RatFunc K)) (num x * num y) / ↑(algebraMap K[X] (RatFunc K)) q

tactic: rw [RingHom.map_mul, RingHom.map_mul, ← div_mul_div_comm, num_div_denom, num_div_denom]
state_before: case neg
K : Type u
inst✝ : Field K
x y : RatFunc K
hx : ¬x = 0
hy : ¬y = 0
⊢ x * y = ↑(algebraMap K[X] (RatFunc K)) (num x * num y) / ↑(algebraMap K[X] (RatFunc K)) (denom x * denom y)

tactic: simp [hx]
state_before: case pos
K : Type u
inst✝ : Field K
x y : RatFunc K
hx : x = 0
⊢ num (x * y) ∣ num x * num y

tactic: simp [hy]
state_before: case pos
K : Type u
inst✝ : Field K
x y : RatFunc K
hx : ¬x = 0
hy : y = 0
⊢ num (x * y) ∣ num x * num y
Theorem: Submodule.IsPrincipal.eq_bot_iff_generator_eq_zero
File: Mathlib/RingTheory/PrincipalIdealDomain.lean

tactic: rw [← @span_singleton_eq_bot R M, span_singleton_generator]
state_before: R : Type u
M : Type v
inst✝³ : AddCommGroup M
inst✝² : Ring R
inst✝¹ : Module R M
S : Submodule R M
inst✝ : IsPrincipal S
⊢ S = ⊥ ↔ generator S = 0
Theorem: Polynomial.content_X
File: Mathlib/RingTheory/Polynomial/Content.lean

tactic: rw [← mul_one X, content_X_mul, content_one]
state_before: R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsDomain R
inst✝ : NormalizedGCDMonoid R
⊢ content X = 1