1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: RingHom.PropertyIsLocal.sourceAffineLocally_comp_of_isOpenImmersion
File: Mathlib/AlgebraicGeometry/Morphisms/RingHomProperties.lean

tactic: have := (hP.openCover_TFAE g).out 0 3
state_before: P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
hP : PropertyIsLocal P
X Y Z : Scheme
inst✝¹ : IsAffine Z
f : X ⟶ Y
g : Y ⟶ Z
inst✝ : IsOpenImmersion f
H : sourceAffineLocally P g
⊢ sourceAffineLocally P (f ≫ g)
state_after: P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
hP : PropertyIsLocal P
X Y Z : Scheme
inst✝¹ : IsAffine Z
f : X ⟶ Y
g : Y ⟶ Z
inst✝ : IsOpenImmersion f
H : sourceAffineLocally P g
this :
  sourceAffineLocally P g ↔ ∀ {U : Scheme} (g_1 : U ⟶ Y) [inst : IsOpenImmersion g_1], sourceAffineLocally P (g_1 ≫ g)
⊢ sourceAffineLocally P (f ≫ g)

tactic: apply this.mp H
state_before: P : {R S : Type u} → [inst : CommRing R] → [inst_1 : CommRing S] → (R →+* S) → Prop
hP : PropertyIsLocal P
X Y Z : Scheme
inst✝¹ : IsAffine Z
f : X ⟶ Y
g : Y ⟶ Z
inst✝ : IsOpenImmersion f
H : sourceAffineLocally P g
this :
  sourceAffineLocally P g ↔ ∀ {U : Scheme} (g_1 : U ⟶ Y) [inst : IsOpenImmersion g_1], sourceAffineLocally P (g_1 ≫ g)
⊢ sourceAffineLocally P (f ≫ g)
state_after: no goals
Theorem: Real.sinh_log
File: Mathlib/Analysis/SpecialFunctions/Log/Basic.lean

tactic: rw [sinh_eq, exp_neg, exp_log hx]
state_before: x✝ y x : ℝ
hx : 0 < x
⊢ sinh (log x) = (x - x⁻¹) / 2
state_after: no goals
Theorem: RCLike.one_re
File: Mathlib/Analysis/RCLike/Basic.lean

tactic: rw [← ofReal_one, ofReal_re]
state_before: K : Type u_1
E : Type u_2
inst✝ : RCLike K
⊢ re 1 = 1
state_after: no goals
Theorem: realPart_add_I_smul_imaginaryPart
File: Mathlib/Data/Complex/Module.lean

tactic: simpa only [smul_smul, realPart_apply_coe, imaginaryPart_apply_coe, neg_smul, I_mul_I, one_smul,
  neg_sub, add_add_sub_cancel, smul_sub, smul_add, neg_sub_neg, invOf_eq_inv] using
  invOf_two_smul_add_invOf_two_smul ℝ a
state_before: A : Type u_1
inst✝³ : AddCommGroup A
inst✝² : Module ℂ A
inst✝¹ : StarAddMonoid A
inst✝ : StarModule ℂ A
a : A
⊢ ↑(ℜ a) + I • ↑(ℑ a) = a
state_after: no goals
Theorem: isSigmaCompact_biUnion
File: Mathlib/Topology/Compactness/SigmaCompact.lean

tactic: have : Countable ↑s := countable_coe_iff.mpr hc
state_before: X : Type u_1
Y : Type u_2
ι : Type u_3
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
s✝ t : Set X
s : Set ι
S : ι → Set X
hc : s.Countable
hcomp : ∀ i ∈ s, IsSigmaCompact (S i)
⊢ IsSigmaCompact (⋃ i ∈ s, S i)
state_after: X : Type u_1
Y : Type u_2
ι : Type u_3
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
s✝ t : Set X
s : Set ι
S : ι → Set X
hc : s.Countable
hcomp : ∀ i ∈ s, IsSigmaCompact (S i)
this : Countable ↑s
⊢ IsSigmaCompact (⋃ i ∈ s, S i)

tactic: rw [biUnion_eq_iUnion]
state_before: X : Type u_1
Y : Type u_2
ι : Type u_3
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
s✝ t : Set X
s : Set ι
S : ι → Set X
hc : s.Countable
hcomp : ∀ i ∈ s, IsSigmaCompact (S i)
this : Countable ↑s
⊢ IsSigmaCompact (⋃ i ∈ s, S i)
state_after: X : Type u_1
Y : Type u_2
ι : Type u_3
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
s✝ t : Set X
s : Set ι
S : ι → Set X
hc : s.Countable
hcomp : ∀ i ∈ s, IsSigmaCompact (S i)
this : Countable ↑s
⊢ IsSigmaCompact (⋃ x, S ↑x)

