1.3. Coercion
Every rational number can be regarded as a number in ℚ[i]
Rational number r is identified with the complex number ⟨r,0⟩
@[coe]
def ofRational (r: ℚ) : ℚ[i] := ⟨r,0⟩
instance : Coe ℚ ℚ[i] := ⟨ofRational⟩
#eval sample1 + (3 : ℚ)
def sample6 := complexQ.mk 5 0
--The complex number 5+0i is the same as rational number 5
example : sample6 = (5:ℚ) := ⊢ sample6 = ↑5 All goals completed! 🐙
@[simp, norm_cast]
lemma ofRational_re (r: ℚ) : (r:ℚ[i]).re = r := rfl
@[simp, norm_cast]
lemma ofRational_im (r: ℚ) : (r:ℚ[i]).im = 0 := rfl
@[simp, norm_cast]
lemma ofRational_inj {r s : ℚ} :
(r : ℚ[i]) = s ↔ r = s := r:ℚs:ℚ⊢ ↑r = ↑s ↔ r = s
r:ℚs:ℚ⊢ ↑r = ↑s → r = sr:ℚs:ℚ⊢ r = s → ↑r = ↑s
r:ℚs:ℚ⊢ ↑r = ↑s → r = s r:ℚs:ℚh:↑r = ↑s⊢ r = s
have h1: (ofRational r).re = (ofRational s).re := r:ℚs:ℚ⊢ ↑r = ↑s ↔ r = s
All goals completed! 🐙
r:ℚs:ℚh:↑r = ↑sh1:r = (↑s).re⊢ r = s
r:ℚs:ℚh:↑r = ↑sh1:r = s⊢ r = s
All goals completed! 🐙
r:ℚs:ℚ⊢ r = s → ↑r = ↑s r:ℚs:ℚh:r = s⊢ ↑r = ↑s
All goals completed! 🐙
@[simp]
lemma ofRational_def (r:ℚ) :
(complexQ.mk r 0) = (r:ℚ[i]) := r:ℚ⊢ { re := r, im := 0 } = ↑r
All goals completed! 🐙
@[simp]
lemma rational_eq_coe' (r:ℚ) : r = (r : ℚ[i]) := r:ℚ⊢ ↑r = ↑r All goals completed! 🐙
example (r s : ℚ) (h: (r:ℚ[i])=s) : r = s := r:ℚs:ℚh:↑r = ↑s⊢ r = s
All goals completed! 🐙
@[simp, norm_cast]
lemma ofRational_zero : ((0:ℚ) : ℚ[i]) = 0 := rfl
@[simp]
lemma ofRational_eq_zero {z:ℚ} : (z:ℚ[i]) = 0 ↔ z=0 :=
ofRational_inj
lemma ofRational_ne_zero {z:ℚ} : (z:ℚ[i])≠ 0 ↔ z≠0 :=
not_congr ofRational_eq_zero
@[simp]
lemma ofRational_eq_one {z:ℚ} : (z:ℚ[i]) = 1 ↔ z=1 :=
ofRational_inj
lemma ofRational_ne_one {z:ℚ} : (z:ℚ[i]) ≠ 1 ↔ z ≠ 1 :=
not_congr ofRational_eq_one
@[simp, norm_cast]
theorem ofRational_neg (r : ℚ) : ((-r : ℚ) : ℚ[i]) = -r
:= r:ℚ⊢ ↑(-r) = -↑r
r:ℚ⊢ (↑(-r)).re = (-↑r).re ∧ (↑(-r)).im = (-↑r).im
All goals completed! 🐙
lemma ofRational_add (r s : ℚ) : ( (r+s :ℚ) : ℚ[i]) = r+s
:= r:ℚs:ℚ⊢ ↑(r + s) = ↑r + ↑s
r:ℚs:ℚ⊢ (↑(r + s)).re = (↑r + ↑s).re ∧ (↑(r + s)).im = (↑r + ↑s).im
r:ℚs:ℚ⊢ (↑(r + s)).re = (↑r + ↑s).rer:ℚs:ℚ⊢ (↑(r + s)).im = (↑r + ↑s).im
r:ℚs:ℚ⊢ (↑(r + s)).re = (↑r + ↑s).re All goals completed! 🐙
r:ℚs:ℚ⊢ (↑(r + s)).im = (↑r + ↑s).im All goals completed! 🐙
@[simp, norm_cast]
theorem ofRational_mul (r s : ℚ) :
((r * s : ℚ) : ℚ[i]) = r * s := r:ℚs:ℚ⊢ ↑(r * s) = ↑r * ↑s
r:ℚs:ℚ⊢ (↑(r * s)).re = (↑r * ↑s).re ∧ (↑(r * s)).im = (↑r * ↑s).im
r:ℚs:ℚ⊢ (↑(r * s)).re = (↑r * ↑s).rer:ℚs:ℚ⊢ (↑(r * s)).im = (↑r * ↑s).im
repeat r:ℚs:ℚ⊢ 0 = r * 0 + 0 * s r:ℚs:ℚ⊢ 0 = r * 0 + 0 * s
All goals completed! 🐙
theorem re_ofRational_mul (r : ℚ) (z : ℚ[i])
: (r * z).re = r * z.re := r:ℚz:ℚ[i]⊢ (↑r * z).re = r * z.re
r:ℚz:ℚ[i]⊢ r * z.re - 0 * z.im = r * z.re
All goals completed! 🐙
theorem im_ofRational_mul (r : ℚ) (z : ℚ[i])
: (r * z).im = r * z.im := r:ℚz:ℚ[i]⊢ (↑r * z).im = r * z.im
r:ℚz:ℚ[i]⊢ r * z.im + 0 * z.re = r * z.im
All goals completed! 🐙
lemma re_mul_ofRational (z : ℚ[i]) (r : ℚ)
: (z * r).re = z.re * r := z:ℚ[i]r:ℚ⊢ (z * ↑r).re = z.re * r
z:ℚ[i]r:ℚ⊢ z.re * r - z.im * 0 = z.re * r; All goals completed! 🐙
lemma im_mul_ofRational (z : ℚ[i]) (r : ℚ)
: (z * r).im = z.im * r := z:ℚ[i]r:ℚ⊢ (z * ↑r).im = z.im * r
z:ℚ[i]r:ℚ⊢ z.re * 0 + z.im * r = z.im * r; All goals completed! 🐙
@[simp]
theorem ofRational_mul' (r : ℚ) (z : ℚ[i])
: ↑r * z = ⟨r * z.re, r * z.im⟩ :=
ext (re_ofRational_mul _ _) (im_ofRational_mul _ _)
theorem mk_eq_add_mul_I (a b : ℚ)
: (complexQ.mk a b) = a + b * I :=
ext_iff.2 <| a:ℚb:ℚ⊢ { re := a, im := b }.re = (↑a + ↑b * I).re ∧ { re := a, im := b }.im = (↑a + ↑b * I).im a:ℚb:ℚ⊢ a = a + (b * 0 - 0 * 1) ∧ b = 0 + (b * 1 + 0 * 0) ; All goals completed! 🐙
@[simp]
theorem re_add_im (z : ℚ[i])
: (z.re : ℚ[i]) + z.im * I = z :=
ext_iff.2 <| z:ℚ[i]⊢ (↑z.re + ↑z.im * I).re = z.re ∧ (↑z.re + ↑z.im * I).im = z.im
z:ℚ[i]⊢ z.re + (z.im * 0 - 0 * 1) = z.re ∧ 0 + (z.im * 1 + 0 * 0) = z.im;
All goals completed! 🐙
theorem mul_I_re (z : ℚ[i])
: (z * I).re = -z.im := z:ℚ[i]⊢ (z * I).re = -z.im All goals completed! 🐙
theorem mul_I_im (z : ℚ[i])
: (z * I).im = z.re := z:ℚ[i]⊢ (z * I).im = z.re All goals completed! 🐙
theorem I_mul_re (z : ℚ[i])
: (I * z).re = -z.im := z:ℚ[i]⊢ (I * z).re = -z.im All goals completed! 🐙
theorem I_mul_im (z : ℚ[i])
: (I * z).im = z.re := z:ℚ[i]⊢ (I * z).im = z.re All goals completed! 🐙
-- Prove that 0 ≠ 1 in ℚ[i]
instance : Nontrivial ℚ[i] := ⊢ Nontrivial ℚ[i]
⊢ 0 ≠ 1
⊢ 0 ≠ 1
All goals completed! 🐙