1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: CoxeterSystem.length_simple_mul
File: Mathlib/GroupTheory/Coxeter/Length.lean

tactic: have := cs.length_mul_simple w⁻¹ i
state_before: B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
w : W
i : B
⊢ cs.length (cs.simple i * w) = cs.length w + 1 ∨ cs.length (cs.simple i * w) + 1 = cs.length w
state_after: B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
w : W
i : B
this : cs.length (w⁻¹ * cs.simple i) = cs.length w⁻¹ + 1 ∨ cs.length (w⁻¹ * cs.simple i) + 1 = cs.length w⁻¹
⊢ cs.length (cs.simple i * w) = cs.length w + 1 ∨ cs.length (cs.simple i * w) + 1 = cs.length w

tactic: rwa [(by simp : w⁻¹ * (s i) = ((s i) * w)⁻¹), length_inv, length_inv] at this
state_before: B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
w : W
i : B
this : cs.length (w⁻¹ * cs.simple i) = cs.length w⁻¹ + 1 ∨ cs.length (w⁻¹ * cs.simple i) + 1 = cs.length w⁻¹
⊢ cs.length (cs.simple i * w) = cs.length w + 1 ∨ cs.length (cs.simple i * w) + 1 = cs.length w
state_after: no goals

tactic: simp
state_before: B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
w : W
i : B
this : cs.length (w⁻¹ * cs.simple i) = cs.length w⁻¹ + 1 ∨ cs.length (w⁻¹ * cs.simple i) + 1 = cs.length w⁻¹
⊢ w⁻¹ * cs.simple i = (cs.simple i * w)⁻¹
state_after: no goals
Theorem: Int.natCast_covBy
File: Mathlib/Data/Int/SuccPred.lean

tactic: rw [Nat.covBy_iff_succ_eq, Int.covBy_iff_succ_eq]
state_before: a b : ℕ
⊢ ↑a ⋖ ↑b ↔ a ⋖ b
state_after: a b : ℕ
⊢ ↑a + 1 = ↑b ↔ a + 1 = b

tactic: exact Int.natCast_inj
state_before: a b : ℕ
⊢ ↑a + 1 = ↑b ↔ a + 1 = b
state_after: no goals
Theorem: LowerSet.mem_iInf₂_iff
File: Mathlib/Order/UpperLower/Basic.lean

tactic: simp_rw [mem_iInf_iff]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
κ : ι → Sort u_5
inst✝ : LE α
S : Set (LowerSet α)
s t : LowerSet α
a : α
f : (i : ι) → κ i → LowerSet α
⊢ a ∈ ⨅ i, ⨅ j, f i j ↔ ∀ (i : ι) (j : κ i), a ∈ f i j
state_after: no goals
Theorem: FractionalIdeal.inv_le_dual
File: Mathlib/RingTheory/DedekindDomain/Different.lean

tactic: simp [hI]
state_before: A : Type u_1
K : Type u_2
L : Type u
B : Type u_3
inst✝¹⁹ : CommRing A
inst✝¹⁸ : Field K
inst✝¹⁷ : CommRing B
inst✝¹⁶ : Field L
inst✝¹⁵ : Algebra A K
inst✝¹⁴ : Algebra B L
inst✝¹³ : Algebra A B
inst✝¹² : Algebra K L
inst✝¹¹ : Algebra A L
inst✝¹⁰ : IsScalarTower A K L
inst✝⁹ : IsScalarTower A B L
inst✝⁸ : IsDomain A
inst✝⁷ : IsDomain B
inst✝⁶ : IsFractionRing A K
inst✝⁵ : IsIntegralClosure B A L
inst✝⁴ : IsFractionRing B L
inst✝³ : FiniteDimensional K L
inst✝² : IsSeparable K L
inst✝¹ : IsIntegrallyClosed A
inst✝ : IsDedekindDomain B
I J : FractionalIdeal B⁰ L
hI✝ : I ≠ 0
hJ : J ≠ 0
hI : I = 0
⊢ I⁻¹ ≤ dual A K I
state_after: no goals
Theorem: List.getD_eq_getD_get?
File: Mathlib/Data/List/GetD.lean

