1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: List.dropWhile_eq_nil_iff
File: Mathlib/Data/List/Basic.lean

tactic: induction' l with x xs IH
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p : α → Bool
l : List α
⊢ dropWhile p l = [] ↔ ∀ (x : α), x ∈ l → p x = true
state_after: case nil
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p : α → Bool
l : List α
⊢ dropWhile p [] = [] ↔ ∀ (x : α), x ∈ [] → p x = true

case cons
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p : α → Bool
l : List α
x : α
xs : List α
IH : dropWhile p xs = [] ↔ ∀ (x : α), x ∈ xs → p x = true
⊢ dropWhile p (x :: xs) = [] ↔ ∀ (x_1 : α), x_1 ∈ x :: xs → p x_1 = true

tactic: simp [dropWhile]
state_before: case nil
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p : α → Bool
l : List α
⊢ dropWhile p [] = [] ↔ ∀ (x : α), x ∈ [] → p x = true
state_after: no goals

tactic: by_cases hp : p x <;> simp [hp, dropWhile, IH]
state_before: case cons
ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p : α → Bool
l : List α
x : α
xs : List α
IH : dropWhile p xs = [] ↔ ∀ (x : α), x ∈ xs → p x = true
⊢ dropWhile p (x :: xs) = [] ↔ ∀ (x_1 : α), x_1 ∈ x :: xs → p x_1 = true
state_after: no goals
Theorem: LocalRing.finrank_cotangentSpace_eq_zero_iff
File: Mathlib/RingTheory/Ideal/Cotangent.lean

tactic: rw [finrank_zero_iff, subsingleton_cotangentSpace_iff]
state_before: R : Type u_1
inst✝² : CommRing R
inst✝¹ : LocalRing R
inst✝ : IsNoetherianRing R
⊢ finrank (ResidueField R) (CotangentSpace R) = 0 ↔ IsField R
state_after: no goals
Theorem: Set.le_einfsep_pair
File: Mathlib/Topology/MetricSpace/Infsep.lean

tactic: simp_rw [le_einfsep_iff, inf_le_iff, mem_insert_iff, mem_singleton_iff]
state_before: α : Type u_1
β : Type u_2
inst✝ : EDist α
x y : α
s t : Set α
⊢ edist x y ⊓ edist y x ≤ {x, y}.einfsep
state_after: α : Type u_1
β : Type u_2
inst✝ : EDist α
x y : α
s t : Set α
⊢ ∀ (x_1 : α),
    x_1 = x ∨ x_1 = y →
      ∀ (y_1 : α), y_1 = x ∨ y_1 = y → x_1 ≠ y_1 → edist x y ≤ edist x_1 y_1 ∨ edist y x ≤ edist x_1 y_1

tactic: rintro a (rfl | rfl) b (rfl | rfl) hab <;> (try simp only [le_refl, true_or, or_true]) <;>
  contradiction
state_before: α : Type u_1
β : Type u_2
inst✝ : EDist α
x y : α
s t : Set α
⊢ ∀ (x_1 : α),
    x_1 = x ∨ x_1 = y →
      ∀ (y_1 : α), y_1 = x ∨ y_1 = y → x_1 ≠ y_1 → edist x y ≤ edist x_1 y_1 ∨ edist y x ≤ edist x_1 y_1
state_after: no goals

tactic: try simp only [le_refl, true_or, or_true]
state_before: case inr.inl
α : Type u_1
β : Type u_2
inst✝ : EDist α
s t : Set α
a b : α
hab : a ≠ b
⊢ edist b a ≤ edist a b ∨ edist a b ≤ edist a b
state_after: no goals

tactic: simp only [le_refl, true_or, or_true]
state_before: case inr.inl
α : Type u_1
β : Type u_2
inst✝ : EDist α
s t : Set α
a b : α
hab : a ≠ b
⊢ edist b a ≤ edist a b ∨ edist a b ≤ edist a b
state_after: no goals
Theorem: neg_mul_comm
File: Mathlib/Algebra/Ring/Defs.lean

tactic: simp
state_before: α : Type u
β : Type v
γ : Type w
R : Type x
inst✝¹ : Mul α
inst✝ : HasDistribNeg α
a b : α
⊢ -a * b = a * -b
state_after: no goals
Theorem: Finset.coe_sup_of_nonempty
File: Mathlib/Data/Finset/Lattice.lean

