1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: SimpleGraph.Walk.IsEulerian.card_odd_degree
File: Mathlib/Combinatorics/SimpleGraph/Trails.lean

tactic: rw [← Set.toFinset_card]
state_before: V : Type u_1
G : SimpleGraph V
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
u v : V
p : G.Walk u v
ht : p.IsEulerian
⊢ Fintype.card ↑{v | Odd (G.degree v)} = 0 ∨ Fintype.card ↑{v | Odd (G.degree v)} = 2
state_after: V : Type u_1
G : SimpleGraph V
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
u v : V
p : G.Walk u v
ht : p.IsEulerian
⊢ {v | Odd (G.degree v)}.toFinset.card = 0 ∨ {v | Odd (G.degree v)}.toFinset.card = 2

tactic: apply IsEulerian.card_filter_odd_degree ht
state_before: V : Type u_1
G : SimpleGraph V
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
u v : V
p : G.Walk u v
ht : p.IsEulerian
⊢ {v | Odd (G.degree v)}.toFinset.card = 0 ∨ {v | Odd (G.degree v)}.toFinset.card = 2
state_after: V : Type u_1
G : SimpleGraph V
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
u v : V
p : G.Walk u v
ht : p.IsEulerian
⊢ {v | Odd (G.degree v)}.toFinset = Finset.filter (fun v => Odd (G.degree v)) Finset.univ

tactic: ext v
state_before: V : Type u_1
G : SimpleGraph V
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
u v : V
p : G.Walk u v
ht : p.IsEulerian
⊢ {v | Odd (G.degree v)}.toFinset = Finset.filter (fun v => Odd (G.degree v)) Finset.univ
state_after: case a
V : Type u_1
G : SimpleGraph V
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
u v✝ : V
p : G.Walk u v✝
ht : p.IsEulerian
v : V
⊢ v ∈ {v | Odd (G.degree v)}.toFinset ↔ v ∈ Finset.filter (fun v => Odd (G.degree v)) Finset.univ

tactic: simp
state_before: case a
V : Type u_1
G : SimpleGraph V
inst✝² : DecidableEq V
inst✝¹ : Fintype V
inst✝ : DecidableRel G.Adj
u v✝ : V
p : G.Walk u v✝
ht : p.IsEulerian
v : V
⊢ v ∈ {v | Odd (G.degree v)}.toFinset ↔ v ∈ Finset.filter (fun v => Odd (G.degree v)) Finset.univ
state_after: no goals
Theorem: DenseInducing.dense_image
File: Mathlib/Topology/DenseEmbedding.lean

tactic: refine ⟨fun H x => ?_, di.dense.dense_image di.continuous⟩
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
i : α → β
di✝ di : DenseInducing i
s : Set α
⊢ Dense (i '' s) ↔ Dense s
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
i : α → β
di✝ di : DenseInducing i
s : Set α
H : Dense (i '' s)
x : α
⊢ x ∈ closure s

tactic: rw [di.toInducing.closure_eq_preimage_closure_image, H.closure_eq, preimage_univ]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
i : α → β
di✝ di : DenseInducing i
s : Set α
H : Dense (i '' s)
x : α
⊢ x ∈ closure s
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
i : α → β
di✝ di : DenseInducing i
s : Set α
H : Dense (i '' s)
x : α
⊢ x ∈ univ

tactic: trivial
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
δ : Type u_4
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
i : α → β
di✝ di : DenseInducing i
s : Set α
H : Dense (i '' s)
x : α
⊢ x ∈ univ
state_after: no goals
Theorem: Matroid.map_val_restrictSubtype_eq
File: Mathlib/Data/Matroid/Map.lean

tactic: simp [restrictSubtype, map_comap, Subset.rfl]
state_before: α : Type u_1
β : Type u_2
f : α → β
E✝ I✝ s : Set α
M✝¹ : Matroid α
N : Matroid β
E X✝ I : Set α
M✝ M : Matroid α
X : Set α
⊢ (M.restrictSubtype X).map Subtype.val ⋯ = M ↾ X
state_after: no goals
Theorem: ZNum.of_to_int'
File: Mathlib/Data/Num/Lemmas.lean

