1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: SimpleGraph.TripartiteFromTriangles.Graph.in₂₀_iff
File: Mathlib/Combinatorics/SimpleGraph/Triangle/Tripartite.lean

tactic: rintro ⟨⟩
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a a' : α
b b' : β
c c' : γ
x : α × β × γ
ε : 𝕜
⊢ (graph t).Adj (in₂ c) (in₀ a) → ∃ b, (a, b, c) ∈ t
state_after: case in₂₀
α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a a' : α
b b' : β
c c' : γ
x : α × β × γ
ε : 𝕜
b✝ : β
a✝ : (a, b✝, c) ∈ t
⊢ ∃ b, (a, b, c) ∈ t

tactic: exact ⟨_, ‹_›⟩
state_before: case in₂₀
α : Type u_1
β : Type u_2
γ : Type u_3
𝕜 : Type u_4
inst✝ : LinearOrderedField 𝕜
t : Finset (α × β × γ)
a a' : α
b b' : β
c c' : γ
x : α × β × γ
ε : 𝕜
b✝ : β
a✝ : (a, b✝, c) ∈ t
⊢ ∃ b, (a, b, c) ∈ t
state_after: no goals
Theorem: TensorProduct.tensorTensorTensorComm_symm
File: Mathlib/LinearAlgebra/TensorProduct/Basic.lean

tactic: ext
state_before: R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
T : Type u_9
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : AddCommMonoid T
inst✝⁷ : Module R M
inst✝⁶ : Module R N
inst✝⁵ : Module R P
inst✝⁴ : Module R Q
inst✝³ : Module R S
inst✝² : Module R T
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
⊢ (tensorTensorTensorComm R M N P Q).symm = tensorTensorTensorComm R M P N Q
state_after: case h
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
T : Type u_9
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : AddCommMonoid T
inst✝⁷ : Module R M
inst✝⁶ : Module R N
inst✝⁵ : Module R P
inst✝⁴ : Module R Q
inst✝³ : Module R S
inst✝² : Module R T
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
x✝ : (M ⊗[R] P) ⊗[R] N ⊗[R] Q
⊢ (tensorTensorTensorComm R M N P Q).symm x✝ = (tensorTensorTensorComm R M P N Q) x✝

tactic: rfl
state_before: case h
R : Type u_1
inst✝¹⁶ : CommSemiring R
R' : Type u_2
inst✝¹⁵ : Monoid R'
R'' : Type u_3
inst✝¹⁴ : Semiring R''
M : Type u_4
N : Type u_5
P : Type u_6
Q : Type u_7
S : Type u_8
T : Type u_9
inst✝¹³ : AddCommMonoid M
inst✝¹² : AddCommMonoid N
inst✝¹¹ : AddCommMonoid P
inst✝¹⁰ : AddCommMonoid Q
inst✝⁹ : AddCommMonoid S
inst✝⁸ : AddCommMonoid T
inst✝⁷ : Module R M
inst✝⁶ : Module R N
inst✝⁵ : Module R P
inst✝⁴ : Module R Q
inst✝³ : Module R S
inst✝² : Module R T
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
x✝ : (M ⊗[R] P) ⊗[R] N ⊗[R] Q
⊢ (tensorTensorTensorComm R M N P Q).symm x✝ = (tensorTensorTensorComm R M P N Q) x✝
state_after: no goals
Theorem: Filter.iSup_neBot
File: Mathlib/Order/Filter/Basic.lean

tactic: simp [neBot_iff]
state_before: α : Type u
β : Type v
γ : Type w
δ : Type u_1
ι : Sort x
f✝ g : Filter α
s t : Set α
f : ι → Filter α
⊢ (⨆ i, f i).NeBot ↔ ∃ i, (f i).NeBot
state_after: no goals
Theorem: round_sub_one
File: Mathlib/Algebra/Order/Floor.lean

tactic: rw [← round_sub_int a 1, cast_one]
state_before: F : Type u_1
α : Type u_2
β : Type u_3
inst✝¹ : LinearOrderedRing α
inst✝ : FloorRing α
a : α
⊢ round (a - 1) = round a - 1
state_after: no goals
Theorem: SetTheory.PGame.Impartial.forall_rightMoves_fuzzy_iff_equiv_zero
File: Mathlib/SetTheory/Game/Impartial.lean

