Theorem: ModularForm.slash_mul
File: Mathlib/NumberTheory/ModularForms/SlashActions.lean

tactic: ext1 x
state_before: Γ : Subgroup SL(2, ℤ)
k✝ : ℤ
f✝ : ℍ → ℂ
k : ℤ
A B : ↥GL(2, ℝ)⁺
f : ℍ → ℂ
⊢ f ∣[k](A * B) = (f ∣[k]A) ∣[k]B
state_after: case h
Γ : Subgroup SL(2, ℤ)
k✝ : ℤ
f✝ : ℍ → ℂ
k : ℤ
A B : ↥GL(2, ℝ)⁺
f : ℍ → ℂ
x : ℍ
⊢ (f ∣[k](A * B)) x = ((f ∣[k]A) ∣[k]B) x

tactic: simp_rw [slash, UpperHalfPlane.denom_cocycle A B x]
state_before: case h
Γ : Subgroup SL(2, ℤ)
k✝ : ℤ
f✝ : ℍ → ℂ
k : ℤ
A B : ↥GL(2, ℝ)⁺
f : ℍ → ℂ
x : ℍ
⊢ (f ∣[k](A * B)) x = ((f ∣[k]A) ∣[k]B) x
state_after: case h
Γ : Subgroup SL(2, ℤ)
k✝ : ℤ
f✝ : ℍ → ℂ
k : ℤ
A B : ↥GL(2, ℝ)⁺
f : ℍ → ℂ
x : ℍ
⊢ f ((A * B) • x) * ↑(↑↑(A * B)).det ^ (k - 1) * (denom A (smulAux B x) * denom B x) ^ (-k) =
    f (A • B • x) * ↑(↑↑A).det ^ (k - 1) * denom A (B • x) ^ (-k) * ↑(↑↑B).det ^ (k - 1) * denom B x ^ (-k)

tactic: have e3 : (A * B) • x = A • B • x := by convert UpperHalfPlane.mul_smul' A B x
state_before: case h
Γ : Subgroup SL(2, ℤ)
k✝ : ℤ
f✝ : ℍ → ℂ
k : ℤ
A B : ↥GL(2, ℝ)⁺
f : ℍ → ℂ
x : ℍ
⊢ f ((A * B) • x) * ↑(↑↑(A * B)).det ^ (k - 1) * (denom A (smulAux B x) * denom B x) ^ (-k) =
    f (A • B • x) * ↑(↑↑A).det ^ (k - 1) * denom A (B • x) ^ (-k) * ↑(↑↑B).det ^ (k - 1) * denom B x ^ (-k)
state_after: case h
Γ : Subgroup SL(2, ℤ)
k✝ : ℤ
f✝ : ℍ → ℂ
k : ℤ
A B : ↥GL(2, ℝ)⁺
f : ℍ → ℂ
x : ℍ
e3 : (A * B) • x = A • B • x
⊢ f ((A * B) • x) * ↑(↑↑(A * B)).det ^ (k - 1) * (denom A (smulAux B x) * denom B x) ^ (-k) =
    f (A • B • x) * ↑(↑↑A).det ^ (k - 1) * denom A (B • x) ^ (-k) * ↑(↑↑B).det ^ (k - 1) * denom B x ^ (-k)

tactic: rw [e3]
state_before: case h
Γ : Subgroup SL(2, ℤ)
k✝ : ℤ
f✝ : ℍ → ℂ
k : ℤ
A B : ↥GL(2, ℝ)⁺
f : ℍ → ℂ
x : ℍ
e3 : (A * B) • x = A • B • x
⊢ f ((A * B) • x) * ↑(↑↑(A * B)).det ^ (k - 1) * (denom A (smulAux B x) * denom B x) ^ (-k) =
    f (A • B • x) * ↑(↑↑A).det ^ (k - 1) * denom A (B • x) ^ (-k) * ↑(↑↑B).det ^ (k - 1) * denom B x ^ (-k)
