Theorem: Orientation.kahler_mul
File: Mathlib/Analysis/InnerProductSpace/TwoDim.lean

tactic: trans ((‖a‖ ^ 2 :) : ℂ) * o.kahler x y
state_before: E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
a x y : E
⊢ (o.kahler x) a * (o.kahler a) y = ↑‖a‖ ^ 2 * (o.kahler x) y
state_after: E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
a x y : E
⊢ (o.kahler x) a * (o.kahler a) y = ↑(‖a‖ ^ 2) * (o.kahler x) y

E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
a x y : E
⊢ ↑(‖a‖ ^ 2) * (o.kahler x) y = ↑‖a‖ ^ 2 * (o.kahler x) y

tactic: apply Complex.ext
state_before: E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
a x y : E
⊢ (o.kahler x) a * (o.kahler a) y = ↑(‖a‖ ^ 2) * (o.kahler x) y
state_after: case a
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
a x y : E
⊢ ((o.kahler x) a * (o.kahler a) y).re = (↑(‖a‖ ^ 2) * (o.kahler x) y).re

case a
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
a x y : E
⊢ ((o.kahler x) a * (o.kahler a) y).im = (↑(‖a‖ ^ 2) * (o.kahler x) y).im

tactic: simp only [o.kahler_apply_apply, Complex.add_im, Complex.add_re, Complex.I_im, Complex.I_re,
  Complex.mul_im, Complex.mul_re, Complex.ofReal_im, Complex.ofReal_re, Complex.real_smul]
state_before: case a
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
a x y : E
⊢ ((o.kahler x) a * (o.kahler a) y).re = (↑(‖a‖ ^ 2) * (o.kahler x) y).re
state_after: case a
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
a x y : E
⊢ (⟪x, a⟫_ℝ + ((o.areaForm x) a * 0 - 0 * 1)) * (⟪a, y⟫_ℝ + ((o.areaForm a) y * 0 - 0 * 1)) -
      (0 + ((o.areaForm x) a * 1 + 0 * 0)) * (0 + ((o.areaForm a) y * 1 + 0 * 0)) =
    ‖a‖ ^ 2 * (⟪x, y⟫_ℝ + ((o.areaForm x) y * 0 - 0 * 1)) - 0 * (0 + ((o.areaForm x) y * 1 + 0 * 0))

tactic: rw [real_inner_comm a x, o.areaForm_swap x a]
state_before: case a
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
a x y : E
⊢ (⟪x, a⟫_ℝ + ((o.areaForm x) a * 0 - 0 * 1)) * (⟪a, y⟫_ℝ + ((o.areaForm a) y * 0 - 0 * 1)) -
      (0 + ((o.areaForm x) a * 1 + 0 * 0)) * (0 + ((o.areaForm a) y * 1 + 0 * 0)) =
    ‖a‖ ^ 2 * (⟪x, y⟫_ℝ + ((o.areaForm x) y * 0 - 0 * 1)) - 0 * (0 + ((o.areaForm x) y * 1 + 0 * 0))
state_after: case a
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
a x y : E
⊢ (⟪a, x⟫_ℝ + (-(o.areaForm a) x * 0 - 0 * 1)) * (⟪a, y⟫_ℝ + ((o.areaForm a) y * 0 - 0 * 1)) -
      (0 + (-(o.areaForm a) x * 1 + 0 * 0)) * (0 + ((o.areaForm a) y * 1 + 0 * 0)) =
    ‖a‖ ^ 2 * (⟪x, y⟫_ℝ + ((o.areaForm x) y * 0 - 0 * 1)) - 0 * (0 + ((o.areaForm x) y * 1 + 0 * 0))