tactic: refine ⟨fun hb => ?_, fun hp i => ?_⟩
state_before: G : PGame
inst✝ : G.Impartial
⊢ (∀ (j : G.RightMoves), G.moveRight j ‖ 0) ↔ G ≈ 0
state_after: case refine_1
G : PGame
inst✝ : G.Impartial
hb : ∀ (j : G.RightMoves), G.moveRight j ‖ 0
⊢ G ≈ 0

case refine_2
G : PGame
inst✝ : G.Impartial
hp : G ≈ 0
i : G.RightMoves
⊢ G.moveRight i ‖ 0

tactic: rw [equiv_zero_iff_ge G, zero_le_lf]
state_before: case refine_1
G : PGame
inst✝ : G.Impartial
hb : ∀ (j : G.RightMoves), G.moveRight j ‖ 0
⊢ G ≈ 0
state_after: case refine_1
G : PGame
inst✝ : G.Impartial
hb : ∀ (j : G.RightMoves), G.moveRight j ‖ 0
⊢ ∀ (j : G.RightMoves), 0 ⧏ G.moveRight j

tactic: exact fun i => (hb i).2
state_before: case refine_1
G : PGame
inst✝ : G.Impartial
hb : ∀ (j : G.RightMoves), G.moveRight j ‖ 0
⊢ ∀ (j : G.RightMoves), 0 ⧏ G.moveRight j
state_after: no goals

tactic: rw [fuzzy_zero_iff_gf]
state_before: case refine_2
G : PGame
inst✝ : G.Impartial
hp : G ≈ 0
i : G.RightMoves
⊢ G.moveRight i ‖ 0
state_after: case refine_2
G : PGame
inst✝ : G.Impartial
hp : G ≈ 0
i : G.RightMoves
⊢ 0 ⧏ G.moveRight i

tactic: exact hp.2.lf_moveRight i
state_before: case refine_2
G : PGame
inst✝ : G.Impartial
hp : G ≈ 0
i : G.RightMoves
⊢ 0 ⧏ G.moveRight i
state_after: no goals
Theorem: Nat.Prime.eq_two_or_odd
File: Mathlib/Data/Nat/Prime.lean

tactic: decide
state_before: n p : ℕ
hp : Prime p
h : p % 2 = 0
⊢ ¬2 = 1
state_after: no goals
Theorem: LSeries.convolution_congr
File: Mathlib/NumberTheory/LSeries/Convolution.lean

tactic: simp only [convolution, toArithmeticFunction_congr hf, toArithmeticFunction_congr hg]
state_before: R : Type u_1
inst✝ : Semiring R
f f' g g' : ℕ → R
hf : ∀ {n : ℕ}, n ≠ 0 → f n = f' n
hg : ∀ {n : ℕ}, n ≠ 0 → g n = g' n
⊢ f ⍟ g = f' ⍟ g'
state_after: no goals
Theorem: Fin.cons_injective2
File: Mathlib/Data/Fin/Tuple/Basic.lean

tactic: simpa using congr_fun h (Fin.succ i)
state_before: m n : ℕ
α : Fin (n + 1) → Type u
x✝ : α 0
q : (i : Fin (n + 1)) → α i
p : (i : Fin n) → α i.succ
i✝ : Fin n
y✝ : α i✝.succ
z x₀ y₀ : α 0
x y : (i : Fin n) → α i.succ
h : cons x₀ x = cons y₀ y
i : Fin n
⊢ x i = y i
state_after: no goals
Theorem: mem_pregroupoid_of_eqOnSource
File: Mathlib/Geometry/Manifold/ChartedSpace.lean

