1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: Ordinal.exists_lsub_cof
File: Mathlib/SetTheory/Cardinal/Cofinality.lean

tactic: rw [cof_eq_sInf_lsub]
state_before: α : Type u_1
r : α → α → Prop
o : Ordinal.{u}
⊢ ∃ ι f, lsub f = o ∧ #ι = o.cof
state_after: α : Type u_1
r : α → α → Prop
o : Ordinal.{u}
⊢ ∃ ι f, lsub f = o ∧ #ι = sInf {a | ∃ ι f, lsub f = o ∧ #ι = a}

tactic: exact csInf_mem (cof_lsub_def_nonempty o)
state_before: α : Type u_1
r : α → α → Prop
o : Ordinal.{u}
⊢ ∃ ι f, lsub f = o ∧ #ι = sInf {a | ∃ ι f, lsub f = o ∧ #ι = a}
state_after: no goals
Theorem: WeierstrassCurve.Φ_ne_zero
File: Mathlib/AlgebraicGeometry/EllipticCurve/DivisionPolynomial/Degree.lean

tactic: by_cases hn : n = 0
state_before: R : Type u
inst✝¹ : CommRing R
W : WeierstrassCurve R
inst✝ : Nontrivial R
n : ℤ
⊢ W.Φ n ≠ 0
state_after: case pos
R : Type u
inst✝¹ : CommRing R
W : WeierstrassCurve R
inst✝ : Nontrivial R
n : ℤ
hn : n = 0
⊢ W.Φ n ≠ 0

case neg
R : Type u
inst✝¹ : CommRing R
W : WeierstrassCurve R
inst✝ : Nontrivial R
n : ℤ
hn : ¬n = 0
⊢ W.Φ n ≠ 0

tactic: simpa only [hn, Φ_zero] using one_ne_zero
state_before: case pos
R : Type u
inst✝¹ : CommRing R
W : WeierstrassCurve R
inst✝ : Nontrivial R
n : ℤ
hn : n = 0
⊢ W.Φ n ≠ 0
state_after: no goals

tactic: exact ne_zero_of_natDegree_gt <| W.natDegree_Φ_pos hn
state_before: case neg
R : Type u
inst✝¹ : CommRing R
W : WeierstrassCurve R
inst✝ : Nontrivial R
n : ℤ
hn : ¬n = 0
⊢ W.Φ n ≠ 0
state_after: no goals
Theorem: Orientation.inner_rightAngleRotation_left
File: Mathlib/Analysis/InnerProductSpace/TwoDim.lean

tactic: rw [rightAngleRotation]
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
⊢ ⟪o.rightAngleRotation x, y⟫_ℝ = (o.areaForm x) y
state_after: E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
x y : E
⊢ ⟪(LinearIsometryEquiv.ofLinearIsometry o.rightAngleRotationAux₂ (-o.rightAngleRotationAux₁) ⋯ ⋯) x, y⟫_ℝ =
    (o.areaForm x) y

tactic: exact o.inner_rightAngleRotationAux₁_left x y
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
⊢ ⟪(LinearIsometryEquiv.ofLinearIsometry o.rightAngleRotationAux₂ (-o.rightAngleRotationAux₁) ⋯ ⋯) x, y⟫_ℝ =
    (o.areaForm x) y
state_after: no goals
Theorem: Orientation.two_zsmul_oangle_smul_left_of_ne_zero
File: Mathlib/Geometry/Euclidean/Angle/Oriented/Basic.lean