tactic: exact isSigmaCompact_iUnion _ (fun ⟨i', hi'⟩ ↦ hcomp i' hi')
state_before: X : Type u_1
Y : Type u_2
ι : Type u_3
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
s✝ t : Set X
s : Set ι
S : ι → Set X
hc : s.Countable
hcomp : ∀ i ∈ s, IsSigmaCompact (S i)
this : Countable ↑s
⊢ IsSigmaCompact (⋃ x, S ↑x)
state_after: no goals
Theorem: SimpleGraph.Walk.IsTrail.nil
File: Mathlib/Combinatorics/SimpleGraph/Connectivity.lean

tactic: simp [edges]
state_before: V : Type u
V' : Type v
V'' : Type w
G : SimpleGraph V
G' : SimpleGraph V'
G'' : SimpleGraph V''
u✝ v w x y u : V
⊢ Walk.nil.edges.Nodup
state_after: no goals
Theorem: Nat.primeFactors_prime_pow
File: Mathlib/Data/Nat/PrimeFin.lean

tactic: simp [primeFactors_pow p hk, hp]
state_before: a b k m n p : ℕ
hk : k ≠ 0
hp : Prime p
⊢ (p ^ k).primeFactors = {p}
state_after: no goals
Theorem: FreeLieAlgebra.Rel.neg
File: Mathlib/Algebra/Lie/Free.lean

tactic: simpa only [neg_one_smul] using h.smul (-1)
state_before: R : Type u
X : Type v
inst✝ : CommRing R
a b : lib R X
h : Rel R X a b
⊢ Rel R X (-a) (-b)
state_after: no goals
Theorem: one_lt_of_lt_mul_right
File: Mathlib/Algebra/Order/Monoid/Unbundled/Basic.lean

tactic: simpa only [mul_one]
state_before: α : Type u_1
β : Type u_2
inst✝² : MulOneClass α
inst✝¹ : LT α
inst✝ : ContravariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x < x_1
a b : α
h : a < a * b
⊢ ?m.27699 * 1 < ?m.27699 * b
state_after: no goals
Theorem: Cycle.formPerm_reverse
File: Mathlib/GroupTheory/Perm/Cycle/Concrete.lean

tactic: induction s using Quot.inductionOn
state_before: α : Type u_1
inst✝ : DecidableEq α
s✝ s' s : Cycle α
h : s.Nodup
⊢ s.reverse.formPerm ⋯ = (s.formPerm h)⁻¹
state_after: case h
α : Type u_1
inst✝ : DecidableEq α
s s' : Cycle α
a✝ : List α
h : Nodup (Quot.mk Setoid.r a✝)
⊢ (reverse (Quot.mk Setoid.r a✝)).formPerm ⋯ = (formPerm (Quot.mk Setoid.r a✝) h)⁻¹

tactic: simpa using formPerm_reverse _
state_before: case h
α : Type u_1
inst✝ : DecidableEq α
s s' : Cycle α
a✝ : List α
h : Nodup (Quot.mk Setoid.r a✝)
⊢ (reverse (Quot.mk Setoid.r a✝)).formPerm ⋯ = (formPerm (Quot.mk Setoid.r a✝) h)⁻¹
state_after: no goals
Theorem: Fin.succ_ne_last_of_lt
File: Mathlib/Data/Fin/Basic.lean

tactic: cases n
state_before: n m : ℕ
p i : Fin n
h : i < p
⊢ i.succ ≠ last n
state_after: case zero
m : ℕ
p i : Fin 0
h : i < p
⊢ i.succ ≠ last 0

case succ
m n✝ : ℕ
p i : Fin (n✝ + 1)
h : i < p
⊢ i.succ ≠ last (n✝ + 1)

tactic: exact i.elim0
state_before: case zero
m : ℕ
p i : Fin 0
h : i < p
⊢ i.succ ≠ last 0
state_after: no goals

tactic: rw [succ_ne_last_iff, Ne, ext_iff]
state_before: case succ
m n✝ : ℕ
p i : Fin (n✝ + 1)
h : i < p
⊢ i.succ ≠ last (n✝ + 1)
state_after: case succ
m n✝ : ℕ
p i : Fin (n✝ + 1)
h : i < p
⊢ ¬↑i = ↑(last n✝)