tactic: rw [← he'.1]
state_before: H : Type u
H' : Type u_1
M : Type u_2
M' : Type u_3
M'' : Type u_4
inst✝ : TopologicalSpace H
PG : Pregroupoid H
e e' : PartialHomeomorph H H
he' : e ≈ e'
he : PG.property (↑e) e.source
⊢ PG.property (↑e') e'.source
state_after: H : Type u
H' : Type u_1
M : Type u_2
M' : Type u_3
M'' : Type u_4
inst✝ : TopologicalSpace H
PG : Pregroupoid H
e e' : PartialHomeomorph H H
he' : e ≈ e'
he : PG.property (↑e) e.source
⊢ PG.property (↑e') e.source

tactic: exact PG.congr e.open_source he'.eqOn.symm he
state_before: H : Type u
H' : Type u_1
M : Type u_2
M' : Type u_3
M'' : Type u_4
inst✝ : TopologicalSpace H
PG : Pregroupoid H
e e' : PartialHomeomorph H H
he' : e ≈ e'
he : PG.property (↑e) e.source
⊢ PG.property (↑e') e.source
state_after: no goals
Theorem: DirichletCharacter.factorsThrough_one_iff
File: Mathlib/NumberTheory/DirichletCharacter/Basic.lean

tactic: refine ⟨fun ⟨_, χ₀, hχ₀⟩ ↦ ?_,
        fun h ↦ ⟨one_dvd n, 1, by rw [h, changeLevel_one]⟩⟩
state_before: R : Type u_1
inst✝ : CommMonoidWithZero R
n : ℕ
χ : DirichletCharacter R n
⊢ χ.FactorsThrough 1 ↔ χ = 1
state_after: R : Type u_1
inst✝ : CommMonoidWithZero R
n : ℕ
χ : DirichletCharacter R n
x✝ : χ.FactorsThrough 1
w✝ : 1 ∣ n
χ₀ : DirichletCharacter R 1
hχ₀ : χ = (changeLevel w✝) χ₀
⊢ χ = 1

tactic: rwa [level_one χ₀, changeLevel_one] at hχ₀
state_before: R : Type u_1
inst✝ : CommMonoidWithZero R
n : ℕ
χ : DirichletCharacter R n
x✝ : χ.FactorsThrough 1
w✝ : 1 ∣ n
χ₀ : DirichletCharacter R 1
hχ₀ : χ = (changeLevel w✝) χ₀
⊢ χ = 1
state_after: no goals

tactic: rw [h, changeLevel_one]
state_before: R : Type u_1
inst✝ : CommMonoidWithZero R
n : ℕ
χ : DirichletCharacter R n
h : χ = 1
⊢ χ = (changeLevel ⋯) 1
state_after: no goals
Theorem: uniformGroup_iInf
File: Mathlib/Topology/Algebra/UniformGroup.lean

tactic: exact uniformGroup_sInf (Set.forall_mem_range.mpr h')
state_before: α : Type u_1
β : Type u_2
inst✝³ : UniformSpace α
inst✝² : Group α
inst✝¹ : UniformGroup α
inst✝ : Group β
ι : Sort u_3
us' : ι → UniformSpace β
h' : ∀ (i : ι), UniformGroup β
⊢ UniformGroup β
state_after: no goals
Theorem: CompositionSeries.mem_eraseLast_of_ne_of_mem
File: Mathlib/Order/JordanHolder.lean

tactic: rcases hxs with ⟨i, rfl⟩
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
x : X
hx : x ≠ last s
hxs : x ∈ s
⊢ x ∈ eraseLast s
state_after: case intro
X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
i : Fin (s.length + 1)
hx : s.toFun i ≠ last s
⊢ s.toFun i ∈ eraseLast s

tactic: have hi : (i : ℕ) < (s.length - 1).succ := by
  conv_rhs => rw [← Nat.succ_sub (length_pos_of_nontrivial ⟨_, ⟨i, rfl⟩, _, s.last_mem, hx⟩),
    Nat.add_one_sub_one]
  exact lt_of_le_of_ne (Nat.le_of_lt_succ i.2) (by simpa [last, s.inj, Fin.ext_iff] using hx)
state_before: case intro
X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
i : Fin (s.length + 1)
hx : s.toFun i ≠ last s
⊢ s.toFun i ∈ eraseLast s
state_after: case intro
X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
i : Fin (s.length + 1)
hx : s.toFun i ≠ last s
hi : ↑i < (s.length - 1).succ
⊢ s.toFun i ∈ eraseLast s

tactic: refine ⟨Fin.castSucc (n := s.length + 1) i, ?_⟩
state_before: case intro
X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
i : Fin (s.length + 1)
hx : s.toFun i ≠ last s
hi : ↑i < (s.length - 1).succ
⊢ s.toFun i ∈ eraseLast s
state_after: case intro
X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
i : Fin (s.length + 1)
hx : s.toFun i ≠ last s
hi : ↑i < (s.length - 1).succ
⊢ (eraseLast s).toFun ↑↑i.castSucc = s.toFun i

tactic: simp [Fin.ext_iff, Nat.mod_eq_of_lt hi]
state_before: case intro
X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
i : Fin (s.length + 1)
hx : s.toFun i ≠ last s
hi : ↑i < (s.length - 1).succ
⊢ (eraseLast s).toFun ↑↑i.castSucc = s.toFun i
state_after: no goals

tactic: conv_rhs => rw [← Nat.succ_sub (length_pos_of_nontrivial ⟨_, ⟨i, rfl⟩, _, s.last_mem, hx⟩),
  Nat.add_one_sub_one]
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
i : Fin (s.length + 1)
hx : s.toFun i ≠ last s
⊢ ↑i < (s.length - 1).succ
state_after: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
i : Fin (s.length + 1)
hx : s.toFun i ≠ last s
⊢ ↑i < s.length

tactic: exact lt_of_le_of_ne (Nat.le_of_lt_succ i.2) (by simpa [last, s.inj, Fin.ext_iff] using hx)
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
i : Fin (s.length + 1)
hx : s.toFun i ≠ last s
⊢ ↑i < s.length
state_after: no goals

tactic: simpa [last, s.inj, Fin.ext_iff] using hx
state_before: X : Type u
inst✝¹ : Lattice X
inst✝ : JordanHolderLattice X
s : CompositionSeries X
i : Fin (s.length + 1)
hx : s.toFun i ≠ last s
⊢ ↑i ≠ s.length
state_after: no goals
Theorem: hnot_symmDiff_self
File: Mathlib/Order/SymmDiff.lean

tactic: rw [eq_top_iff, symmDiff, hnot_sdiff, sup_sdiff_self]
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
π : ι → Type u_4
inst✝ : CoheytingAlgebra α
a : α
⊢ (￢a) ∆ a = ⊤
state_after: ι : Type u_1
α : Type u_2
β : Type u_3
π : ι → Type u_4
inst✝ : CoheytingAlgebra α
a : α
⊢ ⊤ ≤ ￢a ⊔ a

tactic: exact Codisjoint.top_le codisjoint_hnot_left
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
π : ι → Type u_4
inst✝ : CoheytingAlgebra α
a : α
⊢ ⊤ ≤ ￢a ⊔ a
state_after: no goals
Theorem: Nat.gcd_add_mul_left_right
File: Mathlib/Data/Nat/GCD/Basic.lean

tactic: simp [gcd_rec m (n + m * k), gcd_rec m n]
state_before: m n k : ℕ
⊢ m.gcd (n + m * k) = m.gcd n
state_after: no goals
Theorem: Finset.mem_insert_coe
File: Mathlib/Data/Finset/Basic.lean

tactic: simp
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : DecidableEq α
s✝ t u v : Finset α
a b : α
s : Finset α
x y : α
⊢ x ∈ insert y s ↔ x ∈ insert y ↑s
state_after: no goals
Theorem: Function.minimalPeriod_pos_iff_mem_periodicPts
File: Mathlib/Dynamics/PeriodicPts.lean

tactic: simp only [minimalPeriod, dif_neg h, lt_irrefl 0, not_false_iff]
state_before: α : Type u_1
β : Type u_2
f fa : α → α
fb : β → β
x y : α
m n : ℕ
h : x ∉ periodicPts f
⊢ ¬0 < minimalPeriod f x
state_after: no goals
Theorem: Multiset.disjoint_singleton
File: Mathlib/Data/Multiset/Basic.lean

tactic: rw [disjoint_comm, singleton_disjoint]
state_before: α : Type u_1
β : Type v
γ : Type u_2
l : Multiset α
a : α
⊢ l.Disjoint {a} ↔ a ∉ l
state_after: no goals
Theorem: iInf_nat_gt_zero_eq
File: Mathlib/Order/CompleteLattice.lean

tactic: rw [← iInf_range, Nat.range_succ]
state_before: α : Type u_1
β : Type u_2
β₂ : Type u_3
γ : Type u_4
ι : Sort u_5
ι' : Sort u_6
κ : ι → Sort u_7
κ' : ι' → Sort u_8
inst✝ : CompleteLattice α
f✝ g s t : ι → α
a b : α
f : ℕ → α
⊢ ⨅ i, ⨅ (_ : i > 0), f i = ⨅ i, f (i + 1)
state_after: α : Type u_1
β : Type u_2
β₂ : Type u_3
γ : Type u_4
ι : Sort u_5
ι' : Sort u_6
κ : ι → Sort u_7
κ' : ι' → Sort u_8
inst✝ : CompleteLattice α
f✝ g s t : ι → α
a b : α
f : ℕ → α
⊢ ⨅ i, ⨅ (_ : i > 0), f i = ⨅ b ∈ {i | 0 < i}, f b

tactic: simp
state_before: α : Type u_1
β : Type u_2
β₂ : Type u_3
γ : Type u_4
ι : Sort u_5
ι' : Sort u_6
κ : ι → Sort u_7
κ' : ι' → Sort u_8
inst✝ : CompleteLattice α
f✝ g s t : ι → α
a b : α
f : ℕ → α
⊢ ⨅ i, ⨅ (_ : i > 0), f i = ⨅ b ∈ {i | 0 < i}, f b
state_after: no goals
Theorem: Convex.subset_toCone
File: Mathlib/Analysis/Convex/Cone/Basic.lean

tactic: rwa [one_smul]
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝² : LinearOrderedField 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s : Set E
hs : Convex 𝕜 s
x✝ x : E
hx : x ∈ s
⊢ 1 • x ∈ s
state_after: no goals
Theorem: FormalMultilinearSeries.partialSum_continuous
File: Mathlib/Analysis/Analytic/Basic.lean

tactic: unfold partialSum
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝¹⁰ : Ring 𝕜
inst✝⁹ : AddCommGroup E
inst✝⁸ : AddCommGroup F
inst✝⁷ : Module 𝕜 E
inst✝⁶ : Module 𝕜 F
inst✝⁵ : TopologicalSpace E
inst✝⁴ : TopologicalSpace F
inst✝³ : TopologicalAddGroup E
inst✝² : TopologicalAddGroup F
inst✝¹ : ContinuousConstSMul 𝕜 E
inst✝ : ContinuousConstSMul 𝕜 F
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
⊢ Continuous (p.partialSum n)
state_after: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝¹⁰ : Ring 𝕜
inst✝⁹ : AddCommGroup E
inst✝⁸ : AddCommGroup F
inst✝⁷ : Module 𝕜 E
inst✝⁶ : Module 𝕜 F
inst✝⁵ : TopologicalSpace E
inst✝⁴ : TopologicalSpace F
inst✝³ : TopologicalAddGroup E
inst✝² : TopologicalAddGroup F
inst✝¹ : ContinuousConstSMul 𝕜 E
inst✝ : ContinuousConstSMul 𝕜 F
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
⊢ Continuous fun x => ∑ k ∈ Finset.range n, (p k) fun x_1 => x

tactic: continuity
state_before: 𝕜 : Type u_1
E : Type u_2
F : Type u_3
G : Type u_4
inst✝¹⁰ : Ring 𝕜
inst✝⁹ : AddCommGroup E
inst✝⁸ : AddCommGroup F
inst✝⁷ : Module 𝕜 E
inst✝⁶ : Module 𝕜 F
inst✝⁵ : TopologicalSpace E
inst✝⁴ : TopologicalSpace F
inst✝³ : TopologicalAddGroup E
inst✝² : TopologicalAddGroup F
inst✝¹ : ContinuousConstSMul 𝕜 E
inst✝ : ContinuousConstSMul 𝕜 F
p : FormalMultilinearSeries 𝕜 E F
n : ℕ
⊢ Continuous fun x => ∑ k ∈ Finset.range n, (p k) fun x_1 => x
state_after: no goals
Theorem: List.forall_tfae
File: Mathlib/Data/List/TFAE.lean

tactic: simp only [TFAE, List.forall_mem_map_iff]
state_before: α : Type u_1
l : List (α → Prop)
H : ∀ (a : α), (map (fun p => p a) l).TFAE
⊢ (map (fun p => ∀ (a : α), p a) l).TFAE
state_after: α : Type u_1
l : List (α → Prop)
H : ∀ (a : α), (map (fun p => p a) l).TFAE
⊢ ∀ (j : α → Prop), j ∈ l → ∀ (j_1 : α → Prop), j_1 ∈ l → ((∀ (a : α), j a) ↔ ∀ (a : α), j_1 a)

tactic: intros p₁ hp₁ p₂ hp₂
state_before: α : Type u_1
l : List (α → Prop)
H : ∀ (a : α), (map (fun p => p a) l).TFAE
⊢ ∀ (j : α → Prop), j ∈ l → ∀ (j_1 : α → Prop), j_1 ∈ l → ((∀ (a : α), j a) ↔ ∀ (a : α), j_1 a)
state_after: α : Type u_1
l : List (α → Prop)
H : ∀ (a : α), (map (fun p => p a) l).TFAE
p₁ : α → Prop
hp₁ : p₁ ∈ l
p₂ : α → Prop
hp₂ : p₂ ∈ l
⊢ (∀ (a : α), p₁ a) ↔ ∀ (a : α), p₂ a

tactic: exact forall_congr' fun a ↦ H a (p₁ a) (mem_map_of_mem (fun p ↦ p a) hp₁)
  (p₂ a) (mem_map_of_mem (fun p ↦ p a) hp₂)
state_before: α : Type u_1
l : List (α → Prop)
H : ∀ (a : α), (map (fun p => p a) l).TFAE
p₁ : α → Prop
hp₁ : p₁ ∈ l
p₂ : α → Prop
hp₂ : p₂ ∈ l
⊢ (∀ (a : α), p₁ a) ↔ ∀ (a : α), p₂ a
state_after: no goals
Theorem: aemeasurable_indicator_iff₀
File: Mathlib/MeasureTheory/Measure/AEMeasurable.lean

tactic: rcases hs with ⟨t, ht, hst⟩
state_before: ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
δ : Type u_5
R : Type u_6
m0 : MeasurableSpace α
inst✝³ : MeasurableSpace β
inst✝² : MeasurableSpace γ
inst✝¹ : MeasurableSpace δ
f g : α → β
μ ν : Measure α
inst✝ : Zero β
s : Set α
hs : NullMeasurableSet s μ
⊢ AEMeasurable (s.indicator f) μ ↔ AEMeasurable f (μ.restrict s)
state_after: case intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
δ : Type u_5
R : Type u_6
m0 : MeasurableSpace α
inst✝³ : MeasurableSpace β
inst✝² : MeasurableSpace γ
inst✝¹ : MeasurableSpace δ
f g : α → β
μ ν : Measure α
inst✝ : Zero β
s t : Set α
ht : MeasurableSet t
hst : s =ᶠ[ae μ] t
⊢ AEMeasurable (s.indicator f) μ ↔ AEMeasurable f (μ.restrict s)

tactic: rw [← aemeasurable_congr (indicator_ae_eq_of_ae_eq_set hst.symm), aemeasurable_indicator_iff ht,
    restrict_congr_set hst]
state_before: case intro.intro
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
δ : Type u_5
R : Type u_6
m0 : MeasurableSpace α
inst✝³ : MeasurableSpace β
inst✝² : MeasurableSpace γ
inst✝¹ : MeasurableSpace δ
f g : α → β
μ ν : Measure α
inst✝ : Zero β
s t : Set α
ht : MeasurableSet t
hst : s =ᶠ[ae μ] t
⊢ AEMeasurable (s.indicator f) μ ↔ AEMeasurable f (μ.restrict s)
state_after: no goals
Theorem: WeierstrassCurve.Jacobian.equiv_some_of_Z_ne_zero
File: Mathlib/AlgebraicGeometry/EllipticCurve/Jacobian.lean

tactic: linear_combination (norm := (matrix_simp; ring1)) -P x * div_self (pow_ne_zero 2 hPz)
state_before: R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P : Fin 3 → F
hPz : P z ≠ 0
⊢ P x * ![P x / P z ^ 2, P y / P z ^ 3, 1] z ^ 2 = ![P x / P z ^ 2, P y / P z ^ 3, 1] x * P z ^ 2
state_after: no goals

tactic: matrix_simp
state_before: case a
R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P : Fin 3 → F
hPz : P z ≠ 0
⊢ P x * ![P x / P z ^ 2, P y / P z ^ 3, 1] z ^ 2 - ![P x / P z ^ 2, P y / P z ^ 3, 1] x * P z ^ 2 -
      (-P x * (P z ^ 2 / P z ^ 2) - -P x * 1) =
    0
state_after: case a
R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P : Fin 3 → F
hPz : P z ≠ 0
⊢ P x * 1 ^ 2 - P x / P z ^ 2 * P z ^ 2 - (-P x * (P z ^ 2 / P z ^ 2) - -P x * 1) = 0

tactic: ring1
state_before: case a
R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P : Fin 3 → F
hPz : P z ≠ 0
⊢ P x * 1 ^ 2 - P x / P z ^ 2 * P z ^ 2 - (-P x * (P z ^ 2 / P z ^ 2) - -P x * 1) = 0
state_after: no goals

tactic: linear_combination (norm := (matrix_simp; ring1)) -P y * div_self (pow_ne_zero 3 hPz)
state_before: R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P : Fin 3 → F
hPz : P z ≠ 0
⊢ P y * ![P x / P z ^ 2, P y / P z ^ 3, 1] z ^ 3 = ![P x / P z ^ 2, P y / P z ^ 3, 1] y * P z ^ 3
state_after: no goals

tactic: matrix_simp
state_before: case a
R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P : Fin 3 → F
hPz : P z ≠ 0
⊢ P y * ![P x / P z ^ 2, P y / P z ^ 3, 1] z ^ 3 - ![P x / P z ^ 2, P y / P z ^ 3, 1] y * P z ^ 3 -
      (-P y * (P z ^ 3 / P z ^ 3) - -P y * 1) =
    0
state_after: case a
R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P : Fin 3 → F
hPz : P z ≠ 0
⊢ P y * 1 ^ 3 - P y / P z ^ 3 * P z ^ 3 - (-P y * (P z ^ 3 / P z ^ 3) - -P y * 1) = 0

tactic: ring1
state_before: case a
R : Type u
inst✝¹ : CommRing R
W' : Jacobian R
F : Type v
inst✝ : Field F
W : Jacobian F
P : Fin 3 → F
hPz : P z ≠ 0
⊢ P y * 1 ^ 3 - P y / P z ^ 3 * P z ^ 3 - (-P y * (P z ^ 3 / P z ^ 3) - -P y * 1) = 0
state_after: no goals
Theorem: Rat.natCast_eq_divInt
File: Mathlib/Algebra/Ring/Rat.lean

tactic: rw [← Int.cast_natCast, intCast_eq_divInt]
state_before: n : ℕ
⊢ ↑n = ↑n /. 1
state_after: no goals
Theorem: Multiset.bind_map_comm
File: Mathlib/Data/Multiset/Bind.lean

tactic: simp
state_before: α : Type u_1
β : Type v
γ : Type u_2
δ : Type u_3
a : α
s t : Multiset α
f✝ g : α → Multiset β
m : Multiset α
n : Multiset β
f : α → β → γ
⊢ (bind 0 fun a => map (fun b => f a b) n) = n.bind fun b => map (fun a => f a b) 0
state_after: no goals

tactic: simp (config := { contextual := true })
state_before: α : Type u_1
β : Type v
γ : Type u_2
δ : Type u_3
a : α
s t : Multiset α
f✝ g : α → Multiset β
m : Multiset α
n : Multiset β
f : α → β → γ
⊢ ∀ (a : α) (s : Multiset α),
    ((s.bind fun a => map (fun b => f a b) n) = n.bind fun b => map (fun a => f a b) s) →
      ((a ::ₘ s).bind fun a => map (fun b => f a b) n) = n.bind fun b => map (fun a => f a b) (a ::ₘ s)
state_after: no goals
Theorem: Associates.count_zero
File: Mathlib/RingTheory/UniqueFactorizationDomain.lean

tactic: simp only [count, dif_pos hp, bcount, Multiset.count_zero]
state_before: α : Type u_1
inst✝² : CancelCommMonoidWithZero α
inst✝¹ : DecidableEq (Associates α)
inst✝ : (p : Associates α) → Decidable (Irreducible p)
p : Associates α
hp : Irreducible p
⊢ p.count 0 = 0
state_after: no goals
Theorem: Equiv.set_finite_iff
File: Mathlib/Data/Set/Finite.lean

tactic: simp_rw [← Set.finite_coe_iff, hst.finite_iff]
state_before: α : Type u
β : Type v
ι : Sort w
γ : Type x
s : Set α
t : Set β
hst : ↑s ≃ ↑t
⊢ s.Finite ↔ t.Finite
state_after: no goals
Theorem: CoxeterSystem.rightInvSeq_drop
File: Mathlib/GroupTheory/Coxeter/Inversion.lean

tactic: induction' j with j ih₁ generalizing ω
state_before: B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
ω : List B
j : ℕ
⊢ cs.rightInvSeq (drop j ω) = drop j (cs.rightInvSeq ω)
state_after: case zero
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
ω : List B
⊢ cs.rightInvSeq (drop 0 ω) = drop 0 (cs.rightInvSeq ω)

case succ
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
j : ℕ
ih₁ : ∀ (ω : List B), cs.rightInvSeq (drop j ω) = drop j (cs.rightInvSeq ω)
ω : List B
⊢ cs.rightInvSeq (drop (j + 1) ω) = drop (j + 1) (cs.rightInvSeq ω)

tactic: simp
state_before: case zero
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
ω : List B
⊢ cs.rightInvSeq (drop 0 ω) = drop 0 (cs.rightInvSeq ω)
state_after: no goals

tactic: induction' ω with k ω _
state_before: case succ
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
j : ℕ
ih₁ : ∀ (ω : List B), cs.rightInvSeq (drop j ω) = drop j (cs.rightInvSeq ω)
ω : List B
⊢ cs.rightInvSeq (drop (j + 1) ω) = drop (j + 1) (cs.rightInvSeq ω)
state_after: case succ.nil
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
j : ℕ
ih₁ : ∀ (ω : List B), cs.rightInvSeq (drop j ω) = drop j (cs.rightInvSeq ω)
⊢ cs.rightInvSeq (drop (j + 1) []) = drop (j + 1) (cs.rightInvSeq [])

case succ.cons
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
j : ℕ
ih₁ : ∀ (ω : List B), cs.rightInvSeq (drop j ω) = drop j (cs.rightInvSeq ω)
k : B
ω : List B
tail_ih✝ : cs.rightInvSeq (drop (j + 1) ω) = drop (j + 1) (cs.rightInvSeq ω)
⊢ cs.rightInvSeq (drop (j + 1) (k :: ω)) = drop (j + 1) (cs.rightInvSeq (k :: ω))

tactic: simp
state_before: case succ.nil
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
j : ℕ
ih₁ : ∀ (ω : List B), cs.rightInvSeq (drop j ω) = drop j (cs.rightInvSeq ω)
⊢ cs.rightInvSeq (drop (j + 1) []) = drop (j + 1) (cs.rightInvSeq [])
state_after: no goals

tactic: rw [drop_succ_cons, ih₁ ω, rightInvSeq, drop_succ_cons]
state_before: case succ.cons
B : Type u_1
W : Type u_2
inst✝ : Group W
M : CoxeterMatrix B
cs : CoxeterSystem M W
j : ℕ
ih₁ : ∀ (ω : List B), cs.rightInvSeq (drop j ω) = drop j (cs.rightInvSeq ω)
k : B
ω : List B
tail_ih✝ : cs.rightInvSeq (drop (j + 1) ω) = drop (j + 1) (cs.rightInvSeq ω)
⊢ cs.rightInvSeq (drop (j + 1) (k :: ω)) = drop (j + 1) (cs.rightInvSeq (k :: ω))
state_after: no goals