tactic: rcases hr.lt_or_lt with (h | h) <;> simp [h]
state_before: V : Type u_1
V' : Type u_2
inst✝⁵ : NormedAddCommGroup V
inst✝⁴ : NormedAddCommGroup V'
inst✝³ : InnerProductSpace ℝ V
inst✝² : InnerProductSpace ℝ V'
inst✝¹ : Fact (finrank ℝ V = 2)
inst✝ : Fact (finrank ℝ V' = 2)
o : Orientation ℝ V (Fin 2)
x y : V
r : ℝ
hr : r ≠ 0
⊢ 2 • o.oangle (r • x) y = 2 • o.oangle x y
state_after: no goals
Theorem: Associated.of_mul_right
File: Mathlib/Algebra/Associated.lean

tactic: rw [mul_comm a, mul_comm c]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
a b c d : α
⊢ a * b ~ᵤ c * d → b ~ᵤ d → b ≠ 0 → a ~ᵤ c
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
a b c d : α
⊢ b * a ~ᵤ d * c → b ~ᵤ d → b ≠ 0 → a ~ᵤ c

tactic: exact Associated.of_mul_left
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝ : CancelCommMonoidWithZero α
a b c d : α
⊢ b * a ~ᵤ d * c → b ~ᵤ d → b ≠ 0 → a ~ᵤ c
state_after: no goals
Theorem: RCLike.natCast_im
File: Mathlib/Analysis/RCLike/Basic.lean

tactic: rw [← ofReal_natCast, ofReal_im]
state_before: K : Type u_1
E : Type u_2
inst✝ : RCLike K
z : K
n : ℕ
⊢ im ↑n = 0
state_after: no goals
Theorem: Complex.restrictScalars_one_smulRight'
File: Mathlib/Analysis/Complex/Basic.lean

tactic: ext ⟨a, b⟩
state_before: z : ℂ
E : Type u_1
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace ℂ E
x : E
⊢ restrictScalars ℝ (smulRight 1 x) = reCLM.smulRight x + I • imCLM.smulRight x
state_after: case h.mk
z : ℂ
E : Type u_1
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace ℂ E
x : E
a b : ℝ
⊢ (restrictScalars ℝ (smulRight 1 x)) { re := a, im := b } =
    (reCLM.smulRight x + I • imCLM.smulRight x) { re := a, im := b }

tactic: simp [mk_eq_add_mul_I, mul_smul, smul_comm I b x]
state_before: case h.mk
z : ℂ
E : Type u_1
inst✝¹ : SeminormedAddCommGroup E
inst✝ : NormedSpace ℂ E
x : E
a b : ℝ
⊢ (restrictScalars ℝ (smulRight 1 x)) { re := a, im := b } =
    (reCLM.smulRight x + I • imCLM.smulRight x) { re := a, im := b }
state_after: no goals
Theorem: Matrix.updateColumn_subsingleton
File: Mathlib/Data/Matrix/RowCol.lean

tactic: ext x y
state_before: l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
R : Type u_5
α : Type v
β : Type w
ι : Type u_6
M : Matrix m n α
i✝ : m
j : n
b✝ : n → α
c : m → α
inst✝ : Subsingleton n
A : Matrix m n R
i : n
b : m → R
⊢ A.updateColumn i b = (col (Fin 1) b).submatrix id (Function.const n 0)
state_after: case a
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
R : Type u_5
α : Type v
β : Type w
ι : Type u_6
M : Matrix m n α
i✝ : m
j : n
b✝ : n → α
c : m → α
inst✝ : Subsingleton n
A : Matrix m n R
i : n
b : m → R
x : m
y : n
⊢ A.updateColumn i b x y = (col (Fin 1) b).submatrix id (Function.const n 0) x y

tactic: simp [updateColumn_apply, Subsingleton.elim i y]
state_before: case a
l : Type u_1
m : Type u_2
n : Type u_3
o : Type u_4
R : Type u_5
α : Type v
β : Type w
ι : Type u_6
M : Matrix m n α
i✝ : m
j : n
b✝ : n → α
c : m → α
inst✝ : Subsingleton n
A : Matrix m n R
i : n
b : m → R
x : m
y : n
⊢ A.updateColumn i b x y = (col (Fin 1) b).submatrix id (Function.const n 0) x y
state_after: no goals
Theorem: Encodable.decode_ge_two
File: Mathlib/Logic/Encodable/Basic.lean

tactic: suffices decodeSum n = none by
  change (decodeSum n).bind _ = none
  rw [this]
  rfl
state_before: α : Type u_1
β : Type u_2
n : ℕ
h : 2 ≤ n
⊢ decode n = none
state_after: α : Type u_1
β : Type u_2
n : ℕ
h : 2 ≤ n
⊢ decodeSum n = none

tactic: have : 1 ≤ n / 2 := by
  rw [Nat.le_div_iff_mul_le]
  exacts [h, by decide]
state_before: α : Type u_1
β : Type u_2
n : ℕ
h : 2 ≤ n
⊢ decodeSum n = none
state_after: α : Type u_1
β : Type u_2
n : ℕ
h : 2 ≤ n
this : 1 ≤ n / 2
⊢ decodeSum n = none

tactic: cases' exists_eq_succ_of_ne_zero (_root_.ne_of_gt this) with m e
state_before: α : Type u_1
β : Type u_2
n : ℕ
h : 2 ≤ n
this : 1 ≤ n / 2
⊢ decodeSum n = none
state_after: case intro
α : Type u_1
β : Type u_2
n : ℕ
h : 2 ≤ n
this : 1 ≤ n / 2
m : ℕ
e : n / 2 = m.succ
⊢ decodeSum n = none

tactic: simp only [decodeSum, boddDiv2_eq, div2_val]
state_before: case intro
α : Type u_1
β : Type u_2
n : ℕ
h : 2 ≤ n
this : 1 ≤ n / 2
m : ℕ
e : n / 2 = m.succ
⊢ decodeSum n = none
state_after: case intro
α : Type u_1
β : Type u_2
n : ℕ
h : 2 ≤ n
this : 1 ≤ n / 2
m : ℕ
e : n / 2 = m.succ
⊢ (match (n.bodd, n / 2) with
    | (false, m) => Option.map Sum.inl (decode m)
    | (fst, m) => Option.map Sum.inr (decode m)) =
    none

tactic: cases bodd n <;> simp [e]
state_before: case intro
α : Type u_1
β : Type u_2
n : ℕ
h : 2 ≤ n
this : 1 ≤ n / 2
m : ℕ
e : n / 2 = m.succ
⊢ (match (n.bodd, n / 2) with
    | (false, m) => Option.map Sum.inl (decode m)
    | (fst, m) => Option.map Sum.inr (decode m)) =
    none
state_after: no goals

tactic: change (decodeSum n).bind _ = none
state_before: α : Type u_1
β : Type u_2
n : ℕ
h : 2 ≤ n
this : decodeSum n = none
⊢ decode n = none
state_after: α : Type u_1
β : Type u_2
n : ℕ
h : 2 ≤ n
this : decodeSum n = none
⊢ (decodeSum n).bind (some ∘ ⇑Equiv.boolEquivPUnitSumPUnit.symm) = none

tactic: rw [this]
state_before: α : Type u_1
β : Type u_2
n : ℕ
h : 2 ≤ n
this : decodeSum n = none
⊢ (decodeSum n).bind (some ∘ ⇑Equiv.boolEquivPUnitSumPUnit.symm) = none
state_after: α : Type u_1
β : Type u_2
n : ℕ
h : 2 ≤ n
this : decodeSum n = none
⊢ none.bind (some ∘ ⇑Equiv.boolEquivPUnitSumPUnit.symm) = none

tactic: rfl
state_before: α : Type u_1
β : Type u_2
n : ℕ
h : 2 ≤ n
this : decodeSum n = none
⊢ none.bind (some ∘ ⇑Equiv.boolEquivPUnitSumPUnit.symm) = none
state_after: no goals

tactic: rw [Nat.le_div_iff_mul_le]
state_before: α : Type u_1
β : Type u_2
n : ℕ
h : 2 ≤ n
⊢ 1 ≤ n / 2
state_after: α : Type u_1
β : Type u_2
n : ℕ
h : 2 ≤ n
⊢ 1 * 2 ≤ n

α : Type u_1
β : Type u_2
n : ℕ
h : 2 ≤ n
⊢ 0 < 2

tactic: exacts [h, by decide]
state_before: α : Type u_1
β : Type u_2
n : ℕ
h : 2 ≤ n
⊢ 1 * 2 ≤ n

α : Type u_1
β : Type u_2
n : ℕ
h : 2 ≤ n
⊢ 0 < 2
state_after: no goals

tactic: decide
state_before: α : Type u_1
β : Type u_2
n : ℕ
h : 2 ≤ n
⊢ 0 < 2
state_after: no goals
Theorem: inter_preimage_maximals_eq_of_rel_iff_rel_on_of_subset
File: Mathlib/Order/Minimal.lean

tactic: apply inter_preimage_minimals_eq_of_rel_iff_rel_on_of_subset _ hy
state_before: α : Type u_1
β : Type u_2
r✝ r₁ r₂ : α → α → Prop
s✝ t : Set α
a b : α
inst✝ : PartialOrder α
f : α → β
r : α → α → Prop
s : β → β → Prop
y : Set β
x : Set α
hf : ∀ ⦃a a' : α⦄, a ∈ x → a' ∈ x → (r a a' ↔ s (f a) (f a'))
hy : y ⊆ f '' x
⊢ x ∩ f ⁻¹' maximals s y = maximals r (x ∩ f ⁻¹' y)
state_after: α : Type u_1
β : Type u_2
r✝ r₁ r₂ : α → α → Prop
s✝ t : Set α
a b : α
inst✝ : PartialOrder α
f : α → β
r : α → α → Prop
s : β → β → Prop
y : Set β
x : Set α
hf : ∀ ⦃a a' : α⦄, a ∈ x → a' ∈ x → (r a a' ↔ s (f a) (f a'))
hy : y ⊆ f '' x
⊢ ∀ ⦃a a' : α⦄, a ∈ x → a' ∈ x → (r a' a ↔ s (f a') (f a))

