@@ -363,43 +363,54 @@ lemma rpow_algebraMap {x : ℝ≥0} {y : ℝ} :
363
363
(algebraMap ℝ≥0 A x) ^ y = algebraMap ℝ≥0 A (x ^ y) := by
364
364
rw [rpow_def, cfc_algebraMap ..]
365
365
366
- lemma rpow_add {a : A} {x y : ℝ} (ha : 0 ∉ spectrum ℝ≥ 0 a) :
366
+ lemma rpow_add {a : A} {x y : ℝ} (ha : IsUnit a) :
367
367
a ^ (x + y) = a ^ x * a ^ y := by
368
+ have ha' : 0 ∉ spectrum ℝ≥0 a := spectrum.zero_notMem _ ha
368
369
simp only [rpow_def, NNReal.rpow_eq_pow]
369
370
rw [← cfc_mul _ _ a]
370
371
refine cfc_congr ?_
371
372
intro z hz
372
373
have : z ≠ 0 := by aesop
373
374
simp [NNReal.rpow_add this _ _]
374
375
375
- -- TODO: relate to a strict positivity condition
376
376
lemma rpow_rpow [IsTopologicalRing A] [T2Space A]
377
- (a : A) (x y : ℝ) (ha₁ : 0 ∉ spectrum ℝ≥ 0 a) (hx : x ≠ 0 ) (ha₂ : 0 ≤ a := by cfc_tac) :
377
+ (a : A) (x y : ℝ) (ha₁ : IsUnit a) (hx : x ≠ 0 ) (ha₂ : 0 ≤ a := by cfc_tac) :
378
378
(a ^ x) ^ y = a ^ (x * y) := by
379
+ have ha₁' : 0 ∉ spectrum ℝ≥0 a := spectrum.zero_notMem _ ha₁
379
380
simp only [rpow_def]
380
381
rw [← cfc_comp _ _ a ha₂]
381
382
refine cfc_congr fun _ _ => ?_
382
383
simp [NNReal.rpow_mul]
383
384
385
+ lemma rpow_rpow_inv [IsTopologicalRing A] [T2Space A]
386
+ (a : A) (x : ℝ) (ha₁ : IsUnit a) (hx : x ≠ 0 ) (ha₂ : 0 ≤ a := by cfc_tac) :
387
+ (a ^ x) ^ x⁻¹ = a := by
388
+ rw [rpow_rpow a x x⁻¹ ha₁ hx ha₂, mul_inv_cancel₀ hx, rpow_one a ha₂]
389
+
390
+ lemma rpow_inv_rpow [IsTopologicalRing A] [T2Space A]
391
+ (a : A) (x : ℝ) (ha₁ : IsUnit a) (hx : x ≠ 0 ) (ha₂ : 0 ≤ a := by cfc_tac) :
392
+ (a ^ x⁻¹) ^ x = a := by
393
+ simpa using rpow_rpow_inv a x⁻¹ ha₁ (inv_ne_zero hx) ha₂
394
+
384
395
lemma rpow_rpow_of_exponent_nonneg [IsTopologicalRing A] [T2Space A] (a : A) (x y : ℝ)
385
396
(hx : 0 ≤ x) (hy : 0 ≤ y) (ha₂ : 0 ≤ a := by cfc_tac) : (a ^ x) ^ y = a ^ (x * y) := by
386
397
simp only [rpow_def]
387
398
rw [← cfc_comp _ _ a]
388
399
refine cfc_congr fun _ _ => ?_
389
400
simp [NNReal.rpow_mul]
390
401
391
- lemma rpow_mul_rpow_neg {a : A} (x : ℝ) (ha : 0 ∉ spectrum ℝ≥ 0 a)
402
+ lemma rpow_mul_rpow_neg {a : A} (x : ℝ) (ha : IsUnit a)
392
403
(ha' : 0 ≤ a := by cfc_tac) : a ^ x * a ^ (-x) = 1 := by
393
404
rw [← rpow_add ha, add_neg_cancel, rpow_zero a]
394
405
395
- lemma rpow_neg_mul_rpow {a : A} (x : ℝ) (ha : 0 ∉ spectrum ℝ≥ 0 a)
406
+ lemma rpow_neg_mul_rpow {a : A} (x : ℝ) (ha : IsUnit a)
396
407
(ha' : 0 ≤ a := by cfc_tac) : a ^ (-x) * a ^ x = 1 := by
397
408
rw [← rpow_add ha, neg_add_cancel, rpow_zero a]
398
409
399
410
lemma rpow_neg_one_eq_inv (a : Aˣ) (ha : (0 : A) ≤ a := by cfc_tac) :
400
411
a ^ (-1 : ℝ) = (↑a⁻¹ : A) := by
401
412
refine a.inv_eq_of_mul_eq_one_left ?_ |>.symm
402
- simpa [rpow_one (a : A)] using rpow_neg_mul_rpow 1 (spectrum.zero_notMem ℝ≥ 0 a.isUnit)
413
+ simpa [rpow_one (a : A)] using rpow_neg_mul_rpow 1 a.isUnit
403
414
404
415
lemma rpow_neg_one_eq_cfc_inv {A : Type *} [PartialOrder A] [NormedRing A] [StarRing A]
405
416
[StarOrderedRing A] [NormedAlgebra ℝ A] [NonnegSpectrumClass ℝ A]
@@ -424,6 +435,37 @@ lemma rpow_intCast (a : Aˣ) (n : ℤ) (ha : (0 : A) ≤ a := by cfc_tac) :
424
435
refine cfc_congr fun _ _ => ?_
425
436
simp
426
437
438
+ /-- `a ^ x` bundled as an element of `Aˣ` for `a : Aˣ`. -/
439
+ @[simps]
440
+ noncomputable def _root_.Units.cfcRpow (a : Aˣ) (x : ℝ) (ha : (0 : A) ≤ a := by cfc_tac) : Aˣ :=
441
+ ⟨(a : A) ^ x, (a : A) ^ (-x), rpow_mul_rpow_neg x (by simp), rpow_neg_mul_rpow x (by simp)⟩
442
+
443
+ @[aesop safe apply]
444
+ lemma _root_.IsUnit.cfcRpow {a : A} (ha : IsUnit a) (x : ℝ) (ha_nonneg : 0 ≤ a := by cfc_tac) :
445
+ IsUnit (a ^ x) :=
446
+ ha.unit.cfcRpow x |>.isUnit
447
+
448
+ lemma spectrum_rpow (a : A) (x : ℝ)
449
+ (h : ContinuousOn (· ^ x) (spectrum ℝ≥0 a) := by cfc_cont_tac)
450
+ (ha : 0 ≤ a := by cfc_tac) :
451
+ spectrum ℝ≥0 (a ^ x) = (· ^ x) '' spectrum ℝ≥0 a :=
452
+ cfc_map_spectrum (· ^ x : ℝ≥0 → ℝ≥0 ) a ha h
453
+
454
+ lemma isUnit_rpow_iff (a : A) (y : ℝ) (hy : y ≠ 0 ) (ha : 0 ≤ a := by cfc_tac) :
455
+ IsUnit (a ^ y) ↔ IsUnit a := by
456
+ nontriviality A
457
+ refine ⟨fun h => ?_, fun h => h.cfcRpow y ha⟩
458
+ rw [rpow_def] at h
459
+ by_cases hf : ContinuousOn (fun x : ℝ≥0 => x ^ y) (spectrum ℝ≥0 a)
460
+ · rw [isUnit_cfc_iff _ a hf] at h
461
+ refine spectrum.isUnit_of_zero_notMem ℝ≥0 ?_
462
+ intro h0
463
+ specialize h 0 h0
464
+ simp only [ne_eq, NNReal.rpow_eq_zero_iff, true_and, Decidable.not_not] at h
465
+ exact hy h
466
+ · rw [cfc_apply_of_not_continuousOn a hf] at h
467
+ exact False.elim <| not_isUnit_zero h
468
+
427
469
section prod
428
470
429
471
variable [IsTopologicalRing A] [T2Space A]
@@ -436,16 +478,18 @@ variable {B : Type*} [PartialOrder B] [Ring B] [StarRing B] [TopologicalSpace B]
436
478
437
479
/- Note that there is higher-priority instance of `Pow (A × B) ℝ` coming from the `Pow` instance for
438
480
products, hence the direct use of `rpow` here. -/
439
- lemma rpow_map_prod {a : A} {b : B} {x : ℝ} (ha : 0 ∉ spectrum ℝ≥ 0 a) (hb : 0 ∉ spectrum ℝ≥ 0 b)
481
+ lemma rpow_map_prod {a : A} {b : B} {x : ℝ} (ha : IsUnit a) (hb : IsUnit b)
440
482
(ha' : 0 ≤ a := by cfc_tac) (hb' : 0 ≤ b := by cfc_tac) :
441
483
rpow (a, b) x = (a ^ x, b ^ x) := by
484
+ have ha'' : 0 ∉ spectrum ℝ≥0 a := spectrum.zero_notMem _ ha
485
+ have hb'' : 0 ∉ spectrum ℝ≥0 b := spectrum.zero_notMem _ hb
442
486
simp only [rpow_def]
443
487
unfold rpow
444
488
refine cfc_map_prod (R := ℝ≥0 ) (S := ℝ) _ a b (by cfc_cont_tac) ?_
445
489
rw [Prod.le_def]
446
490
constructor <;> simp [ha', hb']
447
491
448
- lemma rpow_eq_rpow_prod {a : A} {b : B} {x : ℝ} (ha : 0 ∉ spectrum ℝ≥ 0 a) (hb : 0 ∉ spectrum ℝ≥ 0 b)
492
+ lemma rpow_eq_rpow_prod {a : A} {b : B} {x : ℝ} (ha : IsUnit a) (hb : IsUnit b)
449
493
(ha' : 0 ≤ a := by cfc_tac) (hb' : 0 ≤ b := by cfc_tac) :
450
494
rpow (a, b) x = (a, b) ^ x := rpow_map_prod ha hb
451
495
@@ -466,14 +510,15 @@ variable {ι : Type*} {C : ι → Type*} [∀ i, PartialOrder (C i)] [∀ i, Rin
466
510
467
511
/- Note that there is a higher-priority instance of `Pow (∀ i, B i) ℝ` coming from the `Pow`
468
512
instance for pi types, hence the direct use of `rpow` here. -/
469
- lemma rpow_map_pi {c : ∀ i, C i} {x : ℝ} (hc : ∀ i, 0 ∉ spectrum ℝ≥ 0 (c i))
513
+ lemma rpow_map_pi {c : ∀ i, C i} {x : ℝ} (hc : ∀ i, IsUnit (c i))
470
514
(hc' : ∀ i, 0 ≤ c i := by cfc_tac) :
471
515
rpow c x = fun i => (c i) ^ x := by
516
+ have hc'' : ∀ i, 0 ∉ spectrum ℝ≥0 (c i) := fun i => spectrum.zero_notMem _ (hc i)
472
517
simp only [rpow_def]
473
518
unfold rpow
474
519
exact cfc_map_pi (S := ℝ) _ c
475
520
476
- lemma rpow_eq_rpow_pi {c : ∀ i, C i} {x : ℝ} (hc : ∀ i, 0 ∉ spectrum ℝ≥ 0 (c i))
521
+ lemma rpow_eq_rpow_pi {c : ∀ i, C i} {x : ℝ} (hc : ∀ i, IsUnit (c i))
477
522
(hc' : ∀ i, 0 ≤ c i := by cfc_tac) :
478
523
rpow c x = c ^ x := rpow_map_pi hc
479
524
@@ -511,7 +556,7 @@ lemma sqrt_algebraMap {r : ℝ≥0} : sqrt (algebraMap ℝ≥0 A r) = algebraMap
511
556
lemma sqrt_one : sqrt (1 : A) = 1 := by simp [sqrt_eq_cfc]
512
557
513
558
-- TODO: relate to a strict positivity condition
514
- lemma sqrt_rpow {a : A} {x : ℝ} (h : 0 ∉ spectrum ℝ≥ 0 a)
559
+ lemma sqrt_rpow {a : A} {x : ℝ} (h : IsUnit a)
515
560
(hx : x ≠ 0 ) : sqrt (a ^ x) = a ^ (x / 2 ) := by
516
561
by_cases hnonneg : 0 ≤ a
517
562
case pos =>
@@ -520,7 +565,7 @@ lemma sqrt_rpow {a : A} {x : ℝ} (h : 0 ∉ spectrum ℝ≥0 a)
520
565
simp [sqrt_eq_cfc, rpow_def, cfc_apply_of_not_predicate a hnonneg]
521
566
522
567
-- TODO: relate to a strict positivity condition
523
- lemma rpow_sqrt (a : A) (x : ℝ) (h : 0 ∉ spectrum ℝ≥ 0 a)
568
+ lemma rpow_sqrt (a : A) (x : ℝ) (h : IsUnit a)
524
569
(ha : 0 ≤ a := by cfc_tac) : (sqrt a) ^ x = a ^ (x / 2 ) := by
525
570
rw [sqrt_eq_rpow, div_eq_mul_inv, one_mul,
526
571
rpow_rpow _ _ _ h (by norm_num), inv_mul_eq_div]
@@ -546,6 +591,26 @@ lemma rpow_sqrt_nnreal {a : A} {x : ℝ≥0}
546
591
have h₁ : 0 ≤ (x : ℝ) := NNReal.zero_le_coe
547
592
rw [sqrt_eq_rpow, rpow_rpow_of_exponent_nonneg _ _ _ (by norm_num) h₁, one_div_mul_eq_div]
548
593
594
+ lemma isUnit_nnrpow_iff (a : A) (y : ℝ≥0 ) (hy : y ≠ 0 ) (ha : 0 ≤ a := by cfc_tac) :
595
+ IsUnit (a ^ y) ↔ IsUnit a := by
596
+ rw [nnrpow_eq_rpow (pos_of_ne_zero hy)]
597
+ refine isUnit_rpow_iff a y ?_ ha
598
+ exact_mod_cast hy
599
+
600
+ @[aesop safe apply]
601
+ lemma _root_.IsUnit.cfcNNRpow (a : A) (y : ℝ≥0 ) (ha_unit : IsUnit a) (hy : y ≠ 0 )
602
+ (ha : 0 ≤ a := by cfc_tac) : IsUnit (a ^ y) :=
603
+ (isUnit_nnrpow_iff a y hy ha).mpr ha_unit
604
+
605
+ lemma isUnit_sqrt_iff (a : A) (ha : 0 ≤ a := by cfc_tac) : IsUnit (sqrt a) ↔ IsUnit a := by
606
+ rw [sqrt_eq_rpow]
607
+ exact isUnit_rpow_iff a _ (by norm_num) ha
608
+
609
+ @[aesop safe apply]
610
+ lemma _root_.IsUnit.cfcSqrt (a : A) (ha_unit : IsUnit a) (ha : 0 ≤ a := by cfc_tac) :
611
+ IsUnit (sqrt a) :=
612
+ (isUnit_sqrt_iff a ha).mpr ha_unit
613
+
549
614
end unital_vs_nonunital
550
615
551
616
end Unital
0 commit comments