@@ -22,7 +22,7 @@ algebraic structures on `ℍ[R]`.
22
22
[ quaternion algebra ] (https://en.wikipedia.org/wiki/Quaternion_algebra) with coefficients `a`, `b`
23
23
* `quaternion R`, `ℍ[R]` : the space of quaternions, a.k.a. `quaternion_algebra R (-1) (-1)`;
24
24
* `quaternion.norm_sq` : square of the norm of a quaternion;
25
- * `quaternion.conj ` : conjugate of a quaternion;
25
+ * `quaternion.star_ring ` : provides the conjugate of a quaternion as `has_star.star` ;
26
26
27
27
We also define the following algebraic structures on `ℍ[R]`:
28
28
@@ -339,79 +339,48 @@ by rw [← coe_commutes, coe_mul_eq_smul]
339
339
lemma smul_coe : x • (y : ℍ[R, c₁, c₂]) = ↑(x * y) := by rw [coe_mul, coe_mul_eq_smul]
340
340
341
341
/-- Quaternion conjugate. -/
342
- def conj : ℍ[R, c₁, c₂] ≃ₗ[R] ℍ[R, c₁, c₂] :=
343
- linear_equiv.of_involutive
344
- { to_fun := λ a, ⟨a.1 , -a.2 , -a.3 , -a.4 ⟩,
345
- map_add' := λ a b, by ext; simp [neg_add],
346
- map_smul' := λ r a, by ext; simp } $
347
- λ a, by simp
348
-
349
- @[simp] lemma re_conj : (conj a).re = a.re := rfl
350
- @[simp] lemma im_i_conj : (conj a).im_i = - a.im_i := rfl
351
- @[simp] lemma im_j_conj : (conj a).im_j = - a.im_j := rfl
352
- @[simp] lemma im_k_conj : (conj a).im_k = - a.im_k := rfl
353
- @[simp] lemma im_conj : (conj a).im = - a.im := ext _ _ neg_zero.symm rfl rfl rfl
354
-
355
- @[simp] lemma conj_mk (a₁ a₂ a₃ a₄ : R) :
356
- conj (mk a₁ a₂ a₃ a₄ : ℍ[R, c₁, c₂]) = ⟨a₁, -a₂, -a₃, -a₄⟩ :=
357
- rfl
358
-
359
- @[simp] lemma conj_conj : a.conj.conj = a := ext _ _ rfl (neg_neg _) (neg_neg _) (neg_neg _)
342
+ instance : has_star ℍ[R, c₁, c₂] :=
343
+ { star := λ a, ⟨a.1 , -a.2 , -a.3 , -a.4 ⟩ }
360
344
361
- lemma conj_add : (a + b).conj = a.conj + b.conj := conj.map_add a b
345
+ @[simp] lemma re_star : (star a).re = a.re := rfl
346
+ @[simp] lemma im_i_star : (star a).im_i = - a.im_i := rfl
347
+ @[simp] lemma im_j_star : (star a).im_j = - a.im_j := rfl
348
+ @[simp] lemma im_k_star : (star a).im_k = - a.im_k := rfl
349
+ @[simp] lemma im_star : (star a).im = - a.im := ext _ _ neg_zero.symm rfl rfl rfl
362
350
363
- @[simp] lemma conj_mul : (a * b).conj = b.conj * a.conj := by ext; simp; ring_exp
351
+ @[simp] lemma star_mk (a₁ a₂ a₃ a₄ : R) :
352
+ star (mk a₁ a₂ a₃ a₄ : ℍ[R, c₁, c₂]) = ⟨a₁, -a₂, -a₃, -a₄⟩ :=
353
+ rfl
364
354
365
355
instance : star_ring ℍ[R, c₁, c₂] :=
366
- { star := conj,
367
- star_involutive := conj_conj,
368
- star_add := conj_add,
369
- star_mul := conj_mul }
370
-
371
- @[simp] lemma star_def (a : ℍ[R, c₁, c₂]) : star a = conj a := rfl
372
-
373
- lemma conj_conj_mul : (a.conj * b).conj = b.conj * a := star_star_mul _ _
356
+ { star_involutive := λ x, by simp [has_star.star],
357
+ star_add := λ a b, by ext; simp [neg_add],
358
+ star_mul := λ a b, by ext; simp; ring_exp }
374
359
375
- lemma conj_mul_conj : (a * b.conj).conj = b * a.conj := star_mul_star _ _
360
+ lemma self_add_star' : a + star a = ↑( 2 * a.re) := by ext; simp [two_mul]
376
361
377
- lemma self_add_conj' : a + a.conj = ↑(2 * a.re) := by ext; simp [two_mul]
362
+ lemma self_add_star : a + star a = 2 * a.re :=
363
+ by simp only [self_add_star', two_mul, coe_add]
378
364
379
- lemma self_add_conj : a + a.conj = 2 * a.re :=
380
- by simp only [self_add_conj', two_mul, coe_add]
365
+ lemma star_add_self' : star a + a = ↑(2 * a.re) := by rw [add_comm, self_add_star']
381
366
382
- lemma conj_add_self' : a.conj + a = ↑( 2 * a.re) := by rw [add_comm, self_add_conj' ]
367
+ lemma star_add_self : star a + a = 2 * a.re := by rw [add_comm, self_add_star ]
383
368
384
- lemma conj_add_self : a.conj + a = 2 * a.re := by rw [add_comm, self_add_conj]
369
+ lemma star_eq_two_re_sub : star a = ↑( 2 * a.re) - a := eq_sub_iff_add_eq. 2 a.star_add_self'
385
370
386
- lemma conj_eq_two_re_sub : a.conj = ↑(2 * a.re) - a := eq_sub_iff_add_eq.2 a.conj_add_self'
387
-
388
- lemma commute_conj_self : commute a.conj a :=
389
- begin
390
- rw [a.conj_eq_two_re_sub],
371
+ instance : is_star_normal a := ⟨begin
372
+ rw [a.star_eq_two_re_sub],
391
373
exact (coe_commute (2 * a.re) a).sub_left (commute.refl a)
392
- end
393
-
394
- lemma commute_self_conj : commute a a.conj :=
395
- a.commute_conj_self.symm
374
+ end ⟩
396
375
397
- lemma commute_conj_conj {a b : ℍ[R, c₁, c₂]} (h : commute a b) : commute a.conj b.conj :=
398
- h.star_star
376
+ @[simp, norm_cast] lemma star_coe : star (x : ℍ[R, c₁, c₂]) = x := by ext; simp
399
377
400
- @[simp, norm_cast ] lemma conj_coe : conj (x : ℍ[R, c₁, c₂]) = x := by ext; simp
378
+ @[simp] lemma star_im : star a.im = - a.im := im_star _
401
379
402
- @[simp] lemma conj_im : conj a.im = - a.im := im_conj _
403
-
404
- @[simp, norm_cast] lemma conj_nat_cast (n : ℕ) : conj (n : ℍ[R, c₁, c₂]) = n :=
405
- @star_nat_cast ℍ[R, c₁, c₂] _ _ n
406
- @[simp, norm_cast] lemma conj_int_cast (z : ℤ) : conj (z : ℍ[R, c₁, c₂]) = z :=
407
- @star_int_cast ℍ[R, c₁, c₂] _ _ z
408
-
409
- @[simp] lemma conj_smul [monoid S] [distrib_mul_action S R] (s : S) (a : ℍ[R, c₁, c₂]) :
410
- conj (s • a) = s • conj a :=
380
+ @[simp] lemma star_smul [monoid S] [distrib_mul_action S R] (s : S) (a : ℍ[R, c₁, c₂]) :
381
+ star (s • a) = s • star a :=
411
382
ext _ _ rfl (smul_neg _ _).symm (smul_neg _ _).symm (smul_neg _ _).symm
412
383
413
- @[simp] lemma conj_one : conj (1 : ℍ[R, c₁, c₂]) = 1 := conj_coe 1
414
-
415
384
lemma eq_re_of_eq_coe {a : ℍ[R, c₁, c₂]} {x : R} (h : a = x) : a = a.re :=
416
385
by rw [h, coe_re]
417
386
@@ -423,42 +392,33 @@ section char_zero
423
392
variables [no_zero_divisors R] [char_zero R]
424
393
425
394
@[simp]
426
- lemma conj_eq_self {c₁ c₂ : R} {a : ℍ[R, c₁, c₂]} :
427
- conj a = a ↔ a = a.re :=
395
+ lemma star_eq_self {c₁ c₂ : R} {a : ℍ[R, c₁, c₂]} :
396
+ star a = a ↔ a = a.re :=
428
397
by simp [ext_iff, neg_eq_iff_add_eq_zero, add_self_eq_zero]
429
398
430
- lemma conj_eq_neg {c₁ c₂ : R} {a : ℍ[R, c₁, c₂]} :
431
- conj a = -a ↔ a.re = 0 :=
399
+ lemma star_eq_neg {c₁ c₂ : R} {a : ℍ[R, c₁, c₂]} :
400
+ star a = -a ↔ a.re = 0 :=
432
401
by simp [ext_iff, eq_neg_iff_add_eq_zero]
433
402
434
403
end char_zero
435
- -- Can't use `rw ← conj_eq_self` in the proof without additional assumptions
436
-
437
- lemma conj_mul_eq_coe : conj a * a = (conj a * a).re := by ext; simp; ring_exp
438
-
439
- lemma mul_conj_eq_coe : a * conj a = (a * conj a).re :=
440
- by { rw a.commute_self_conj.eq, exact a.conj_mul_eq_coe }
404
+ -- Can't use `rw ← star_eq_self` in the proof without additional assumptions
441
405
442
- lemma conj_zero : conj ( 0 : ℍ[R, c₁, c₂]) = 0 := conj.map_zero
406
+ lemma star_mul_eq_coe : star a * a = (star a * a).re := by ext; simp; ring_exp
443
407
444
- lemma conj_neg : (-a).conj = -a.conj := (conj : ℍ[R, c₁, c₂] ≃ₗ[R] _).map_neg a
445
-
446
- lemma conj_sub : (a - b).conj = a.conj - b.conj := (conj : ℍ[R, c₁, c₂] ≃ₗ[R] _).map_sub a b
447
-
448
-
449
- @[simp] lemma conj_pow (n : ℕ) : (a ^ n).conj = a.conj ^ n := star_pow _ _
408
+ lemma mul_star_eq_coe : a * star a = (a * star a).re :=
409
+ by { rw ←star_comm_self', exact a.star_mul_eq_coe }
450
410
451
411
open mul_opposite
452
412
453
413
/-- Quaternion conjugate as an `alg_equiv` to the opposite ring. -/
454
- def conj_ae : ℍ[R, c₁, c₂] ≃ₐ[R] (ℍ[R, c₁, c₂]ᵐᵒᵖ) :=
455
- { to_fun := op ∘ conj ,
456
- inv_fun := conj ∘ unop,
414
+ def star_ae : ℍ[R, c₁, c₂] ≃ₐ[R] (ℍ[R, c₁, c₂]ᵐᵒᵖ) :=
415
+ { to_fun := op ∘ star ,
416
+ inv_fun := star ∘ unop,
457
417
map_mul' := λ x y, by simp,
458
418
commutes' := λ r, by simp,
459
- .. conj.to_add_equiv .trans op_add_equiv }
419
+ .. star_add_equiv .trans op_add_equiv }
460
420
461
- @[simp] lemma coe_conj_ae : ⇑(conj_ae : ℍ[R, c₁, c₂] ≃ₐ[R] _) = op ∘ conj := rfl
421
+ @[simp] lemma coe_star_ae : ⇑(star_ae : ℍ[R, c₁, c₂] ≃ₐ[R] _) = op ∘ star := rfl
462
422
463
423
end quaternion_algebra
464
424
@@ -634,56 +594,27 @@ quaternion_algebra.rank_eq_four _ _
634
594
lemma finrank_eq_four [strong_rank_condition R] : finite_dimensional.finrank R ℍ[R] = 4 :=
635
595
quaternion_algebra.finrank_eq_four _ _
636
596
637
- /-- Quaternion conjugate. -/
638
- def conj : ℍ[R] ≃ₗ[R] ℍ[R] := quaternion_algebra.conj
597
+ @[simp] lemma star_re : (star a).re = a.re := rfl
598
+ @[simp] lemma star_im_i : (star a).im_i = - a.im_i := rfl
599
+ @[simp] lemma star_im_j : (star a).im_j = - a.im_j := rfl
600
+ @[simp] lemma star_im_k : (star a).im_k = - a.im_k := rfl
601
+ @[simp] lemma star_im : (star a).im = - a.im := a.im_star
639
602
640
- @[simp] lemma conj_re : a.conj.re = a.re := rfl
641
- @[simp] lemma conj_im_i : a.conj.im_i = - a.im_i := rfl
642
- @[simp] lemma conj_im_j : a.conj.im_j = - a.im_j := rfl
643
- @[simp] lemma conj_im_k : a.conj.im_k = - a.im_k := rfl
644
- @[simp] lemma conj_im : a.conj.im = - a.im := a.im_conj
603
+ lemma self_add_star' : a + star a = ↑(2 * a.re) := a.self_add_star'
645
604
646
- @[simp] lemma conj_conj : a.conj.conj = a := a.conj_conj
605
+ lemma self_add_star : a + star a = 2 * a.re := a.self_add_star
647
606
648
- @[simp] lemma conj_add : ( a + b).conj = a.conj + b.conj := a.conj_add b
607
+ lemma star_add_self' : star a + a = ↑( 2 * a.re) := a.star_add_self'
649
608
650
- @[simp] lemma conj_mul : (a * b).conj = b.conj * a.conj := a.conj_mul b
609
+ lemma star_add_self : star a + a = 2 * a.re := a.star_add_self
651
610
652
- lemma conj_conj_mul : (a.conj * b).conj = b.conj * a := a.conj_conj_mul b
611
+ lemma star_eq_two_re_sub : star a = ↑( 2 * a.re) - a := a.star_eq_two_re_sub
653
612
654
- lemma conj_mul_conj : (a * b.conj).conj = b * a.conj := a.conj_mul_conj b
613
+ @[simp, norm_cast] lemma star_coe : star (x : ℍ[R]) = x := quaternion_algebra.star_coe x
614
+ @[simp] lemma im_star : star a.im = - a.im := quaternion_algebra.im_star _
655
615
656
- lemma self_add_conj' : a + a.conj = ↑(2 * a.re) := a.self_add_conj'
657
-
658
- lemma self_add_conj : a + a.conj = 2 * a.re := a.self_add_conj
659
-
660
- lemma conj_add_self' : a.conj + a = ↑(2 * a.re) := a.conj_add_self'
661
-
662
- lemma conj_add_self : a.conj + a = 2 * a.re := a.conj_add_self
663
-
664
- lemma conj_eq_two_re_sub : a.conj = ↑(2 * a.re) - a := a.conj_eq_two_re_sub
665
-
666
- lemma commute_conj_self : commute a.conj a := a.commute_conj_self
667
-
668
- lemma commute_self_conj : commute a a.conj := a.commute_self_conj
669
-
670
- lemma commute_conj_conj {a b : ℍ[R]} (h : commute a b) : commute a.conj b.conj :=
671
- quaternion_algebra.commute_conj_conj h
672
-
673
- alias commute_conj_conj ← commute.quaternion_conj
674
-
675
- @[simp, norm_cast] lemma conj_coe : conj (x : ℍ[R]) = x := quaternion_algebra.conj_coe x
676
- @[simp] lemma im_conj : a.im.conj = - a.im := quaternion_algebra.im_conj _
677
-
678
- @[simp, norm_cast] lemma conj_nat_cast (n : ℕ) : conj (n : ℍ[R]) = n :=
679
- quaternion_algebra.conj_nat_cast _
680
- @[simp, norm_cast] lemma conj_int_cast (z : ℤ) : conj (z : ℍ[R]) = z :=
681
- quaternion_algebra.conj_int_cast _
682
-
683
- @[simp] lemma conj_smul [monoid S] [distrib_mul_action S R] (s : S) (a : ℍ[R]) :
684
- conj (s • a) = s • conj a := quaternion_algebra.conj_smul _ _
685
-
686
- @[simp] lemma conj_one : conj (1 : ℍ[R]) = 1 := conj_coe 1
616
+ @[simp] lemma star_smul [monoid S] [distrib_mul_action S R] (s : S) (a : ℍ[R]) :
617
+ star (s • a) = s • star a := quaternion_algebra.star_smul _ _
687
618
688
619
lemma eq_re_of_eq_coe {a : ℍ[R]} {x : R} (h : a = x) : a = a.re :=
689
620
quaternion_algebra.eq_re_of_eq_coe h
@@ -694,49 +625,41 @@ quaternion_algebra.eq_re_iff_mem_range_coe
694
625
section char_zero
695
626
variables [no_zero_divisors R] [char_zero R]
696
627
697
- @[simp] lemma conj_eq_self {a : ℍ[R]} : conj a = a ↔ a = a.re := quaternion_algebra.conj_eq_self
628
+ @[simp] lemma star_eq_self {a : ℍ[R]} : star a = a ↔ a = a.re := quaternion_algebra.star_eq_self
698
629
699
- @[simp] lemma conj_eq_neg {a : ℍ[R]} : conj a = -a ↔ a.re = 0 := quaternion_algebra.conj_eq_neg
630
+ @[simp] lemma star_eq_neg {a : ℍ[R]} : star a = -a ↔ a.re = 0 := quaternion_algebra.star_eq_neg
700
631
701
632
end char_zero
702
633
703
- lemma conj_mul_eq_coe : conj a * a = (conj a * a).re := a.conj_mul_eq_coe
704
-
705
- lemma mul_conj_eq_coe : a * conj a = (a * conj a).re := a.mul_conj_eq_coe
634
+ lemma star_mul_eq_coe : star a * a = (star a * a).re := a.star_mul_eq_coe
706
635
707
- @[simp] lemma conj_zero : conj (0 :ℍ[R]) = 0 := quaternion_algebra.conj_zero
708
-
709
- @[simp] lemma conj_neg : (-a).conj = -a.conj := a.conj_neg
710
-
711
- @[simp] lemma conj_sub : (a - b).conj = a.conj - b.conj := a.conj_sub b
712
-
713
- @[simp] lemma conj_pow (n : ℕ) : conj (a ^ n) = conj a ^ n := a.conj_pow n
636
+ lemma mul_star_eq_coe : a * star a = (a * star a).re := a.mul_star_eq_coe
714
637
715
638
open mul_opposite
716
639
717
640
/-- Quaternion conjugate as an `alg_equiv` to the opposite ring. -/
718
- def conj_ae : ℍ[R] ≃ₐ[R] (ℍ[R]ᵐᵒᵖ) := quaternion_algebra.conj_ae
641
+ def star_ae : ℍ[R] ≃ₐ[R] (ℍ[R]ᵐᵒᵖ) := quaternion_algebra.star_ae
719
642
720
- @[simp] lemma coe_conj_ae : ⇑(conj_ae : ℍ[R] ≃ₐ[R] ℍ[R]ᵐᵒᵖ) = op ∘ conj := rfl
643
+ @[simp] lemma coe_star_ae : ⇑(star_ae : ℍ[R] ≃ₐ[R] ℍ[R]ᵐᵒᵖ) = op ∘ star := rfl
721
644
722
645
/-- Square of the norm. -/
723
646
def norm_sq : ℍ[R] →*₀ R :=
724
- { to_fun := λ a, (a * a.conj ).re,
725
- map_zero' := by rw [conj_zero , zero_mul, zero_re],
726
- map_one' := by rw [conj_one , one_mul, one_re],
727
- map_mul' := λ x y, coe_injective $ by conv_lhs { rw [← mul_conj_eq_coe, conj_mul , mul_assoc,
728
- ← mul_assoc y, y.mul_conj_eq_coe , coe_commutes, ← mul_assoc, x.mul_conj_eq_coe , ← coe_mul] } }
647
+ { to_fun := λ a, (a * star a ).re,
648
+ map_zero' := by rw [star_zero , zero_mul, zero_re],
649
+ map_one' := by rw [star_one , one_mul, one_re],
650
+ map_mul' := λ x y, coe_injective $ by conv_lhs { rw [← mul_star_eq_coe, star_mul , mul_assoc,
651
+ ← mul_assoc y, y.mul_star_eq_coe , coe_commutes, ← mul_assoc, x.mul_star_eq_coe , ← coe_mul] } }
729
652
730
- lemma norm_sq_def : norm_sq a = (a * a.conj ).re := rfl
653
+ lemma norm_sq_def : norm_sq a = (a * star a ).re := rfl
731
654
732
655
lemma norm_sq_def' : norm_sq a = a.1 ^2 + a.2 ^2 + a.3 ^2 + a.4 ^2 :=
733
656
by simp only [norm_sq_def, sq, mul_neg, sub_neg_eq_add,
734
- mul_re, conj_re, conj_im_i, conj_im_j, conj_im_k ]
657
+ mul_re, star_re, star_im_i, star_im_j, star_im_k ]
735
658
736
659
lemma norm_sq_coe : norm_sq (x : ℍ[R]) = x^2 :=
737
- by rw [norm_sq_def, conj_coe , ← coe_mul, coe_re, sq]
660
+ by rw [norm_sq_def, star_coe , ← coe_mul, coe_re, sq]
738
661
739
- @[simp] lemma norm_sq_conj : norm_sq (conj a) = norm_sq a := by simp [norm_sq_def']
662
+ @[simp] lemma norm_sq_star : norm_sq (star a) = norm_sq a := by simp [norm_sq_def']
740
663
741
664
@[norm_cast] lemma norm_sq_nat_cast (n : ℕ) : norm_sq (n : ℍ[R]) = n^2 :=
742
665
by rw [←coe_nat_cast, norm_sq_coe]
@@ -745,28 +668,28 @@ by rw [←coe_nat_cast, norm_sq_coe]
745
668
by rw [←coe_int_cast, norm_sq_coe]
746
669
747
670
@[simp] lemma norm_sq_neg : norm_sq (-a) = norm_sq a :=
748
- by simp only [norm_sq_def, conj_neg , neg_mul_neg]
671
+ by simp only [norm_sq_def, star_neg , neg_mul_neg]
749
672
750
- lemma self_mul_conj : a * a.conj = norm_sq a := by rw [mul_conj_eq_coe , norm_sq_def]
673
+ lemma self_mul_star : a * star a = norm_sq a := by rw [mul_star_eq_coe , norm_sq_def]
751
674
752
- lemma conj_mul_self : a.conj * a = norm_sq a := by rw [← a.commute_self_conj.eq, self_mul_conj ]
675
+ lemma star_mul_self : star a * a = norm_sq a := by rw [star_comm_self', self_mul_star ]
753
676
754
677
lemma im_sq : a.im^2 = -norm_sq a.im :=
755
- by simp_rw [sq, ←conj_mul_self, im_conj , neg_mul, neg_neg]
678
+ by simp_rw [sq, ←star_mul_self, im_star , neg_mul, neg_neg]
756
679
757
680
lemma coe_norm_sq_add :
758
- (norm_sq (a + b) : ℍ[R]) = norm_sq a + a * b.conj + b * a.conj + norm_sq b :=
759
- by simp [← self_mul_conj , mul_add, add_mul, add_assoc]
681
+ (norm_sq (a + b) : ℍ[R]) = norm_sq a + a * star b + b * star a + norm_sq b :=
682
+ by simp [← self_mul_star , mul_add, add_mul, add_assoc]
760
683
761
684
lemma norm_sq_smul (r : R) (q : ℍ[R]) : norm_sq (r • q) = r^2 * norm_sq q :=
762
- by simp_rw [norm_sq_def, conj_smul , smul_mul_smul, smul_re, sq, smul_eq_mul]
685
+ by simp_rw [norm_sq_def, star_smul , smul_mul_smul, smul_re, sq, smul_eq_mul]
763
686
764
- lemma norm_sq_add (a b : ℍ[R]) : norm_sq (a + b) = norm_sq a + norm_sq b + 2 * (a * conj b).re :=
765
- calc norm_sq (a + b) = (norm_sq a + (a * conj b).re) + ((b * conj a).re + norm_sq b)
766
- : by simp_rw [norm_sq_def, conj_add , add_mul, mul_add, add_re]
767
- ... = norm_sq a + norm_sq b + ((a * conj b).re + (b * conj a).re) : by abel
768
- ... = norm_sq a + norm_sq b + 2 * (a * conj b).re
769
- : by rw [←add_re, ←conj_mul_conj a b, self_add_conj ', coe_re]
687
+ lemma norm_sq_add (a b : ℍ[R]) : norm_sq (a + b) = norm_sq a + norm_sq b + 2 * (a * star b).re :=
688
+ calc norm_sq (a + b) = (norm_sq a + (a * star b).re) + ((b * star a).re + norm_sq b)
689
+ : by simp_rw [norm_sq_def, star_add , add_mul, mul_add, add_re]
690
+ ... = norm_sq a + norm_sq b + ((a * star b).re + (b * star a).re) : by abel
691
+ ... = norm_sq a + norm_sq b + 2 * (a * star b).re
692
+ : by rw [←add_re, ←star_mul_star a b, self_add_star ', coe_re]
770
693
771
694
end quaternion
772
695
@@ -808,18 +731,18 @@ no_zero_divisors.to_is_domain _
808
731
809
732
lemma sq_eq_norm_sq : a^2 = norm_sq a ↔ a = a.re :=
810
733
begin
811
- simp_rw [←conj_eq_self ],
734
+ simp_rw [←star_eq_self ],
812
735
obtain rfl | hq0 := eq_or_ne a 0 ,
813
736
{ simp },
814
- { rw [←conj_mul_self , sq, mul_left_inj' hq0, eq_comm] }
737
+ { rw [←star_mul_self , sq, mul_left_inj' hq0, eq_comm] }
815
738
end
816
739
817
740
lemma sq_eq_neg_norm_sq : a^2 = -norm_sq a ↔ a.re = 0 :=
818
741
begin
819
- simp_rw [←conj_eq_neg ],
742
+ simp_rw [←star_eq_neg ],
820
743
obtain rfl | hq0 := eq_or_ne a 0 ,
821
744
{ simp },
822
- rw [←conj_mul_self , ←mul_neg, ←neg_sq, sq, mul_left_inj' (neg_ne_zero.mpr hq0), eq_comm],
745
+ rw [←star_mul_self , ←mul_neg, ←neg_sq, sq, mul_left_inj' (neg_ne_zero.mpr hq0), eq_comm],
823
746
end
824
747
825
748
end linear_ordered_comm_ring
@@ -828,12 +751,12 @@ section field
828
751
829
752
variables [linear_ordered_field R] (a b : ℍ[R])
830
753
831
- @[simps { attrs := [] }] instance : has_inv ℍ[R] := ⟨λ a, (norm_sq a)⁻¹ • a.conj ⟩
754
+ @[simps { attrs := [] }] instance : has_inv ℍ[R] := ⟨λ a, (norm_sq a)⁻¹ • star a ⟩
832
755
833
756
instance : group_with_zero ℍ[R] :=
834
757
{ inv := has_inv.inv,
835
- inv_zero := by rw [has_inv_inv, conj_zero , smul_zero],
836
- mul_inv_cancel := λ a ha, by rw [has_inv_inv, algebra.mul_smul_comm, self_mul_conj , smul_coe,
758
+ inv_zero := by rw [has_inv_inv, star_zero , smul_zero],
759
+ mul_inv_cancel := λ a ha, by rw [has_inv_inv, algebra.mul_smul_comm, self_mul_star , smul_coe,
837
760
inv_mul_cancel (norm_sq_ne_zero.2 ha), coe_one],
838
761
.. quaternion.nontrivial,
839
762
.. (by apply_instance : monoid_with_zero ℍ[R]) }
@@ -865,10 +788,6 @@ instance : division_ring ℍ[R] :=
865
788
@[simp, norm_cast] lemma rat_cast_im (q : ℚ) : (q : ℍ[R]).im = 0 := rfl
866
789
@[norm_cast] lemma coe_rat_cast (q : ℚ) : ↑(q : R) = (q : ℍ[R]) := rfl
867
790
868
- lemma conj_inv : conj (a⁻¹) = (conj a)⁻¹ := star_inv' a
869
- lemma conj_zpow (z : ℤ) : conj (a ^ z) = conj a ^ z := star_zpow₀ a z
870
- @[simp, norm_cast] lemma conj_rat_cast (q : ℚ) : conj (q : ℍ[R]) = q := @star_rat_cast ℍ[R] _ _ q
871
-
872
791
@[simp] lemma norm_sq_inv : norm_sq a⁻¹ = (norm_sq a)⁻¹ := map_inv₀ norm_sq _
873
792
@[simp] lemma norm_sq_div : norm_sq (a / b) = norm_sq a / norm_sq b := map_div₀ norm_sq a b
874
793
@[simp] lemma norm_sq_zpow (z : ℤ) : norm_sq (a ^ z) = norm_sq a ^ z := map_zpow₀ norm_sq a z
0 commit comments