1337xyz1337xyz/leandojo-benchmark4-v10 huggingface dataset:
Theorem: inf_eq_and_sup_eq_iff
File: Mathlib/Order/Lattice.lean

tactic: refine ⟨fun h ↦ ?_, ?_⟩
state_before: α : Type u
β : Type v
inst✝ : Lattice α
a b c d : α
⊢ a ⊓ b = c ∧ a ⊔ b = c ↔ a = c ∧ b = c
state_after: case refine_1
α : Type u
β : Type v
inst✝ : Lattice α
a b c d : α
h : a ⊓ b = c ∧ a ⊔ b = c
⊢ a = c ∧ b = c

case refine_2
α : Type u
β : Type v
inst✝ : Lattice α
a b c d : α
⊢ a = c ∧ b = c → a ⊓ b = c ∧ a ⊔ b = c

tactic: obtain rfl := sup_eq_inf.1 (h.2.trans h.1.symm)
state_before: case refine_1
α : Type u
β : Type v
inst✝ : Lattice α
a b c d : α
h : a ⊓ b = c ∧ a ⊔ b = c
⊢ a = c ∧ b = c
state_after: case refine_1
α : Type u
β : Type v
inst✝ : Lattice α
a c d : α
h : a ⊓ a = c ∧ a ⊔ a = c
⊢ a = c ∧ a = c

tactic: simpa using h
state_before: case refine_1
α : Type u
β : Type v
inst✝ : Lattice α
a c d : α
h : a ⊓ a = c ∧ a ⊔ a = c
⊢ a = c ∧ a = c
state_after: no goals

tactic: rintro ⟨rfl, rfl⟩
state_before: case refine_2
α : Type u
β : Type v
inst✝ : Lattice α
a b c d : α
⊢ a = c ∧ b = c → a ⊓ b = c ∧ a ⊔ b = c
state_after: case refine_2.intro
α : Type u
β : Type v
inst✝ : Lattice α
b d : α
⊢ b ⊓ b = b ∧ b ⊔ b = b

tactic: exact ⟨inf_idem _, sup_idem _⟩
state_before: case refine_2.intro
α : Type u
β : Type v
inst✝ : Lattice α
b d : α
⊢ b ⊓ b = b ∧ b ⊔ b = b
state_after: no goals
Theorem: convexHull_insert
File: Mathlib/Analysis/Convex/Join.lean

tactic: rw [insert_eq, convexHull_union (singleton_nonempty _) hs, convexHull_singleton]
state_before: ι : Sort u_1
𝕜 : Type u_2
E : Type u_3
inst✝² : LinearOrderedField 𝕜
inst✝¹ : AddCommGroup E
inst✝ : Module 𝕜 E
s t u : Set E
x y : E
hs : s.Nonempty
⊢ (convexHull 𝕜) (insert x s) = convexJoin 𝕜 {x} ((convexHull 𝕜) s)
state_after: no goals
Theorem: Matrix.exp_blockDiagonal'
File: Mathlib/Analysis/NormedSpace/MatrixExponential.lean