tactic: cases Nat.lt_or_ge n l.length with
| inl h => rw [getD_eq_get _ _ h, get?_eq_get h, Option.getD_some]
| inr h => rw [getD_eq_default _ _ h, get?_eq_none.mpr h, Option.getD_none]
state_before: α : Type u
β : Type v
l : List α
x : α
xs : List α
n✝ : ℕ
d : α
n : ℕ
⊢ l.getD n d = (l.get? n).getD d
state_after: no goals

tactic: rw [getD_eq_get _ _ h, get?_eq_get h, Option.getD_some]
state_before: case inl
α : Type u
β : Type v
l : List α
x : α
xs : List α
n✝ : ℕ
d : α
n : ℕ
h : n < l.length
⊢ l.getD n d = (l.get? n).getD d
state_after: no goals

tactic: rw [getD_eq_default _ _ h, get?_eq_none.mpr h, Option.getD_none]
state_before: case inr
α : Type u
β : Type v
l : List α
x : α
xs : List α
n✝ : ℕ
d : α
n : ℕ
h : n ≥ l.length
⊢ l.getD n d = (l.get? n).getD d
state_after: no goals
Theorem: HahnSeries.ofPowerSeries_X_pow
File: Mathlib/RingTheory/HahnSeries/PowerSeries.lean

tactic: simp
state_before: Γ : Type u_1
R✝ : Type u_2
inst✝² : Semiring R✝
inst✝¹ : StrictOrderedSemiring Γ
R : Type u_3
inst✝ : Semiring R
n : ℕ
⊢ (ofPowerSeries Γ R) (PowerSeries.X ^ n) = (single ↑n) 1
state_after: no goals
Theorem: le_of_le_mul_right
File: Mathlib/Algebra/Order/GroupWithZero/Canonical.lean

tactic: simpa only [mul_inv_cancel_right₀ h] using mul_le_mul_right' hab c⁻¹
state_before: α : Type u_1
inst✝ : LinearOrderedCommGroupWithZero α
a b c d : α
m n : ℕ
h : c ≠ 0
hab : a * c ≤ b * c
⊢ a ≤ b
state_after: no goals
Theorem: one_lt_gold
File: Mathlib/Data/Real/GoldenRatio.lean

tactic: refine lt_of_mul_lt_mul_left ?_ (le_of_lt gold_pos)
state_before: ⊢ 1 < φ
state_after: ⊢ φ * 1 < φ * φ

tactic: simp [← sq, gold_pos, zero_lt_one, - div_pow]
state_before: ⊢ φ * 1 < φ * φ
state_after: no goals
Theorem: LSeries.convolution_def
File: Mathlib/NumberTheory/LSeries/Convolution.lean

tactic: ext n
state_before: R : Type u_1
inst✝ : Semiring R
f g : ℕ → R
⊢ f ⍟ g = fun n => ∑ p ∈ n.divisorsAntidiagonal, f p.1 * g p.2
state_after: case h
R : Type u_1
inst✝ : Semiring R
f g : ℕ → R
n : ℕ
⊢ (f ⍟ g) n = ∑ p ∈ n.divisorsAntidiagonal, f p.1 * g p.2

tactic: simp only [convolution, toArithmeticFunction, ArithmeticFunction.mul_apply,
  ArithmeticFunction.coe_mk, mul_ite, mul_zero, ite_mul, zero_mul]
state_before: case h
R : Type u_1
inst✝ : Semiring R
f g : ℕ → R
n : ℕ
⊢ (f ⍟ g) n = ∑ p ∈ n.divisorsAntidiagonal, f p.1 * g p.2
state_after: case h
R : Type u_1
inst✝ : Semiring R
f g : ℕ → R
n : ℕ
⊢ (∑ x ∈ n.divisorsAntidiagonal, if x.2 = 0 then 0 else if x.1 = 0 then 0 else f x.1 * g x.2) =
    ∑ p ∈ n.divisorsAntidiagonal, f p.1 * g p.2

