Theorem: MulRingNorm.equiv_symm
File: Mathlib/Analysis/Normed/Ring/Seminorm.lean

Proof steps:
state_before: F : Type u_1
R✝ : Type u_2
S : Type u_3
x y : R✝
r : ℝ
inst✝⁴ : NonAssocRing R✝
inst✝³ : DecidableEq R✝
inst✝² : NoZeroDivisors R✝
inst✝¹ : Nontrivial R✝
R : Type u_4
inst✝ : Ring R
f g : MulRingNorm R
hfg : f.equiv g
⊢ g.equiv f
state_after: case intro.intro
F : Type u_1
R✝ : Type u_2
S : Type u_3
x y : R✝
r : ℝ
inst✝⁴ : NonAssocRing R✝
inst✝³ : DecidableEq R✝
inst✝² : NoZeroDivisors R✝
inst✝¹ : Nontrivial R✝
R : Type u_4
inst✝ : Ring R
f g : MulRingNorm R
c : ℝ
hcpos : 0 < c
h : (fun x => f x ^ c) = ⇑g
⊢ g.equiv f
tactic: rcases hfg with ⟨c, hcpos, h⟩
state_before: case intro.intro
F : Type u_1
R✝ : Type u_2
S : Type u_3
x y : R✝
r : ℝ
inst✝⁴ : NonAssocRing R✝
inst✝³ : DecidableEq R✝
inst✝² : NoZeroDivisors R✝
inst✝¹ : Nontrivial R✝
R : Type u_4
inst✝ : Ring R
f g : MulRingNorm R
c : ℝ
hcpos : 0 < c
h : (fun x => f x ^ c) = ⇑g
⊢ g.equiv f
state_after: case h
F : Type u_1
R✝ : Type u_2
S : Type u_3
x y : R✝
r : ℝ
inst✝⁴ : NonAssocRing R✝
inst✝³ : DecidableEq R✝
inst✝² : NoZeroDivisors R✝
inst✝¹ : Nontrivial R✝
R : Type u_4
inst✝ : Ring R
f g : MulRingNorm R
c : ℝ
hcpos : 0 < c
h : (fun x => f x ^ c) = ⇑g
⊢ 0 < 1 / c ∧ (fun x => g x ^ (1 / c)) = ⇑f
tactic: use 1/c
state_before: case h
F : Type u_1
R✝ : Type u_2
S : Type u_3
x y : R✝
r : ℝ
inst✝⁴ : NonAssocRing R✝
inst✝³ : DecidableEq R✝
inst✝² : NoZeroDivisors R✝
inst✝¹ : Nontrivial R✝
R : Type u_4
inst✝ : Ring R
f g : MulRingNorm R
c : ℝ
hcpos : 0 < c
h : (fun x => f x ^ c) = ⇑g
⊢ 0 < 1 / c ∧ (fun x => g x ^ (1 / c)) = ⇑f
state_after: case h.left
F : Type u_1
R✝ : Type u_2
S : Type u_3
x y : R✝
r : ℝ
inst✝⁴ : NonAssocRing R✝
inst✝³ : DecidableEq R✝
inst✝² : NoZeroDivisors R✝
inst✝¹ : Nontrivial R✝
R : Type u_4
inst✝ : Ring R
f g : MulRingNorm R
c : ℝ
hcpos : 0 < c
h : (fun x => f x ^ c) = ⇑g
⊢ 0 < 1 / c

case h.right
F : Type u_1
R✝ : Type u_2
S : Type u_3
x y : R✝
r : ℝ
inst✝⁴ : NonAssocRing R✝
inst✝³ : DecidableEq R✝
inst✝² : NoZeroDivisors R✝
inst✝¹ : Nontrivial R✝
R : Type u_4
inst✝ : Ring R
f g : MulRingNorm R
c : ℝ
hcpos : 0 < c
h : (fun x => f x ^ c) = ⇑g
⊢ (fun x => g x ^ (1 / c)) = ⇑f
tactic: constructor
state_before: case h.right
F : Type u_1
R✝ : Type u_2
S : Type u_3
x y : R✝
r : ℝ
inst✝⁴ : NonAssocRing R✝
inst✝³ : DecidableEq R✝
inst✝² : NoZeroDivisors R✝
inst✝¹ : Nontrivial R✝
R : Type u_4
inst✝ : Ring R
f g : MulRingNorm R
c : ℝ
hcpos : 0 < c
h : (fun x => f x ^ c) = ⇑g
⊢ (fun x => g x ^ (1 / c)) = ⇑f
state_after: case h.right.h
F : Type u_1
R✝ : Type u_2
S : Type u_3
x✝ y : R✝
r : ℝ
inst✝⁴ : NonAssocRing R✝
inst✝³ : DecidableEq R✝
inst✝² : NoZeroDivisors R✝
inst✝¹ : Nontrivial R✝
R : Type u_4
inst✝ : Ring R
f g : MulRingNorm R
c : ℝ
hcpos : 0 < c
h : (fun x => f x ^ c) = ⇑g
x : R
⊢ g x ^ (1 / c) = f x
tactic: ext x
state_before: case h.right.h
F : Type u_1
R✝ : Type u_2
S : Type u_3
x✝ y : R✝
r : ℝ
inst✝⁴ : NonAssocRing R✝
inst✝³ : DecidableEq R✝
inst✝² : NoZeroDivisors R✝
inst✝¹ : Nontrivial R✝
R : Type u_4
inst✝ : Ring R
f g : MulRingNorm R
c : ℝ
hcpos : 0 < c
h : (fun x => f x ^ c) = ⇑g
x : R
⊢ g x ^ (1 / c) = f x
state_after: no goals
tactic: simpa [← congr_fun h x] using Real.rpow_rpow_inv (apply_nonneg f x) (ne_of_lt hcpos).symm