tactic: exact fun _ _ a b ↦ hf b a
state_before: α : Type u_1
β : Type u_2
r✝ r₁ r₂ : α → α → Prop
s✝ t : Set α
a b : α
inst✝ : PartialOrder α
f : α → β
r : α → α → Prop
s : β → β → Prop
y : Set β
x : Set α
hf : ∀ ⦃a a' : α⦄, a ∈ x → a' ∈ x → (r a a' ↔ s (f a) (f a'))
hy : y ⊆ f '' x
⊢ ∀ ⦃a a' : α⦄, a ∈ x → a' ∈ x → (r a' a ↔ s (f a') (f a))
state_after: no goals
Theorem: SimpleGraph.CliqueFreeOn.mono
File: Mathlib/Combinatorics/SimpleGraph/Clique.lean

tactic: rintro t hts ht
state_before: α : Type u_1
β : Type u_2
G H : SimpleGraph α
s s₁ s₂ : Set α
t : Finset α
a b : α
m n : ℕ
hmn : m ≤ n
hG : G.CliqueFreeOn s m
⊢ G.CliqueFreeOn s n
state_after: α : Type u_1
β : Type u_2
G H : SimpleGraph α
s s₁ s₂ : Set α
t✝ : Finset α
a b : α
m n : ℕ
hmn : m ≤ n
hG : G.CliqueFreeOn s m
t : Finset α
hts : ↑t ⊆ s
ht : G.IsNClique n t
⊢ False

