tasksource/leandojo huggingface dataset:
Theorem: ContinuousMultilinearMap.op_norm_prod
File: Mathlib/Analysis/NormedSpace/Multilinear.lean

tactic: have H : 0 ≤ ∏ i, ‖m i‖ := prod_nonneg fun _ _ => norm_nonneg _
state_before: 𝕜 : Type u
ι : Type v
ι' : Type v'
n : ℕ
E : ι → Type wE
E₁ : ι → Type wE₁
E' : ι' → Type wE'
Ei : Fin (Nat.succ n) → Type wEi
G : Type wG
G' : Type wG'
inst✝¹⁷ : Fintype ι
inst✝¹⁶ : Fintype ι'
inst✝¹⁵ : NontriviallyNormedField 𝕜
inst✝¹⁴ : (i : ι) → NormedAddCommGroup (E i)
inst✝¹³ : (i : ι) → NormedSpace 𝕜 (E i)
inst✝¹² : (i : ι) → NormedAddCommGroup (E₁ i)
inst✝¹¹ : (i : ι) → NormedSpace 𝕜 (E₁ i)
inst✝¹⁰ : (i : ι') → NormedAddCommGroup (E' i)
inst✝⁹ : (i : ι') → NormedSpace 𝕜 (E' i)
inst✝⁸ : (i : Fin (Nat.succ n)) → NormedAddCommGroup (Ei i)
inst✝⁷ : (i : Fin (Nat.succ n)) → NormedSpace 𝕜 (Ei i)
inst✝⁶ : NormedAddCommGroup G
inst✝⁵ : NormedSpace 𝕜 G
inst✝⁴ : NormedAddCommGroup G'
inst✝³ : NormedSpace 𝕜 G'
c : 𝕜
f✝ g✝ : ContinuousMultilinearMap 𝕜 E G
m✝ : (i : ι) → E i
𝕜' : Type ?u.552038
inst✝² : NormedField 𝕜'
inst✝¹ : NormedSpace 𝕜' G
inst✝ : SMulCommClass 𝕜 𝕜' G
f : ContinuousMultilinearMap 𝕜 E G
g : ContinuousMultilinearMap 𝕜 E G'
m : (i : ι) → E i
⊢ ‖↑(prod f g) m‖ ≤ max ‖f‖ ‖g‖ * ∏ i : ι, ‖m i‖

tactic: simpa only [prod_apply, Prod.norm_def, max_mul_of_nonneg, H] using
  max_le_max (f.le_op_norm m) (g.le_op_norm m)
state_before: 𝕜 : Type u
ι : Type v
ι' : Type v'
n : ℕ
E : ι → Type wE
E₁ : ι → Type wE₁
E' : ι' → Type wE'
Ei : Fin (Nat.succ n) → Type wEi
G : Type wG
G' : Type wG'
inst✝¹⁷ : Fintype ι
inst✝¹⁶ : Fintype ι'
inst✝¹⁵ : NontriviallyNormedField 𝕜
inst✝¹⁴ : (i : ι) → NormedAddCommGroup (E i)
inst✝¹³ : (i : ι) → NormedSpace 𝕜 (E i)
inst✝¹² : (i : ι) → NormedAddCommGroup (E₁ i)
inst✝¹¹ : (i : ι) → NormedSpace 𝕜 (E₁ i)
inst✝¹⁰ : (i : ι') → NormedAddCommGroup (E' i)
inst✝⁹ : (i : ι') → NormedSpace 𝕜 (E' i)
inst✝⁸ : (i : Fin (Nat.succ n)) → NormedAddCommGroup (Ei i)
inst✝⁷ : (i : Fin (Nat.succ n)) → NormedSpace 𝕜 (Ei i)
inst✝⁶ : NormedAddCommGroup G
inst✝⁵ : NormedSpace 𝕜 G
inst✝⁴ : NormedAddCommGroup G'
inst✝³ : NormedSpace 𝕜 G'
c : 𝕜
f✝ g✝ : ContinuousMultilinearMap 𝕜 E G
m✝ : (i : ι) → E i
𝕜' : Type ?u.552038
inst✝² : NormedField 𝕜'
inst✝¹ : NormedSpace 𝕜' G
inst✝ : SMulCommClass 𝕜 𝕜' G
f : ContinuousMultilinearMap 𝕜 E G
g : ContinuousMultilinearMap 𝕜 E G'
m : (i : ι) → E i
H : 0 ≤ ∏ i : ι, ‖m i‖
⊢ ‖↑(prod f g) m‖ ≤ max ‖f‖ ‖g‖ * ∏ i : ι, ‖m i‖
Theorem: AddLECancellable.le_tsub_iff_le_tsub
File: Mathlib/Algebra/Order/Sub/Canonical.lean