tactic: linear_combination o.inner_mul_inner_add_areaForm_mul_areaForm a x y
state_before: case a
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
a x y : E
⊢ (⟪a, x⟫_ℝ + (-(o.areaForm a) x * 0 - 0 * 1)) * (⟪a, y⟫_ℝ + ((o.areaForm a) y * 0 - 0 * 1)) -
      (0 + (-(o.areaForm a) x * 1 + 0 * 0)) * (0 + ((o.areaForm a) y * 1 + 0 * 0)) =
    ‖a‖ ^ 2 * (⟪x, y⟫_ℝ + ((o.areaForm x) y * 0 - 0 * 1)) - 0 * (0 + ((o.areaForm x) y * 1 + 0 * 0))
state_after: no goals

tactic: simp only [o.kahler_apply_apply, Complex.add_im, Complex.add_re, Complex.I_im, Complex.I_re,
  Complex.mul_im, Complex.mul_re, Complex.ofReal_im, Complex.ofReal_re, Complex.real_smul]
state_before: case a
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
a x y : E
⊢ ((o.kahler x) a * (o.kahler a) y).im = (↑(‖a‖ ^ 2) * (o.kahler x) y).im
state_after: case a
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
a x y : E
⊢ (⟪x, a⟫_ℝ + ((o.areaForm x) a * 0 - 0 * 1)) * (0 + ((o.areaForm a) y * 1 + 0 * 0)) +
      (0 + ((o.areaForm x) a * 1 + 0 * 0)) * (⟪a, y⟫_ℝ + ((o.areaForm a) y * 0 - 0 * 1)) =
    ‖a‖ ^ 2 * (0 + ((o.areaForm x) y * 1 + 0 * 0)) + 0 * (⟪x, y⟫_ℝ + ((o.areaForm x) y * 0 - 0 * 1))

tactic: rw [real_inner_comm a x, o.areaForm_swap x a]
state_before: case a
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
a x y : E
⊢ (⟪x, a⟫_ℝ + ((o.areaForm x) a * 0 - 0 * 1)) * (0 + ((o.areaForm a) y * 1 + 0 * 0)) +
      (0 + ((o.areaForm x) a * 1 + 0 * 0)) * (⟪a, y⟫_ℝ + ((o.areaForm a) y * 0 - 0 * 1)) =
    ‖a‖ ^ 2 * (0 + ((o.areaForm x) y * 1 + 0 * 0)) + 0 * (⟪x, y⟫_ℝ + ((o.areaForm x) y * 0 - 0 * 1))
state_after: case a
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
a x y : E
⊢ (⟪a, x⟫_ℝ + (-(o.areaForm a) x * 0 - 0 * 1)) * (0 + ((o.areaForm a) y * 1 + 0 * 0)) +
      (0 + (-(o.areaForm a) x * 1 + 0 * 0)) * (⟪a, y⟫_ℝ + ((o.areaForm a) y * 0 - 0 * 1)) =
    ‖a‖ ^ 2 * (0 + ((o.areaForm x) y * 1 + 0 * 0)) + 0 * (⟪x, y⟫_ℝ + ((o.areaForm x) y * 0 - 0 * 1))

tactic: linear_combination o.inner_mul_areaForm_sub a x y
state_before: case a
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
a x y : E
⊢ (⟪a, x⟫_ℝ + (-(o.areaForm a) x * 0 - 0 * 1)) * (0 + ((o.areaForm a) y * 1 + 0 * 0)) +
      (0 + (-(o.areaForm a) x * 1 + 0 * 0)) * (⟪a, y⟫_ℝ + ((o.areaForm a) y * 0 - 0 * 1)) =
    ‖a‖ ^ 2 * (0 + ((o.areaForm x) y * 1 + 0 * 0)) + 0 * (⟪x, y⟫_ℝ + ((o.areaForm x) y * 0 - 0 * 1))
state_after: no goals

tactic: norm_cast
state_before: E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : InnerProductSpace ℝ E
inst✝ : Fact (finrank ℝ E = 2)
o : Orientation ℝ E (Fin 2)
a x y : E
⊢ ↑(‖a‖ ^ 2) * (o.kahler x) y = ↑‖a‖ ^ 2 * (o.kahler x) y
state_after: no goals