tactic: dsimp [ofInt', cast_zero]
state_before: α : Type u_1
⊢ ofInt' ↑0 = 0
state_after: α : Type u_1
⊢ (Num.ofNat' 0).toZNum = 0

tactic: erw [Num.ofNat'_zero, Num.toZNum]
state_before: α : Type u_1
⊢ (Num.ofNat' 0).toZNum = 0
state_after: no goals

tactic: rw [cast_pos, ← PosNum.cast_to_nat, ← Num.ofInt'_toZNum, PosNum.of_to_nat]
state_before: α : Type u_1
a : PosNum
⊢ ofInt' ↑(pos a) = pos a
state_after: α : Type u_1
a : PosNum
⊢ (Num.pos a).toZNum = pos a

tactic: rfl
state_before: α : Type u_1
a : PosNum
⊢ (Num.pos a).toZNum = pos a
state_after: no goals

tactic: rw [cast_neg, ofInt'_neg, ← PosNum.cast_to_nat, ← Num.ofInt'_toZNum, PosNum.of_to_nat]
state_before: α : Type u_1
a : PosNum
⊢ ofInt' ↑(neg a) = neg a
state_after: α : Type u_1
a : PosNum
⊢ -(Num.pos a).toZNum = neg a

tactic: rfl
state_before: α : Type u_1
a : PosNum
⊢ -(Num.pos a).toZNum = neg a
state_after: no goals
Theorem: Finset.disjUnion_eq_union
File: Mathlib/Data/Finset/Basic.lean

tactic: simp
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ s₁ s₂ t✝ t₁ t₂ u v : Finset α
a✝ b : α
s t : Finset α
h : _root_.Disjoint s t
a : α
⊢ a ∈ s.disjUnion t h ↔ a ∈ s ∪ t
state_after: no goals
Theorem: self_le_wellOrderSucc
File: Mathlib/Order/IsWellOrderLimitElement.lean

tactic: by_cases h : ∃ b, a < b
state_before: α : Type u_1
inst✝¹ : LinearOrder α
inst✝ : IsWellOrder α fun x x_1 => x < x_1
a : α
⊢ a ≤ wellOrderSucc a
state_after: case pos
α : Type u_1
inst✝¹ : LinearOrder α
inst✝ : IsWellOrder α fun x x_1 => x < x_1
a : α
h : ∃ b, a < b
⊢ a ≤ wellOrderSucc a

case neg
α : Type u_1
inst✝¹ : LinearOrder α
inst✝ : IsWellOrder α fun x x_1 => x < x_1
a : α
h : ¬∃ b, a < b
⊢ a ≤ wellOrderSucc a

tactic: exact (IsWellFounded.wf.lt_succ h).le
state_before: case pos
α : Type u_1
inst✝¹ : LinearOrder α
inst✝ : IsWellOrder α fun x x_1 => x < x_1
a : α
h : ∃ b, a < b
⊢ a ≤ wellOrderSucc a
state_after: no goals

tactic: dsimp [wellOrderSucc, WellFounded.succ]
state_before: case neg
α : Type u_1
inst✝¹ : LinearOrder α
inst✝ : IsWellOrder α fun x x_1 => x < x_1
a : α
h : ¬∃ b, a < b
⊢ a ≤ wellOrderSucc a
state_after: case neg
α : Type u_1
inst✝¹ : LinearOrder α
inst✝ : IsWellOrder α fun x x_1 => x < x_1
a : α
h : ¬∃ b, a < b
⊢ a ≤ if h : ∃ y, a < y then ⋯.min {y | a < y} h else a

tactic: rw [dif_neg h]
state_before: case neg
α : Type u_1
inst✝¹ : LinearOrder α
inst✝ : IsWellOrder α fun x x_1 => x < x_1
a : α
h : ¬∃ b, a < b
⊢ a ≤ if h : ∃ y, a < y then ⋯.min {y | a < y} h else a
state_after: no goals
Theorem: Set.ssubset_iff_insert
File: Mathlib/Data/Set/Basic.lean

tactic: simp only [insert_subset_iff, exists_and_right, ssubset_def, not_subset]
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
a b : α
s✝ s₁ s₂ t✝ t₁ t₂ u s t : Set α
⊢ s ⊂ t ↔ ∃ a ∉ s, insert a s ⊆ t
state_after: α : Type u
β : Type v
γ : Type w
ι : Sort x
a b : α
s✝ s₁ s₂ t✝ t₁ t₂ u s t : Set α
⊢ (s ⊆ t ∧ ∃ a ∈ t, a ∉ s) ↔ ∃ a ∉ s, a ∈ t ∧ s ⊆ t

tactic: aesop
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
a b : α
s✝ s₁ s₂ t✝ t₁ t₂ u s t : Set α
⊢ (s ⊆ t ∧ ∃ a ∈ t, a ∉ s) ↔ ∃ a ∉ s, a ∈ t ∧ s ⊆ t
state_after: no goals
Theorem: MeasureTheory.Integrable.induction
File: Mathlib/MeasureTheory/Function/SimpleFuncDenseLp.lean

tactic: simp only [← memℒp_one_iff_integrable] at *
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
E : Type u_4
F : Type u_5
𝕜 : Type u_6
inst✝¹ : MeasurableSpace α
inst✝ : NormedAddCommGroup E
f : α → E
p : ℝ≥0∞
μ : Measure α
P : (α → E) → Prop
h_ind : ∀ (c : E) ⦃s : Set α⦄, MeasurableSet s → μ s < ⊤ → P (s.indicator fun x => c)
h_add : ∀ ⦃f g : α → E⦄, Disjoint (support f) (support g) → Integrable f μ → Integrable g μ → P f → P g → P (f + g)
h_closed : IsClosed {f | P ↑↑f}
h_ae : ∀ ⦃f g : α → E⦄, f =ᶠ[ae μ] g → Integrable f μ → P f → P g
⊢ ∀ ⦃f : α → E⦄, Integrable f μ → P f
state_after: α : Type u_1
β : Type u_2
ι : Type u_3
E : Type u_4
F : Type u_5
𝕜 : Type u_6
inst✝¹ : MeasurableSpace α
inst✝ : NormedAddCommGroup E
f : α → E
p : ℝ≥0∞
μ : Measure α
P : (α → E) → Prop
h_ind : ∀ (c : E) ⦃s : Set α⦄, MeasurableSet s → μ s < ⊤ → P (s.indicator fun x => c)
h_closed : IsClosed {f | P ↑↑f}
h_add : ∀ ⦃f g : α → E⦄, Disjoint (support f) (support g) → Memℒp f 1 μ → Memℒp g 1 μ → P f → P g → P (f + g)
h_ae : ∀ ⦃f g : α → E⦄, f =ᶠ[ae μ] g → Memℒp f 1 μ → P f → P g
⊢ ∀ ⦃f : α → E⦄, Memℒp f 1 μ → P f

tactic: exact Memℒp.induction one_ne_top (P := P) h_ind h_add h_closed h_ae
state_before: α : Type u_1
β : Type u_2
ι : Type u_3
E : Type u_4
F : Type u_5
𝕜 : Type u_6
inst✝¹ : MeasurableSpace α
inst✝ : NormedAddCommGroup E
f : α → E
p : ℝ≥0∞
μ : Measure α
P : (α → E) → Prop
h_ind : ∀ (c : E) ⦃s : Set α⦄, MeasurableSet s → μ s < ⊤ → P (s.indicator fun x => c)
h_closed : IsClosed {f | P ↑↑f}
h_add : ∀ ⦃f g : α → E⦄, Disjoint (support f) (support g) → Memℒp f 1 μ → Memℒp g 1 μ → P f → P g → P (f + g)
h_ae : ∀ ⦃f g : α → E⦄, f =ᶠ[ae μ] g → Memℒp f 1 μ → P f → P g
⊢ ∀ ⦃f : α → E⦄, Memℒp f 1 μ → P f
state_after: no goals
Theorem: IsCoprime.mul_right_iff
File: Mathlib/RingTheory/Coprime/Basic.lean

tactic: rw [isCoprime_comm, IsCoprime.mul_left_iff, isCoprime_comm, @isCoprime_comm _ _ z]
state_before: R : Type u
inst✝ : CommSemiring R
x y z : R
⊢ IsCoprime x (y * z) ↔ IsCoprime x y ∧ IsCoprime x z
state_after: no goals
Theorem: Nat.exists_coprime
File: .lake/packages/batteries/Batteries/Data/Nat/Gcd.lean

tactic: cases eq_zero_or_pos (gcd m n) with
| inl h0 =>
  rw [gcd_eq_zero_iff] at h0
  refine ⟨1, 1, gcd_one_left 1, ?_⟩
  simp [h0]
| inr hpos =>
  exact ⟨_, _, coprime_div_gcd_div_gcd hpos,
    (Nat.div_mul_cancel (gcd_dvd_left m n)).symm,
    (Nat.div_mul_cancel (gcd_dvd_right m n)).symm⟩
state_before: m n : Nat
⊢ ∃ m' n', m'.Coprime n' ∧ m = m' * m.gcd n ∧ n = n' * m.gcd n
state_after: no goals

tactic: rw [gcd_eq_zero_iff] at h0
state_before: case inl
m n : Nat
h0 : m.gcd n = 0
⊢ ∃ m' n', m'.Coprime n' ∧ m = m' * m.gcd n ∧ n = n' * m.gcd n
state_after: case inl
m n : Nat
h0 : m = 0 ∧ n = 0
⊢ ∃ m' n', m'.Coprime n' ∧ m = m' * m.gcd n ∧ n = n' * m.gcd n

tactic: refine ⟨1, 1, gcd_one_left 1, ?_⟩
state_before: case inl
m n : Nat
h0 : m = 0 ∧ n = 0
⊢ ∃ m' n', m'.Coprime n' ∧ m = m' * m.gcd n ∧ n = n' * m.gcd n
state_after: case inl
m n : Nat
h0 : m = 0 ∧ n = 0
⊢ m = 1 * m.gcd n ∧ n = 1 * m.gcd n

tactic: simp [h0]
state_before: case inl
m n : Nat
h0 : m = 0 ∧ n = 0
⊢ m = 1 * m.gcd n ∧ n = 1 * m.gcd n
state_after: no goals

tactic: exact ⟨_, _, coprime_div_gcd_div_gcd hpos,
  (Nat.div_mul_cancel (gcd_dvd_left m n)).symm,
  (Nat.div_mul_cancel (gcd_dvd_right m n)).symm⟩
state_before: case inr
m n : Nat
hpos : m.gcd n > 0
⊢ ∃ m' n', m'.Coprime n' ∧ m = m' * m.gcd n ∧ n = n' * m.gcd n
state_after: no goals
Theorem: bernoulliFun_endpoints_eq_of_ne_one
File: Mathlib/NumberTheory/ZetaValues.lean

tactic: rw [bernoulliFun_eval_zero, bernoulliFun, Polynomial.eval_one_map, Polynomial.bernoulli_eval_one,
  bernoulli_eq_bernoulli'_of_ne_one hk, eq_ratCast]
state_before: k : ℕ
hk : k ≠ 1
⊢ bernoulliFun k 1 = bernoulliFun k 0
state_after: no goals
Theorem: Antitone.map_iSup_of_continuousAt'
File: Mathlib/Topology/Order/Monotone.lean

tactic: rw [iSup, Antitone.map_sSup_of_continuousAt' Cf Af (range_nonempty g) bdd, ← range_comp, iInf]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁷ : ConditionallyCompleteLinearOrder α
inst✝⁶ : TopologicalSpace α
inst✝⁵ : OrderTopology α
inst✝⁴ : ConditionallyCompleteLinearOrder β
inst✝³ : TopologicalSpace β
inst✝² : OrderClosedTopology β
inst✝¹ : Nonempty γ
ι : Sort u_4
inst✝ : Nonempty ι
f : α → β
g : ι → α
Cf : ContinuousAt f (iSup g)
Af : Antitone f
bdd : autoParam (BddAbove (range g)) _auto✝
⊢ f (⨆ i, g i) = ⨅ i, f (g i)
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁷ : ConditionallyCompleteLinearOrder α
inst✝⁶ : TopologicalSpace α
inst✝⁵ : OrderTopology α
inst✝⁴ : ConditionallyCompleteLinearOrder β
inst✝³ : TopologicalSpace β
inst✝² : OrderClosedTopology β
inst✝¹ : Nonempty γ
ι : Sort u_4
inst✝ : Nonempty ι
f : α → β
g : ι → α
Cf : ContinuousAt f (iSup g)
Af : Antitone f
bdd : autoParam (BddAbove (range g)) _auto✝
⊢ sInf (range (f ∘ g)) = sInf (range fun i => f (g i))

tactic: rfl
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝⁷ : ConditionallyCompleteLinearOrder α
inst✝⁶ : TopologicalSpace α
inst✝⁵ : OrderTopology α
inst✝⁴ : ConditionallyCompleteLinearOrder β
inst✝³ : TopologicalSpace β
inst✝² : OrderClosedTopology β
inst✝¹ : Nonempty γ
ι : Sort u_4
inst✝ : Nonempty ι
f : α → β
g : ι → α
Cf : ContinuousAt f (iSup g)
Af : Antitone f
bdd : autoParam (BddAbove (range g)) _auto✝
⊢ sInf (range (f ∘ g)) = sInf (range fun i => f (g i))
state_after: no goals
Theorem: PrimeMultiset.prod_add
File: Mathlib/Data/PNat/Factors.lean

tactic: change (coePNatMonoidHom (u + v)).prod = _
state_before: u v : PrimeMultiset
⊢ (u + v).prod = u.prod * v.prod
state_after: u v : PrimeMultiset
⊢ (coePNatMonoidHom (u + v)).prod = u.prod * v.prod

tactic: rw [coePNatMonoidHom.map_add]
state_before: u v : PrimeMultiset
⊢ (coePNatMonoidHom (u + v)).prod = u.prod * v.prod
state_after: u v : PrimeMultiset
⊢ (coePNatMonoidHom u + coePNatMonoidHom v).prod = u.prod * v.prod

tactic: exact Multiset.prod_add _ _
state_before: u v : PrimeMultiset
⊢ (coePNatMonoidHom u + coePNatMonoidHom v).prod = u.prod * v.prod
state_after: no goals
Theorem: monotone_stabilizes_iff_artinian
File: Mathlib/RingTheory/Artinian.lean

tactic: rw [isArtinian_iff_wellFounded]
state_before: R : Type u_1
M : Type u_2
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
⊢ (∀ (f : ℕ →o (Submodule R M)ᵒᵈ), ∃ n, ∀ (m : ℕ), n ≤ m → f n = f m) ↔ IsArtinian R M
state_after: R : Type u_1
M : Type u_2
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
⊢ (∀ (f : ℕ →o (Submodule R M)ᵒᵈ), ∃ n, ∀ (m : ℕ), n ≤ m → f n = f m) ↔ WellFounded fun x x_1 => x < x_1

tactic: exact WellFounded.monotone_chain_condition.symm
state_before: R : Type u_1
M : Type u_2
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
⊢ (∀ (f : ℕ →o (Submodule R M)ᵒᵈ), ∃ n, ∀ (m : ℕ), n ≤ m → f n = f m) ↔ WellFounded fun x x_1 => x < x_1
state_after: no goals
Theorem: CategoryTheory.Limits.pullbackDiagonalMapIso_inv_snd_fst
File: Mathlib/CategoryTheory/Limits/Shapes/Diagonal.lean

tactic: delta pullbackDiagonalMapIso
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
X Y Z : C
inst✝¹ : HasPullbacks C
U V₁ V₂ : C
f : X ⟶ Y
i : U ⟶ Y
i₁ : V₁ ⟶ pullback f i
i₂ : V₂ ⟶ pullback f i
inst✝ : HasPullback i₁ i₂
⊢ (pullbackDiagonalMapIso f i i₁ i₂).inv ≫ snd ≫ fst = fst
state_after: C : Type u_1
inst✝² : Category.{u_2, u_1} C
X Y Z : C
inst✝¹ : HasPullbacks C
U V₁ V₂ : C
f : X ⟶ Y
i : U ⟶ Y
i₁ : V₁ ⟶ pullback f i
i₂ : V₂ ⟶ pullback f i
inst✝ : HasPullback i₁ i₂
⊢ { hom := lift (snd ≫ fst) (snd ≫ snd) ⋯,
          inv := lift (fst ≫ i₁ ≫ fst) (map i₁ i₂ (i₁ ≫ snd) (i₂ ≫ snd) (𝟙 V₁) (𝟙 V₂) snd ⋯ ⋯) ⋯, hom_inv_id := ⋯,
          inv_hom_id := ⋯ }.inv ≫
      snd ≫ fst =
    fst

tactic: simp
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
X Y Z : C
inst✝¹ : HasPullbacks C
U V₁ V₂ : C
f : X ⟶ Y
i : U ⟶ Y
i₁ : V₁ ⟶ pullback f i
i₂ : V₂ ⟶ pullback f i
inst✝ : HasPullback i₁ i₂
⊢ { hom := lift (snd ≫ fst) (snd ≫ snd) ⋯,
          inv := lift (fst ≫ i₁ ≫ fst) (map i₁ i₂ (i₁ ≫ snd) (i₂ ≫ snd) (𝟙 V₁) (𝟙 V₂) snd ⋯ ⋯) ⋯, hom_inv_id := ⋯,
          inv_hom_id := ⋯ }.inv ≫
      snd ≫ fst =
    fst
state_after: no goals
Theorem: Subgroup.IsComplement.equiv_fst_eq_self_iff_mem
File: Mathlib/GroupTheory/Complement.lean

tactic: constructor
state_before: G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
hST : IsComplement S T
hHT : IsComplement (↑H) T
hSK : IsComplement S ↑K
g : G
h1 : 1 ∈ T
⊢ ↑(hST.equiv g).1 = g ↔ g ∈ S
state_after: case mp
G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
hST : IsComplement S T
hHT : IsComplement (↑H) T
hSK : IsComplement S ↑K
g : G
h1 : 1 ∈ T
⊢ ↑(hST.equiv g).1 = g → g ∈ S

case mpr
G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
hST : IsComplement S T
hHT : IsComplement (↑H) T
hSK : IsComplement S ↑K
g : G
h1 : 1 ∈ T
⊢ g ∈ S → ↑(hST.equiv g).1 = g

tactic: intro h
state_before: case mp
G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
hST : IsComplement S T
hHT : IsComplement (↑H) T
hSK : IsComplement S ↑K
g : G
h1 : 1 ∈ T
⊢ ↑(hST.equiv g).1 = g → g ∈ S
state_after: case mp
G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
hST : IsComplement S T
hHT : IsComplement (↑H) T
hSK : IsComplement S ↑K
g : G
h1 : 1 ∈ T
h : ↑(hST.equiv g).1 = g
⊢ g ∈ S

tactic: rw [← h]
state_before: case mp
G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
hST : IsComplement S T
hHT : IsComplement (↑H) T
hSK : IsComplement S ↑K
g : G
h1 : 1 ∈ T
h : ↑(hST.equiv g).1 = g
⊢ g ∈ S
state_after: case mp
G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
hST : IsComplement S T
hHT : IsComplement (↑H) T
hSK : IsComplement S ↑K
g : G
h1 : 1 ∈ T
h : ↑(hST.equiv g).1 = g
⊢ ↑(hST.equiv g).1 ∈ S

tactic: exact Subtype.prop _
state_before: case mp
G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
hST : IsComplement S T
hHT : IsComplement (↑H) T
hSK : IsComplement S ↑K
g : G
h1 : 1 ∈ T
h : ↑(hST.equiv g).1 = g
⊢ ↑(hST.equiv g).1 ∈ S
state_after: no goals

tactic: intro h
state_before: case mpr
G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
hST : IsComplement S T
hHT : IsComplement (↑H) T
hSK : IsComplement S ↑K
g : G
h1 : 1 ∈ T
⊢ g ∈ S → ↑(hST.equiv g).1 = g
state_after: case mpr
G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
hST : IsComplement S T
hHT : IsComplement (↑H) T
hSK : IsComplement S ↑K
g : G
h1 : 1 ∈ T
h : g ∈ S
⊢ ↑(hST.equiv g).1 = g

tactic: rw [hST.equiv_fst_eq_self_of_mem_of_one_mem h1 h]
state_before: case mpr
G : Type u_1
inst✝ : Group G
H K : Subgroup G
S T : Set G
hST : IsComplement S T
hHT : IsComplement (↑H) T
hSK : IsComplement S ↑K
g : G
h1 : 1 ∈ T
h : g ∈ S
⊢ ↑(hST.equiv g).1 = g
state_after: no goals
Theorem: Finset.biUnion_congr
File: Mathlib/Data/Finset/Union.lean

tactic: simp_rw [mem_biUnion]
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
s s₁ s₂ : Finset α
t t₁ t₂ : α → Finset β
inst✝ : DecidableEq β
hs : s₁ = s₂
ht : ∀ a ∈ s₁, t₁ a = t₂ a
x : β
⊢ x ∈ s₁.biUnion t₁ ↔ x ∈ s₂.biUnion t₂
state_after: α : Type u_1
β : Type u_2
γ : Type u_3
s s₁ s₂ : Finset α
t t₁ t₂ : α → Finset β
inst✝ : DecidableEq β
hs : s₁ = s₂
ht : ∀ a ∈ s₁, t₁ a = t₂ a
x : β
⊢ (∃ a ∈ s₁, x ∈ t₁ a) ↔ ∃ a ∈ s₂, x ∈ t₂ a

tactic: apply exists_congr
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
s s₁ s₂ : Finset α
t t₁ t₂ : α → Finset β
inst✝ : DecidableEq β
hs : s₁ = s₂
ht : ∀ a ∈ s₁, t₁ a = t₂ a
x : β
⊢ (∃ a ∈ s₁, x ∈ t₁ a) ↔ ∃ a ∈ s₂, x ∈ t₂ a
state_after: case h
α : Type u_1
β : Type u_2
γ : Type u_3
s s₁ s₂ : Finset α
t t₁ t₂ : α → Finset β
inst✝ : DecidableEq β
hs : s₁ = s₂
ht : ∀ a ∈ s₁, t₁ a = t₂ a
x : β
⊢ ∀ (a : α), a ∈ s₁ ∧ x ∈ t₁ a ↔ a ∈ s₂ ∧ x ∈ t₂ a

tactic: simp (config := { contextual := true }) only [hs, and_congr_right_iff, ht, implies_true]
state_before: case h
α : Type u_1
β : Type u_2
γ : Type u_3
s s₁ s₂ : Finset α
t t₁ t₂ : α → Finset β
inst✝ : DecidableEq β
hs : s₁ = s₂
ht : ∀ a ∈ s₁, t₁ a = t₂ a
x : β
⊢ ∀ (a : α), a ∈ s₁ ∧ x ∈ t₁ a ↔ a ∈ s₂ ∧ x ∈ t₂ a
state_after: no goals
Theorem: mulTSupport_eq_empty_iff
File: Mathlib/Topology/Support.lean

tactic: rw [mulTSupport, closure_empty_iff, mulSupport_eq_empty_iff]
state_before: X : Type u_1
α : Type u_2
α' : Type u_3
β : Type u_4
γ : Type u_5
δ : Type u_6
M : Type u_7
E : Type u_8
R : Type u_9
inst✝¹ : One α
inst✝ : TopologicalSpace X
f : X → α
⊢ mulTSupport f = ∅ ↔ f = 1
state_after: no goals
Theorem: CategoryTheory.ShortComplex.LeftHomologyData.π_comp_leftHomologyIso_inv
File: Mathlib/Algebra/Homology/ShortComplex/LeftHomology.lean

tactic: simp only [← cancel_epi h.cyclesIso.hom, ← cancel_mono h.leftHomologyIso.hom, assoc,
  Iso.inv_hom_id, comp_id, Iso.hom_inv_id_assoc,
  LeftHomologyData.leftHomologyπ_comp_leftHomologyIso_hom]
state_before: C : Type u_1
inst✝² : Category.{u_2, u_1} C
inst✝¹ : HasZeroMorphisms C
S S₁ S₂ S₃ : ShortComplex C
h : S.LeftHomologyData
inst✝ : S.HasLeftHomology
⊢ h.π ≫ h.leftHomologyIso.inv = h.cyclesIso.inv ≫ S.leftHomologyπ
state_after: no goals
Theorem: Finset.image₂_left_comm
File: Mathlib/Data/Finset/NAry.lean

tactic: push_cast
state_before: α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ✝ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
ζ : Type u_11
ζ' : Type u_12
ν : Type u_13
inst✝⁷ : DecidableEq α'
inst✝⁶ : DecidableEq β'
inst✝⁵ : DecidableEq γ✝
inst✝⁴ : DecidableEq γ'
inst✝³ : DecidableEq δ
inst✝² : DecidableEq δ'
inst✝¹ : DecidableEq ε
inst✝ : DecidableEq ε'
f✝ f'✝ : α → β → γ✝
g✝ g'✝ : α → β → γ✝ → δ
s s' : Finset α
t t' : Finset β
u✝ u' : Finset γ✝
a a' : α
b b' : β
c : γ✝
γ : Type u_14
u : Finset γ
f : α → δ → ε
g : β → γ → δ
f' : α → γ → δ'
g' : β → δ' → ε
h_left_comm : ∀ (a : α) (b : β) (c : γ), f a (g b c) = g' b (f' a c)
⊢ ↑(image₂ f s (image₂ g t u)) = ↑(image₂ g' t (image₂ f' s u))
state_after: α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ✝ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
ζ : Type u_11
ζ' : Type u_12
ν : Type u_13
inst✝⁷ : DecidableEq α'
inst✝⁶ : DecidableEq β'
inst✝⁵ : DecidableEq γ✝
inst✝⁴ : DecidableEq γ'
inst✝³ : DecidableEq δ
inst✝² : DecidableEq δ'
inst✝¹ : DecidableEq ε
inst✝ : DecidableEq ε'
f✝ f'✝ : α → β → γ✝
g✝ g'✝ : α → β → γ✝ → δ
s s' : Finset α
t t' : Finset β
u✝ u' : Finset γ✝
a a' : α
b b' : β
c : γ✝
γ : Type u_14
u : Finset γ
f : α → δ → ε
g : β → γ → δ
f' : α → γ → δ'
g' : β → δ' → ε
h_left_comm : ∀ (a : α) (b : β) (c : γ), f a (g b c) = g' b (f' a c)
⊢ image2 f (↑s) (image2 g ↑t ↑u) = image2 g' (↑t) (image2 f' ↑s ↑u)

tactic: exact image2_left_comm h_left_comm
state_before: α : Type u_1
α' : Type u_2
β : Type u_3
β' : Type u_4
γ✝ : Type u_5
γ' : Type u_6
δ : Type u_7
δ' : Type u_8
ε : Type u_9
ε' : Type u_10
ζ : Type u_11
ζ' : Type u_12
ν : Type u_13
inst✝⁷ : DecidableEq α'
inst✝⁶ : DecidableEq β'
inst✝⁵ : DecidableEq γ✝
inst✝⁴ : DecidableEq γ'
inst✝³ : DecidableEq δ
inst✝² : DecidableEq δ'
inst✝¹ : DecidableEq ε
inst✝ : DecidableEq ε'
f✝ f'✝ : α → β → γ✝
g✝ g'✝ : α → β → γ✝ → δ
s s' : Finset α
t t' : Finset β
u✝ u' : Finset γ✝
a a' : α
b b' : β
c : γ✝
γ : Type u_14
u : Finset γ
f : α → δ → ε
g : β → γ → δ
f' : α → γ → δ'
g' : β → δ' → ε
h_left_comm : ∀ (a : α) (b : β) (c : γ), f a (g b c) = g' b (f' a c)
⊢ image2 f (↑s) (image2 g ↑t ↑u) = image2 g' (↑t) (image2 f' ↑s ↑u)
state_after: no goals
Theorem: PowerSeries.degree_trunc_lt
File: Mathlib/RingTheory/PowerSeries/Trunc.lean

tactic: rw [degree_lt_iff_coeff_zero]
state_before: R : Type u_1
inst✝ : Semiring R
f : R⟦X⟧
n : ℕ
⊢ (trunc n f).degree < ↑n
state_after: R : Type u_1
inst✝ : Semiring R
f : R⟦X⟧
n : ℕ
⊢ ∀ (m : ℕ), n ≤ m → (trunc n f).coeff m = 0

tactic: intros
state_before: R : Type u_1
inst✝ : Semiring R
f : R⟦X⟧
n : ℕ
⊢ ∀ (m : ℕ), n ≤ m → (trunc n f).coeff m = 0
state_after: R : Type u_1
inst✝ : Semiring R
f : R⟦X⟧
n m✝ : ℕ
a✝ : n ≤ m✝
⊢ (trunc n f).coeff m✝ = 0

tactic: rw [coeff_trunc]
state_before: R : Type u_1
inst✝ : Semiring R
f : R⟦X⟧
n m✝ : ℕ
a✝ : n ≤ m✝
⊢ (trunc n f).coeff m✝ = 0
state_after: R : Type u_1
inst✝ : Semiring R
f : R⟦X⟧
n m✝ : ℕ
a✝ : n ≤ m✝
⊢ (if m✝ < n then (coeff R m✝) f else 0) = 0

tactic: split_ifs with h
state_before: R : Type u_1
inst✝ : Semiring R
f : R⟦X⟧
n m✝ : ℕ
a✝ : n ≤ m✝
⊢ (if m✝ < n then (coeff R m✝) f else 0) = 0
state_after: case pos
R : Type u_1
inst✝ : Semiring R
f : R⟦X⟧
n m✝ : ℕ
a✝ : n ≤ m✝
h : m✝ < n
⊢ (coeff R m✝) f = 0

case neg
R : Type u_1
inst✝ : Semiring R
f : R⟦X⟧
n m✝ : ℕ
a✝ : n ≤ m✝
h : ¬m✝ < n
⊢ 0 = 0

tactic: rw [← not_le] at h
state_before: case pos
R : Type u_1
inst✝ : Semiring R
f : R⟦X⟧
n m✝ : ℕ
a✝ : n ≤ m✝
h : m✝ < n
⊢ (coeff R m✝) f = 0
state_after: case pos
R : Type u_1
inst✝ : Semiring R
f : R⟦X⟧
n m✝ : ℕ
a✝ : n ≤ m✝
h : ¬n ≤ m✝
⊢ (coeff R m✝) f = 0

tactic: contradiction
state_before: case pos
R : Type u_1
inst✝ : Semiring R
f : R⟦X⟧
n m✝ : ℕ
a✝ : n ≤ m✝
h : ¬n ≤ m✝
⊢ (coeff R m✝) f = 0
state_after: no goals

tactic: rfl
state_before: case neg
R : Type u_1
inst✝ : Semiring R
f : R⟦X⟧
n m✝ : ℕ
a✝ : n ≤ m✝
h : ¬m✝ < n
⊢ 0 = 0
state_after: no goals
Theorem: CauSeq.sub_limZero
File: Mathlib/Algebra/Order/CauSeq/Basic.lean

tactic: simpa only [sub_eq_add_neg] using add_limZero hf (neg_limZero hg)
state_before: α : Type u_1
β : Type u_2
inst✝² : LinearOrderedField α
inst✝¹ : Ring β
abv : β → α
inst✝ : IsAbsoluteValue abv
f g : CauSeq β abv
hf : f.LimZero
hg : g.LimZero
⊢ (f - g).LimZero
state_after: no goals