Theorem: Zsqrtd.nonneg_mul
File: Mathlib/NumberTheory/Zsqrtd/Basic.lean

tactic: rw [mul_comm]
state_before: d : ℕ
a b : ℤ√↑d
ha✝ : Nonneg a
hb : Nonneg b
x y z w : ℕ
ha : Nonneg { re := -↑x, im := ↑y }
x✝ : Nonneg { re := ↑z, im := ↑w }
⊢ Nonneg ({ re := -↑x, im := ↑y } * { re := ↑z, im := ↑w })

tactic: exact nonneg_mul_lem ha
state_before: d : ℕ
a b : ℤ√↑d
ha✝ : Nonneg a
hb : Nonneg b
x y z w : ℕ
ha : Nonneg { re := -↑x, im := ↑y }
x✝ : Nonneg { re := ↑z, im := ↑w }
⊢ Nonneg ({ re := ↑z, im := ↑w } * { re := -↑x, im := ↑y })

tactic: rw [mul_comm]
state_before: d : ℕ
a b : ℤ√↑d
ha✝ : Nonneg a
hb : Nonneg b
x y z w : ℕ
ha : Nonneg { re := ↑x, im := -↑y }
x✝ : Nonneg { re := ↑z, im := ↑w }
⊢ Nonneg ({ re := ↑x, im := -↑y } * { re := ↑z, im := ↑w })

tactic: exact nonneg_mul_lem ha
state_before: d : ℕ
a b : ℤ√↑d
ha✝ : Nonneg a
hb : Nonneg b
x y z w : ℕ
ha : Nonneg { re := ↑x, im := -↑y }
x✝ : Nonneg { re := ↑z, im := ↑w }
⊢ Nonneg ({ re := ↑z, im := ↑w } * { re := ↑x, im := -↑y })

tactic: rw [calc
      (⟨-x, y⟩ * ⟨-z, w⟩ : ℤ√d) = ⟨_, _⟩ := rfl
      _ = ⟨x * z + d * y * w, -(x * w + y * z)⟩ := by simp [add_comm]
      ]
state_before: d : ℕ
a b : ℤ√↑d
ha✝ : Nonneg a
hb✝ : Nonneg b
x y z w : ℕ
ha : Nonneg { re := -↑x, im := ↑y }
hb : Nonneg { re := -↑z, im := ↑w }
⊢ Nonneg ({ re := -↑x, im := ↑y } * { re := -↑z, im := ↑w })

tactic: exact nonnegg_pos_neg.2 (sqLe_mul.left (nonnegg_neg_pos.1 ha) (nonnegg_neg_pos.1 hb))
state_before: d : ℕ
a b : ℤ√↑d
ha✝ : Nonneg a
hb✝ : Nonneg b
x y z w : ℕ
ha : Nonneg { re := -↑x, im := ↑y }
hb : Nonneg { re := -↑z, im := ↑w }
⊢ Nonneg { re := ↑x * ↑z + ↑d * ↑y * ↑w, im := -(↑x * ↑w + ↑y * ↑z) }

tactic: simp [add_comm]
state_before: d : ℕ
a b : ℤ√↑d
ha✝ : Nonneg a
hb✝ : Nonneg b
x y z w : ℕ
ha : Nonneg { re := -↑x, im := ↑y }
hb : Nonneg { re := -↑z, im := ↑w }
⊢ {
      re :=
        { re := -↑x, im := ↑y }.re * { re := -↑z, im := ↑w }.re +
          ↑d * { re := -↑x, im := ↑y }.im * { re := -↑z, im := ↑w }.im,
      im :=
        { re := -↑x, im := ↑y }.re * { re := -↑z, im := ↑w }.im +
          { re := -↑x, im := ↑y }.im * { re := -↑z, im := ↑w }.re } =
    { re := ↑x * ↑z + ↑d * ↑y * ↑w, im := -(↑x * ↑w + ↑y * ↑z) }

tactic: rw [calc
      (⟨-x, y⟩ * ⟨z, -w⟩ : ℤ√d) = ⟨_, _⟩ := rfl
      _ = ⟨-(x * z + d * y * w), x * w + y * z⟩ := by simp [add_comm]
      ]
state_before: d : ℕ
a b : ℤ√↑d
ha✝ : Nonneg a
hb✝ : Nonneg b
x y z w : ℕ
ha : Nonneg { re := -↑x, im := ↑y }
hb : Nonneg { re := ↑z, im := -↑w }
⊢ Nonneg ({ re := -↑x, im := ↑y } * { re := ↑z, im := -↑w })

tactic: exact nonnegg_neg_pos.2 (sqLe_mul.right.left (nonnegg_neg_pos.1 ha) (nonnegg_pos_neg.1 hb))
state_before: d : ℕ
a b : ℤ√↑d
ha✝ : Nonneg a
hb✝ : Nonneg b
x y z w : ℕ
ha : Nonneg { re := -↑x, im := ↑y }
hb : Nonneg { re := ↑z, im := -↑w }
⊢ Nonneg { re := -(↑x * ↑z + ↑d * ↑y * ↑w), im := ↑x * ↑w + ↑y * ↑z }