tactic: simp only [← sup'_eq_sup h, coe_sup' h]
state_before: F : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
ι : Type u_5
κ : Type u_6
inst✝¹ : SemilatticeSup α
inst✝ : OrderBot α
s : Finset β
h : s.Nonempty
f : β → α
⊢ ↑(s.sup f) = s.sup (WithBot.some ∘ f)
state_after: no goals
Theorem: Ordinal.opow_le_of_limit
File: Mathlib/SetTheory/Ordinal/Exponential.lean

tactic: rw [opow_limit a0 h, bsup_le_iff]
state_before: a b c : Ordinal.{u_1}
a0 : a ≠ 0
h : b.IsLimit
⊢ a ^ b ≤ c ↔ ∀ b' < b, a ^ b' ≤ c
state_after: no goals
Theorem: Polynomial.degree_erase_le
File: Mathlib/Algebra/Polynomial/Degree/Definitions.lean

tactic: rcases p with ⟨p⟩
state_before: R : Type u
S : Type v
a b c d : R
n✝ m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
p : R[X]
n : ℕ
⊢ (erase n p).degree ≤ p.degree
state_after: case ofFinsupp
R : Type u
S : Type v
a b c d : R
n✝ m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
n : ℕ
p : AddMonoidAlgebra R ℕ
⊢ (erase n { toFinsupp := p }).degree ≤ { toFinsupp := p }.degree

tactic: simp only [erase_def, degree, coeff, support]
state_before: case ofFinsupp
R : Type u
S : Type v
a b c d : R
n✝ m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
n : ℕ
p : AddMonoidAlgebra R ℕ
⊢ (erase n { toFinsupp := p }).degree ≤ { toFinsupp := p }.degree
state_after: case ofFinsupp
R : Type u
S : Type v
a b c d : R
n✝ m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
n : ℕ
p : AddMonoidAlgebra R ℕ
⊢ (Finsupp.erase n p).support.max ≤ p.support.max

tactic: apply sup_mono
state_before: case ofFinsupp
R : Type u
S : Type v
a b c d : R
n✝ m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
n : ℕ
p : AddMonoidAlgebra R ℕ
⊢ (Finsupp.erase n p).support.max ≤ p.support.max
state_after: case ofFinsupp.h
R : Type u
S : Type v
a b c d : R
n✝ m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
n : ℕ
p : AddMonoidAlgebra R ℕ
⊢ (Finsupp.erase n p).support ⊆ p.support

tactic: rw [Finsupp.support_erase]
state_before: case ofFinsupp.h
R : Type u
S : Type v
a b c d : R
n✝ m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
n : ℕ
p : AddMonoidAlgebra R ℕ
⊢ (Finsupp.erase n p).support ⊆ p.support
state_after: case ofFinsupp.h
R : Type u
S : Type v
a b c d : R
n✝ m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
n : ℕ
p : AddMonoidAlgebra R ℕ
⊢ p.support.erase n ⊆ p.support

tactic: apply Finset.erase_subset
state_before: case ofFinsupp.h
R : Type u
S : Type v
a b c d : R
n✝ m : ℕ
inst✝ : Semiring R
p✝¹ p✝ q : R[X]
ι : Type u_1
n : ℕ
p : AddMonoidAlgebra R ℕ
⊢ p.support.erase n ⊆ p.support
state_after: no goals
Theorem: CategoryTheory.Limits.Types.pullbackIsoPullback_inv_snd_apply
File: Mathlib/CategoryTheory/Limits/Shapes/Types.lean

tactic: rw [elementwise_of% pullbackIsoPullback_inv_snd]
state_before: W X Y Z : Type u
f : X ⟶ Z
g : Y ⟶ Z
x : (pullbackCone f g).pt
⊢ pullback.snd ((pullbackIsoPullback f g).inv x) = (fun p => (↑p).2) x
state_after: no goals
Theorem: MeasureTheory.Measure.one_le_hausdorffMeasure_zero_of_nonempty
File: Mathlib/MeasureTheory/Measure/Hausdorff.lean

tactic: rcases h with ⟨x, hx⟩
state_before: ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
s : Set X
h : s.Nonempty
⊢ 1 ≤ μH[0] s
state_after: case intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
s : Set X
x : X
hx : x ∈ s
⊢ 1 ≤ μH[0] s