tactic: refine Finset.sum_congr rfl fun p hp ↦ ?_
state_before: case h
R : Type u_1
inst✝ : Semiring R
f g : ℕ → R
n : ℕ
⊢ (∑ x ∈ n.divisorsAntidiagonal, if x.2 = 0 then 0 else if x.1 = 0 then 0 else f x.1 * g x.2) =
    ∑ p ∈ n.divisorsAntidiagonal, f p.1 * g p.2
state_after: case h
R : Type u_1
inst✝ : Semiring R
f g : ℕ → R
n : ℕ
p : ℕ × ℕ
hp : p ∈ n.divisorsAntidiagonal
⊢ (if p.2 = 0 then 0 else if p.1 = 0 then 0 else f p.1 * g p.2) = f p.1 * g p.2

tactic: obtain ⟨h₁, h₂⟩ := ne_zero_of_mem_divisorsAntidiagonal hp
state_before: case h
R : Type u_1
inst✝ : Semiring R
f g : ℕ → R
n : ℕ
p : ℕ × ℕ
hp : p ∈ n.divisorsAntidiagonal
⊢ (if p.2 = 0 then 0 else if p.1 = 0 then 0 else f p.1 * g p.2) = f p.1 * g p.2
state_after: case h.intro
R : Type u_1
inst✝ : Semiring R
f g : ℕ → R
n : ℕ
p : ℕ × ℕ
hp : p ∈ n.divisorsAntidiagonal
h₁ : p.1 ≠ 0
h₂ : p.2 ≠ 0
⊢ (if p.2 = 0 then 0 else if p.1 = 0 then 0 else f p.1 * g p.2) = f p.1 * g p.2

tactic: simp only [h₂, ↓reduceIte, h₁]
state_before: case h.intro
R : Type u_1
inst✝ : Semiring R
f g : ℕ → R
n : ℕ
p : ℕ × ℕ
hp : p ∈ n.divisorsAntidiagonal
h₁ : p.1 ≠ 0
h₂ : p.2 ≠ 0
⊢ (if p.2 = 0 then 0 else if p.1 = 0 then 0 else f p.1 * g p.2) = f p.1 * g p.2
state_after: no goals
Theorem: Sbtw.oangle_eq_add_pi_left
File: Mathlib/Geometry/Euclidean/Angle/Oriented/Affine.lean

tactic: rw [← h.oangle₁₂₃_eq_pi, oangle_add_swap h.left_ne h.right_ne hp₃p₂]
state_before: V : Type u_1
P : Type u_2
inst✝⁴ : NormedAddCommGroup V
inst✝³ : InnerProductSpace ℝ V
inst✝² : MetricSpace P
inst✝¹ : NormedAddTorsor V P
hd2 : Fact (finrank ℝ V = 2)
inst✝ : Module.Oriented ℝ V (Fin 2)
p₁ p₁' p₂ p₃ : P
h : Sbtw ℝ p₁ p₂ p₁'
hp₃p₂ : p₃ ≠ p₂
⊢ ∡ p₁ p₂ p₃ = ∡ p₁' p₂ p₃ + ↑π
state_after: no goals
Theorem: Relation.reflTransGen_eq_self
File: Mathlib/Logic/Relation.lean

tactic: induction' h with b c _ h₂ IH
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ε : Type u_5
ζ : Type u_6
r : α → α → Prop
a✝ b✝ c d : α
refl : Reflexive r
trans : Transitive r
a b : α
h : ReflTransGen r a b
⊢ r a b
state_after: case refl
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ε : Type u_5
ζ : Type u_6
r : α → α → Prop
a✝ b✝ c d : α
refl : Reflexive r
trans : Transitive r
a b : α
⊢ r a a

case tail
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ε : Type u_5
ζ : Type u_6
r : α → α → Prop
a✝¹ b✝¹ c✝ d : α
refl : Reflexive r
trans : Transitive r
a b✝ b c : α
a✝ : ReflTransGen r a b
h₂ : r b c
IH : r a b
⊢ r a c

tactic: apply refl
state_before: case refl
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ε : Type u_5
ζ : Type u_6
r : α → α → Prop
a✝ b✝ c d : α
refl : Reflexive r
trans : Transitive r
a b : α
⊢ r a a
state_after: no goals