tactic: rw [ha.le_tsub_iff_left h₁, hc.le_tsub_iff_right h₂]
state_before: α : Type u_1
inst✝⁵ : AddCommSemigroup α
inst✝⁴ : PartialOrder α
inst✝³ : ExistsAddOfLE α
inst✝² : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x ≤ x_1
inst✝¹ : Sub α
inst✝ : OrderedSub α
a b c d : α
ha : AddLECancellable a
hc : AddLECancellable c
h₁ : a ≤ b
h₂ : c ≤ b
⊢ a ≤ b - c ↔ c ≤ b - a
Theorem: frontier_prod_eq
File: Mathlib/Topology/Constructions.lean

tactic: simp only [frontier, closure_prod_eq, interior_prod_eq, prod_diff_prod]
state_before: α : Type u
β : Type v
γ : Type ?u.60890
δ : Type ?u.60893
ε : Type ?u.60896
ζ : Type ?u.60899
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : TopologicalSpace γ
inst✝² : TopologicalSpace δ
inst✝¹ : TopologicalSpace ε
inst✝ : TopologicalSpace ζ
s : Set α
t : Set β
⊢ frontier (s ×ˢ t) = closure s ×ˢ frontier t ∪ frontier s ×ˢ closure t
Theorem: MvPolynomial.ker_map
File: Mathlib/RingTheory/Polynomial/Basic.lean

tactic: ext
state_before: R : Type u
S : Type u_1
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f : R →+* S
⊢ RingHom.ker (map f) = Ideal.map C (RingHom.ker f)

tactic: rw [MvPolynomial.mem_map_C_iff, RingHom.mem_ker, MvPolynomial.ext_iff]
state_before: case h
R : Type u
S : Type u_1
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f : R →+* S
x✝ : MvPolynomial σ R
⊢ x✝ ∈ RingHom.ker (map f) ↔ x✝ ∈ Ideal.map C (RingHom.ker f)

tactic: simp_rw [coeff_map, coeff_zero, RingHom.mem_ker]
state_before: case h
R : Type u
S : Type u_1
σ : Type v
M : Type w
inst✝³ : CommRing R
inst✝² : CommRing S
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f : R →+* S
x✝ : MvPolynomial σ R
⊢ (∀ (m : σ →₀ ℕ), coeff m (↑(map f) x✝) = coeff m 0) ↔ ∀ (m : σ →₀ ℕ), coeff m x✝ ∈ RingHom.ker f
Theorem: Complex.sinh_add_aux
File: Mathlib/Data/Complex/Exponential.lean

tactic: ring
state_before: x y a b c d : ℂ
⊢ (a - b) * (c + d) + (a + b) * (c - d) = 2 * (a * c - b * d)
Theorem: Function.minimalPeriod_pos_of_mem_periodicPts
File: Mathlib/Dynamics/PeriodicPts.lean

tactic: simp only [minimalPeriod, dif_pos hx, (Nat.find_spec hx).1.lt]
state_before: α : Type u_1
β : Type ?u.20534
f fa : α → α
fb : β → β
x y : α
m n : ℕ
hx : x ∈ periodicPts f
⊢ 0 < minimalPeriod f x
Theorem: finrank_eq_zero_of_basis_imp_false
File: Mathlib/LinearAlgebra/Finrank.lean

tactic: convert b
state_before: K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Free K V
h : ∀ (s : Finset V), Basis (↑↑s) K V → False
s : Set V
b : Basis (↑s) K V
hs : Set.Finite s
⊢ Basis (↑↑(Set.Finite.toFinset hs)) K V

tactic: simp
state_before: case h.e'_1.h.e'_2
K : Type u
V : Type v
inst✝⁴ : Ring K
inst✝³ : StrongRankCondition K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
inst✝ : Free K V
h : ∀ (s : Finset V), Basis (↑↑s) K V → False
s : Set V
b : Basis (↑s) K V
hs : Set.Finite s
⊢ ↑(Set.Finite.toFinset hs) = s
Theorem: mul_mem_closedBall_mul_iff
File: Mathlib/Analysis/Normed/Group/Basic.lean

tactic: simp only [mem_closedBall, dist_eq_norm_div, mul_div_mul_right_eq_div]
state_before: 𝓕 : Type ?u.999913
𝕜 : Type ?u.999916
α : Type ?u.999919
ι : Type ?u.999922
κ : Type ?u.999925
E : Type u_1
F : Type ?u.999931
G : Type ?u.999934
inst✝¹ : SeminormedCommGroup E
inst✝ : SeminormedCommGroup F
a a₁ a₂ b b₁ b₂ : E
r r₁ r₂ : ℝ
c : E
⊢ a * c ∈ closedBall (b * c) r ↔ a ∈ closedBall b r
Theorem: Ideal.mul_sup_eq_of_coprime_right
File: Mathlib/RingTheory/Ideal/Operations.lean