state_after: case h
Γ : Subgroup SL(2, ℤ)
k✝ : ℤ
f✝ : ℍ → ℂ
k : ℤ
A B : ↥GL(2, ℝ)⁺
f : ℍ → ℂ
x : ℍ
e3 : (A * B) • x = A • B • x
⊢ f (A • B • x) * ↑(↑↑(A * B)).det ^ (k - 1) * (denom A (smulAux B x) * denom B x) ^ (-k) =
    f (A • B • x) * ↑(↑↑A).det ^ (k - 1) * denom A (B • x) ^ (-k) * ↑(↑↑B).det ^ (k - 1) * denom B x ^ (-k)

tactic: simp only [UpperHalfPlane.num, UpperHalfPlane.denom, ofReal_mul, Subgroup.coe_mul,
  UpperHalfPlane.coe_smul, Units.val_mul, Matrix.det_mul,
  UpperHalfPlane.smulAux, UpperHalfPlane.smulAux', UpperHalfPlane.coe_mk] at *
state_before: case h
Γ : Subgroup SL(2, ℤ)
k✝ : ℤ
f✝ : ℍ → ℂ
k : ℤ
A B : ↥GL(2, ℝ)⁺
f : ℍ → ℂ
x : ℍ
e3 : (A * B) • x = A • B • x
⊢ f (A • B • x) * ↑(↑↑(A * B)).det ^ (k - 1) * (denom A (smulAux B x) * denom B x) ^ (-k) =
    f (A • B • x) * ↑(↑↑A).det ^ (k - 1) * denom A (B • x) ^ (-k) * ↑(↑↑B).det ^ (k - 1) * denom B x ^ (-k)
state_after: case h
Γ : Subgroup SL(2, ℤ)
k✝ : ℤ
f✝ : ℍ → ℂ
k : ℤ
A B : ↥GL(2, ℝ)⁺
f : ℍ → ℂ
x : ℍ
e3 : (A * B) • x = A • B • x
⊢ f (A • B • x) * (↑(↑↑A).det * ↑(↑↑B).det) ^ (k - 1) *
      ((↑(↑↑A 1 0) * ((↑(↑↑B 0 0) * ↑x + ↑(↑↑B 0 1)) / (↑(↑↑B 1 0) * ↑x + ↑(↑↑B 1 1))) + ↑(↑↑A 1 1)) *
          (↑(↑↑B 1 0) * ↑x + ↑(↑↑B 1 1))) ^
        (-k) =
    f (A • B • x) * ↑(↑↑A).det ^ (k - 1) *
          (↑(↑↑A 1 0) * ((↑(↑↑B 0 0) * ↑x + ↑(↑↑B 0 1)) / (↑(↑↑B 1 0) * ↑x + ↑(↑↑B 1 1))) + ↑(↑↑A 1 1)) ^ (-k) *
        ↑(↑↑B).det ^ (k - 1) *
      (↑(↑↑B 1 0) * ↑x + ↑(↑↑B 1 1)) ^ (-k)

tactic: field_simp
state_before: case h
Γ : Subgroup SL(2, ℤ)
k✝ : ℤ
f✝ : ℍ → ℂ
k : ℤ
A B : ↥GL(2, ℝ)⁺
f : ℍ → ℂ
x : ℍ
e3 : (A * B) • x = A • B • x
⊢ f (A • B • x) * (↑(↑↑A).det * ↑(↑↑B).det) ^ (k - 1) *
      ((↑(↑↑A 1 0) * ((↑(↑↑B 0 0) * ↑x + ↑(↑↑B 0 1)) / (↑(↑↑B 1 0) * ↑x + ↑(↑↑B 1 1))) + ↑(↑↑A 1 1)) *
          (↑(↑↑B 1 0) * ↑x + ↑(↑↑B 1 1))) ^
        (-k) =
    f (A • B • x) * ↑(↑↑A).det ^ (k - 1) *
          (↑(↑↑A 1 0) * ((↑(↑↑B 0 0) * ↑x + ↑(↑↑B 0 1)) / (↑(↑↑B 1 0) * ↑x + ↑(↑↑B 1 1))) + ↑(↑↑A 1 1)) ^ (-k) *
        ↑(↑↑B).det ^ (k - 1) *
      (↑(↑↑B 1 0) * ↑x + ↑(↑↑B 1 1)) ^ (-k)
state_after: case h
Γ : Subgroup SL(2, ℤ)
k✝ : ℤ
f✝ : ℍ → ℂ
k : ℤ
A B : ↥GL(2, ℝ)⁺
f : ℍ → ℂ
x : ℍ
e3 : (A * B) • x = A • B • x
⊢ f (A • B • x) * (↑(↑↑A).det * ↑(↑↑B).det) ^ (k - 1) /
      ((↑(↑↑A 1 0) * (↑(↑↑B 0 0) * ↑x + ↑(↑↑B 0 1)) / (↑(↑↑B 1 0) * ↑x + ↑(↑↑B 1 1)) + ↑(↑↑A 1 1)) *
          (↑(↑↑B 1 0) * ↑x + ↑(↑↑B 1 1))) ^
        k =
    f (A • B • x) * ↑(↑↑A).det ^ (k - 1) * ↑(↑↑B).det ^ (k - 1) /
      ((↑(↑↑A 1 0) * (↑(↑↑B 0 0) * ↑x + ↑(↑↑B 0 1)) / (↑(↑↑B 1 0) * ↑x + ↑(↑↑B 1 1)) + ↑(↑↑A 1 1)) ^ k *
        (↑(↑↑B 1 0) * ↑x + ↑(↑↑B 1 1)) ^ k)

tactic: have : (((↑(↑A : GL (Fin 2) ℝ) : Matrix (Fin 2) (Fin 2) ℝ).det : ℂ) *
    ((↑(↑B : GL (Fin 2) ℝ) : Matrix (Fin 2) (Fin 2) ℝ).det : ℂ)) ^ (k - 1) =
    ((↑(↑A : GL (Fin 2) ℝ) : Matrix (Fin 2) (Fin 2) ℝ).det : ℂ) ^ (k - 1) *
      ((↑(↑B : GL (Fin 2) ℝ) : Matrix (Fin 2) (Fin 2) ℝ).det : ℂ) ^ (k - 1) := by
  rw [← mul_zpow]
state_before: case h
Γ : Subgroup SL(2, ℤ)
k✝ : ℤ
f✝ : ℍ → ℂ
k : ℤ
A B : ↥GL(2, ℝ)⁺
f : ℍ → ℂ
x : ℍ
e3 : (A * B) • x = A • B • x
⊢ f (A • B • x) * (↑(↑↑A).det * ↑(↑↑B).det) ^ (k - 1) /
      ((↑(↑↑A 1 0) * (↑(↑↑B 0 0) * ↑x + ↑(↑↑B 0 1)) / (↑(↑↑B 1 0) * ↑x + ↑(↑↑B 1 1)) + ↑(↑↑A 1 1)) *
          (↑(↑↑B 1 0) * ↑x + ↑(↑↑B 1 1))) ^
        k =
    f (A • B • x) * ↑(↑↑A).det ^ (k - 1) * ↑(↑↑B).det ^ (k - 1) /
      ((↑(↑↑A 1 0) * (↑(↑↑B 0 0) * ↑x + ↑(↑↑B 0 1)) / (↑(↑↑B 1 0) * ↑x + ↑(↑↑B 1 1)) + ↑(↑↑A 1 1)) ^ k *
        (↑(↑↑B 1 0) * ↑x + ↑(↑↑B 1 1)) ^ k)
state_after: case h
Γ : Subgroup SL(2, ℤ)
k✝ : ℤ
f✝ : ℍ → ℂ
k : ℤ
A B : ↥GL(2, ℝ)⁺
f : ℍ → ℂ
x : ℍ
e3 : (A * B) • x = A • B • x
this : (↑(↑↑A).det * ↑(↑↑B).det) ^ (k - 1) = ↑(↑↑A).det ^ (k - 1) * ↑(↑↑B).det ^ (k - 1)
⊢ f (A • B • x) * (↑(↑↑A).det * ↑(↑↑B).det) ^ (k - 1) /
      ((↑(↑↑A 1 0) * (↑(↑↑B 0 0) * ↑x + ↑(↑↑B 0 1)) / (↑(↑↑B 1 0) * ↑x + ↑(↑↑B 1 1)) + ↑(↑↑A 1 1)) *
          (↑(↑↑B 1 0) * ↑x + ↑(↑↑B 1 1))) ^
        k =
    f (A • B • x) * ↑(↑↑A).det ^ (k - 1) * ↑(↑↑B).det ^ (k - 1) /
      ((↑(↑↑A 1 0) * (↑(↑↑B 0 0) * ↑x + ↑(↑↑B 0 1)) / (↑(↑↑B 1 0) * ↑x + ↑(↑↑B 1 1)) + ↑(↑↑A 1 1)) ^ k *
        (↑(↑↑B 1 0) * ↑x + ↑(↑↑B 1 1)) ^ k)

tactic: simp_rw [this, ← mul_assoc, ← mul_zpow]
state_before: case h
Γ : Subgroup SL(2, ℤ)
k✝ : ℤ
f✝ : ℍ → ℂ
k : ℤ
A B : ↥GL(2, ℝ)⁺
f : ℍ → ℂ
x : ℍ
e3 : (A * B) • x = A • B • x
this : (↑(↑↑A).det * ↑(↑↑B).det) ^ (k - 1) = ↑(↑↑A).det ^ (k - 1) * ↑(↑↑B).det ^ (k - 1)
⊢ f (A • B • x) * (↑(↑↑A).det * ↑(↑↑B).det) ^ (k - 1) /
      ((↑(↑↑A 1 0) * (↑(↑↑B 0 0) * ↑x + ↑(↑↑B 0 1)) / (↑(↑↑B 1 0) * ↑x + ↑(↑↑B 1 1)) + ↑(↑↑A 1 1)) *
          (↑(↑↑B 1 0) * ↑x + ↑(↑↑B 1 1))) ^
        k =
    f (A • B • x) * ↑(↑↑A).det ^ (k - 1) * ↑(↑↑B).det ^ (k - 1) /
      ((↑(↑↑A 1 0) * (↑(↑↑B 0 0) * ↑x + ↑(↑↑B 0 1)) / (↑(↑↑B 1 0) * ↑x + ↑(↑↑B 1 1)) + ↑(↑↑A 1 1)) ^ k *
        (↑(↑↑B 1 0) * ↑x + ↑(↑↑B 1 1)) ^ k)
state_after: no goals

tactic: convert UpperHalfPlane.mul_smul' A B x
state_before: Γ : Subgroup SL(2, ℤ)
k✝ : ℤ
f✝ : ℍ → ℂ
k : ℤ
A B : ↥GL(2, ℝ)⁺
f : ℍ → ℂ
x : ℍ
⊢ (A * B) • x = A • B • x
state_after: no goals

tactic: rw [← mul_zpow]
state_before: Γ : Subgroup SL(2, ℤ)
k✝ : ℤ
f✝ : ℍ → ℂ
k : ℤ
A B : ↥GL(2, ℝ)⁺
f : ℍ → ℂ
x : ℍ
e3 : (A * B) • x = A • B • x
⊢ (↑(↑↑A).det * ↑(↑↑B).det) ^ (k - 1) = ↑(↑↑A).det ^ (k - 1) * ↑(↑↑B).det ^ (k - 1)
state_after: no goals