tactic: exact trans IH h₂
state_before: case tail
α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
ε : Type u_5
ζ : Type u_6
r : α → α → Prop
a✝¹ b✝¹ c✝ d : α
refl : Reflexive r
trans : Transitive r
a b✝ b c : α
a✝ : ReflTransGen r a b
h₂ : r b c
IH : r a b
⊢ r a c
state_after: no goals
Theorem: liftOfDerivationToSquareZero_mk_apply'
File: Mathlib/RingTheory/Derivation/ToSquareZero.lean

tactic: simp only [Ideal.Quotient.eq_zero_iff_mem.mpr (d x).prop, zero_add]
state_before: R : Type u
A : Type v
B : Type w
inst✝⁶ : CommSemiring R
inst✝⁵ : CommSemiring A
inst✝⁴ : CommRing B
inst✝³ : Algebra R A
inst✝² : Algebra R B
I : Ideal B
hI : I ^ 2 = ⊥
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
d : Derivation R A ↥I
x : A
⊢ (Ideal.Quotient.mk I) ↑(d x) + (algebraMap A (B ⧸ I)) x = (algebraMap A (B ⧸ I)) x
state_after: no goals
Theorem: MvPolynomial.monomial_add_single
File: Mathlib/Algebra/MvPolynomial/Basic.lean

tactic: rw [X_pow_eq_monomial, monomial_mul, mul_one]
state_before: R : Type u
S₁ : Type v
S₂ : Type w
S₃ : Type x
σ : Type u_1
a a' a₁ a₂ : R
e : ℕ
n m : σ
s : σ →₀ ℕ
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S₁
p q : MvPolynomial σ R
⊢ (monomial (s + Finsupp.single n e)) a = (monomial s) a * X n ^ e
state_after: no goals
Theorem: SimpleGraph.Walk.append_assoc
File: Mathlib/Combinatorics/SimpleGraph/Connectivity.lean

tactic: induction p with
| nil => rfl
| cons h p' ih =>
  dsimp only [append]
  rw [ih]
state_before: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v w x : V
p : G.Walk u v
q : G.Walk v w
r : G.Walk w x
⊢ p.append (q.append r) = (p.append q).append r
state_after: no goals

tactic: rfl
state_before: case nil
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v w x : V
r : G.Walk w x
u✝ : V
q : G.Walk u✝ w
⊢ nil.append (q.append r) = (nil.append q).append r
state_after: no goals

tactic: dsimp only [append]
state_before: case cons
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v w x : V
r : G.Walk w x
u✝ v✝ w✝ : V
h : G.Adj u✝ v✝
p' : G.Walk v✝ w✝
ih : ∀ (q : G.Walk w✝ w), p'.append (q.append r) = (p'.append q).append r
q : G.Walk w✝ w
⊢ (cons h p').append (q.append r) = ((cons h p').append q).append r
state_after: case cons
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v w x : V
r : G.Walk w x
u✝ v✝ w✝ : V
h : G.Adj u✝ v✝
p' : G.Walk v✝ w✝
ih : ∀ (q : G.Walk w✝ w), p'.append (q.append r) = (p'.append q).append r
q : G.Walk w✝ w
⊢ cons h (p'.append (q.append r)) = cons h ((p'.append q).append r)

tactic: rw [ih]
state_before: case cons
V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u v w x : V
r : G.Walk w x
u✝ v✝ w✝ : V
h : G.Adj u✝ v✝
p' : G.Walk v✝ w✝
ih : ∀ (q : G.Walk w✝ w), p'.append (q.append r) = (p'.append q).append r
q : G.Walk w✝ w
⊢ cons h (p'.append (q.append r)) = cons h ((p'.append q).append r)
state_after: no goals
Theorem: Matrix.charmatrix_apply_natDegree_le
File: Mathlib/LinearAlgebra/Matrix/Charpoly/Coeff.lean