tactic: rw [sup_comm] at h
state_before: R : Type u
ι : Type ?u.273517
inst✝ : CommSemiring R
I J K L : Ideal R
h : K ⊔ J = ⊤
⊢ I * K ⊔ J = I ⊔ J

tactic: rw [sup_comm, sup_mul_eq_of_coprime_right h, sup_comm]
state_before: R : Type u
ι : Type ?u.273517
inst✝ : CommSemiring R
I J K L : Ideal R
h : J ⊔ K = ⊤
⊢ I * K ⊔ J = I ⊔ J
Theorem: IntermediateField.adjoin_eq_bot_iff
File: Mathlib/FieldTheory/Adjoin.lean

tactic: rw [eq_bot_iff, adjoin_le_iff]
state_before: F : Type u_2
inst✝² : Field F
E : Type u_1
inst✝¹ : Field E
inst✝ : Algebra F E
α : E
S : Set E
⊢ adjoin F S = ⊥ ↔ S ⊆ ↑⊥

tactic: rfl
state_before: F : Type u_2
inst✝² : Field F
E : Type u_1
inst✝¹ : Field E
inst✝ : Algebra F E
α : E
S : Set E
⊢ S ≤ ↑⊥ ↔ S ⊆ ↑⊥
Theorem: bernoulli'_def
File: Mathlib/NumberTheory/Bernoulli.lean

tactic: rw [bernoulli'_def', ← Fin.sum_univ_eq_sum_range]
state_before: A : Type ?u.151020
inst✝¹ : CommRing A
inst✝ : Algebra ℚ A
n : ℕ
⊢ bernoulli' n = 1 - ∑ k in range n, ↑(Nat.choose n k) / (↑n - ↑k + 1) * bernoulli' k
Theorem: AddMonoidAlgebra.of_injective
File: Mathlib/Algebra/MonoidAlgebra/Basic.lean

tactic: simpa using (single_eq_single_iff _ _ _ _).mp h
state_before: k : Type u₁
G : Type u₂
R : Type ?u.2040025
inst✝² : Semiring k
inst✝¹ : Nontrivial k
inst✝ : AddZeroClass G
a b : Multiplicative G
h : ↑(of k G) a = ↑(of k G) b
⊢ a = b
Theorem: Homotopy.mkCoinductiveAux₃
File: Mathlib/Algebra/Homology/Homotopy.lean