tactic: obtain ⟨u, hut, hu⟩ := exists_subset_card_eq (hmn.trans ht.card_eq.ge)
state_before: α : Type u_1
β : Type u_2
G H : SimpleGraph α
s s₁ s₂ : Set α
t✝ : Finset α
a b : α
m n : ℕ
hmn : m ≤ n
hG : G.CliqueFreeOn s m
t : Finset α
hts : ↑t ⊆ s
ht : G.IsNClique n t
⊢ False
state_after: case intro.intro
α : Type u_1
β : Type u_2
G H : SimpleGraph α
s s₁ s₂ : Set α
t✝ : Finset α
a b : α
m n : ℕ
hmn : m ≤ n
hG : G.CliqueFreeOn s m
t : Finset α
hts : ↑t ⊆ s
ht : G.IsNClique n t
u : Finset α
hut : u ⊆ t
hu : u.card = m
⊢ False

tactic: exact hG ((coe_subset.2 hut).trans hts) ⟨ht.clique.subset hut, hu⟩
state_before: case intro.intro
α : Type u_1
β : Type u_2
G H : SimpleGraph α
s s₁ s₂ : Set α
t✝ : Finset α
a b : α
m n : ℕ
hmn : m ≤ n
hG : G.CliqueFreeOn s m
t : Finset α
hts : ↑t ⊆ s
ht : G.IsNClique n t
u : Finset α
hut : u ⊆ t
hu : u.card = m
⊢ False
state_after: no goals
Theorem: indicator_ae_eq_zero_of_restrict_ae_eq_zero
File: Mathlib/MeasureTheory/Measure/Restrict.lean