tactic: split_ifs with h <;> simp [h, natDegree_X_le]
state_before: R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M : Matrix n n R
i j : n
⊢ (M.charmatrix i j).natDegree ≤ if i = j then 1 else 0
state_after: no goals
Theorem: Set.iUnion_Ico_left
File: Mathlib/Order/Interval/Set/Disjoint.lean

tactic: simp only [← Ici_inter_Iio, ← iUnion_inter, iUnion_Ici, univ_inter]
state_before: ι : Sort u
α : Type v
β : Type w
inst✝ : Preorder α
a b✝ c b : α
⊢ ⋃ a, Ico a b = Iio b
state_after: no goals
Theorem: Orientation.kahler_comp_rightAngleRotation'
File: Mathlib/Analysis/InnerProductSpace/TwoDim.lean

tactic: linear_combination -o.kahler x y * Complex.I_sq
state_before: E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
x y : E
⊢ -(Complex.I * (Complex.I * (o.kahler x) y)) = (o.kahler x) y
state_after: no goals
Theorem: DihedralGroup.commProb_odd
File: Mathlib/GroupTheory/CommutingProbability.lean

tactic: rw [commProb_def', DihedralGroup.card_conjClasses_odd hn, nat_card]
state_before: M : Type u_1
inst✝³ : Mul M
inst✝² : Finite M
G : Type u_2
inst✝¹ : Group G
inst✝ : Finite G
H : Subgroup G
n : ℕ
hn : Odd n
⊢ commProb (DihedralGroup n) = (↑n + 3) / (4 * ↑n)
state_after: M : Type u_1
inst✝³ : Mul M
inst✝² : Finite M
G : Type u_2
inst✝¹ : Group G
inst✝ : Finite G
H : Subgroup G
n : ℕ
hn : Odd n
⊢ ↑((n + 3) / 2) / ↑(2 * n) = (↑n + 3) / (4 * ↑n)

tactic: qify [show 2 ∣ n + 3 by rw [Nat.dvd_iff_mod_eq_zero, Nat.add_mod, Nat.odd_iff.mp hn]]
state_before: M : Type u_1
inst✝³ : Mul M
inst✝² : Finite M
G : Type u_2
inst✝¹ : Group G
inst✝ : Finite G
H : Subgroup G
n : ℕ
hn : Odd n
⊢ ↑((n + 3) / 2) / ↑(2 * n) = (↑n + 3) / (4 * ↑n)
state_after: M : Type u_1
inst✝³ : Mul M
inst✝² : Finite M
G : Type u_2
inst✝¹ : Group G
inst✝ : Finite G
H : Subgroup G
n : ℕ
hn : Odd n
⊢ (↑n + 3) / 2 / (2 * ↑n) = (↑n + 3) / (4 * ↑n)

tactic: rw [div_div, ← mul_assoc]
state_before: M : Type u_1
inst✝³ : Mul M
inst✝² : Finite M
G : Type u_2
inst✝¹ : Group G
inst✝ : Finite G
H : Subgroup G
n : ℕ
hn : Odd n
⊢ (↑n + 3) / 2 / (2 * ↑n) = (↑n + 3) / (4 * ↑n)
state_after: M : Type u_1
inst✝³ : Mul M
inst✝² : Finite M
G : Type u_2
inst✝¹ : Group G
inst✝ : Finite G
H : Subgroup G
n : ℕ
hn : Odd n
⊢ (↑n + 3) / (2 * 2 * ↑n) = (↑n + 3) / (4 * ↑n)

tactic: congr
state_before: M : Type u_1
inst✝³ : Mul M
inst✝² : Finite M
G : Type u_2
inst✝¹ : Group G
inst✝ : Finite G
H : Subgroup G
n : ℕ
hn : Odd n
⊢ (↑n + 3) / (2 * 2 * ↑n) = (↑n + 3) / (4 * ↑n)
state_after: no goals

tactic: rw [Nat.dvd_iff_mod_eq_zero, Nat.add_mod, Nat.odd_iff.mp hn]
state_before: M : Type u_1
inst✝³ : Mul M
inst✝² : Finite M
G : Type u_2
inst✝¹ : Group G
inst✝ : Finite G
H : Subgroup G
n : ℕ
hn : Odd n
⊢ 2 ∣ n + 3
state_after: no goals
Theorem: closedEmbedding_of_continuous_injective_closed
File: Mathlib/Topology/Maps.lean

tactic: refine closedEmbedding_of_embedding_closed ⟨⟨?_⟩, h₂⟩ h₃
state_before: X : Type u_1
Y : Type u_2
Z : Type u_3
ι : Type u_4
f : X → Y
g : Y → Z
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
h₁ : Continuous f
h₂ : Injective f
h₃ : IsClosedMap f
⊢ ClosedEmbedding f
state_after: X : Type u_1
Y : Type u_2
Z : Type u_3
ι : Type u_4
f : X → Y
g : Y → Z
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
h₁ : Continuous f
h₂ : Injective f
h₃ : IsClosedMap f
⊢ inst✝² = induced f inst✝¹

tactic: refine h₁.le_induced.antisymm fun s hs => ?_
state_before: X : Type u_1
Y : Type u_2
Z : Type u_3
ι : Type u_4
f : X → Y
g : Y → Z
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
h₁ : Continuous f
h₂ : Injective f
h₃ : IsClosedMap f
⊢ inst✝² = induced f inst✝¹
state_after: X : Type u_1
Y : Type u_2
Z : Type u_3
ι : Type u_4
f : X → Y
g : Y → Z
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
h₁ : Continuous f
h₂ : Injective f
h₃ : IsClosedMap f
s : Set X
hs : IsOpen s
⊢ IsOpen s

tactic: refine ⟨(f '' sᶜ)ᶜ, (h₃ _ hs.isClosed_compl).isOpen_compl, ?_⟩
state_before: X : Type u_1
Y : Type u_2
Z : Type u_3
ι : Type u_4
f : X → Y
g : Y → Z
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
h₁ : Continuous f
h₂ : Injective f
h₃ : IsClosedMap f
s : Set X
hs : IsOpen s
⊢ IsOpen s
state_after: X : Type u_1
Y : Type u_2
Z : Type u_3
ι : Type u_4
f : X → Y
g : Y → Z
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
h₁ : Continuous f
h₂ : Injective f
h₃ : IsClosedMap f
s : Set X
hs : IsOpen s
⊢ f ⁻¹' (f '' sᶜ)ᶜ = s

tactic: rw [preimage_compl, preimage_image_eq _ h₂, compl_compl]
state_before: X : Type u_1
Y : Type u_2
Z : Type u_3
ι : Type u_4
f : X → Y
g : Y → Z
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace Y
inst✝ : TopologicalSpace Z
h₁ : Continuous f
h₂ : Injective f
h₃ : IsClosedMap f
s : Set X
hs : IsOpen s
⊢ f ⁻¹' (f '' sᶜ)ᶜ = s
state_after: no goals
Theorem: Filter.bliminf_false
File: Mathlib/Order/LiminfLimsup.lean

tactic: simp [bliminf_eq]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
ι' : Type u_5
inst✝ : CompleteLattice α
f : Filter β
u : β → α
⊢ (bliminf u f fun x => False) = ⊤
state_after: no goals
Theorem: Class.toSet_of_ZFSet
File: Mathlib/SetTheory/ZFC/Basic.lean

tactic: rwa [ofSet.inj yx] at py
state_before: A : Class
x : ZFSet
x✝ : A.ToSet ↑x
y : ZFSet
yx : ↑y = ↑x
py : A y
⊢ A x
state_after: no goals
Theorem: Finset.fold_max_le
File: Mathlib/Data/Finset/Fold.lean

tactic: show _ ≥ _ ↔ _
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
op : β → β → β
hc : Std.Commutative op
ha : Std.Associative op
f : α → β
b : β
s : Finset α
a : α
inst✝ : LinearOrder β
c : β
⊢ fold max b f s ≤ c ↔ b ≤ c ∧ ∀ x ∈ s, f x ≤ c
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
op : β → β → β
hc : Std.Commutative op
ha : Std.Associative op
f : α → β
b : β
s : Finset α
a : α
inst✝ : LinearOrder β
c : β
⊢ c ≥ fold max b f s ↔ b ≤ c ∧ ∀ x ∈ s, f x ≤ c

tactic: apply fold_op_rel_iff_and
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
op : β → β → β
hc : Std.Commutative op
ha : Std.Associative op
f : α → β
b : β
s : Finset α
a : α
inst✝ : LinearOrder β
c : β
⊢ c ≥ fold max b f s ↔ b ≤ c ∧ ∀ x ∈ s, f x ≤ c
state_after: case hr
α : Type u_1
β : Type u_2
γ : Type u_3
op : β → β → β
hc : Std.Commutative op
ha : Std.Associative op
f : α → β
b : β
s : Finset α
a : α
inst✝ : LinearOrder β
c : β
⊢ ∀ {x y z : β}, x ≥ max y z ↔ x ≥ y ∧ x ≥ z

tactic: intro x y z
state_before: case hr
α : Type u_1
β : Type u_2
γ : Type u_3
op : β → β → β
hc : Std.Commutative op
ha : Std.Associative op
f : α → β
b : β
s : Finset α
a : α
inst✝ : LinearOrder β
c : β
⊢ ∀ {x y z : β}, x ≥ max y z ↔ x ≥ y ∧ x ≥ z
state_after: case hr
α : Type u_1
β : Type u_2
γ : Type u_3
op : β → β → β
hc : Std.Commutative op
ha : Std.Associative op
f : α → β
b : β
s : Finset α
a : α
inst✝ : LinearOrder β
c x y z : β
⊢ x ≥ max y z ↔ x ≥ y ∧ x ≥ z

tactic: show _ ≤ _ ↔ _
state_before: case hr
α : Type u_1
β : Type u_2
γ : Type u_3
op : β → β → β
hc : Std.Commutative op
ha : Std.Associative op
f : α → β
b : β
s : Finset α
a : α
inst✝ : LinearOrder β
c x y z : β
⊢ x ≥ max y z ↔ x ≥ y ∧ x ≥ z
state_after: case hr
α : Type u_1
β : Type u_2
γ : Type u_3
op : β → β → β
hc : Std.Commutative op
ha : Std.Associative op
f : α → β
b : β
s : Finset α
a : α
inst✝ : LinearOrder β
c x y z : β
⊢ max y z ≤ x ↔ x ≥ y ∧ x ≥ z

tactic: exact max_le_iff
state_before: case hr
α : Type u_1
β : Type u_2
γ : Type u_3
op : β → β → β
hc : Std.Commutative op
ha : Std.Associative op
f : α → β
b : β
s : Finset α
a : α
inst✝ : LinearOrder β
c x y z : β
⊢ max y z ≤ x ↔ x ≥ y ∧ x ≥ z
state_after: no goals
Theorem: Projectivization.map_id
File: Mathlib/LinearAlgebra/Projectivization/Basic.lean

tactic: ext ⟨v⟩
state_before: K : Type u_1
V : Type u_2
inst✝⁵ : DivisionRing K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
L : Type u_3
W : Type u_4
inst✝² : DivisionRing L
inst✝¹ : AddCommGroup W
inst✝ : Module L W
⊢ map LinearMap.id ⋯ = id
state_after: case h.mk
K : Type u_1
V : Type u_2
inst✝⁵ : DivisionRing K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
L : Type u_3
W : Type u_4
inst✝² : DivisionRing L
inst✝¹ : AddCommGroup W
inst✝ : Module L W
x✝ : ℙ K V
v : { v // v ≠ 0 }
⊢ map LinearMap.id ⋯ (Quot.mk Setoid.r v) = id (Quot.mk Setoid.r v)

tactic: rfl
state_before: case h.mk
K : Type u_1
V : Type u_2
inst✝⁵ : DivisionRing K
inst✝⁴ : AddCommGroup V
inst✝³ : Module K V
L : Type u_3
W : Type u_4
inst✝² : DivisionRing L
inst✝¹ : AddCommGroup W
inst✝ : Module L W
x✝ : ℙ K V
v : { v // v ≠ 0 }
⊢ map LinearMap.id ⋯ (Quot.mk Setoid.r v) = id (Quot.mk Setoid.r v)
state_after: no goals
Theorem: CochainComplex.HomComplex.Cochain.comp_units_smul
File: Mathlib/Algebra/Homology/HomotopyCategory/HomComplex.lean

tactic: apply Cochain.comp_smul
state_before: C : Type u
inst✝³ : Category.{v, u} C
inst✝² : Preadditive C
R : Type u_1
inst✝¹ : Ring R
inst✝ : Linear R C
F G K L : CochainComplex C ℤ
n m n₁ n₂ n₁₂ : ℤ
z₁ : Cochain F G n₁
k : Rˣ
z₂ : Cochain G K n₂
h : n₁ + n₂ = n₁₂
⊢ z₁.comp (k • z₂) h = k • z₁.comp z₂ h
state_after: no goals
Theorem: NNRat.cast_pow
File: Mathlib/Data/Rat/Cast/Lemmas.lean

tactic: rw [cast_def, cast_def, den_pow, num_pow, Nat.cast_pow, Nat.cast_pow, div_eq_mul_inv, ← inv_pow,
  ← (Nat.cast_commute _ _).mul_pow, ← div_eq_mul_inv]
state_before: K : Type u_1
inst✝ : DivisionSemiring K
q : ℚ≥0
n : ℕ
⊢ ↑(q ^ n) = ↑q ^ n
state_after: no goals
Theorem: LieAlgebra.rootSpaceProduct_tmul
File: Mathlib/Algebra/Lie/Weights/Cartan.lean

tactic: simp only [rootSpaceProduct_def, coe_rootSpaceWeightSpaceProduct_tmul]
state_before: R : Type u_1
L : Type u_2
inst✝⁷ : CommRing R
inst✝⁶ : LieRing L
inst✝⁵ : LieAlgebra R L
H : LieSubalgebra R L
inst✝⁴ : IsNilpotent R ↥H
M : Type u_3
inst✝³ : AddCommGroup M
inst✝² : Module R M
inst✝¹ : LieRingModule L M
inst✝ : LieModule R L M
χ₁ χ₂ χ₃ : ↥H → R
hχ : χ₁ + χ₂ = χ₃
x : ↥(rootSpace H χ₁)
y : ↥(rootSpace H χ₂)
⊢ ↑((rootSpaceProduct R L H χ₁ χ₂ χ₃ hχ) (x ⊗ₜ[R] y)) = ⁅↑x, ↑y⁆
state_after: no goals
Theorem: fourier_coe_apply'
File: Mathlib/Analysis/Fourier/AddCircle.lean

tactic: rw [← fourier_apply]
state_before: T : ℝ
n : ℤ
x : ℝ
⊢ ↑(toCircle (n • ↑x)) = Complex.exp (2 * ↑π * Complex.I * ↑n * ↑x / ↑T)
state_after: T : ℝ
n : ℤ
x : ℝ
⊢ (fourier n) ↑x = Complex.exp (2 * ↑π * Complex.I * ↑n * ↑x / ↑T)

tactic: exact fourier_coe_apply
state_before: T : ℝ
n : ℤ
x : ℝ
⊢ (fourier n) ↑x = Complex.exp (2 * ↑π * Complex.I * ↑n * ↑x / ↑T)
state_after: no goals
Theorem: lp.single_apply_self
File: Mathlib/Analysis/NormedSpace/lpSpace.lean

tactic: rw [lp.single_apply, dif_pos rfl]
state_before: α : Type u_1
E : α → Type u_2
p✝ q : ℝ≥0∞
inst✝⁴ : (i : α) → NormedAddCommGroup (E i)
𝕜 : Type u_3
inst✝³ : NormedRing 𝕜
inst✝² : (i : α) → Module 𝕜 (E i)
inst✝¹ : ∀ (i : α), BoundedSMul 𝕜 (E i)
inst✝ : DecidableEq α
p : ℝ≥0∞
i : α
a : E i
⊢ ↑(lp.single p i a) i = a
state_after: no goals