tactic: subst j
state_before: ι : Type ?u.413991
V : Type u
inst✝¹ : Category V
inst✝ : Preadditive V
c : ComplexShape ι
C D E : HomologicalComplex V c
f g : C ⟶ D
h✝ k : D ⟶ E
i✝ : ι
P Q : CochainComplex V ℕ
e : P ⟶ Q
zero : X P 1 ⟶ X Q 0
comm_zero : Hom.f e 0 = d P 0 1 ≫ zero
one : X P 2 ⟶ X Q 1
comm_one : Hom.f e 1 = zero ≫ d Q 0 1 + d P 1 2 ≫ one
succ :
  (n : ℕ) →
    (p :
        (f : X P (n + 1) ⟶ X Q n) ×'
          (f' : X P (n + 2) ⟶ X Q (n + 1)) ×' Hom.f e (n + 1) = f ≫ d Q n (n + 1) + d P (n + 1) (n + 2) ≫ f') →
      (f'' : X P (n + 3) ⟶ X Q (n + 2)) ×' Hom.f e (n + 2) = p.snd.fst ≫ d Q (n + 1) (n + 2) + d P (n + 2) (n + 3) ≫ f''
i j : ℕ
h : i + 1 = j
⊢ (xNextIso P h).inv ≫ (mkCoinductiveAux₂ e zero comm_zero one comm_one succ i).snd.fst =
    (mkCoinductiveAux₂ e zero comm_zero one comm_one succ j).fst ≫ (xPrevIso Q h).hom

tactic: rcases i with (_ | _ | i) <;> simp [mkCoinductiveAux₂]
state_before: ι : Type ?u.413991
V : Type u
inst✝¹ : Category V
inst✝ : Preadditive V
c : ComplexShape ι
C D E : HomologicalComplex V c
f g : C ⟶ D
h k : D ⟶ E
i✝ : ι
P Q : CochainComplex V ℕ
e : P ⟶ Q
zero : X P 1 ⟶ X Q 0
comm_zero : Hom.f e 0 = d P 0 1 ≫ zero
one : X P 2 ⟶ X Q 1
comm_one : Hom.f e 1 = zero ≫ d Q 0 1 + d P 1 2 ≫ one
succ :
  (n : ℕ) →
    (p :
        (f : X P (n + 1) ⟶ X Q n) ×'
          (f' : X P (n + 2) ⟶ X Q (n + 1)) ×' Hom.f e (n + 1) = f ≫ d Q n (n + 1) + d P (n + 1) (n + 2) ≫ f') →
      (f'' : X P (n + 3) ⟶ X Q (n + 2)) ×' Hom.f e (n + 2) = p.snd.fst ≫ d Q (n + 1) (n + 2) + d P (n + 2) (n + 3) ≫ f''
i : ℕ
⊢ (xNextIso P (_ : i + 1 = i + 1)).inv ≫ (mkCoinductiveAux₂ e zero comm_zero one comm_one succ i).snd.fst =
    (mkCoinductiveAux₂ e zero comm_zero one comm_one succ (i + 1)).fst ≫ (xPrevIso Q (_ : i + 1 = i + 1)).hom
Theorem: LatticeOrderedCommGroup.m_le_iff_pos_le_neg_ge
File: Mathlib/Algebra/Order/LatticeGroup.lean

tactic: constructor <;> intro h
state_before: α : Type u
inst✝² : Lattice α
inst✝¹ : CommGroup α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b : α
⊢ a ≤ b ↔ a⁺ ≤ b⁺ ∧ b⁻ ≤ a⁻

tactic: constructor
state_before: case mp
α : Type u
inst✝² : Lattice α
inst✝¹ : CommGroup α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b : α
h : a ≤ b
⊢ a⁺ ≤ b⁺ ∧ b⁻ ≤ a⁻

tactic: exact sup_le (h.trans (m_le_pos b)) (one_le_pos b)
state_before: case mp.left
α : Type u
inst✝² : Lattice α
inst✝¹ : CommGroup α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b : α
h : a ≤ b
⊢ a⁺ ≤ b⁺

tactic: rw [← inv_le_inv_iff] at h
state_before: case mp.right
α : Type u
inst✝² : Lattice α
inst✝¹ : CommGroup α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b : α
h : a ≤ b
⊢ b⁻ ≤ a⁻

tactic: exact sup_le (h.trans (inv_le_neg a)) (one_le_neg a)
state_before: case mp.right
α : Type u
inst✝² : Lattice α
inst✝¹ : CommGroup α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b : α
h✝ : a ≤ b
h : b⁻¹ ≤ a⁻¹
⊢ b⁻ ≤ a⁻

tactic: rw [← pos_div_neg a, ← pos_div_neg b]
state_before: case mpr
α : Type u
inst✝² : Lattice α
inst✝¹ : CommGroup α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b : α
h : a⁺ ≤ b⁺ ∧ b⁻ ≤ a⁻
⊢ a ≤ b

tactic: exact div_le_div'' h.1 h.2
state_before: case mpr
α : Type u
inst✝² : Lattice α
inst✝¹ : CommGroup α
inst✝ : CovariantClass α α (fun x x_1 => x * x_1) fun x x_1 => x ≤ x_1
a b : α
h : a⁺ ≤ b⁺ ∧ b⁻ ≤ a⁻
⊢ a⁺ / a⁻ ≤ b⁺ / b⁻
Theorem: PNat.gcd_one
File: Mathlib/Data/PNat/Prime.lean

tactic: rw [gcd_comm]
state_before: n : ℕ+
⊢ gcd n 1 = 1

tactic: apply one_gcd
state_before: n : ℕ+
⊢ gcd 1 n = 1
Theorem: List.leftpad_suffix
File: Std/Data/List/Lemmas.lean

tactic: simp only [isSuffix, leftpad]
state_before: α : Type u_1
n : Nat
a : α
l : List α
⊢ l <:+ leftpad n a l

tactic: exact Exists.intro (replicate (n - length l) a) rfl
state_before: α : Type u_1
n : Nat
a : α
l : List α
⊢ ∃ t, t ++ l = replicate (n - length l) a ++ l
Theorem: Nat.mod_two_ne_zero
File: Mathlib/Data/Nat/Parity.lean

tactic: cases' mod_two_eq_zero_or_one n with h h <;> simp [h]
state_before: m n : ℕ
⊢ ¬n % 2 = 0 ↔ n % 2 = 1
Theorem: AffineSubspace.coe_direction_eq_vsub_set_left
File: Mathlib/LinearAlgebra/AffineSpace/AffineSubspace.lean

tactic: ext v
state_before: k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : AffineSubspace k P
p : P
hp : p ∈ s
⊢ ↑(direction s) = (fun x x_1 => x -ᵥ x_1) p '' ↑s

tactic: rw [SetLike.mem_coe, ← Submodule.neg_mem_iff, ← SetLike.mem_coe,
  coe_direction_eq_vsub_set_right hp, Set.mem_image_iff_bex, Set.mem_image_iff_bex]
state_before: case h
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : AffineSubspace k P
p : P
hp : p ∈ s
v : V
⊢ v ∈ ↑(direction s) ↔ v ∈ (fun x x_1 => x -ᵥ x_1) p '' ↑s

tactic: conv_lhs =>
  congr
  ext
  rw [← neg_vsub_eq_vsub_rev, neg_inj]
state_before: case h
k : Type u_1
V : Type u_2
P : Type u_3
inst✝³ : Ring k
inst✝² : AddCommGroup V
inst✝¹ : Module k V
inst✝ : AffineSpace V P
s : AffineSubspace k P
p : P
hp : p ∈ s
v : V
⊢ (∃ x x_1, x -ᵥ p = -v) ↔ ∃ x x_1, (fun x x_2 => x -ᵥ x_2) p x = v
Theorem: List.nodup_iff_sublist
File: Mathlib/Data/List/Nodup.lean

tactic: induction' l with a l IH <;> intro h
state_before: α : Type u
β : Type v
l✝ l₁ l₂ : List α
r : α → α → Prop
a b : α
l : List α
⊢ (∀ (a : α), ¬[a, a] <+ l) → Nodup l

tactic: exact (IH fun a s => h a <| sublist_cons_of_sublist _ s).cons fun al =>
  h a <| (singleton_sublist.2 al).cons_cons _
state_before: case cons
α : Type u
β : Type v
l✝ l₁ l₂ : List α
r : α → α → Prop
a✝ b a : α
l : List α
IH : (∀ (a : α), ¬[a, a] <+ l) → Nodup l
h : ∀ (a_1 : α), ¬[a_1, a_1] <+ a :: l
⊢ Nodup (a :: l)

tactic: exact nodup_nil
state_before: case nil
α : Type u
β : Type v
l l₁ l₂ : List α
r : α → α → Prop
a b : α
h : ∀ (a : α), ¬[a, a] <+ []
⊢ Nodup []
Theorem: Associates.factors_eq_some_iff_ne_zero
File: Mathlib/RingTheory/UniqueFactorizationDomain.lean

tactic: rw [← Option.isSome_iff_exists, ← Option.ne_none_iff_isSome, Ne.def, Ne.def,
  factors_eq_none_iff_zero]
state_before: α : Type u_1
inst✝¹ : CancelCommMonoidWithZero α
dec_irr : (p : Associates α) → Decidable (Irreducible p)
inst✝ : UniqueFactorizationMonoid α
dec : DecidableEq α
dec' : DecidableEq (Associates α)
a : Associates α
⊢ (∃ s, factors a = some s) ↔ a ≠ 0
Theorem: Finsupp.support_update
File: Mathlib/Data/Finsupp/Defs.lean

tactic: classical
dsimp [update]; congr <;> apply Subsingleton.elim
state_before: α : Type u_1
β : Type ?u.150191
γ : Type ?u.150194
ι : Type ?u.150197
M : Type u_2
M' : Type ?u.150203
N : Type ?u.150206
P : Type ?u.150209
G : Type ?u.150212
H : Type ?u.150215
R : Type ?u.150218
S : Type ?u.150221
inst✝² : Zero M
f : α →₀ M
a : α
b : M
i : α
inst✝¹ : DecidableEq α
inst✝ : DecidableEq M
⊢ (update f a b).support = if b = 0 then erase f.support a else insert a f.support

tactic: dsimp [update]
state_before: α : Type u_1
β : Type ?u.150191
γ : Type ?u.150194
ι : Type ?u.150197
M : Type u_2
M' : Type ?u.150203
N : Type ?u.150206
P : Type ?u.150209
G : Type ?u.150212
H : Type ?u.150215
R : Type ?u.150218
S : Type ?u.150221
inst✝² : Zero M
f : α →₀ M
a : α
b : M
i : α
inst✝¹ : DecidableEq α
inst✝ : DecidableEq M
⊢ (update f a b).support = if b = 0 then erase f.support a else insert a f.support

tactic: congr <;> apply Subsingleton.elim
state_before: α : Type u_1
β : Type ?u.150191
γ : Type ?u.150194
ι : Type ?u.150197
M : Type u_2
M' : Type ?u.150203
N : Type ?u.150206
P : Type ?u.150209
G : Type ?u.150212
H : Type ?u.150215
R : Type ?u.150218
S : Type ?u.150221
inst✝² : Zero M
f : α →₀ M
a : α
b : M
i : α
inst✝¹ : DecidableEq α
inst✝ : DecidableEq M
⊢ (if b = 0 then erase f.support a else insert a f.support) = if b = 0 then erase f.support a else insert a f.support
Theorem: lt_inv_iff_mul_lt_one
File: Mathlib/Algebra/Order/Group/Defs.lean

tactic: rw [inv_mul_self]
state_before: α : Type u
inst✝² : Group α
inst✝¹ : LT α
inst✝ : CovariantClass α α (swap fun x x_1 => x * x_1) fun x x_1 => x < x_1
a b c : α
⊢ a * b < b⁻¹ * b ↔ a * b < 1
Theorem: FirstOrder.Language.Theory.CompleteType.formula_mem_typeOf
File: Mathlib/ModelTheory/Types.lean

tactic: simp
state_before: L : Language
T : Theory L
α : Type w
M : Type w'
inst✝² : Structure L M
inst✝¹ : Nonempty M
inst✝ : M ⊨ T
v : α → M
φ : Formula L α
⊢ ↑Formula.equivSentence φ ∈ typeOf T v ↔ Formula.Realize φ v
Theorem: Interval.length_sum_le
File: Mathlib/Algebra/Order/Interval.lean

tactic: apply Finset.le_sum_of_subadditive
state_before: ι : Type u_2
α : Type u_1
inst✝ : OrderedAddCommGroup α
s✝ t : Interval α
a : α
f : ι → Interval α
s : Finset ι
⊢ length (∑ i in s, f i) ≤ ∑ i in s, length (f i)

tactic: exact length_zero
state_before: case h_one
ι : Type u_2
α : Type u_1
inst✝ : OrderedAddCommGroup α
s✝ t : Interval α
a : α
f : ι → Interval α
s : Finset ι
⊢ length 0 = 0

case h_mul
ι : Type u_2
α : Type u_1
inst✝ : OrderedAddCommGroup α
s✝ t : Interval α
a : α
f : ι → Interval α
s : Finset ι
⊢ ∀ (x y : Interval α), length (x + y) ≤ length x + length y

tactic: exact length_add_le
state_before: case h_mul
ι : Type u_2
α : Type u_1
inst✝ : OrderedAddCommGroup α
s✝ t : Interval α
a : α
f : ι → Interval α
s : Finset ι
⊢ ∀ (x y : Interval α), length (x + y) ≤ length x + length y
Theorem: inf_sdiff_self_right
File: Mathlib/Order/BooleanAlgebra.lean

tactic: rw [sup_inf_sdiff]
state_before: α : Type u
β : Type ?u.7223
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ y \ x = (x ⊓ y ⊔ x \ y) ⊓ y \ x

tactic: rw [inf_sup_right]
state_before: α : Type u
β : Type ?u.7223
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ (x ⊓ y ⊔ x \ y) ⊓ y \ x = x ⊓ y ⊓ y \ x ⊔ x \ y ⊓ y \ x

tactic: rw [@inf_comm _ _ x y, inf_inf_sdiff, sdiff_inf_sdiff, bot_sup_eq]
state_before: α : Type u
β : Type ?u.7223
w x y z : α
inst✝ : GeneralizedBooleanAlgebra α
⊢ x ⊓ y ⊓ y \ x ⊔ x \ y ⊓ y \ x = ⊥
Theorem: Inducing.comp
File: Mathlib/Topology/Maps.lean

tactic: rw [hf.induced, hg.induced, induced_compose]
state_before: α : Type u_3
β : Type u_1
γ : Type u_2
δ : Type ?u.472
inst✝³ : TopologicalSpace α
inst✝² : TopologicalSpace β
inst✝¹ : TopologicalSpace γ
inst✝ : TopologicalSpace δ
g : β → γ
f : α → β
hg : Inducing g
hf : Inducing f
⊢ inst✝³ = TopologicalSpace.induced (g ∘ f) inst✝¹
Theorem: BddAbove.union
File: Mathlib/Order/Bounds/Basic.lean

tactic: rintro ⟨bs, hs⟩ ⟨bt, ht⟩
state_before: α : Type u
β : Type v
γ : Type w
ι : Sort x
inst✝² : Preorder α
inst✝¹ : Preorder β
s✝ t✝ : Set α
a b : α
inst✝ : SemilatticeSup γ
s t : Set γ
⊢ BddAbove s → BddAbove t → BddAbove (s ∪ t)

tactic: use bs ⊔ bt
state_before: case intro.intro
α : Type u
β : Type v
γ : Type w
ι : Sort x
inst✝² : Preorder α
inst✝¹ : Preorder β
s✝ t✝ : Set α
a b : α
inst✝ : SemilatticeSup γ
s t : Set γ
bs : γ
hs : bs ∈ upperBounds s
bt : γ
ht : bt ∈ upperBounds t
⊢ BddAbove (s ∪ t)

tactic: rw [upperBounds_union]
state_before: case intro.intro
α : Type u
β : Type v
γ : Type w
ι : Sort x
inst✝² : Preorder α
inst✝¹ : Preorder β
s✝ t✝ : Set α
a b : α
inst✝ : SemilatticeSup γ
s t : Set γ
bs : γ
hs : bs ∈ upperBounds s
bt : γ
ht : bt ∈ upperBounds t
⊢ bs ⊔ bt ∈ upperBounds (s ∪ t)

tactic: exact ⟨upperBounds_mono_mem le_sup_left hs, upperBounds_mono_mem le_sup_right ht⟩
state_before: case intro.intro
α : Type u
β : Type v
γ : Type w
ι : Sort x
inst✝² : Preorder α
inst✝¹ : Preorder β
s✝ t✝ : Set α
a b : α
inst✝ : SemilatticeSup γ
s t : Set γ
bs : γ
hs : bs ∈ upperBounds s
bt : γ
ht : bt ∈ upperBounds t
⊢ bs ⊔ bt ∈ upperBounds s ∩ upperBounds t
Theorem: Nat.Ico_succ_left
File: Mathlib/Data/Nat/Interval.lean

tactic: ext x
state_before: a b c : ℕ
⊢ Ico (succ a) b = Ioo a b

tactic: rw [mem_Ico, mem_Ioo, succ_le_iff]
state_before: case a
a b c x : ℕ
⊢ x ∈ Ico (succ a) b ↔ x ∈ Ioo a b
Theorem: Finsupp.support_sum
File: Mathlib/Algebra/BigOperators/Finsupp.lean

tactic: have : ∀ c, (f.sum fun a b => g a b c) ≠ 0 → ∃ a, f a ≠ 0 ∧ ¬(g a (f a)) c = 0 := fun a₁ h =>
  let ⟨a, ha, ne⟩ := Finset.exists_ne_zero_of_sum_ne_zero h
  ⟨a, mem_support_iff.mp ha, ne⟩
state_before: α : Type u_4
ι : Type ?u.303409
γ : Type ?u.303412
A : Type ?u.303415
B : Type ?u.303418
C : Type ?u.303421
inst✝⁵ : AddCommMonoid A
inst✝⁴ : AddCommMonoid B
inst✝³ : AddCommMonoid C
t : ι → A → C
h0 : ∀ (i : ι), t i 0 = 0
h1 : ∀ (i : ι) (x y : A), t i (x + y) = t i x + t i y
s : Finset α
f✝ : α → ι →₀ A
i : ι
g✝ : ι →₀ A
k : ι → A → γ → B
x : γ
β : Type u_1
M : Type u_2
M' : Type ?u.306557
N : Type u_3
P : Type ?u.306563
G : Type ?u.306566
H : Type ?u.306569
R : Type ?u.306572
S : Type ?u.306575
inst✝² : DecidableEq β
inst✝¹ : Zero M
inst✝ : AddCommMonoid N
f : α →₀ M
g : α → M → β →₀ N
⊢ (sum f g).support ⊆ Finset.biUnion f.support fun a => (g a (↑f a)).support

tactic: simpa only [Finset.subset_iff, mem_support_iff, Finset.mem_biUnion, sum_apply, exists_prop]
state_before: α : Type u_4
ι : Type ?u.303409
γ : Type ?u.303412
A : Type ?u.303415
B : Type ?u.303418
C : Type ?u.303421
inst✝⁵ : AddCommMonoid A
inst✝⁴ : AddCommMonoid B
inst✝³ : AddCommMonoid C
t : ι → A → C
h0 : ∀ (i : ι), t i 0 = 0
h1 : ∀ (i : ι) (x y : A), t i (x + y) = t i x + t i y
s : Finset α
f✝ : α → ι →₀ A
i : ι
g✝ : ι →₀ A
k : ι → A → γ → B
x : γ
β : Type u_1
M : Type u_2
M' : Type ?u.306557
N : Type u_3
P : Type ?u.306563
G : Type ?u.306566
H : Type ?u.306569
R : Type ?u.306572
S : Type ?u.306575
inst✝² : DecidableEq β
inst✝¹ : Zero M
inst✝ : AddCommMonoid N
f : α →₀ M
g : α → M → β →₀ N
this : ∀ (c : β), (sum f fun a b => ↑(g a b) c) ≠ 0 → ∃ a, ↑f a ≠ 0 ∧ ¬↑(g a (↑f a)) c = 0
⊢ (sum f g).support ⊆ Finset.biUnion f.support fun a => (g a (↑f a)).support
Theorem: TensorProduct.uncurry_apply
File: Mathlib/LinearAlgebra/TensorProduct.lean

tactic: rw [uncurry, LinearMap.flip_apply, lift.tmul]
state_before: R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type ?u.650481
inst✝¹³ : Monoid R'
R'' : Type ?u.650487
inst✝¹² : Semiring R''
M : Type u_2
N : Type u_4
P : Type u_3
Q : Type ?u.650502
S : Type ?u.650505
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f✝ f : M →ₗ[R] N →ₗ[R] P
m : M
n : N
⊢ ↑(↑(uncurry R M N P) f) (m ⊗ₜ[R] n) = ↑(↑f m) n

tactic: rfl
state_before: R : Type u_1
inst✝¹⁴ : CommSemiring R
R' : Type ?u.650481
inst✝¹³ : Monoid R'
R'' : Type ?u.650487
inst✝¹² : Semiring R''
M : Type u_2
N : Type u_4
P : Type u_3
Q : Type ?u.650502
S : Type ?u.650505
inst✝¹¹ : AddCommMonoid M
inst✝¹⁰ : AddCommMonoid N
inst✝⁹ : AddCommMonoid P
inst✝⁸ : AddCommMonoid Q
inst✝⁷ : AddCommMonoid S
inst✝⁶ : Module R M
inst✝⁵ : Module R N
inst✝⁴ : Module R P
inst✝³ : Module R Q
inst✝² : Module R S
inst✝¹ : DistribMulAction R' M
inst✝ : Module R'' M
f✝ f : M →ₗ[R] N →ₗ[R] P
m : M
n : N
⊢ ↑(↑(↑(LinearMap.comp LinearMap.lflip (LinearMap.flip LinearMap.id)) m) n) f = ↑(↑f m) n
Theorem: Pmf.toOuterMeasure_apply_finset
File: Mathlib/Probability/ProbabilityMassFunction/Basic.lean

tactic: refine' (toOuterMeasure_apply p s).trans ((tsum_eq_sum (s := s) _).trans _)
state_before: α : Type u_1
β : Type ?u.23008
γ : Type ?u.23011
p : Pmf α
s✝ t : Set α
s : Finset α
⊢ ↑(toOuterMeasure p) ↑s = ∑ x in s, ↑p x

tactic: exact fun x hx => Set.indicator_of_not_mem (Finset.mem_coe.not.2 hx) _
state_before: case refine'_1
α : Type u_1
β : Type ?u.23008
γ : Type ?u.23011
p : Pmf α
s✝ t : Set α
s : Finset α
⊢ ∀ (b : α), ¬b ∈ s → Set.indicator (↑s) (↑p) b = 0

tactic: exact Finset.sum_congr rfl fun x hx => Set.indicator_of_mem (Finset.mem_coe.2 hx) _
state_before: case refine'_2
α : Type u_1
β : Type ?u.23008
γ : Type ?u.23011
p : Pmf α
s✝ t : Set α
s : Finset α
⊢ ∑ b in s, Set.indicator (↑s) (↑p) b = ∑ x in s, ↑p x
Theorem: Finset.sdiff_erase_self
File: Mathlib/Data/Finset/Basic.lean

tactic: rw [sdiff_erase ha, sdiff_self, insert_emptyc_eq]
state_before: α : Type u_1
β : Type ?u.270410
γ : Type ?u.270413
inst✝ : DecidableEq α
s t u v : Finset α
a b : α
ha : a ∈ s
⊢ s \ erase s a = {a}
Theorem: Gamma1_is_congruence
File: Mathlib/NumberTheory/ModularForms/CongruenceSubgroups.lean

tactic: refine' ⟨N, _⟩
state_before: N✝ : ℕ
N : ℕ+
⊢ IsCongruenceSubgroup (Gamma1 ↑N)

tactic: intro A hA
state_before: N✝ : ℕ
N : ℕ+
⊢ Gamma ↑N ≤ Gamma1 ↑N

tactic: simp only [Gamma1_mem, Gamma_mem] at *
state_before: N✝ : ℕ
N : ℕ+
A : SL(2, ℤ)
hA : A ∈ Gamma ↑N
⊢ A ∈ Gamma1 ↑N

tactic: simp only [hA, eq_self_iff_true, and_self_iff]
state_before: N✝ : ℕ
N : ℕ+
A : SL(2, ℤ)
hA : ↑(↑A 0 0) = 1 ∧ ↑(↑A 0 1) = 0 ∧ ↑(↑A 1 0) = 0 ∧ ↑(↑A 1 1) = 1
⊢ ↑(↑A 0 0) = 1 ∧ ↑(↑A 1 1) = 1 ∧ ↑(↑A 1 0) = 0