tactic: rw [Filter.EventuallyEq, ae_restrict_iff' hs] at hf
state_before: R : Type u_1
α : Type u_2
β : Type u_3
δ : Type u_4
γ : Type u_5
ι : Type u_6
inst✝¹ : MeasurableSpace α
μ : Measure α
s t : Set α
f : α → β
inst✝ : Zero β
hs : MeasurableSet s
hf : f =ᶠ[ae (μ.restrict s)] 0
⊢ s.indicator f =ᶠ[ae μ] 0
state_after: R : Type u_1
α : Type u_2
β : Type u_3
δ : Type u_4
γ : Type u_5
ι : Type u_6
inst✝¹ : MeasurableSpace α
μ : Measure α
s t : Set α
f : α → β
inst✝ : Zero β
hs : MeasurableSet s
hf : ∀ᵐ (x : α) ∂μ, x ∈ s → f x = 0 x
⊢ s.indicator f =ᶠ[ae μ] 0

tactic: filter_upwards [hf] with x hx
state_before: R : Type u_1
α : Type u_2
β : Type u_3
δ : Type u_4
γ : Type u_5
ι : Type u_6
inst✝¹ : MeasurableSpace α
μ : Measure α
s t : Set α
f : α → β
inst✝ : Zero β
hs : MeasurableSet s
hf : ∀ᵐ (x : α) ∂μ, x ∈ s → f x = 0 x
⊢ s.indicator f =ᶠ[ae μ] 0
state_after: case h
R : Type u_1
α : Type u_2
β : Type u_3
δ : Type u_4
γ : Type u_5
ι : Type u_6
inst✝¹ : MeasurableSpace α
μ : Measure α
s t : Set α
f : α → β
inst✝ : Zero β
hs : MeasurableSet s
hf : ∀ᵐ (x : α) ∂μ, x ∈ s → f x = 0 x
x : α
hx : x ∈ s → f x = 0 x
⊢ s.indicator f x = 0 x

tactic: by_cases hxs : x ∈ s
state_before: case h
R : Type u_1
α : Type u_2
β : Type u_3
δ : Type u_4
γ : Type u_5
ι : Type u_6
inst✝¹ : MeasurableSpace α
μ : Measure α
s t : Set α
f : α → β
inst✝ : Zero β
hs : MeasurableSet s
hf : ∀ᵐ (x : α) ∂μ, x ∈ s → f x = 0 x
x : α
hx : x ∈ s → f x = 0 x
⊢ s.indicator f x = 0 x
state_after: case pos
R : Type u_1
α : Type u_2
β : Type u_3
δ : Type u_4
γ : Type u_5
ι : Type u_6
inst✝¹ : MeasurableSpace α
μ : Measure α
s t : Set α
f : α → β
inst✝ : Zero β
hs : MeasurableSet s
hf : ∀ᵐ (x : α) ∂μ, x ∈ s → f x = 0 x
x : α
hx : x ∈ s → f x = 0 x
hxs : x ∈ s
⊢ s.indicator f x = 0 x

case neg
R : Type u_1
α : Type u_2
β : Type u_3
δ : Type u_4
γ : Type u_5
ι : Type u_6
inst✝¹ : MeasurableSpace α
μ : Measure α
s t : Set α
f : α → β
inst✝ : Zero β
hs : MeasurableSet s
hf : ∀ᵐ (x : α) ∂μ, x ∈ s → f x = 0 x
x : α
hx : x ∈ s → f x = 0 x
hxs : x ∉ s
⊢ s.indicator f x = 0 x

tactic: simp only [hxs, hx hxs, Set.indicator_of_mem]
state_before: case pos
R : Type u_1
α : Type u_2
β : Type u_3
δ : Type u_4
γ : Type u_5
ι : Type u_6
inst✝¹ : MeasurableSpace α
μ : Measure α
s t : Set α
f : α → β
inst✝ : Zero β
hs : MeasurableSet s
hf : ∀ᵐ (x : α) ∂μ, x ∈ s → f x = 0 x
x : α
hx : x ∈ s → f x = 0 x
hxs : x ∈ s
⊢ s.indicator f x = 0 x
state_after: no goals

tactic: simp [hx, hxs]
state_before: case neg
R : Type u_1
α : Type u_2
β : Type u_3
δ : Type u_4
γ : Type u_5
ι : Type u_6
inst✝¹ : MeasurableSpace α
μ : Measure α
s t : Set α
f : α → β
inst✝ : Zero β
hs : MeasurableSet s
hf : ∀ᵐ (x : α) ∂μ, x ∈ s → f x = 0 x
x : α
hx : x ∈ s → f x = 0 x
hxs : x ∉ s
⊢ s.indicator f x = 0 x
state_after: no goals
Theorem: isOpen_iff_coe_preimage_of_iSup_eq_top
File: Mathlib/Topology/LocalAtTarget.lean

tactic: rw [isOpen_iff_inter_of_iSup_eq_top hU s]
state_before: α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
f : α → β
s✝ : Set β
ι : Type u_3
U : ι → Opens β
hU : iSup U = ⊤
s : Set β
⊢ IsOpen s ↔ ∀ (i : ι), IsOpen (Subtype.val ⁻¹' s)
state_after: α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
f : α → β
s✝ : Set β
ι : Type u_3
U : ι → Opens β
hU : iSup U = ⊤
s : Set β
⊢ (∀ (i : ι), IsOpen (s ∩ ↑(U i))) ↔ ∀ (i : ι), IsOpen (Subtype.val ⁻¹' s)

tactic: refine forall_congr' fun i => ?_
state_before: α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
f : α → β
s✝ : Set β
ι : Type u_3
U : ι → Opens β
hU : iSup U = ⊤
s : Set β
⊢ (∀ (i : ι), IsOpen (s ∩ ↑(U i))) ↔ ∀ (i : ι), IsOpen (Subtype.val ⁻¹' s)
state_after: α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
f : α → β
s✝ : Set β
ι : Type u_3
U : ι → Opens β
hU : iSup U = ⊤
s : Set β
i : ι
⊢ IsOpen (s ∩ ↑(U i)) ↔ IsOpen (Subtype.val ⁻¹' s)

tactic: rw [(U _).2.openEmbedding_subtype_val.open_iff_image_open]
state_before: α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
f : α → β
s✝ : Set β
ι : Type u_3
U : ι → Opens β
hU : iSup U = ⊤
s : Set β
i : ι
⊢ IsOpen (s ∩ ↑(U i)) ↔ IsOpen (Subtype.val ⁻¹' s)
state_after: α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
f : α → β
s✝ : Set β
ι : Type u_3
U : ι → Opens β
hU : iSup U = ⊤
s : Set β
i : ι
⊢ IsOpen (s ∩ ↑(U i)) ↔ IsOpen (Subtype.val '' (Subtype.val ⁻¹' s))

tactic: erw [Set.image_preimage_eq_inter_range]
state_before: α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
f : α → β
s✝ : Set β
ι : Type u_3
U : ι → Opens β
hU : iSup U = ⊤
s : Set β
i : ι
⊢ IsOpen (s ∩ ↑(U i)) ↔ IsOpen (Subtype.val '' (Subtype.val ⁻¹' s))
state_after: α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
f : α → β
s✝ : Set β
ι : Type u_3
U : ι → Opens β
hU : iSup U = ⊤
s : Set β
i : ι
⊢ IsOpen (s ∩ ↑(U i)) ↔ IsOpen (s ∩ range Subtype.val)

tactic: rw [Subtype.range_coe, Opens.carrier_eq_coe]
state_before: α : Type u_1
β : Type u_2
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
f : α → β
s✝ : Set β
ι : Type u_3
U : ι → Opens β
hU : iSup U = ⊤
s : Set β
i : ι
⊢ IsOpen (s ∩ ↑(U i)) ↔ IsOpen (s ∩ range Subtype.val)
state_after: no goals
Theorem: localCohomology.Ideal.exists_pow_le_of_le_radical_of_fG
File: Mathlib/Algebra/Homology/LocalCohomology.lean

tactic: obtain ⟨k, hk⟩ := J.exists_radical_pow_le_of_fg hJ
state_before: R : Type u
inst✝ : CommRing R
I J K : Ideal R
hIJ : I ≤ J.radical
hJ : J.radical.FG
⊢ ∃ k, I ^ k ≤ J
state_after: case intro
R : Type u
inst✝ : CommRing R
I J K : Ideal R
hIJ : I ≤ J.radical
hJ : J.radical.FG
k : ℕ
hk : J.radical ^ k ≤ J
⊢ ∃ k, I ^ k ≤ J

tactic: use k
state_before: case intro
R : Type u
inst✝ : CommRing R
I J K : Ideal R
hIJ : I ≤ J.radical
hJ : J.radical.FG
k : ℕ
hk : J.radical ^ k ≤ J
⊢ ∃ k, I ^ k ≤ J
state_after: case h
R : Type u
inst✝ : CommRing R
I J K : Ideal R
hIJ : I ≤ J.radical
hJ : J.radical.FG
k : ℕ
hk : J.radical ^ k ≤ J
⊢ I ^ k ≤ J

tactic: calc
  I ^ k ≤ J.radical ^ k := Ideal.pow_right_mono hIJ _
  _ ≤ J := hk
state_before: case h
R : Type u
inst✝ : CommRing R
I J K : Ideal R
hIJ : I ≤ J.radical
hJ : J.radical.FG
k : ℕ
hk : J.radical ^ k ≤ J
⊢ I ^ k ≤ J
state_after: no goals
Theorem: IsScalarTower.algebraMap_eq
File: Mathlib/Algebra/Algebra/Tower.lean

tactic: simp_rw [RingHom.comp_apply, Algebra.algebraMap_eq_smul_one, smul_assoc, one_smul]
state_before: R : Type u
S : Type v
A : Type w
B : Type u₁
M : Type v₁
inst✝¹⁰ : CommSemiring R
inst✝⁹ : CommSemiring S
inst✝⁸ : Semiring A
inst✝⁷ : Semiring B
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra S A
inst✝⁴ : Algebra S B
inst✝³ : Algebra R A
inst✝² : Algebra R B
inst✝¹ : IsScalarTower R S A
inst✝ : IsScalarTower R S B
x : R
⊢ (algebraMap R A) x = ((algebraMap S A).comp (algebraMap R S)) x
state_after: no goals
Theorem: hasLineDerivAt_iff_tendsto_slope_zero
File: Mathlib/Analysis/Calculus/LineDeriv/Basic.lean

tactic: simp only [HasLineDerivAt, hasDerivAt_iff_tendsto_slope_zero, zero_add,
  zero_smul, add_zero]
state_before: 𝕜 : Type u_1
inst✝⁴ : NontriviallyNormedField 𝕜
F : Type u_2
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
E : Type u_3
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
f f₁ : E → F
f' f₀' f₁' : F
s t : Set E
x v : E
⊢ HasLineDerivAt 𝕜 f f' x v ↔ Tendsto (fun t => t⁻¹ • (f (x + t • v) - f x)) (𝓝[≠] 0) (𝓝 f')
state_after: no goals
Theorem: frontier_Iio'
File: Mathlib/Topology/Order/DenselyOrdered.lean

tactic: simp [frontier, closure_Iio' ha, Iic_diff_Iio, Icc_self]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝³ : TopologicalSpace α
inst✝² : LinearOrder α
inst✝¹ : OrderTopology α
inst✝ : DenselyOrdered α
a✝ b : α
s : Set α
a : α
ha : (Iio a).Nonempty
⊢ frontier (Iio a) = {a}
state_after: no goals
Theorem: Set.Ioc_inter_Ioo_of_left_lt
File: Mathlib/Order/Interval/Set/Basic.lean

tactic: simp [and_assoc, @and_left_comm (x ≤ _), and_iff_left_iff_imp.2 fun h' => lt_of_le_of_lt h' h]
state_before: α : Type u_1
β : Type u_2
inst✝¹ : LinearOrder α
inst✝ : LinearOrder β
f : α → β
a a₁ a₂ b b₁ b₂ c d : α
h : b₁ < b₂
x : α
⊢ x ∈ Ioc a₁ b₁ ∩ Ioo a₂ b₂ ↔ x ∈ Ioc (max a₁ a₂) b₁
state_after: no goals
Theorem: Nat.factorial_lt
File: Mathlib/Data/Nat/Factorial/Basic.lean

tactic: refine ⟨fun h => not_le.mp fun hmn => Nat.not_le_of_lt h (factorial_le hmn), fun h => ?_⟩
state_before: m n : ℕ
hn : 0 < n
⊢ n ! < m ! ↔ n < m
state_after: m n : ℕ
hn : 0 < n
h : n < m
⊢ n ! < m !

tactic: have : ∀ {n}, 0 < n → n ! < (n + 1)! := by
  intro k hk
  rw [factorial_succ, succ_mul, Nat.lt_add_left_iff_pos]
  exact Nat.mul_pos hk k.factorial_pos
state_before: m n : ℕ
hn : 0 < n
h : n < m
⊢ n ! < m !
state_after: m n : ℕ
hn : 0 < n
h : n < m
this : ∀ {n : ℕ}, 0 < n → n ! < (n + 1)!
⊢ n ! < m !

tactic: induction' h with k hnk ih generalizing hn
state_before: m n : ℕ
hn : 0 < n
h : n < m
this : ∀ {n : ℕ}, 0 < n → n ! < (n + 1)!
⊢ n ! < m !
state_after: case refl
m n : ℕ
this : ∀ {n : ℕ}, 0 < n → n ! < (n + 1)!
hn : 0 < n
⊢ n ! < n.succ !

case step
m n : ℕ
this : ∀ {n : ℕ}, 0 < n → n ! < (n + 1)!
k : ℕ
hnk : n.succ.le k
ih : 0 < n → n ! < k !
hn : 0 < n
⊢ n ! < k.succ !

tactic: intro k hk
state_before: m n : ℕ
hn : 0 < n
h : n < m
⊢ ∀ {n : ℕ}, 0 < n → n ! < (n + 1)!
state_after: m n : ℕ
hn : 0 < n
h : n < m
k : ℕ
hk : 0 < k
⊢ k ! < (k + 1)!

tactic: rw [factorial_succ, succ_mul, Nat.lt_add_left_iff_pos]
state_before: m n : ℕ
hn : 0 < n
h : n < m
k : ℕ
hk : 0 < k
⊢ k ! < (k + 1)!
state_after: m n : ℕ
hn : 0 < n
h : n < m
k : ℕ
hk : 0 < k
⊢ 0 < k * k !

tactic: exact Nat.mul_pos hk k.factorial_pos
state_before: m n : ℕ
hn : 0 < n
h : n < m
k : ℕ
hk : 0 < k
⊢ 0 < k * k !
state_after: no goals

tactic: exact this hn
state_before: case refl
m n : ℕ
this : ∀ {n : ℕ}, 0 < n → n ! < (n + 1)!
hn : 0 < n
⊢ n ! < n.succ !
state_after: no goals

tactic: exact lt_trans (ih hn) $ this <| lt_trans hn <| lt_of_succ_le hnk
state_before: case step
m n : ℕ
this : ∀ {n : ℕ}, 0 < n → n ! < (n + 1)!
k : ℕ
hnk : n.succ.le k
ih : 0 < n → n ! < k !
hn : 0 < n
⊢ n ! < k.succ !
state_after: no goals
Theorem: AffineSubspace.left_mem_perpBisector
File: Mathlib/Geometry/Euclidean/PerpBisector.lean

tactic: rw [perpBisector_comm, right_mem_perpBisector, eq_comm]
state_before: V : Type u_1
P : Type u_2
inst✝³ : NormedAddCommGroup V
inst✝² : InnerProductSpace ℝ V
inst✝¹ : MetricSpace P
inst✝ : NormedAddTorsor V P
c c₁ c₂ p₁ p₂ : P
⊢ p₁ ∈ perpBisector p₁ p₂ ↔ p₁ = p₂
state_after: no goals
Theorem: Monoid.PushoutI.lift_of
File: Mathlib/GroupTheory/PushoutI.lean

tactic: delta PushoutI lift of
state_before: ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝² : Monoid K
inst✝¹ : (i : ι) → Monoid (G i)
inst✝ : Monoid H
φ : (i : ι) → H →* G i
f : (i : ι) → G i →* K
k : H →* K
hf : ∀ (i : ι), (f i).comp (φ i) = k
i : ι
g : G i
⊢ (lift f k hf) ((of i) g) = (f i) g
state_after: ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝² : Monoid K
inst✝¹ : (i : ι) → Monoid (G i)
inst✝ : Monoid H
φ : (i : ι) → H →* G i
f : (i : ι) → G i →* K
k : H →* K
hf : ∀ (i : ι), (f i).comp (φ i) = k
i : ι
g : G i
⊢ ((con φ).lift (Coprod.lift (CoprodI.lift f) k) ⋯) (((con φ).mk'.comp (inl.comp CoprodI.of)) g) = (f i) g

tactic: simp only [MonoidHom.coe_comp, Con.coe_mk', comp_apply, Con.lift_coe,
  lift_apply_inl, CoprodI.lift_of]
state_before: ι : Type u_1
G : ι → Type u_2
H : Type u_3
K : Type u_4
inst✝² : Monoid K
inst✝¹ : (i : ι) → Monoid (G i)
inst✝ : Monoid H
φ : (i : ι) → H →* G i
f : (i : ι) → G i →* K
k : H →* K
hf : ∀ (i : ι), (f i).comp (φ i) = k
i : ι
g : G i
⊢ ((con φ).lift (Coprod.lift (CoprodI.lift f) k) ⋯) (((con φ).mk'.comp (inl.comp CoprodI.of)) g) = (f i) g
state_after: no goals