tactic: simp_rw [exp_eq_tsum, ← blockDiagonal'_pow, ← blockDiagonal'_smul, ← blockDiagonal'_tsum]
state_before: 𝕂 : Type u_1
m : Type u_2
n : Type u_3
p : Type u_4
n' : m → Type u_5
𝔸 : Type u_6
inst✝¹¹ : Fintype m
inst✝¹⁰ : DecidableEq m
inst✝⁹ : Fintype n
inst✝⁸ : DecidableEq n
inst✝⁷ : (i : m) → Fintype (n' i)
inst✝⁶ : (i : m) → DecidableEq (n' i)
inst✝⁵ : Field 𝕂
inst✝⁴ : Ring 𝔸
inst✝³ : TopologicalSpace 𝔸
inst✝² : TopologicalRing 𝔸
inst✝¹ : Algebra 𝕂 𝔸
inst✝ : T2Space 𝔸
v : (i : m) → Matrix (n' i) (n' i) 𝔸
⊢ exp 𝕂 (blockDiagonal' v) = blockDiagonal' (exp 𝕂 v)
state_after: no goals
Theorem: SemilatticeSup.ext_sup
File: Mathlib/Order/Lattice.lean

tactic: simp only [sup_le_iff]
state_before: α✝ : Type u
β : Type v
inst✝ : SemilatticeSup α✝
a b c✝ d : α✝
α : Type u_1
A B : SemilatticeSup α
H : ∀ (x y : α), x ≤ y ↔ x ≤ y
x y c : α
⊢ x ⊔ y ≤ c ↔ x ⊔ y ≤ c
state_after: α✝ : Type u
β : Type v
inst✝ : SemilatticeSup α✝
a b c✝ d : α✝
α : Type u_1
A B : SemilatticeSup α
H : ∀ (x y : α), x ≤ y ↔ x ≤ y
x y c : α
⊢ x ⊔ y ≤ c ↔ x ≤ c ∧ y ≤ c

tactic: rw [← H, @sup_le_iff α A, H, H]
state_before: α✝ : Type u
β : Type v
inst✝ : SemilatticeSup α✝
a b c✝ d : α✝
α : Type u_1
A B : SemilatticeSup α
H : ∀ (x y : α), x ≤ y ↔ x ≤ y
x y c : α
⊢ x ⊔ y ≤ c ↔ x ≤ c ∧ y ≤ c
state_after: no goals
Theorem: Ordinal.sup_le_iff
File: Mathlib/SetTheory/Ordinal/Arithmetic.lean

tactic: simp
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
r : α → α → Prop
s : β → β → Prop
t : γ → γ → Prop
ι : Type u
f : ι → Ordinal.{max u v}
a : Ordinal.{max u v}
⊢ (∀ x ∈ range f, x ≤ a) ↔ ∀ (i : ι), f i ≤ a
state_after: no goals
Theorem: SimpleGraph.mem_incidence_iff_neighbor
File: Mathlib/Combinatorics/SimpleGraph/Basic.lean

tactic: simp only [mem_incidenceSet, mem_neighborSet]
state_before: ι : Sort u_1
V : Type u
G : SimpleGraph V
a b c u v✝ w✝ : V
e : Sym2 V
v w : V
⊢ s(v, w) ∈ G.incidenceSet v ↔ w ∈ G.neighborSet v
state_after: no goals
Theorem: Real.sin_sq_pi_over_two_pow
File: Mathlib/Analysis/SpecialFunctions/Trigonometric/Basic.lean

tactic: rw [sin_sq, cos_pi_over_two_pow]
state_before: x : ℝ
n : ℕ
⊢ sin (π / 2 ^ (n + 1)) ^ 2 = 1 - (sqrtTwoAddSeries 0 n / 2) ^ 2
state_after: no goals
Theorem: Trivialization.frontier_preimage
File: Mathlib/Topology/FiberBundle/Trivialization.lean

tactic: rw [← (e.isImage_preimage_prod s).frontier.preimage_eq, frontier_prod_univ_eq,
  (e.isImage_preimage_prod _).preimage_eq, e.source_eq, preimage_inter]
state_before: ι : Type u_1
B : Type u_2
F : Type u_3
E : B → Type u_4
Z : Type u_5
inst✝⁴ : TopologicalSpace B
inst✝³ : TopologicalSpace F
proj : Z → B
inst✝² : TopologicalSpace Z
inst✝¹ : TopologicalSpace (TotalSpace F E)
e✝ : Trivialization F proj
x : Z
e' : Trivialization F TotalSpace.proj
x' : TotalSpace F E
b : B
y : E b
B' : Type u_6
inst✝ : TopologicalSpace B'
e : Trivialization F proj
s : Set B
⊢ e.source ∩ frontier (proj ⁻¹' s) = proj ⁻¹' (e.baseSet ∩ frontier s)
state_after: no goals
Theorem: Int.Ico_filter_modEq_eq
File: Mathlib/Data/Int/CardIntervalMod.lean

tactic: ext x
state_before: a b r : ℤ
hr : 0 < r
v : ℤ
⊢ filter (fun x => x ≡ v [ZMOD r]) (Ico a b) =
    map { toFun := fun x => x + v, inj' := ⋯ } (filter (fun x => r ∣ x) (Ico (a - v) (b - v)))
state_after: case a
a b r : ℤ
hr : 0 < r
v x : ℤ
⊢ x ∈ filter (fun x => x ≡ v [ZMOD r]) (Ico a b) ↔
    x ∈ map { toFun := fun x => x + v, inj' := ⋯ } (filter (fun x => r ∣ x) (Ico (a - v) (b - v)))

tactic: simp_rw [mem_map, mem_filter, mem_Ico, Function.Embedding.coeFn_mk, ← eq_sub_iff_add_eq,
  exists_eq_right, modEq_comm, modEq_iff_dvd, sub_lt_sub_iff_right, sub_le_sub_iff_right]
state_before: case a
a b r : ℤ
hr : 0 < r
v x : ℤ
⊢ x ∈ filter (fun x => x ≡ v [ZMOD r]) (Ico a b) ↔
    x ∈ map { toFun := fun x => x + v, inj' := ⋯ } (filter (fun x => r ∣ x) (Ico (a - v) (b - v)))
state_after: no goals
Theorem: Polynomial.natDegree_le_of_dvd
File: Mathlib/Algebra/Polynomial/RingDivision.lean

tactic: rcases h1 with ⟨q, rfl⟩
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p✝ q✝ p q : R[X]
h1 : p ∣ q
h2 : q ≠ 0
⊢ p.natDegree ≤ q.natDegree
state_after: case intro
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p✝ q✝ p q : R[X]
h2 : p * q ≠ 0
⊢ p.natDegree ≤ (p * q).natDegree

tactic: rw [mul_ne_zero_iff] at h2
state_before: case intro
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p✝ q✝ p q : R[X]
h2 : p * q ≠ 0
⊢ p.natDegree ≤ (p * q).natDegree
state_after: case intro
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p✝ q✝ p q : R[X]
h2 : p ≠ 0 ∧ q ≠ 0
⊢ p.natDegree ≤ (p * q).natDegree

tactic: rw [natDegree_mul h2.1 h2.2]
state_before: case intro
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p✝ q✝ p q : R[X]
h2 : p ≠ 0 ∧ q ≠ 0
⊢ p.natDegree ≤ (p * q).natDegree
state_after: case intro
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p✝ q✝ p q : R[X]
h2 : p ≠ 0 ∧ q ≠ 0
⊢ p.natDegree ≤ p.natDegree + q.natDegree

tactic: exact Nat.le_add_right _ _
state_before: case intro
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝¹ : Semiring R
inst✝ : NoZeroDivisors R
p✝ q✝ p q : R[X]
h2 : p ≠ 0 ∧ q ≠ 0
⊢ p.natDegree ≤ p.natDegree + q.natDegree
state_after: no goals
Theorem: lt_iff_lt_of_cmp_eq_cmp
File: Mathlib/Order/Compare.lean

tactic: rw [← cmp_eq_lt_iff, ← cmp_eq_lt_iff, h]
state_before: α : Type u_1
β✝ : Type u_2
inst✝¹ : LinearOrder α
x y : α
β : Type u_3
inst✝ : LinearOrder β
x' y' : β
h : cmp x y = cmp x' y'
⊢ x < y ↔ x' < y'
state_after: no goals
Theorem: Filter.pi_inf_principal_univ_pi_neBot
File: Mathlib/Order/Filter/Pi.lean

tactic: simp [neBot_iff]
state_before: ι : Type u_1
α : ι → Type u_2
f f₁ f₂ : (i : ι) → Filter (α i)
s : (i : ι) → Set (α i)
p : (i : ι) → α i → Prop
⊢ (pi f ⊓ 𝓟 (univ.pi s)).NeBot ↔ ∀ (i : ι), (f i ⊓ 𝓟 (s i)).NeBot
state_after: no goals
Theorem: separableClosure.comap_eq_of_algHom
File: Mathlib/FieldTheory/SeparableClosure.lean

tactic: ext x
state_before: F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
i : E →ₐ[F] K
⊢ comap i (separableClosure F K) = separableClosure F E
state_after: case h
F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
i : E →ₐ[F] K
x : E
⊢ x ∈ comap i (separableClosure F K) ↔ x ∈ separableClosure F E

tactic: exact map_mem_separableClosure_iff i
state_before: case h
F : Type u
E : Type v
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Algebra F E
K : Type w
inst✝¹ : Field K
inst✝ : Algebra F K
i : E →ₐ[F] K
x : E
⊢ x ∈ comap i (separableClosure F K) ↔ x ∈ separableClosure F E
state_after: no goals
Theorem: UniformSpace.compactSpace_iff_seqCompactSpace
File: Mathlib/Topology/Sequences.lean

tactic: simp only [← isCompact_univ_iff, seqCompactSpace_iff, UniformSpace.isCompact_iff_isSeqCompact]
state_before: X : Type u_1
Y : Type u_2
inst✝¹ : UniformSpace X
s : Set X
inst✝ : (𝓤 X).IsCountablyGenerated
⊢ CompactSpace X ↔ SeqCompactSpace X
state_after: no goals
Theorem: MeasureTheory.IsStoppingTime.measurableSet_lt_of_countable_range'
File: Mathlib/Probability/Process/Stopping.lean

tactic: have : {ω | τ ω < i} = {ω | τ ω ≤ i} \ {ω | τ ω = i} := by
  ext1 ω
  simp only [lt_iff_le_and_ne, Set.mem_setOf_eq, Set.mem_diff]
state_before: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : LinearOrder ι
f : Filtration ι m
τ π : Ω → ι
hτ : IsStoppingTime f τ
h_countable : (Set.range τ).Countable
i : ι
⊢ MeasurableSet {ω | τ ω < i}
state_after: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : LinearOrder ι
f : Filtration ι m
τ π : Ω → ι
hτ : IsStoppingTime f τ
h_countable : (Set.range τ).Countable
i : ι
this : {ω | τ ω < i} = {ω | τ ω ≤ i} \ {ω | τ ω = i}
⊢ MeasurableSet {ω | τ ω < i}

tactic: rw [this]
state_before: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : LinearOrder ι
f : Filtration ι m
τ π : Ω → ι
hτ : IsStoppingTime f τ
h_countable : (Set.range τ).Countable
i : ι
this : {ω | τ ω < i} = {ω | τ ω ≤ i} \ {ω | τ ω = i}
⊢ MeasurableSet {ω | τ ω < i}
state_after: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : LinearOrder ι
f : Filtration ι m
τ π : Ω → ι
hτ : IsStoppingTime f τ
h_countable : (Set.range τ).Countable
i : ι
this : {ω | τ ω < i} = {ω | τ ω ≤ i} \ {ω | τ ω = i}
⊢ MeasurableSet ({ω | τ ω ≤ i} \ {ω | τ ω = i})

tactic: exact (hτ.measurableSet_le' i).diff (hτ.measurableSet_eq_of_countable_range' h_countable i)
state_before: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : LinearOrder ι
f : Filtration ι m
τ π : Ω → ι
hτ : IsStoppingTime f τ
h_countable : (Set.range τ).Countable
i : ι
this : {ω | τ ω < i} = {ω | τ ω ≤ i} \ {ω | τ ω = i}
⊢ MeasurableSet ({ω | τ ω ≤ i} \ {ω | τ ω = i})
state_after: no goals

tactic: ext1 ω
state_before: Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : LinearOrder ι
f : Filtration ι m
τ π : Ω → ι
hτ : IsStoppingTime f τ
h_countable : (Set.range τ).Countable
i : ι
⊢ {ω | τ ω < i} = {ω | τ ω ≤ i} \ {ω | τ ω = i}
state_after: case h
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : LinearOrder ι
f : Filtration ι m
τ π : Ω → ι
hτ : IsStoppingTime f τ
h_countable : (Set.range τ).Countable
i : ι
ω : Ω
⊢ ω ∈ {ω | τ ω < i} ↔ ω ∈ {ω | τ ω ≤ i} \ {ω | τ ω = i}

tactic: simp only [lt_iff_le_and_ne, Set.mem_setOf_eq, Set.mem_diff]
state_before: case h
Ω : Type u_1
β : Type u_2
ι : Type u_3
m : MeasurableSpace Ω
inst✝ : LinearOrder ι
f : Filtration ι m
τ π : Ω → ι
hτ : IsStoppingTime f τ
h_countable : (Set.range τ).Countable
i : ι
ω : Ω
⊢ ω ∈ {ω | τ ω < i} ↔ ω ∈ {ω | τ ω ≤ i} \ {ω | τ ω = i}
state_after: no goals
Theorem: Fin.map_valEmbedding_Ioi
File: Mathlib/Order/Interval/Finset/Fin.lean

tactic: clear b
state_before: n : ℕ
a b : Fin n
⊢ map valEmbedding (Ioi a) = Ioc (↑a) (n - 1)
state_after: n : ℕ
a : Fin n
⊢ map valEmbedding (Ioi a) = Ioc (↑a) (n - 1)

tactic: ext x
state_before: n : ℕ
a : Fin n
⊢ map valEmbedding (Ioi a) = Ioc (↑a) (n - 1)
state_after: case a
n : ℕ
a : Fin n
x : ℕ
⊢ x ∈ map valEmbedding (Ioi a) ↔ x ∈ Ioc (↑a) (n - 1)

tactic: simp only [exists_prop, Embedding.coe_subtype, mem_Ioi, mem_map, mem_Ioc]
state_before: case a
n : ℕ
a : Fin n
x : ℕ
⊢ x ∈ map valEmbedding (Ioi a) ↔ x ∈ Ioc (↑a) (n - 1)
state_after: case a
n : ℕ
a : Fin n
x : ℕ
⊢ (∃ a_1, a < a_1 ∧ valEmbedding a_1 = x) ↔ ↑a < x ∧ x ≤ n - 1

tactic: constructor
state_before: case a
n : ℕ
a : Fin n
x : ℕ
⊢ (∃ a_1, a < a_1 ∧ valEmbedding a_1 = x) ↔ ↑a < x ∧ x ≤ n - 1
state_after: case a.mp
n : ℕ
a : Fin n
x : ℕ
⊢ (∃ a_1, a < a_1 ∧ valEmbedding a_1 = x) → ↑a < x ∧ x ≤ n - 1

case a.mpr
n : ℕ
a : Fin n
x : ℕ
⊢ ↑a < x ∧ x ≤ n - 1 → ∃ a_2, a < a_2 ∧ valEmbedding a_2 = x

tactic: cases n
state_before: case a.mpr
n : ℕ
a : Fin n
x : ℕ
⊢ ↑a < x ∧ x ≤ n - 1 → ∃ a_2, a < a_2 ∧ valEmbedding a_2 = x
state_after: case a.mpr.zero
x : ℕ
a : Fin 0
⊢ ↑a < x ∧ x ≤ 0 - 1 → ∃ a_2, a < a_2 ∧ valEmbedding a_2 = x

case a.mpr.succ
x n✝ : ℕ
a : Fin (n✝ + 1)
⊢ ↑a < x ∧ x ≤ n✝ + 1 - 1 → ∃ a_2, a < a_2 ∧ valEmbedding a_2 = x

tactic: rintro ⟨x, hx, rfl⟩
state_before: case a.mp
n : ℕ
a : Fin n
x : ℕ
⊢ (∃ a_1, a < a_1 ∧ valEmbedding a_1 = x) → ↑a < x ∧ x ≤ n - 1
state_after: case a.mp.intro.intro
n : ℕ
a x : Fin n
hx : a < x
⊢ ↑a < valEmbedding x ∧ valEmbedding x ≤ n - 1

tactic: exact ⟨hx, Nat.le_sub_of_add_le <| x.2⟩
state_before: case a.mp.intro.intro
n : ℕ
a x : Fin n
hx : a < x
⊢ ↑a < valEmbedding x ∧ valEmbedding x ≤ n - 1
state_after: no goals

tactic: exact Fin.elim0 a
state_before: case a.mpr.zero
x : ℕ
a : Fin 0
⊢ ↑a < x ∧ x ≤ 0 - 1 → ∃ a_2, a < a_2 ∧ valEmbedding a_2 = x
state_after: no goals

tactic: exact fun hx => ⟨⟨x, Nat.lt_succ_iff.2 hx.2⟩, hx.1, rfl⟩
state_before: case a.mpr.succ
x n✝ : ℕ
a : Fin (n✝ + 1)
⊢ ↑a < x ∧ x ≤ n✝ + 1 - 1 → ∃ a_2, a < a_2 ∧ valEmbedding a_2 = x
state_after: no goals
Theorem: LinearPMap.ext_iff
File: Mathlib/LinearAlgebra/LinearPMap.lean

tactic: congr
state_before: R : Type u_1
inst✝⁶ : Ring R
E : Type u_2
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module R E
F : Type u_3
inst✝³ : AddCommGroup F
inst✝² : Module R F
G : Type u_4
inst✝¹ : AddCommGroup G
inst✝ : Module R G
f g : E →ₗ.[R] F
EQ : f = g
x y : ↥f.domain
h : ↑x = ↑y
⊢ ↑f x = ↑f y
state_after: case e_a
R : Type u_1
inst✝⁶ : Ring R
E : Type u_2
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module R E
F : Type u_3
inst✝³ : AddCommGroup F
inst✝² : Module R F
G : Type u_4
inst✝¹ : AddCommGroup G
inst✝ : Module R G
f g : E →ₗ.[R] F
EQ : f = g
x y : ↥f.domain
h : ↑x = ↑y
⊢ x = y

tactic: exact mod_cast h
state_before: case e_a
R : Type u_1
inst✝⁶ : Ring R
E : Type u_2
inst✝⁵ : AddCommGroup E
inst✝⁴ : Module R E
F : Type u_3
inst✝³ : AddCommGroup F
inst✝² : Module R F
G : Type u_4
inst✝¹ : AddCommGroup G
inst✝ : Module R G
f g : E →ₗ.[R] F
EQ : f = g
x y : ↥f.domain
h : ↑x = ↑y
⊢ x = y
state_after: no goals
Theorem: IsUnit.div_eq_div_iff
File: Mathlib/Algebra/Group/Units.lean

tactic: rw [← (hb.mul hd).mul_left_inj, ← mul_assoc, hb.div_mul_cancel, ← mul_assoc, mul_right_comm,
  hd.div_mul_cancel]
state_before: α : Type u
M : Type u_1
N : Type u_2
inst✝ : DivisionCommMonoid α
a b c d : α
hb : IsUnit b
hd : IsUnit d
⊢ a / b = c / d ↔ a * d = c * b
state_after: no goals
Theorem: CategoryTheory.rightDistributor_ext₂_left
File: Mathlib/CategoryTheory/Monoidal/Preadditive.lean

tactic: apply (cancel_epi (α_ _ _ _).inv).mp
state_before: C : Type u_1
inst✝⁵ : Category.{u_2, u_1} C
inst✝⁴ : Preadditive C
inst✝³ : MonoidalCategory C
inst✝² : MonoidalPreadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Fintype J
f : J → C
X Y Z : C
g h : ((⨁ f) ⊗ X) ⊗ Y ⟶ Z
w : ∀ (j : J), biproduct.ι f j ▷ X ▷ Y ≫ g = biproduct.ι f j ▷ X ▷ Y ≫ h
⊢ g = h
state_after: C : Type u_1
inst✝⁵ : Category.{u_2, u_1} C
inst✝⁴ : Preadditive C
inst✝³ : MonoidalCategory C
inst✝² : MonoidalPreadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Fintype J
f : J → C
X Y Z : C
g h : ((⨁ f) ⊗ X) ⊗ Y ⟶ Z
w : ∀ (j : J), biproduct.ι f j ▷ X ▷ Y ≫ g = biproduct.ι f j ▷ X ▷ Y ≫ h
⊢ (α_ (⨁ f) X Y).inv ≫ g = (α_ (⨁ f) X Y).inv ≫ h

tactic: ext
state_before: C : Type u_1
inst✝⁵ : Category.{u_2, u_1} C
inst✝⁴ : Preadditive C
inst✝³ : MonoidalCategory C
inst✝² : MonoidalPreadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Fintype J
f : J → C
X Y Z : C
g h : ((⨁ f) ⊗ X) ⊗ Y ⟶ Z
w : ∀ (j : J), biproduct.ι f j ▷ X ▷ Y ≫ g = biproduct.ι f j ▷ X ▷ Y ≫ h
⊢ (α_ (⨁ f) X Y).inv ≫ g = (α_ (⨁ f) X Y).inv ≫ h
state_after: case w
C : Type u_1
inst✝⁵ : Category.{u_2, u_1} C
inst✝⁴ : Preadditive C
inst✝³ : MonoidalCategory C
inst✝² : MonoidalPreadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Fintype J
f : J → C
X Y Z : C
g h : ((⨁ f) ⊗ X) ⊗ Y ⟶ Z
w : ∀ (j : J), biproduct.ι f j ▷ X ▷ Y ≫ g = biproduct.ι f j ▷ X ▷ Y ≫ h
j✝ : J
⊢ biproduct.ι f j✝ ▷ (X ⊗ Y) ≫ (α_ (⨁ f) X Y).inv ≫ g = biproduct.ι f j✝ ▷ (X ⊗ Y) ≫ (α_ (⨁ f) X Y).inv ≫ h

tactic: simp [w]
state_before: case w
C : Type u_1
inst✝⁵ : Category.{u_2, u_1} C
inst✝⁴ : Preadditive C
inst✝³ : MonoidalCategory C
inst✝² : MonoidalPreadditive C
inst✝¹ : HasFiniteBiproducts C
J : Type
inst✝ : Fintype J
f : J → C
X Y Z : C
g h : ((⨁ f) ⊗ X) ⊗ Y ⟶ Z
w : ∀ (j : J), biproduct.ι f j ▷ X ▷ Y ≫ g = biproduct.ι f j ▷ X ▷ Y ≫ h
j✝ : J
⊢ biproduct.ι f j✝ ▷ (X ⊗ Y) ≫ (α_ (⨁ f) X Y).inv ≫ g = biproduct.ι f j✝ ▷ (X ⊗ Y) ≫ (α_ (⨁ f) X Y).inv ≫ h
state_after: no goals
Theorem: Order.Ideal.isPrime_of_mem_or_compl_mem
File: Mathlib/Order/PrimeIdeal.lean

tactic: simp only [isPrime_iff_mem_or_mem, or_iff_not_imp_left]
state_before: P : Type u_1
inst✝¹ : BooleanAlgebra P
x : P
I : Ideal P
inst✝ : I.IsProper
h : ∀ {x : P}, x ∈ I ∨ xᶜ ∈ I
⊢ I.IsPrime
state_after: P : Type u_1
inst✝¹ : BooleanAlgebra P
x : P
I : Ideal P
inst✝ : I.IsProper
h : ∀ {x : P}, x ∈ I ∨ xᶜ ∈ I
⊢ ∀ {x y : P}, x ⊓ y ∈ I → x ∉ I → y ∈ I

tactic: intro x y hxy hxI
state_before: P : Type u_1
inst✝¹ : BooleanAlgebra P
x : P
I : Ideal P
inst✝ : I.IsProper
h : ∀ {x : P}, x ∈ I ∨ xᶜ ∈ I
⊢ ∀ {x y : P}, x ⊓ y ∈ I → x ∉ I → y ∈ I
state_after: P : Type u_1
inst✝¹ : BooleanAlgebra P
x✝ : P
I : Ideal P
inst✝ : I.IsProper
h : ∀ {x : P}, x ∈ I ∨ xᶜ ∈ I
x y : P
hxy : x ⊓ y ∈ I
hxI : x ∉ I
⊢ y ∈ I

tactic: have hxcI : xᶜ ∈ I := h.resolve_left hxI
state_before: P : Type u_1
inst✝¹ : BooleanAlgebra P
x✝ : P
I : Ideal P
inst✝ : I.IsProper
h : ∀ {x : P}, x ∈ I ∨ xᶜ ∈ I
x y : P
hxy : x ⊓ y ∈ I
hxI : x ∉ I
⊢ y ∈ I
state_after: P : Type u_1
inst✝¹ : BooleanAlgebra P
x✝ : P
I : Ideal P
inst✝ : I.IsProper
h : ∀ {x : P}, x ∈ I ∨ xᶜ ∈ I
x y : P
hxy : x ⊓ y ∈ I
hxI : x ∉ I
hxcI : xᶜ ∈ I
⊢ y ∈ I

tactic: have ass : x ⊓ y ⊔ y ⊓ xᶜ ∈ I := sup_mem hxy (I.lower inf_le_right hxcI)
state_before: P : Type u_1
inst✝¹ : BooleanAlgebra P
x✝ : P
I : Ideal P
inst✝ : I.IsProper
h : ∀ {x : P}, x ∈ I ∨ xᶜ ∈ I
x y : P
hxy : x ⊓ y ∈ I
hxI : x ∉ I
hxcI : xᶜ ∈ I
⊢ y ∈ I
state_after: P : Type u_1
inst✝¹ : BooleanAlgebra P
x✝ : P
I : Ideal P
inst✝ : I.IsProper
h : ∀ {x : P}, x ∈ I ∨ xᶜ ∈ I
x y : P
hxy : x ⊓ y ∈ I
hxI : x ∉ I
hxcI : xᶜ ∈ I
ass : x ⊓ y ⊔ y ⊓ xᶜ ∈ I
⊢ y ∈ I

tactic: rwa [inf_comm, sup_inf_inf_compl] at ass
state_before: P : Type u_1
inst✝¹ : BooleanAlgebra P
x✝ : P
I : Ideal P
inst✝ : I.IsProper
h : ∀ {x : P}, x ∈ I ∨ xᶜ ∈ I
x y : P
hxy : x ⊓ y ∈ I
hxI : x ∉ I
hxcI : xᶜ ∈ I
ass : x ⊓ y ⊔ y ⊓ xᶜ ∈ I
⊢ y ∈ I
state_after: no goals
Theorem: CategoryTheory.isSeparator_iff_faithful_preadditiveCoyoneda
File: Mathlib/CategoryTheory/Preadditive/Generator.lean

tactic: rw [isSeparator_iff_faithful_coyoneda_obj, ← whiskering_preadditiveCoyoneda, Functor.comp_obj,
  whiskeringRight_obj_obj]
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
G : C
⊢ IsSeparator G ↔ (preadditiveCoyoneda.obj { unop := G }).Faithful
state_after: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
G : C
⊢ (preadditiveCoyoneda.obj { unop := G } ⋙ forget AddCommGrp).Faithful ↔
    (preadditiveCoyoneda.obj { unop := G }).Faithful

tactic: exact ⟨fun h => Functor.Faithful.of_comp _ (forget AddCommGrp),
  fun h => Functor.Faithful.comp _ _⟩
state_before: C : Type u
inst✝¹ : Category.{v, u} C
inst✝ : Preadditive C
G : C
⊢ (preadditiveCoyoneda.obj { unop := G } ⋙ forget AddCommGrp).Faithful ↔
    (preadditiveCoyoneda.obj { unop := G }).Faithful
state_after: no goals
Theorem: ContDiffAt.add
File: Mathlib/Analysis/Calculus/ContDiff/Basic.lean

tactic: rw [← contDiffWithinAt_univ] at *
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type u_2
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
f g : E → F
hf : ContDiffAt 𝕜 n f x
hg : ContDiffAt 𝕜 n g x
⊢ ContDiffAt 𝕜 n (fun x => f x + g x) x
state_after: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type u_2
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
f g : E → F
hf : ContDiffWithinAt 𝕜 n f univ x
hg : ContDiffWithinAt 𝕜 n g univ x
⊢ ContDiffWithinAt 𝕜 n (fun x => f x + g x) univ x

tactic: exact hf.add hg
state_before: 𝕜 : Type u_1
inst✝¹⁰ : NontriviallyNormedField 𝕜
D : Type uD
inst✝⁹ : NormedAddCommGroup D
inst✝⁸ : NormedSpace 𝕜 D
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace 𝕜 E
F : Type uF
inst✝⁵ : NormedAddCommGroup F
inst✝⁴ : NormedSpace 𝕜 F
G : Type uG
inst✝³ : NormedAddCommGroup G
inst✝² : NormedSpace 𝕜 G
X : Type u_2
inst✝¹ : NormedAddCommGroup X
inst✝ : NormedSpace 𝕜 X
s s₁ t u : Set E
f✝ f₁ : E → F
g✝ : F → G
x x₀ : E
c : F
b : E × F → G
m n : ℕ∞
p : E → FormalMultilinearSeries 𝕜 E F
f g : E → F
hf : ContDiffWithinAt 𝕜 n f univ x
hg : ContDiffWithinAt 𝕜 n g univ x
⊢ ContDiffWithinAt 𝕜 n (fun x => f x + g x) univ x
state_after: no goals
Theorem: range_pow_padicValNat_subset_divisors
File: Mathlib/NumberTheory/Padics/PadicVal.lean

tactic: intro t ht
state_before: p n : ℕ
hn : n ≠ 0
⊢ Finset.image (fun x => p ^ x) (Finset.range (padicValNat p n + 1)) ⊆ n.divisors
state_after: p n : ℕ
hn : n ≠ 0
t : ℕ
ht : t ∈ Finset.image (fun x => p ^ x) (Finset.range (padicValNat p n + 1))
⊢ t ∈ n.divisors

tactic: simp only [exists_prop, Finset.mem_image, Finset.mem_range] at ht
state_before: p n : ℕ
hn : n ≠ 0
t : ℕ
ht : t ∈ Finset.image (fun x => p ^ x) (Finset.range (padicValNat p n + 1))
⊢ t ∈ n.divisors
state_after: p n : ℕ
hn : n ≠ 0
t : ℕ
ht : ∃ a < padicValNat p n + 1, p ^ a = t
⊢ t ∈ n.divisors

tactic: obtain ⟨k, hk, rfl⟩ := ht
state_before: p n : ℕ
hn : n ≠ 0
t : ℕ
ht : ∃ a < padicValNat p n + 1, p ^ a = t
⊢ t ∈ n.divisors
state_after: case intro.intro
p n : ℕ
hn : n ≠ 0
k : ℕ
hk : k < padicValNat p n + 1
⊢ p ^ k ∈ n.divisors

tactic: rw [Nat.mem_divisors]
state_before: case intro.intro
p n : ℕ
hn : n ≠ 0
k : ℕ
hk : k < padicValNat p n + 1
⊢ p ^ k ∈ n.divisors
state_after: case intro.intro
p n : ℕ
hn : n ≠ 0
k : ℕ
hk : k < padicValNat p n + 1
⊢ p ^ k ∣ n ∧ n ≠ 0

tactic: exact ⟨(pow_dvd_pow p <| by omega).trans pow_padicValNat_dvd, hn⟩
state_before: case intro.intro
p n : ℕ
hn : n ≠ 0
k : ℕ
hk : k < padicValNat p n + 1
⊢ p ^ k ∣ n ∧ n ≠ 0
state_after: no goals

tactic: omega
state_before: p n : ℕ
hn : n ≠ 0
k : ℕ
hk : k < padicValNat p n + 1
⊢ k ≤ padicValNat p n
state_after: no goals