Theorem: Rat.MulRingNorm.mulRingNorm_equiv_padic_of_bounded
File: Mathlib/NumberTheory/Ostrowski.lean

Proof steps:
state_before: f g : MulRingNorm ℚ
hf_nontriv : f ≠ 1
bdd : ∀ (n : ℕ), f ↑n ≤ 1
p : ℕ
hp0 : 0 < f ↑p
hp1 : f ↑p < 1
hmin : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p ≤ m
⊢ ∃! p, ∃ (hp : Fact (Nat.Prime p)), f.equiv (mulRingNorm_padic p)
state_after: case intro.intro
f g : MulRingNorm ℚ
hf_nontriv : f ≠ 1
bdd : ∀ (n : ℕ), f ↑n ≤ 1
p✝ : ℕ
hp0 : 0 < f ↑p✝
hp1 : f ↑p✝ < 1
hmin✝ : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p✝ ≤ m
p : ℕ
hfp : 0 < f ↑p ∧ f ↑p < 1
hmin : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p ≤ m
⊢ ∃! p, ∃ (hp : Fact (Nat.Prime p)), f.equiv (mulRingNorm_padic p)
tactic: obtain ⟨p, hfp, hmin⟩ := exists_minimal_nat_zero_lt_mulRingNorm_lt_one hf_nontriv bdd
state_before: case intro.intro
f g : MulRingNorm ℚ
hf_nontriv : f ≠ 1
bdd : ∀ (n : ℕ), f ↑n ≤ 1
p✝ : ℕ
hp0 : 0 < f ↑p✝
hp1 : f ↑p✝ < 1
hmin✝ : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p✝ ≤ m
p : ℕ
hfp : 0 < f ↑p ∧ f ↑p < 1
hmin : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p ≤ m
⊢ ∃! p, ∃ (hp : Fact (Nat.Prime p)), f.equiv (mulRingNorm_padic p)
state_after: case intro.intro
f g : MulRingNorm ℚ
hf_nontriv : f ≠ 1
bdd : ∀ (n : ℕ), f ↑n ≤ 1
p✝ : ℕ
hp0 : 0 < f ↑p✝
hp1 : f ↑p✝ < 1
hmin✝ : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p✝ ≤ m
p : ℕ
hfp : 0 < f ↑p ∧ f ↑p < 1
hmin : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p ≤ m
hprime : Nat.Prime p
⊢ ∃! p, ∃ (hp : Fact (Nat.Prime p)), f.equiv (mulRingNorm_padic p)
tactic: have hprime := is_prime_of_minimal_nat_zero_lt_mulRingNorm_lt_one hfp.1 hfp.2 hmin
state_before: case intro.intro
f g : MulRingNorm ℚ
hf_nontriv : f ≠ 1
bdd : ∀ (n : ℕ), f ↑n ≤ 1
p✝ : ℕ
hp0 : 0 < f ↑p✝
hp1 : f ↑p✝ < 1
hmin✝ : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p✝ ≤ m
p : ℕ
hfp : 0 < f ↑p ∧ f ↑p < 1
hmin : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p ≤ m
hprime : Nat.Prime p
⊢ ∃! p, ∃ (hp : Fact (Nat.Prime p)), f.equiv (mulRingNorm_padic p)
state_after: case intro.intro
f g : MulRingNorm ℚ
hf_nontriv : f ≠ 1
bdd : ∀ (n : ℕ), f ↑n ≤ 1
p✝ : ℕ
hp0 : 0 < f ↑p✝
hp1 : f ↑p✝ < 1
hmin✝ : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p✝ ≤ m
p : ℕ
hfp : 0 < f ↑p ∧ f ↑p < 1
hmin : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p ≤ m
hprime : Nat.Prime p
hprime_fact : Fact (Nat.Prime p)
⊢ ∃! p, ∃ (hp : Fact (Nat.Prime p)), f.equiv (mulRingNorm_padic p)
tactic: have hprime_fact : Fact (p.Prime) := ⟨hprime⟩
state_before: case intro.intro
f g : MulRingNorm ℚ
hf_nontriv : f ≠ 1
bdd : ∀ (n : ℕ), f ↑n ≤ 1
p✝ : ℕ
hp0 : 0 < f ↑p✝
hp1 : f ↑p✝ < 1
hmin✝ : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p✝ ≤ m
p : ℕ
hfp : 0 < f ↑p ∧ f ↑p < 1
hmin : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p ≤ m
hprime : Nat.Prime p
hprime_fact : Fact (Nat.Prime p)
⊢ ∃! p, ∃ (hp : Fact (Nat.Prime p)), f.equiv (mulRingNorm_padic p)
state_after: case intro.intro.intro
f g : MulRingNorm ℚ
hf_nontriv : f ≠ 1
bdd : ∀ (n : ℕ), f ↑n ≤ 1
p✝ : ℕ
hp0 : 0 < f ↑p✝
hp1 : f ↑p✝ < 1
hmin✝ : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p✝ ≤ m
p : ℕ
hfp : 0 < f ↑p ∧ f ↑p < 1
hmin : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p ≤ m
hprime : Nat.Prime p
hprime_fact : Fact (Nat.Prime p)
t : ℝ
h : 0 < t ∧ f ↑p = ↑p ^ (-t)
⊢ ∃! p, ∃ (hp : Fact (Nat.Prime p)), f.equiv (mulRingNorm_padic p)
tactic: obtain ⟨t, h⟩ := exists_pos_mulRingNorm_eq_pow_neg hfp.1 hfp.2 hmin
state_before: case intro.intro.intro
f g : MulRingNorm ℚ
hf_nontriv : f ≠ 1
bdd : ∀ (n : ℕ), f ↑n ≤ 1
p✝ : ℕ
hp0 : 0 < f ↑p✝
hp1 : f ↑p✝ < 1
hmin✝ : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p✝ ≤ m
p : ℕ
hfp : 0 < f ↑p ∧ f ↑p < 1
hmin : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p ≤ m
hprime : Nat.Prime p
hprime_fact : Fact (Nat.Prime p)
t : ℝ
h : 0 < t ∧ f ↑p = ↑p ^ (-t)
⊢ ∃! p, ∃ (hp : Fact (Nat.Prime p)), f.equiv (mulRingNorm_padic p)
state_after: case intro.intro.intro
f g : MulRingNorm ℚ
hf_nontriv : f ≠ 1
bdd : ∀ (n : ℕ), f ↑n ≤ 1
p✝ : ℕ
hp0 : 0 < f ↑p✝
hp1 : f ↑p✝ < 1
hmin✝ : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p✝ ≤ m
p : ℕ
hfp : 0 < f ↑p ∧ f ↑p < 1
hmin : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p ≤ m
hprime : Nat.Prime p
hprime_fact : Fact (Nat.Prime p)
t : ℝ
h : 0 < t ∧ f ↑p = ↑p ^ (-t)
⊢ ∃! p, ∃ (h : Fact (Nat.Prime p)), ∃ c, 0 < c ∧ ∀ (n : ℕ), f ↑n ^ c = (mulRingNorm_padic p) ↑n
tactic: simp_rw [← equiv_on_nat_iff_equiv]
state_before: case intro.intro.intro
f g : MulRingNorm ℚ
hf_nontriv : f ≠ 1
bdd : ∀ (n : ℕ), f ↑n ≤ 1
p✝ : ℕ
hp0 : 0 < f ↑p✝
hp1 : f ↑p✝ < 1
hmin✝ : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p✝ ≤ m
p : ℕ
hfp : 0 < f ↑p ∧ f ↑p < 1
hmin : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p ≤ m
hprime : Nat.Prime p
hprime_fact : Fact (Nat.Prime p)
t : ℝ
h : 0 < t ∧ f ↑p = ↑p ^ (-t)
⊢ ∃! p, ∃ (h : Fact (Nat.Prime p)), ∃ c, 0 < c ∧ ∀ (n : ℕ), f ↑n ^ c = (mulRingNorm_padic p) ↑n
state_after: case h
f g : MulRingNorm ℚ
hf_nontriv : f ≠ 1
bdd : ∀ (n : ℕ), f ↑n ≤ 1
p✝ : ℕ
hp0 : 0 < f ↑p✝
hp1 : f ↑p✝ < 1
hmin✝ : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p✝ ≤ m
p : ℕ
hfp : 0 < f ↑p ∧ f ↑p < 1
hmin : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p ≤ m
hprime : Nat.Prime p
hprime_fact : Fact (Nat.Prime p)
t : ℝ
h : 0 < t ∧ f ↑p = ↑p ^ (-t)
⊢ (fun p => ∃ (h : Fact (Nat.Prime p)), ∃ c, 0 < c ∧ ∀ (n : ℕ), f ↑n ^ c = (mulRingNorm_padic p) ↑n) p ∧
    ∀ (y : ℕ),
      (fun p => ∃ (h : Fact (Nat.Prime p)), ∃ c, 0 < c ∧ ∀ (n : ℕ), f ↑n ^ c = (mulRingNorm_padic p) ↑n) y → y = p