tactic: simp [add_comm]
state_before: d : ℕ
a b : ℤ√↑d
ha✝ : Nonneg a
hb✝ : Nonneg b
x y z w : ℕ
ha : Nonneg { re := -↑x, im := ↑y }
hb : Nonneg { re := ↑z, im := -↑w }
⊢ {
      re :=
        { re := -↑x, im := ↑y }.re * { re := ↑z, im := -↑w }.re +
          ↑d * { re := -↑x, im := ↑y }.im * { re := ↑z, im := -↑w }.im,
      im :=
        { re := -↑x, im := ↑y }.re * { re := ↑z, im := -↑w }.im +
          { re := -↑x, im := ↑y }.im * { re := ↑z, im := -↑w }.re } =
    { re := -(↑x * ↑z + ↑d * ↑y * ↑w), im := ↑x * ↑w + ↑y * ↑z }

tactic: rw [calc
      (⟨x, -y⟩ * ⟨-z, w⟩ : ℤ√d) = ⟨_, _⟩ := rfl
      _ = ⟨-(x * z + d * y * w), x * w + y * z⟩ := by simp [add_comm]
      ]
state_before: d : ℕ
a b : ℤ√↑d
ha✝ : Nonneg a
hb✝ : Nonneg b
x y z w : ℕ
ha : Nonneg { re := ↑x, im := -↑y }
hb : Nonneg { re := -↑z, im := ↑w }
⊢ Nonneg ({ re := ↑x, im := -↑y } * { re := -↑z, im := ↑w })

tactic: exact
    nonnegg_neg_pos.2 (sqLe_mul.right.right.left (nonnegg_pos_neg.1 ha) (nonnegg_neg_pos.1 hb))
state_before: d : ℕ
a b : ℤ√↑d
ha✝ : Nonneg a
hb✝ : Nonneg b
x y z w : ℕ
ha : Nonneg { re := ↑x, im := -↑y }
hb : Nonneg { re := -↑z, im := ↑w }
⊢ Nonneg { re := -(↑x * ↑z + ↑d * ↑y * ↑w), im := ↑x * ↑w + ↑y * ↑z }

tactic: simp [add_comm]
state_before: d : ℕ
a b : ℤ√↑d
ha✝ : Nonneg a
hb✝ : Nonneg b
x y z w : ℕ
ha : Nonneg { re := ↑x, im := -↑y }
hb : Nonneg { re := -↑z, im := ↑w }
⊢ {
      re :=
        { re := ↑x, im := -↑y }.re * { re := -↑z, im := ↑w }.re +
          ↑d * { re := ↑x, im := -↑y }.im * { re := -↑z, im := ↑w }.im,
      im :=
        { re := ↑x, im := -↑y }.re * { re := -↑z, im := ↑w }.im +
          { re := ↑x, im := -↑y }.im * { re := -↑z, im := ↑w }.re } =
    { re := -(↑x * ↑z + ↑d * ↑y * ↑w), im := ↑x * ↑w + ↑y * ↑z }

tactic: rw [calc
      (⟨x, -y⟩ * ⟨z, -w⟩ : ℤ√d) = ⟨_, _⟩ := rfl
      _ = ⟨x * z + d * y * w, -(x * w + y * z)⟩ := by simp [add_comm]
      ]
state_before: d : ℕ
a b : ℤ√↑d
ha✝ : Nonneg a
hb✝ : Nonneg b
x y z w : ℕ
ha : Nonneg { re := ↑x, im := -↑y }
hb : Nonneg { re := ↑z, im := -↑w }
⊢ Nonneg ({ re := ↑x, im := -↑y } * { re := ↑z, im := -↑w })

tactic: exact
    nonnegg_pos_neg.2
      (sqLe_mul.right.right.right (nonnegg_pos_neg.1 ha) (nonnegg_pos_neg.1 hb))
state_before: d : ℕ
a b : ℤ√↑d
ha✝ : Nonneg a
hb✝ : Nonneg b
x y z w : ℕ
ha : Nonneg { re := ↑x, im := -↑y }
hb : Nonneg { re := ↑z, im := -↑w }
⊢ Nonneg { re := ↑x * ↑z + ↑d * ↑y * ↑w, im := -(↑x * ↑w + ↑y * ↑z) }

tactic: simp [add_comm]
state_before: d : ℕ
a b : ℤ√↑d
ha✝ : Nonneg a
hb✝ : Nonneg b
x y z w : ℕ
ha : Nonneg { re := ↑x, im := -↑y }
hb : Nonneg { re := ↑z, im := -↑w }
⊢ {
      re :=
        { re := ↑x, im := -↑y }.re * { re := ↑z, im := -↑w }.re +
          ↑d * { re := ↑x, im := -↑y }.im * { re := ↑z, im := -↑w }.im,
      im :=
        { re := ↑x, im := -↑y }.re * { re := ↑z, im := -↑w }.im +
          { re := ↑x, im := -↑y }.im * { re := ↑z, im := -↑w }.re } =
    { re := ↑x * ↑z + ↑d * ↑y * ↑w, im := -(↑x * ↑w + ↑y * ↑z) }