tactic: calc
  (1 : ℝ≥0∞) = μH[0] ({x} : Set X) := (hausdorffMeasure_zero_singleton x).symm
  _ ≤ μH[0] s := measure_mono (singleton_subset_iff.2 hx)
state_before: case intro
ι : Type u_1
X : Type u_2
Y : Type u_3
inst✝³ : EMetricSpace X
inst✝² : EMetricSpace Y
inst✝¹ : MeasurableSpace X
inst✝ : BorelSpace X
s : Set X
x : X
hx : x ∈ s
⊢ 1 ≤ μH[0] s
state_after: no goals
Theorem: toIcoMod_zsmul_add'
File: Mathlib/Algebra/Order/ToIntervalMod.lean

tactic: rw [add_comm, toIcoMod_add_zsmul', add_comm]
state_before: α : Type u_1
inst✝ : LinearOrderedAddCommGroup α
hα : Archimedean α
p : α
hp : 0 < p
a✝ b✝ c : α
n : ℤ
a b : α
m : ℤ
⊢ toIcoMod hp (m • p + a) b = m • p + toIcoMod hp a b
state_after: no goals
Theorem: MulChar.val_neg_one_eq_one_of_odd_order
File: Mathlib/NumberTheory/MulChar/Basic.lean

tactic: rw [← hn.neg_one_pow, map_pow, ← χ.pow_apply' (Nat.ne_of_odd_add hn), hχ]
state_before: R : Type u_1
R' : Type u_2
inst✝¹ : CommRing R
inst✝ : CommMonoidWithZero R'
χ : MulChar R R'
n : ℕ
hn : Odd n
hχ : χ ^ n = 1
⊢ χ (-1) = 1
state_after: R : Type u_1
R' : Type u_2
inst✝¹ : CommRing R
inst✝ : CommMonoidWithZero R'
χ : MulChar R R'
n : ℕ
hn : Odd n
hχ : χ ^ n = 1
⊢ 1 (-1) = 1

tactic: exact MulChar.one_apply_coe (-1)
state_before: R : Type u_1
R' : Type u_2
inst✝¹ : CommRing R
inst✝ : CommMonoidWithZero R'
χ : MulChar R R'
n : ℕ
hn : Odd n
hχ : χ ^ n = 1
⊢ 1 (-1) = 1
state_after: no goals
Theorem: List.Forall.imp
File: Mathlib/Data/List/Basic.lean

tactic: simp only [forall_cons, and_imp]
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p q : α → Prop
l✝ : List α
h : ∀ (x : α), p x → q x
x : α
l : List α
⊢ Forall p (x :: l) → Forall q (x :: l)
state_after: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p q : α → Prop
l✝ : List α
h : ∀ (x : α), p x → q x
x : α
l : List α
⊢ p x → Forall p l → q x ∧ Forall q l

tactic: rw [← and_imp]
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p q : α → Prop
l✝ : List α
h : ∀ (x : α), p x → q x
x : α
l : List α
⊢ p x → Forall p l → q x ∧ Forall q l
state_after: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p q : α → Prop
l✝ : List α
h : ∀ (x : α), p x → q x
x : α
l : List α
⊢ p x ∧ Forall p l → q x ∧ Forall q l

tactic: exact And.imp (h x) (Forall.imp h)
state_before: ι : Type u_1
α : Type u
β : Type v
γ : Type w
l₁ l₂ : List α
p q : α → Prop
l✝ : List α
h : ∀ (x : α), p x → q x
x : α
l : List α
⊢ p x ∧ Forall p l → q x ∧ Forall q l
state_after: no goals
Theorem: Finsupp.count_toMultiset
File: Mathlib/Data/Finsupp/Multiset.lean

tactic: rw [toMultiset_apply]
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : DecidableEq α
f : α →₀ ℕ
a : α
⊢ Multiset.count a (toMultiset f) = f.sum fun x n => Multiset.count a (n • {x})
state_after: α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : DecidableEq α
f : α →₀ ℕ
a : α
⊢ Multiset.count a (f.sum fun a n => n • {a}) = f.sum fun x n => Multiset.count a (n • {x})

tactic: exact map_sum (Multiset.countAddMonoidHom a) _ f.support
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : DecidableEq α
f : α →₀ ℕ
a : α
⊢ Multiset.count a (f.sum fun a n => n • {a}) = f.sum fun x n => Multiset.count a (n • {x})
state_after: no goals

tactic: simp only [Multiset.count_nsmul]
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : DecidableEq α
f : α →₀ ℕ
a : α
⊢ (f.sum fun x n => Multiset.count a (n • {x})) = f.sum fun x n => n * Multiset.count a {x}
state_after: no goals

tactic: simp only [Multiset.count_singleton, if_false, H.symm, mul_zero]
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : DecidableEq α
f : α →₀ ℕ
a a' : α
x✝ : f a' ≠ 0
H : a' ≠ a
⊢ f a' * Multiset.count a {a'} = 0
state_after: no goals

tactic: rw [Multiset.count_singleton_self, mul_one]
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
inst✝ : DecidableEq α
f : α →₀ ℕ
a : α
⊢ f a * Multiset.count a {a} = f a
state_after: no goals
Theorem: WittVector.mapFun.injective
File: Mathlib/RingTheory/WittVector/Basic.lean

tactic: intros _ _ h
state_before: p : ℕ
R : Type u_1
S : Type u_2
T : Type u_3
hp : Fact (Nat.Prime p)
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing T
α : Type u_4
β : Type u_5
f : α → β
hf : Injective f
⊢ Injective (mapFun f)
state_after: p : ℕ
R : Type u_1
S : Type u_2
T : Type u_3
hp : Fact (Nat.Prime p)
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing T
α : Type u_4
β : Type u_5
f : α → β
hf : Injective f
a₁✝ a₂✝ : 𝕎 α
h : mapFun f a₁✝ = mapFun f a₂✝
⊢ a₁✝ = a₂✝

tactic: ext p
state_before: p : ℕ
R : Type u_1
S : Type u_2
T : Type u_3
hp : Fact (Nat.Prime p)
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing T
α : Type u_4
β : Type u_5
f : α → β
hf : Injective f
a₁✝ a₂✝ : 𝕎 α
h : mapFun f a₁✝ = mapFun f a₂✝
⊢ a₁✝ = a₂✝
state_after: case h
p✝ : ℕ
R : Type u_1
S : Type u_2
T : Type u_3
hp : Fact (Nat.Prime p✝)
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing T
α : Type u_4
β : Type u_5
f : α → β
hf : Injective f
a₁✝ a₂✝ : WittVector p✝ α
h : mapFun f a₁✝ = mapFun f a₂✝
p : ℕ
⊢ a₁✝.coeff p = a₂✝.coeff p

tactic: exact hf (congr_arg (fun x => coeff x p) h : _)
state_before: case h
p✝ : ℕ
R : Type u_1
S : Type u_2
T : Type u_3
hp : Fact (Nat.Prime p✝)
inst✝² : CommRing R
inst✝¹ : CommRing S
inst✝ : CommRing T
α : Type u_4
β : Type u_5
f : α → β
hf : Injective f
a₁✝ a₂✝ : WittVector p✝ α
h : mapFun f a₁✝ = mapFun f a₂✝
p : ℕ
⊢ a₁✝.coeff p = a₂✝.coeff p
state_after: no goals
Theorem: ENNReal.trichotomy
File: Mathlib/Data/ENNReal/Real.lean

tactic: simpa only [or_iff_not_imp_left] using toReal_pos
state_before: a b c d : ℝ≥0∞
r p✝ q : ℝ≥0
p : ℝ≥0∞
⊢ p = 0 ∨ p = ⊤ ∨ 0 < p.toReal
state_after: no goals
Theorem: Ideal.map_le_comap_of_inv_on
File: Mathlib/RingTheory/Ideal/Maps.lean

tactic: refine Ideal.span_le.2 ?_
state_before: R : Type u
S : Type v
F : Type u_1
inst✝³ : Semiring R
inst✝² : Semiring S
inst✝¹ : FunLike F R S
rc : RingHomClass F R S
f : F
I✝ J : Ideal R
K L : Ideal S
G : Type u_2
inst✝ : FunLike G S R
rcg : RingHomClass G S R
g : G
I : Ideal R
hf : Set.LeftInvOn ⇑g ⇑f ↑I
⊢ map f I ≤ comap g I
state_after: R : Type u
S : Type v
F : Type u_1
inst✝³ : Semiring R
inst✝² : Semiring S
inst✝¹ : FunLike F R S
rc : RingHomClass F R S
f : F
I✝ J : Ideal R
K L : Ideal S
G : Type u_2
inst✝ : FunLike G S R
rcg : RingHomClass G S R
g : G
I : Ideal R
hf : Set.LeftInvOn ⇑g ⇑f ↑I
⊢ ⇑f '' ↑I ⊆ ↑(comap g I)

tactic: rintro x ⟨x, hx, rfl⟩
state_before: R : Type u
S : Type v
F : Type u_1
inst✝³ : Semiring R
inst✝² : Semiring S
inst✝¹ : FunLike F R S
rc : RingHomClass F R S
f : F
I✝ J : Ideal R
K L : Ideal S
G : Type u_2
inst✝ : FunLike G S R
rcg : RingHomClass G S R
g : G
I : Ideal R
hf : Set.LeftInvOn ⇑g ⇑f ↑I
⊢ ⇑f '' ↑I ⊆ ↑(comap g I)
state_after: case intro.intro
R : Type u
S : Type v
F : Type u_1
inst✝³ : Semiring R
inst✝² : Semiring S
inst✝¹ : FunLike F R S
rc : RingHomClass F R S
f : F
I✝ J : Ideal R
K L : Ideal S
G : Type u_2
inst✝ : FunLike G S R
rcg : RingHomClass G S R
g : G
I : Ideal R
hf : Set.LeftInvOn ⇑g ⇑f ↑I
x : R
hx : x ∈ ↑I
⊢ f x ∈ ↑(comap g I)

tactic: rw [SetLike.mem_coe, mem_comap, hf hx]
state_before: case intro.intro
R : Type u
S : Type v
F : Type u_1
inst✝³ : Semiring R
inst✝² : Semiring S
inst✝¹ : FunLike F R S
rc : RingHomClass F R S
f : F
I✝ J : Ideal R
K L : Ideal S
G : Type u_2
inst✝ : FunLike G S R
rcg : RingHomClass G S R
g : G
I : Ideal R
hf : Set.LeftInvOn ⇑g ⇑f ↑I
x : R
hx : x ∈ ↑I
⊢ f x ∈ ↑(comap g I)
state_after: case intro.intro
R : Type u
S : Type v
F : Type u_1
inst✝³ : Semiring R
inst✝² : Semiring S
inst✝¹ : FunLike F R S
rc : RingHomClass F R S
f : F
I✝ J : Ideal R
K L : Ideal S
G : Type u_2
inst✝ : FunLike G S R
rcg : RingHomClass G S R
g : G
I : Ideal R
hf : Set.LeftInvOn ⇑g ⇑f ↑I
x : R
hx : x ∈ ↑I
⊢ x ∈ I

tactic: exact hx
state_before: case intro.intro
R : Type u
S : Type v
F : Type u_1
inst✝³ : Semiring R
inst✝² : Semiring S
inst✝¹ : FunLike F R S
rc : RingHomClass F R S
f : F
I✝ J : Ideal R
K L : Ideal S
G : Type u_2
inst✝ : FunLike G S R
rcg : RingHomClass G S R
g : G
I : Ideal R
hf : Set.LeftInvOn ⇑g ⇑f ↑I
x : R
hx : x ∈ ↑I
⊢ x ∈ I
state_after: no goals
Theorem: Finset.mulEnergy_mono
File: Mathlib/Combinatorics/Additive/Energy.lean

tactic: unfold mulEnergy
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Mul α
s s₁ s₂ t t₁ t₂ : Finset α
hs : s₁ ⊆ s₂
ht : t₁ ⊆ t₂
⊢ Eₘ[s₁, t₁] ≤ Eₘ[s₂, t₂]
state_after: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Mul α
s s₁ s₂ t t₁ t₂ : Finset α
hs : s₁ ⊆ s₂
ht : t₁ ⊆ t₂
⊢ (filter (fun x => x.1.1 * x.2.1 = x.1.2 * x.2.2) ((s₁ ×ˢ s₁) ×ˢ t₁ ×ˢ t₁)).card ≤
    (filter (fun x => x.1.1 * x.2.1 = x.1.2 * x.2.2) ((s₂ ×ˢ s₂) ×ˢ t₂ ×ˢ t₂)).card

tactic: gcongr
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : Mul α
s s₁ s₂ t t₁ t₂ : Finset α
hs : s₁ ⊆ s₂
ht : t₁ ⊆ t₂
⊢ (filter (fun x => x.1.1 * x.2.1 = x.1.2 * x.2.2) ((s₁ ×ˢ s₁) ×ˢ t₁ ×ˢ t₁)).card ≤
    (filter (fun x => x.1.1 * x.2.1 = x.1.2 * x.2.2) ((s₂ ×ˢ s₂) ×ˢ t₂ ×ˢ t₂)).card
state_after: no goals
Theorem: Continuous.div₀
File: Mathlib/Topology/Algebra/GroupWithZero.lean

tactic: simpa only [div_eq_mul_inv] using hf.mul (hg.inv₀ h₀)
state_before: α : Type u_1
β : Type u_2
G₀ : Type u_3
inst✝⁵ : GroupWithZero G₀
inst✝⁴ : TopologicalSpace G₀
inst✝³ : HasContinuousInv₀ G₀
inst✝² : ContinuousMul G₀
f g : α → G₀
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
s : Set α
a : α
hf : Continuous f
hg : Continuous g
h₀ : ∀ (x : α), g x ≠ 0
⊢ Continuous fun x => f x / g x
state_after: no goals
Theorem: Int.ofNat_floor_eq_floor
File: Mathlib/Algebra/Order/Floor.lean

tactic: rw [← Int.floor_toNat, Int.toNat_of_nonneg (Int.floor_nonneg.2 ha)]
state_before: F : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : LinearOrderedRing α
inst✝ : FloorRing α
a : α
ha : 0 ≤ a
⊢ ↑⌊a⌋₊ = ⌊a⌋
state_after: no goals
Theorem: PrimeSpectrum.isClosed_iff_zeroLocus
File: Mathlib/AlgebraicGeometry/PrimeSpectrum/Basic.lean

tactic: rw [← isOpen_compl_iff, isOpen_iff, compl_compl]
state_before: R : Type u
S : Type v
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
Z : Set (PrimeSpectrum R)
⊢ IsClosed Z ↔ ∃ s, Z = zeroLocus s
state_after: no goals
Theorem: IsLowerSet.image
File: Mathlib/Order/UpperLower/Basic.lean

tactic: change IsLowerSet ((f : α ≃ β) '' s)
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
κ : ι → Sort u_5
inst✝¹ : Preorder α
inst✝ : Preorder β
s : Set α
p : α → Prop
a : α
hs : IsLowerSet s
f : α ≃o β
⊢ IsLowerSet (⇑f '' s)
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
κ : ι → Sort u_5
inst✝¹ : Preorder α
inst✝ : Preorder β
s : Set α
p : α → Prop
a : α
hs : IsLowerSet s
f : α ≃o β
⊢ IsLowerSet (⇑↑f '' s)

tactic: rw [Set.image_equiv_eq_preimage_symm]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
κ : ι → Sort u_5
inst✝¹ : Preorder α
inst✝ : Preorder β
s : Set α
p : α → Prop
a : α
hs : IsLowerSet s
f : α ≃o β
⊢ IsLowerSet (⇑↑f '' s)
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
κ : ι → Sort u_5
inst✝¹ : Preorder α
inst✝ : Preorder β
s : Set α
p : α → Prop
a : α
hs : IsLowerSet s
f : α ≃o β
⊢ IsLowerSet (⇑(↑f).symm ⁻¹' s)

tactic: exact hs.preimage f.symm.monotone
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
κ : ι → Sort u_5
inst✝¹ : Preorder α
inst✝ : Preorder β
s : Set α
p : α → Prop
a : α
hs : IsLowerSet s
f : α ≃o β
⊢ IsLowerSet (⇑(↑f).symm ⁻¹' s)
state_after: no goals
Theorem: IsAdjoinRootMonic.minpoly_eq
File: Mathlib/RingTheory/IsAdjoinRoot.lean

tactic: convert
  Associated.mul_left (minpoly R h.root) <|
    associated_one_iff_isUnit.2 <|
      (hirr.isUnit_or_isUnit hq).resolve_left <| minpoly.not_isUnit R h.root
state_before: R : Type u
S : Type v
inst✝⁶ : CommRing R
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
f : R[X]
inst✝³ : IsDomain R
inst✝² : IsDomain S
inst✝¹ : NoZeroSMulDivisors R S
inst✝ : IsIntegrallyClosed R
h : IsAdjoinRootMonic S f
hirr : Irreducible f
q : R[X]
hq : f = minpoly R h.root * q
⊢ Associated f (minpoly R h.root)
state_after: case h.e'_4
R : Type u
S : Type v
inst✝⁶ : CommRing R
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
f : R[X]
inst✝³ : IsDomain R
inst✝² : IsDomain S
inst✝¹ : NoZeroSMulDivisors R S
inst✝ : IsIntegrallyClosed R
h : IsAdjoinRootMonic S f
hirr : Irreducible f
q : R[X]
hq : f = minpoly R h.root * q
⊢ minpoly R h.root = minpoly R h.root * 1

tactic: rw [mul_one]
state_before: case h.e'_4
R : Type u
S : Type v
inst✝⁶ : CommRing R
inst✝⁵ : CommRing S
inst✝⁴ : Algebra R S
f : R[X]
inst✝³ : IsDomain R
inst✝² : IsDomain S
inst✝¹ : NoZeroSMulDivisors R S
inst✝ : IsIntegrallyClosed R
h : IsAdjoinRootMonic S f
hirr : Irreducible f
q : R[X]
hq : f = minpoly R h.root * q
⊢ minpoly R h.root = minpoly R h.root * 1
state_after: no goals
Theorem: Pell.asq_pos
File: Mathlib/NumberTheory/PellMatiyasevic.lean

tactic: have := @Nat.mul_le_mul_left 1 a a (le_of_lt a1)
state_before: a : ℕ
a1 : 1 < a
⊢ a ≤ a * a
state_after: a : ℕ
a1 : 1 < a
this : a * 1 ≤ a * a
⊢ a ≤ a * a

tactic: rwa [mul_one] at this
state_before: a : ℕ
a1 : 1 < a
this : a * 1 ≤ a * a
⊢ a ≤ a * a
state_after: no goals
Theorem: Matrix.mul_fin_two
File: Mathlib/Data/Matrix/Notation.lean

tactic: ext i j
state_before: α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : AddCommMonoid α
inst✝ : Mul α
a₁₁ a₁₂ a₂₁ a₂₂ b₁₁ b₁₂ b₂₁ b₂₂ : α
⊢ of ![![a₁₁, a₁₂], ![a₂₁, a₂₂]] * of ![![b₁₁, b₁₂], ![b₂₁, b₂₂]] =
    of ![![a₁₁ * b₁₁ + a₁₂ * b₂₁, a₁₁ * b₁₂ + a₁₂ * b₂₂], ![a₂₁ * b₁₁ + a₂₂ * b₂₁, a₂₁ * b₁₂ + a₂₂ * b₂₂]]
state_after: case a
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : AddCommMonoid α
inst✝ : Mul α
a₁₁ a₁₂ a₂₁ a₂₂ b₁₁ b₁₂ b₂₁ b₂₂ : α
i j : Fin 2
⊢ (of ![![a₁₁, a₁₂], ![a₂₁, a₂₂]] * of ![![b₁₁, b₁₂], ![b₂₁, b₂₂]]) i j =
    of ![![a₁₁ * b₁₁ + a₁₂ * b₂₁, a₁₁ * b₁₂ + a₁₂ * b₂₂], ![a₂₁ * b₁₁ + a₂₂ * b₂₁, a₂₁ * b₁₂ + a₂₂ * b₂₂]] i j

tactic: fin_cases i <;> fin_cases j <;> simp [Matrix.mul_apply, dotProduct, Fin.sum_univ_succ]
state_before: case a
α : Type u
o n m : ℕ
m' : Type uₘ
n' : Type uₙ
o' : Type uₒ
a b : ℕ
inst✝¹ : AddCommMonoid α
inst✝ : Mul α
a₁₁ a₁₂ a₂₁ a₂₂ b₁₁ b₁₂ b₂₁ b₂₂ : α
i j : Fin 2
⊢ (of ![![a₁₁, a₁₂], ![a₂₁, a₂₂]] * of ![![b₁₁, b₁₂], ![b₂₁, b₂₂]]) i j =
    of ![![a₁₁ * b₁₁ + a₁₂ * b₂₁, a₁₁ * b₁₂ + a₁₂ * b₂₂], ![a₂₁ * b₁₁ + a₂₂ * b₂₁, a₂₁ * b₁₂ + a₂₂ * b₂₂]] i j
state_after: no goals
Theorem: Stonean.Sigma.openEmbedding_ι
File: Mathlib/Topology/Category/Stonean/Limits.lean

tactic: refine OpenEmbedding.of_comp _ (homeoOfIso (coproductIsoCoproduct Z).symm).openEmbedding ?_
state_before: α✝ : Type
inst✝¹ : Finite α✝
B : Stonean
X : α✝ → Stonean
α : Type
inst✝ : Finite α
Z : α → Stonean
a : α
⊢ OpenEmbedding ⇑(Sigma.ι Z a)
state_after: α✝ : Type
inst✝¹ : Finite α✝
B : Stonean
X : α✝ → Stonean
α : Type
inst✝ : Finite α
Z : α → Stonean
a : α
⊢ OpenEmbedding (⇑(homeoOfIso (coproductIsoCoproduct Z).symm) ∘ ⇑(Sigma.ι Z a))

tactic: convert finiteCoproduct.openEmbedding_ι Z a
state_before: α✝ : Type
inst✝¹ : Finite α✝
B : Stonean
X : α✝ → Stonean
α : Type
inst✝ : Finite α
Z : α → Stonean
a : α
⊢ OpenEmbedding (⇑(homeoOfIso (coproductIsoCoproduct Z).symm) ∘ ⇑(Sigma.ι Z a))
state_after: case h.e'_5
α✝ : Type
inst✝¹ : Finite α✝
B : Stonean
X : α✝ → Stonean
α : Type
inst✝ : Finite α
Z : α → Stonean
a : α
⊢ ⇑(homeoOfIso (coproductIsoCoproduct Z).symm) ∘ ⇑(Sigma.ι Z a) = ⇑(finiteCoproduct.ι Z a)

tactic: ext x
state_before: case h.e'_5
α✝ : Type
inst✝¹ : Finite α✝
B : Stonean
X : α✝ → Stonean
α : Type
inst✝ : Finite α
Z : α → Stonean
a : α
⊢ ⇑(homeoOfIso (coproductIsoCoproduct Z).symm) ∘ ⇑(Sigma.ι Z a) = ⇑(finiteCoproduct.ι Z a)
state_after: case h.e'_5.h
α✝ : Type
inst✝¹ : Finite α✝
B : Stonean
X : α✝ → Stonean
α : Type
inst✝ : Finite α
Z : α → Stonean
a : α
x : CoeSort.coe (Z a)
⊢ (⇑(homeoOfIso (coproductIsoCoproduct Z).symm) ∘ ⇑(Sigma.ι Z a)) x = (finiteCoproduct.ι Z a) x

tactic: change ((Sigma.ι Z a) ≫ (coproductIsoCoproduct Z).inv) x = _
state_before: case h.e'_5.h
α✝ : Type
inst✝¹ : Finite α✝
B : Stonean
X : α✝ → Stonean
α : Type
inst✝ : Finite α
Z : α → Stonean
a : α
x : CoeSort.coe (Z a)
⊢ (⇑(homeoOfIso (coproductIsoCoproduct Z).symm) ∘ ⇑(Sigma.ι Z a)) x = (finiteCoproduct.ι Z a) x
state_after: case h.e'_5.h
α✝ : Type
inst✝¹ : Finite α✝
B : Stonean
X : α✝ → Stonean
α : Type
inst✝ : Finite α
Z : α → Stonean
a : α
x : CoeSort.coe (Z a)
⊢ (Sigma.ι Z a ≫ (coproductIsoCoproduct Z).inv) x = (finiteCoproduct.ι Z a) x

tactic: simp [coproductIsoCoproduct]
state_before: case h.e'_5.h
α✝ : Type
inst✝¹ : Finite α✝
B : Stonean
X : α✝ → Stonean
α : Type
inst✝ : Finite α
Z : α → Stonean
a : α
x : CoeSort.coe (Z a)
⊢ (Sigma.ι Z a ≫ (coproductIsoCoproduct Z).inv) x = (finiteCoproduct.ι Z a) x
state_after: no goals
Theorem: List.headI_mul_tail_prod_of_ne_nil
File: Mathlib/Algebra/BigOperators/Group/List.lean

tactic: cases l <;> [contradiction; simp]
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
M : Type u_4
N : Type u_5
P : Type u_6
G : Type u_7
inst✝³ : Monoid M
inst✝² : Monoid N
inst✝¹ : Monoid P
l✝ l₁ l₂ : List M
a : M
inst✝ : Inhabited M
l : List M
h : l ≠ []
⊢ l.headI * l.tail.prod = l.prod
state_after: no goals