tactic: use p
state_before: case h
f g : MulRingNorm ℚ
hf_nontriv : f ≠ 1
bdd : ∀ (n : ℕ), f ↑n ≤ 1
p✝ : ℕ
hp0 : 0 < f ↑p✝
hp1 : f ↑p✝ < 1
hmin✝ : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p✝ ≤ m
p : ℕ
hfp : 0 < f ↑p ∧ f ↑p < 1
hmin : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p ≤ m
hprime : Nat.Prime p
hprime_fact : Fact (Nat.Prime p)
t : ℝ
h : 0 < t ∧ f ↑p = ↑p ^ (-t)
⊢ (fun p => ∃ (h : Fact (Nat.Prime p)), ∃ c, 0 < c ∧ ∀ (n : ℕ), f ↑n ^ c = (mulRingNorm_padic p) ↑n) p ∧
    ∀ (y : ℕ),
      (fun p => ∃ (h : Fact (Nat.Prime p)), ∃ c, 0 < c ∧ ∀ (n : ℕ), f ↑n ^ c = (mulRingNorm_padic p) ↑n) y → y = p
state_after: case h.left
f g : MulRingNorm ℚ
hf_nontriv : f ≠ 1
bdd : ∀ (n : ℕ), f ↑n ≤ 1
p✝ : ℕ
hp0 : 0 < f ↑p✝
hp1 : f ↑p✝ < 1
hmin✝ : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p✝ ≤ m
p : ℕ
hfp : 0 < f ↑p ∧ f ↑p < 1
hmin : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p ≤ m
hprime : Nat.Prime p
hprime_fact : Fact (Nat.Prime p)
t : ℝ
h : 0 < t ∧ f ↑p = ↑p ^ (-t)
⊢ (fun p => ∃ (h : Fact (Nat.Prime p)), ∃ c, 0 < c ∧ ∀ (n : ℕ), f ↑n ^ c = (mulRingNorm_padic p) ↑n) p

case h.right
f g : MulRingNorm ℚ
hf_nontriv : f ≠ 1
bdd : ∀ (n : ℕ), f ↑n ≤ 1
p✝ : ℕ
hp0 : 0 < f ↑p✝
hp1 : f ↑p✝ < 1
hmin✝ : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p✝ ≤ m
p : ℕ
hfp : 0 < f ↑p ∧ f ↑p < 1
hmin : ∀ (m : ℕ), 0 < f ↑m ∧ f ↑m < 1 → p ≤ m
hprime : Nat.Prime p
hprime_fact : Fact (Nat.Prime p)
t : ℝ
h : 0 < t ∧ f ↑p = ↑p ^ (-t)
⊢ ∀ (y : ℕ),
    (fun p => ∃ (h : Fact (Nat.Prime p)), ∃ c, 0 < c ∧ ∀ (n : ℕ), f ↑n ^ c = (mulRingNorm_padic p) ↑n) y → y = p
tactic: constructor