tactic: exact ((le_last _).trans_lt' h).ne
state_before: case succ
m n✝ : ℕ
p i : Fin (n✝ + 1)
h : i < p
⊢ ¬↑i = ↑(last n✝)
state_after: no goals
Theorem: CancelDenoms.cancel_factors_le
File: Mathlib/Tactic/CancelDenoms/Core.lean

tactic: rw [mul_le_mul_left, ← ha, ← hb, ← mul_assoc, ← mul_assoc, mul_comm bd, mul_le_mul_left]
state_before: α : Type u_1
inst✝ : LinearOrderedField α
a b ad bd a' b' gcd : α
ha : ad * a = a'
hb : bd * b = b'
had : 0 < ad
hbd : 0 < bd
hgcd : 0 < gcd
⊢ (a ≤ b) = (1 / gcd * (bd * a') ≤ 1 / gcd * (ad * b'))
state_after: α : Type u_1
inst✝ : LinearOrderedField α
a b ad bd a' b' gcd : α
ha : ad * a = a'
hb : bd * b = b'
had : 0 < ad
hbd : 0 < bd
hgcd : 0 < gcd
⊢ 0 < ad * bd

α : Type u_1
inst✝ : LinearOrderedField α
a b ad bd a' b' gcd : α
ha : ad * a = a'
hb : bd * b = b'
had : 0 < ad
hbd : 0 < bd
hgcd : 0 < gcd
⊢ 0 < 1 / gcd

tactic: exact mul_pos had hbd
state_before: α : Type u_1
inst✝ : LinearOrderedField α
a b ad bd a' b' gcd : α
ha : ad * a = a'
hb : bd * b = b'
had : 0 < ad
hbd : 0 < bd
hgcd : 0 < gcd
⊢ 0 < ad * bd
state_after: no goals

tactic: exact one_div_pos.2 hgcd
state_before: α : Type u_1
inst✝ : LinearOrderedField α
a b ad bd a' b' gcd : α
ha : ad * a = a'
hb : bd * b = b'
had : 0 < ad
hbd : 0 < bd
hgcd : 0 < gcd
⊢ 0 < 1 / gcd
state_after: no goals
Theorem: Real.Ioo_eq_ball
File: Mathlib/Topology/MetricSpace/Pseudo/Defs.lean

tactic: rw [Real.ball_eq_Ioo, ← sub_div, add_comm, ← sub_add, add_sub_cancel_left, add_self_div_two,
  ← add_div, add_assoc, add_sub_cancel, add_self_div_two]
state_before: α : Type u
β : Type v
X : Type u_1
ι : Type u_2
inst✝ : PseudoMetricSpace α
x y : ℝ
⊢ Ioo x y = ball ((x + y) / 2) ((y - x) / 2)
state_after: no goals
Theorem: Nat.not_even_one
File: Mathlib/Algebra/Group/Nat.lean

tactic: simp [even_iff]
state_before: m n : ℕ
⊢ ¬Even 1
state_after: no goals
Theorem: tendsto_nat_floor_atTop
File: Mathlib/Analysis/SpecificLimits/Basic.lean

tactic: simp [Nat.le_floor_iff]
state_before: α✝ : Type u_1
β : Type u_2
ι : Type u_3
α : Type u_4
inst✝¹ : LinearOrderedSemiring α
inst✝ : FloorSemiring α
x : ℕ
⊢ x ≤ ⌊max 0 (↑x + 1)⌋₊
state_after: no goals
Theorem: tendsto_ceil_right
File: Mathlib/Topology/Algebra/Order/Floor.lean

tactic: rw [← @cast_one α, ← cast_add]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : FloorRing α
inst✝¹ : TopologicalSpace α
inst✝ : OrderClosedTopology α
n : ℤ
⊢ pure (IntCast.intCast (n + 1)) ≤ 𝓝[≥] (↑n + 1)
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : FloorRing α
inst✝¹ : TopologicalSpace α
inst✝ : OrderClosedTopology α
n : ℤ
⊢ pure (IntCast.intCast (n + 1)) ≤ 𝓝[≥] ↑(n + 1)

tactic: exact pure_le_nhdsWithin le_rfl
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : LinearOrderedRing α
inst✝² : FloorRing α
inst✝¹ : TopologicalSpace α
inst✝ : OrderClosedTopology α
n : ℤ
⊢ pure (IntCast.intCast (n + 1)) ≤ 𝓝[≥] ↑(n + 1)
state_after: no goals
Theorem: IsTorsionFree.quotient_torsion
File: Mathlib/GroupTheory/Torsion.lean

tactic: induction' g using QuotientGroup.induction_on' with g
state_before: G : Type u_1
H : Type u_2
inst✝ : CommGroup G
g : G ⧸ torsion G
hne : g ≠ 1
hfin : IsOfFinOrder g
⊢ g = 1
state_after: case H
G : Type u_1
H : Type u_2
inst✝ : CommGroup G
g : G
hne : ↑g ≠ 1
hfin : IsOfFinOrder ↑g
⊢ ↑g = 1

tactic: obtain ⟨m, mpos, hm⟩ := hfin.exists_pow_eq_one
state_before: case H
G : Type u_1
H : Type u_2
inst✝ : CommGroup G
g : G
hne : ↑g ≠ 1
hfin : IsOfFinOrder ↑g
⊢ ↑g = 1
state_after: case H.intro.intro
G : Type u_1
H : Type u_2
inst✝ : CommGroup G
g : G
hne : ↑g ≠ 1
hfin : IsOfFinOrder ↑g
m : ℕ
mpos : 0 < m
hm : ↑g ^ m = 1
⊢ ↑g = 1

tactic: obtain ⟨n, npos, hn⟩ := ((QuotientGroup.eq_one_iff _).mp hm).exists_pow_eq_one
state_before: case H.intro.intro
G : Type u_1
H : Type u_2
inst✝ : CommGroup G
g : G
hne : ↑g ≠ 1
hfin : IsOfFinOrder ↑g
m : ℕ
mpos : 0 < m
hm : ↑g ^ m = 1
⊢ ↑g = 1
state_after: case H.intro.intro.intro.intro
G : Type u_1
H : Type u_2
inst✝ : CommGroup G
g : G
hne : ↑g ≠ 1
hfin : IsOfFinOrder ↑g
m : ℕ
mpos : 0 < m
hm : ↑g ^ m = 1
n : ℕ
npos : 0 < n
hn : (fun x => x ^ m) g ^ n = 1
⊢ ↑g = 1

tactic: exact
  (QuotientGroup.eq_one_iff g).mpr
    (isOfFinOrder_iff_pow_eq_one.mpr ⟨m * n, mul_pos mpos npos, (pow_mul g m n).symm ▸ hn⟩)
state_before: case H.intro.intro.intro.intro
G : Type u_1
H : Type u_2
inst✝ : CommGroup G
g : G
hne : ↑g ≠ 1
hfin : IsOfFinOrder ↑g
m : ℕ
mpos : 0 < m
hm : ↑g ^ m = 1
n : ℕ
npos : 0 < n
hn : (fun x => x ^ m) g ^ n = 1
⊢ ↑g = 1
state_after: no goals
Theorem: Finset.fold_cons
File: Mathlib/Data/Finset/Fold.lean

tactic: dsimp only [fold]
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 : α
h : a ∉ s
⊢ fold op b f (cons a s h) = op (f a) (fold op b f s)
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 : α
h : a ∉ s
⊢ Multiset.fold op b (Multiset.map f (cons a s h).val) = op (f a) (Multiset.fold op b (Multiset.map f s.val))

tactic: rw [cons_val, Multiset.map_cons, fold_cons_left]
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 : α
h : a ∉ s
⊢ Multiset.fold op b (Multiset.map f (cons a s h).val) = op (f a) (Multiset.fold op b (Multiset.map f s.val))
state_after: no goals
Theorem: CategoryTheory.shift_shiftFunctorCompIsoId_hom_app
File: Mathlib/CategoryTheory/Shift/Basic.lean

tactic: rw [← neg_eq_of_add_eq_zero_left h, add_right_neg]
state_before: C : Type u
A : Type u_1
inst✝² : Category.{v, u} C
inst✝¹ : AddGroup A
inst✝ : HasShift C A
X✝ Y : C
f : X✝ ⟶ Y
n m : A
h : n + m = 0
X : C
⊢ m + n = 0
state_after: no goals

tactic: dsimp [shiftFunctorCompIsoId]
state_before: C : Type u
A : Type u_1
inst✝² : Category.{v, u} C
inst✝¹ : AddGroup A
inst✝ : HasShift C A
X✝ Y : C
f : X✝ ⟶ Y
n m : A
h : n + m = 0
X : C
⊢ (shiftFunctor C n).map ((shiftFunctorCompIsoId C n m h).hom.app X) =
    (shiftFunctorCompIsoId C m n ⋯).hom.app ((shiftFunctor C n).obj X)
state_after: C : Type u
A : Type u_1
inst✝² : Category.{v, u} C
inst✝¹ : AddGroup A
inst✝ : HasShift C A
X✝ Y : C
f : X✝ ⟶ Y
n m : A
h : n + m = 0
X : C
⊢ (shiftFunctor C n).map ((shiftFunctorAdd' C n m 0 h).inv.app X ≫ (shiftFunctorZero C A).hom.app X) =
    (shiftFunctorAdd' C m n 0 ⋯).inv.app ((shiftFunctor C n).obj X) ≫
      (shiftFunctorZero C A).hom.app ((shiftFunctor C n).obj X)

tactic: simpa only [Functor.map_comp, ← shiftFunctorAdd'_zero_add_inv_app n X,
  ← shiftFunctorAdd'_add_zero_inv_app n X]
  using shiftFunctorAdd'_assoc_inv_app n m n 0 0 n h
    (by rw [← neg_eq_of_add_eq_zero_left h, add_right_neg]) (by rw [h, zero_add]) X
state_before: C : Type u
A : Type u_1
inst✝² : Category.{v, u} C
inst✝¹ : AddGroup A
inst✝ : HasShift C A
X✝ Y : C
f : X✝ ⟶ Y
n m : A
h : n + m = 0
X : C
⊢ (shiftFunctor C n).map ((shiftFunctorAdd' C n m 0 h).inv.app X ≫ (shiftFunctorZero C A).hom.app X) =
    (shiftFunctorAdd' C m n 0 ⋯).inv.app ((shiftFunctor C n).obj X) ≫
      (shiftFunctorZero C A).hom.app ((shiftFunctor C n).obj X)
state_after: no goals

tactic: rw [h, zero_add]
state_before: C : Type u
A : Type u_1
inst✝² : Category.{v, u} C
inst✝¹ : AddGroup A
inst✝ : HasShift C A
X✝ Y : C
f : X✝ ⟶ Y
n m : A
h : n + m = 0
X : C
⊢ n + m + n = n
state_after: no goals
Theorem: FractionalIdeal.adjoinIntegral_eq_one_of_isUnit
File: Mathlib/RingTheory/DedekindDomain/Ideal.lean

tactic: set I := adjoinIntegral A⁰ x hx
state_before: R : Type u_1
A : Type u_2
K : Type u_3
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Field K
inst✝² : IsDomain A
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
x : K
hx : IsIntegral A x
hI : IsUnit (adjoinIntegral A⁰ x hx)
⊢ adjoinIntegral A⁰ x hx = 1
state_after: R : Type u_1
A : Type u_2
K : Type u_3
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Field K
inst✝² : IsDomain A
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
x : K
hx : IsIntegral A x
I : FractionalIdeal A⁰ K := adjoinIntegral A⁰ x hx
hI : IsUnit I
⊢ I = 1

tactic: have mul_self : I * I = I := by apply coeToSubmodule_injective; simp [I]
state_before: R : Type u_1
A : Type u_2
K : Type u_3
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Field K
inst✝² : IsDomain A
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
x : K
hx : IsIntegral A x
I : FractionalIdeal A⁰ K := adjoinIntegral A⁰ x hx
hI : IsUnit I
⊢ I = 1
state_after: R : Type u_1
A : Type u_2
K : Type u_3
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Field K
inst✝² : IsDomain A
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
x : K
hx : IsIntegral A x
I : FractionalIdeal A⁰ K := adjoinIntegral A⁰ x hx
hI : IsUnit I
mul_self : I * I = I
⊢ I = 1

tactic: apply coeToSubmodule_injective
state_before: R : Type u_1
A : Type u_2
K : Type u_3
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Field K
inst✝² : IsDomain A
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
x : K
hx : IsIntegral A x
I : FractionalIdeal A⁰ K := adjoinIntegral A⁰ x hx
hI : IsUnit I
⊢ I * I = I
state_after: case a
R : Type u_1
A : Type u_2
K : Type u_3
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Field K
inst✝² : IsDomain A
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
x : K
hx : IsIntegral A x
I : FractionalIdeal A⁰ K := adjoinIntegral A⁰ x hx
hI : IsUnit I
⊢ (fun I => ↑I) (I * I) = (fun I => ↑I) I

tactic: simp [I]
state_before: case a
R : Type u_1
A : Type u_2
K : Type u_3
inst✝⁵ : CommRing R
inst✝⁴ : CommRing A
inst✝³ : Field K
inst✝² : IsDomain A
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
x : K
hx : IsIntegral A x
I : FractionalIdeal A⁰ K := adjoinIntegral A⁰ x hx
hI : IsUnit I
⊢ (fun I => ↑I) (I * I) = (fun I => ↑I) I
state_after: no goals
Theorem: isCycle_finRotate
File: Mathlib/GroupTheory/Perm/Fin.lean

tactic: refine ⟨0, by simp, fun x hx' => ⟨x, ?_⟩⟩
state_before: n : ℕ
⊢ (finRotate (n + 2)).IsCycle
state_after: n : ℕ
x : Fin (n + 2)
hx' : (finRotate (n + 2)) x ≠ x
⊢ (finRotate (n + 2) ^ ↑↑x) 0 = x

tactic: clear hx'
state_before: n : ℕ
x : Fin (n + 2)
hx' : (finRotate (n + 2)) x ≠ x
⊢ (finRotate (n + 2) ^ ↑↑x) 0 = x
state_after: n : ℕ
x : Fin (n + 2)
⊢ (finRotate (n + 2) ^ ↑↑x) 0 = x

tactic: cases' x with x hx
state_before: n : ℕ
x : Fin (n + 2)
⊢ (finRotate (n + 2) ^ ↑↑x) 0 = x
state_after: case mk
n x : ℕ
hx : x < n + 2
⊢ (finRotate (n + 2) ^ ↑↑⟨x, hx⟩) 0 = ⟨x, hx⟩

tactic: rw [zpow_natCast, Fin.ext_iff, Fin.val_mk]
state_before: case mk
n x : ℕ
hx : x < n + 2
⊢ (finRotate (n + 2) ^ ↑↑⟨x, hx⟩) 0 = ⟨x, hx⟩
state_after: case mk
n x : ℕ
hx : x < n + 2
⊢ ↑((finRotate (n + 2) ^ ↑⟨x, hx⟩) 0) = ↑⟨x, hx⟩

tactic: induction' x with x ih
state_before: case mk
n x : ℕ
hx : x < n + 2
⊢ ↑((finRotate (n + 2) ^ ↑⟨x, hx⟩) 0) = ↑⟨x, hx⟩
state_after: case mk.zero
n : ℕ
hx : 0 < n + 2
⊢ ↑((finRotate (n + 2) ^ ↑⟨0, hx⟩) 0) = ↑⟨0, hx⟩

case mk.succ
n x : ℕ
ih : ∀ (hx : x < n + 2), ↑((finRotate (n + 2) ^ ↑⟨x, hx⟩) 0) = ↑⟨x, hx⟩
hx : x + 1 < n + 2
⊢ ↑((finRotate (n + 2) ^ ↑⟨x + 1, hx⟩) 0) = ↑⟨x + 1, hx⟩

tactic: rw [pow_succ', Perm.mul_apply, coe_finRotate_of_ne_last, ih (lt_trans x.lt_succ_self hx)]
state_before: case mk.succ
n x : ℕ
ih : ∀ (hx : x < n + 2), ↑((finRotate (n + 2) ^ ↑⟨x, hx⟩) 0) = ↑⟨x, hx⟩
hx : x + 1 < n + 2
⊢ ↑((finRotate (n + 2) ^ ↑⟨x + 1, hx⟩) 0) = ↑⟨x + 1, hx⟩
state_after: case mk.succ
n x : ℕ
ih : ∀ (hx : x < n + 2), ↑((finRotate (n + 2) ^ ↑⟨x, hx⟩) 0) = ↑⟨x, hx⟩
hx : x + 1 < n + 2
⊢ (finRotate (n + 2) ^ x) 0 ≠ Fin.last (n + 1)

tactic: rw [Ne, Fin.ext_iff, ih (lt_trans x.lt_succ_self hx), Fin.val_last]
state_before: case mk.succ
n x : ℕ
ih : ∀ (hx : x < n + 2), ↑((finRotate (n + 2) ^ ↑⟨x, hx⟩) 0) = ↑⟨x, hx⟩
hx : x + 1 < n + 2
⊢ (finRotate (n + 2) ^ x) 0 ≠ Fin.last (n + 1)
state_after: case mk.succ
n x : ℕ
ih : ∀ (hx : x < n + 2), ↑((finRotate (n + 2) ^ ↑⟨x, hx⟩) 0) = ↑⟨x, hx⟩
hx : x + 1 < n + 2
⊢ ¬↑⟨x, ⋯⟩ = n + 1

tactic: exact ne_of_lt (Nat.lt_of_succ_lt_succ hx)
state_before: case mk.succ
n x : ℕ
ih : ∀ (hx : x < n + 2), ↑((finRotate (n + 2) ^ ↑⟨x, hx⟩) 0) = ↑⟨x, hx⟩
hx : x + 1 < n + 2
⊢ ¬↑⟨x, ⋯⟩ = n + 1
state_after: no goals

tactic: simp
state_before: n : ℕ
⊢ (finRotate (n + 2)) 0 ≠ 0
state_after: no goals

tactic: rfl
state_before: case mk.zero
n : ℕ
hx : 0 < n + 2
⊢ ↑((finRotate (n + 2) ^ ↑⟨0, hx⟩) 0) = ↑⟨0, hx⟩
state_after: no goals
Theorem: GeneralizedContinuedFraction.terminatedAt_iff_part_denom_none
File: Mathlib/Algebra/ContinuedFractions/Translations.lean

tactic: rw [terminatedAt_iff_s_none, part_denom_none_iff_s_none]
state_before: α : Type u_1
g : GeneralizedContinuedFraction α
n : ℕ
⊢ g.TerminatedAt n ↔ g.partialDenominators.get? n = none
state_after: no goals
Theorem: SimpleGraph.Subgraph.top_induce_pair_connected_of_adj
File: Mathlib/Combinatorics/SimpleGraph/Connectivity/Subgraph.lean

tactic: rw [← subgraphOfAdj_eq_induce huv]
state_before: V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
u v : V
huv : G.Adj u v
⊢ (⊤.induce {u, v}).Connected
state_after: V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
u v : V
huv : G.Adj u v
⊢ (G.subgraphOfAdj huv).Connected

tactic: exact subgraphOfAdj_connected huv
state_before: V : Type u
V' : Type v
G : SimpleGraph V
G' : SimpleGraph V'
u v : V
huv : G.Adj u v
⊢ (G.subgraphOfAdj huv).Connected
state_after: no goals
Theorem: Set.image_id'
File: Mathlib/Data/Set/Image.lean

tactic: ext
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f : α → β
s✝ t s : Set α
⊢ (fun x => x) '' s = s
state_after: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f : α → β
s✝ t s : Set α
x✝ : α
⊢ x✝ ∈ (fun x => x) '' s ↔ x✝ ∈ s

tactic: simp
state_before: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Sort u_4
ι' : Sort u_5
f : α → β
s✝ t s : Set α
x✝ : α
⊢ x✝ ∈ (fun x => x) '' s ↔ x✝ ∈ s
state_after: no goals
Theorem: Matrix.matrixOfPolynomials_blockTriangular
File: Mathlib/LinearAlgebra/Matrix/Block.lean

tactic: exact coeff_eq_zero_of_natDegree_lt <| Nat.lt_of_le_of_lt (h_deg j) h
state_before: α : Type u_1
β : Type u_2
m : Type u_3
n✝ : Type u_4
o : Type u_5
m' : α → Type u_6
n' : α → Type u_7
R : Type v
inst✝⁴ : CommRing R
M N : Matrix m m R
b : m → α
inst✝³ : DecidableEq m
inst✝² : Fintype m
inst✝¹ : DecidableEq n✝
inst✝ : Fintype n✝
n : ℕ
p : Fin n → R[X]
h_deg : ∀ (i : Fin n), (p i).natDegree ≤ ↑i
x✝ j : Fin n
h : id j < id x✝
⊢ of (fun i j => (p j).coeff ↑i) x✝ j = 0
state_after: no goals
Theorem: EMetric.infEdist_le_infEdist_add_edist
File: Mathlib/Topology/MetricSpace/HausdorffDistance.lean

tactic: simp only [ENNReal.iInf_add]
state_before: ι : Sort u_1
α : Type u
β : Type v
inst✝¹ : PseudoEMetricSpace α
inst✝ : PseudoEMetricSpace β
x y : α
s t : Set α
Φ : α → β
⊢ ⨅ z ∈ s, edist y z + edist x y = (⨅ z ∈ s, edist y z) + edist x y
state_after: no goals
Theorem: UniformInducing.uniformGroup
File: Mathlib/Topology/Algebra/UniformGroup.lean

tactic: simp_rw [hf.uniformContinuous_iff, Function.comp_def, map_div]
state_before: α : Type u_1
β : Type u_2
inst✝⁹ : UniformSpace α
inst✝⁸ : Group α
inst✝⁷ : UniformGroup α
inst✝⁶ : Group β
γ : Type u_3
inst✝⁵ : Group γ
inst✝⁴ : UniformSpace γ
inst✝³ : UniformGroup γ
inst✝² : UniformSpace β
F : Type u_4
inst✝¹ : FunLike F β γ
inst✝ : MonoidHomClass F β γ
f : F
hf : UniformInducing ⇑f
⊢ UniformContinuous fun p => p.1 / p.2
state_after: α : Type u_1
β : Type u_2
inst✝⁹ : UniformSpace α
inst✝⁸ : Group α
inst✝⁷ : UniformGroup α
inst✝⁶ : Group β
γ : Type u_3
inst✝⁵ : Group γ
inst✝⁴ : UniformSpace γ
inst✝³ : UniformGroup γ
inst✝² : UniformSpace β
F : Type u_4
inst✝¹ : FunLike F β γ
inst✝ : MonoidHomClass F β γ
f : F
hf : UniformInducing ⇑f
⊢ UniformContinuous fun x => f x.1 / f x.2

tactic: exact uniformContinuous_div.comp (hf.uniformContinuous.prod_map hf.uniformContinuous)
state_before: α : Type u_1
β : Type u_2
inst✝⁹ : UniformSpace α
inst✝⁸ : Group α
inst✝⁷ : UniformGroup α
inst✝⁶ : Group β
γ : Type u_3
inst✝⁵ : Group γ
inst✝⁴ : UniformSpace γ
inst✝³ : UniformGroup γ
inst✝² : UniformSpace β
F : Type u_4
inst✝¹ : FunLike F β γ
inst✝ : MonoidHomClass F β γ
f : F
hf : UniformInducing ⇑f
⊢ UniformContinuous fun x => f x.1 / f x.2
state_after: no goals
Theorem: has_antideriv_at_fourier_neg
File: Mathlib/Analysis/Fourier/AddCircle.lean

tactic: convert (hasDerivAt_fourier_neg T n x).div_const (-2 * π * I * n / T) using 1
state_before: T : ℝ
hT : Fact (0 < T)
n : ℤ
hn : n ≠ 0
x : ℝ
⊢ HasDerivAt (fun y => ↑T / (-2 * ↑π * I * ↑n) * (fourier (-n)) ↑y) ((fourier (-n)) ↑x) x
state_after: case h.e'_6
T : ℝ
hT : Fact (0 < T)
n : ℤ
hn : n ≠ 0
x : ℝ
⊢ (fun y => ↑T / (-2 * ↑π * I * ↑n) * (fourier (-n)) ↑y) = fun x => (fourier (-n)) ↑x / (-2 * ↑π * I * ↑n / ↑T)

case h.e'_7
T : ℝ
hT : Fact (0 < T)
n : ℤ
hn : n ≠ 0
x : ℝ
⊢ (fourier (-n)) ↑x = -2 * ↑π * I * ↑n / ↑T * (fourier (-n)) ↑x / (-2 * ↑π * I * ↑n / ↑T)

tactic: ext1 y
state_before: case h.e'_6
T : ℝ
hT : Fact (0 < T)
n : ℤ
hn : n ≠ 0
x : ℝ
⊢ (fun y => ↑T / (-2 * ↑π * I * ↑n) * (fourier (-n)) ↑y) = fun x => (fourier (-n)) ↑x / (-2 * ↑π * I * ↑n / ↑T)
state_after: case h.e'_6.h
T : ℝ
hT : Fact (0 < T)
n : ℤ
hn : n ≠ 0
x y : ℝ
⊢ ↑T / (-2 * ↑π * I * ↑n) * (fourier (-n)) ↑y = (fourier (-n)) ↑y / (-2 * ↑π * I * ↑n / ↑T)

tactic: rw [div_div_eq_mul_div]
state_before: case h.e'_6.h
T : ℝ
hT : Fact (0 < T)
n : ℤ
hn : n ≠ 0
x y : ℝ
⊢ ↑T / (-2 * ↑π * I * ↑n) * (fourier (-n)) ↑y = (fourier (-n)) ↑y / (-2 * ↑π * I * ↑n / ↑T)
state_after: case h.e'_6.h
T : ℝ
hT : Fact (0 < T)
n : ℤ
hn : n ≠ 0
x y : ℝ
⊢ ↑T / (-2 * ↑π * I * ↑n) * (fourier (-n)) ↑y = (fourier (-n)) ↑y * ↑T / (-2 * ↑π * I * ↑n)

tactic: ring
state_before: case h.e'_6.h
T : ℝ
hT : Fact (0 < T)
n : ℤ
hn : n ≠ 0
x y : ℝ
⊢ ↑T / (-2 * ↑π * I * ↑n) * (fourier (-n)) ↑y = (fourier (-n)) ↑y * ↑T / (-2 * ↑π * I * ↑n)
state_after: no goals

tactic: simp [mul_div_cancel_left₀, hn, (Fact.out : 0 < T).ne', Real.pi_pos.ne']
state_before: case h.e'_7
T : ℝ
hT : Fact (0 < T)
n : ℤ
hn : n ≠ 0
x : ℝ
⊢ (fourier (-n)) ↑x = -2 * ↑π * I * ↑n / ↑T * (fourier (-n)) ↑x / (-2 * ↑π * I * ↑n / ↑T)
state_after: no goals