Built with doc-gen4, running Lean4. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓to navigate, Ctrl+πŸ–±οΈto focus. On Mac, use Cmdinstead of Ctrl.
/-
Copyright (c) 2022 Bhavik Mehta. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Bhavik Mehta

! This file was ported from Lean 3 source module algebra.is_prime_pow
! leanprover-community/mathlib commit f7fc89d5d5ff1db2d1242c7bb0e9062ce47ef47c
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Algebra.Associated
import Mathlib.NumberTheory.Divisors

/-!
# Prime powers

This file deals with prime powers: numbers which are positive integer powers of a single prime.
-/


variable {
R: Type ?u.14
R
:
Type _: Type (?u.83807+1)
Type _
} [
CommMonoidWithZero: Type ?u.58671 β†’ Type ?u.58671
CommMonoidWithZero
R: Type ?u.14
R
] (
n: R
n
p: R
p
:
R: Type ?u.2
R
) (k :
β„•: Type
β„•
) /-- `n` is a prime power if there is a prime `p` and a positive natural `k` such that `n` can be written as `p^k`. -/ def
IsPrimePow: {R : Type u_1} β†’ [inst : CommMonoidWithZero R] β†’ R β†’ Prop
IsPrimePow
:
Prop: Type
Prop
:= βˆƒ (
p: R
p
:
R: Type ?u.14
R
)(k :
β„•: Type
β„•
),
Prime: {Ξ± : Type ?u.35} β†’ [inst : CommMonoidWithZero Ξ±] β†’ Ξ± β†’ Prop
Prime
p: R
p
∧
0: ?m.47
0
< k ∧
p: R
p
^ k =
n: R
n
#align is_prime_pow
IsPrimePow: {R : Type u_1} β†’ [inst : CommMonoidWithZero R] β†’ R β†’ Prop
IsPrimePow
theorem
isPrimePow_def: IsPrimePow n ↔ βˆƒ p k, Prime p ∧ 0 < k ∧ p ^ k = n
isPrimePow_def
:
IsPrimePow: {R : Type ?u.18636} β†’ [inst : CommMonoidWithZero R] β†’ R β†’ Prop
IsPrimePow
n: R
n
↔ βˆƒ (
p: R
p
:
R: Type ?u.18624
R
)(k :
β„•: Type
β„•
),
Prime: {Ξ± : Type ?u.18654} β†’ [inst : CommMonoidWithZero Ξ±] β†’ Ξ± β†’ Prop
Prime
p: R
p
∧
0: ?m.18659
0
< k ∧
p: R
p
^ k =
n: R
n
:=
Iff.rfl: βˆ€ {a : Prop}, a ↔ a
Iff.rfl
#align is_prime_pow_def
isPrimePow_def: βˆ€ {R : Type u_1} [inst : CommMonoidWithZero R] (n : R), IsPrimePow n ↔ βˆƒ p k, Prime p ∧ 0 < k ∧ p ^ k = n
isPrimePow_def
/-- An equivalent definition for prime powers: `n` is a prime power iff there is a prime `p` and a natural `k` such that `n` can be written as `p^(k+1)`. -/ theorem
isPrimePow_iff_pow_succ: βˆ€ {R : Type u_1} [inst : CommMonoidWithZero R] (n : R), IsPrimePow n ↔ βˆƒ p k, Prime p ∧ p ^ (k + 1) = n
isPrimePow_iff_pow_succ
:
IsPrimePow: {R : Type ?u.37245} β†’ [inst : CommMonoidWithZero R] β†’ R β†’ Prop
IsPrimePow
n: R
n
↔ βˆƒ (
p: R
p
:
R: Type ?u.37233
R
)(k :
β„•: Type
β„•
),
Prime: {Ξ± : Type ?u.37263} β†’ [inst : CommMonoidWithZero Ξ±] β†’ Ξ± β†’ Prop
Prime
p: R
p
∧
p: R
p
^ (k +
1: ?m.37274
1
) =
n: R
n
:= (
isPrimePow_def: βˆ€ {R : Type ?u.56002} [inst : CommMonoidWithZero R] (n : R), IsPrimePow n ↔ βˆƒ p k, Prime p ∧ 0 < k ∧ p ^ k = n
isPrimePow_def
_: ?m.56003
_
).
trans: βˆ€ {a b c : Prop}, (a ↔ b) β†’ (b ↔ c) β†’ (a ↔ c)
trans
⟨fun ⟨
p: R
p
, k,
hp: Prime p
hp
,
hk: 0 < k
hk
,
hn: p ^ k = n
hn
⟩ => ⟨
_: ?m.56133
_
,
_: ?m.56142
_
,
hp: Prime p
hp
,

Goals accomplished! πŸ™
R: Type u_1

inst✝: CommMonoidWithZero R

n, p✝: R

k✝: β„•

x✝: βˆƒ p k, Prime p ∧ 0 < k ∧ p ^ k = n

p: R

k: β„•

hp: Prime p

hk: 0 < k

hn: p ^ k = n


p ^ (?m.56323 x✝ p k hp hk hn + 1) = n
R: Type u_1

inst✝: CommMonoidWithZero R

n, p✝: R

k✝: β„•

x✝: βˆƒ p k, Prime p ∧ 0 < k ∧ p ^ k = n

p: R

k: β„•

hp: Prime p

hk: 0 < k

hn: p ^ k = n


p ^ (?m.56323 x✝ p k hp hk hn + 1) = n
R: Type u_1

inst✝: CommMonoidWithZero R

n, p✝: R

k✝: β„•

x✝: βˆƒ p k, Prime p ∧ 0 < k ∧ p ^ k = n

p: R

k: β„•

hp: Prime p

hk: 0 < k

hn: p ^ k = n


p ^ k = n
R: Type u_1

inst✝: CommMonoidWithZero R

n, p✝: R

k✝: β„•

x✝: βˆƒ p k, Prime p ∧ 0 < k ∧ p ^ k = n

p: R

k: β„•

hp: Prime p

hk: 0 < k

hn: p ^ k = n


p ^ k = n
⟩, fun ⟨
p: R
p
, k,
hp: Prime p
hp
,
hn: p ^ (k + 1) = n
hn
⟩ => ⟨
_: ?m.56409
_
,
_: ?m.56418
_
,
hp: Prime p
hp
,
Nat.succ_pos': βˆ€ {n : β„•}, 0 < Nat.succ n
Nat.succ_pos'
,
hn: p ^ (k + 1) = n
hn
⟩⟩ #align is_prime_pow_iff_pow_succ
isPrimePow_iff_pow_succ: βˆ€ {R : Type u_1} [inst : CommMonoidWithZero R] (n : R), IsPrimePow n ↔ βˆƒ p k, Prime p ∧ p ^ (k + 1) = n
isPrimePow_iff_pow_succ
theorem
not_isPrimePow_zero: βˆ€ {R : Type u_1} [inst : CommMonoidWithZero R] [inst_1 : NoZeroDivisors R], Β¬IsPrimePow 0
not_isPrimePow_zero
[
NoZeroDivisors: (Mβ‚€ : Type ?u.56650) β†’ [inst : Mul Mβ‚€] β†’ [inst : Zero Mβ‚€] β†’ Prop
NoZeroDivisors
R: Type ?u.56638
R
] : Β¬
IsPrimePow: {R : Type ?u.57010} β†’ [inst : CommMonoidWithZero R] β†’ R β†’ Prop
IsPrimePow
(
0: ?m.57015
0
:
R: Type ?u.56638
R
) :=

Goals accomplished! πŸ™
R: Type u_1

inst✝¹: CommMonoidWithZero R

n, p: R

k: β„•

inst✝: NoZeroDivisors R


R: Type u_1

inst✝¹: CommMonoidWithZero R

n, p: R

k: β„•

inst✝: NoZeroDivisors R


βˆ€ (x : R) (x_1 : β„•), 0 < x_1 β†’ x ^ x_1 = 0 β†’ Β¬Prime x
R: Type u_1

inst✝¹: CommMonoidWithZero R

n, p: R

k: β„•

inst✝: NoZeroDivisors R


R: Type u_1

inst✝¹: CommMonoidWithZero R

n✝, p: R

k: β„•

inst✝: NoZeroDivisors R

x: R

n: β„•

_hn: 0 < n

hx: x ^ n = 0


R: Type u_1

inst✝¹: CommMonoidWithZero R

n, p: R

k: β„•

inst✝: NoZeroDivisors R


R: Type u_1

inst✝¹: CommMonoidWithZero R

n✝, p: R

k: β„•

inst✝: NoZeroDivisors R

x: R

n: β„•

_hn: 0 < n

hx: x ^ n = 0


R: Type u_1

inst✝¹: CommMonoidWithZero R

n✝, p: R

k: β„•

inst✝: NoZeroDivisors R

x: R

n: β„•

_hn: 0 < n

hx: x ^ n = 0


R: Type u_1

inst✝¹: CommMonoidWithZero R

n✝, p: R

k: β„•

inst✝: NoZeroDivisors R

x: R

n: β„•

_hn: 0 < n

hx: x ^ n = 0


R: Type u_1

inst✝¹: CommMonoidWithZero R

n, p: R

k: β„•

inst✝: NoZeroDivisors R



Goals accomplished! πŸ™
#align not_is_prime_pow_zero
not_isPrimePow_zero: βˆ€ {R : Type u_1} [inst : CommMonoidWithZero R] [inst_1 : NoZeroDivisors R], Β¬IsPrimePow 0
not_isPrimePow_zero
theorem
IsPrimePow.not_unit: βˆ€ {R : Type u_1} [inst : CommMonoidWithZero R] {n : R}, IsPrimePow n β†’ Β¬IsUnit n
IsPrimePow.not_unit
{
n: R
n
:
R: Type ?u.57729
R
} (h :
IsPrimePow: {R : Type ?u.57743} β†’ [inst : CommMonoidWithZero R] β†’ R β†’ Prop
IsPrimePow
n: R
n
) : Β¬
IsUnit: {M : Type ?u.57769} β†’ [inst : Monoid M] β†’ M β†’ Prop
IsUnit
n: R
n
:= let ⟨
_p: R
_p
,
_k: β„•
_k
,
hp: Prime _p
hp
,
hk: 0 < _k
hk
,
hn: _p ^ _k = n
hn
⟩ := h
hn: _p ^ _k = n
hn
β–Έ (
isUnit_pow_iff: βˆ€ {M : Type ?u.58085} [inst : Monoid M] {a : M} {n : β„•}, n β‰  0 β†’ (IsUnit (a ^ n) ↔ IsUnit a)
isUnit_pow_iff
hk: 0 < _k
hk
.
ne': βˆ€ {Ξ± : Type ?u.58090} [inst : Preorder Ξ±] {x y : Ξ±}, x < y β†’ y β‰  x
ne'
).
not: βˆ€ {a b : Prop}, (a ↔ b) β†’ (Β¬a ↔ Β¬b)
not
.
mpr: βˆ€ {a b : Prop}, (a ↔ b) β†’ b β†’ a
mpr
hp: Prime _p
hp
.
not_unit: βˆ€ {Ξ± : Type ?u.58242} [inst : CommMonoidWithZero Ξ±] {p : Ξ±}, Prime p β†’ Β¬IsUnit p
not_unit
#align is_prime_pow.not_unit
IsPrimePow.not_unit: βˆ€ {R : Type u_1} [inst : CommMonoidWithZero R] {n : R}, IsPrimePow n β†’ Β¬IsUnit n
IsPrimePow.not_unit
theorem
IsUnit.not_isPrimePow: βˆ€ {R : Type u_1} [inst : CommMonoidWithZero R] {n : R}, IsUnit n β†’ Β¬IsPrimePow n
IsUnit.not_isPrimePow
{
n: R
n
:
R: Type ?u.58668
R
} (
h: IsUnit n
h
:
IsUnit: {M : Type ?u.58682} β†’ [inst : Monoid M] β†’ M β†’ Prop
IsUnit
n: R
n
) : Β¬
IsPrimePow: {R : Type ?u.58939} β†’ [inst : CommMonoidWithZero R] β†’ R β†’ Prop
IsPrimePow
n: R
n
:= fun
h': ?m.58953
h'
=>
h': ?m.58953
h'
.
not_unit: βˆ€ {R : Type ?u.58955} [inst : CommMonoidWithZero R] {n : R}, IsPrimePow n β†’ Β¬IsUnit n
not_unit
h: IsUnit n
h
#align is_unit.not_is_prime_pow
IsUnit.not_isPrimePow: βˆ€ {R : Type u_1} [inst : CommMonoidWithZero R] {n : R}, IsUnit n β†’ Β¬IsPrimePow n
IsUnit.not_isPrimePow
theorem
not_isPrimePow_one: Β¬IsPrimePow 1
not_isPrimePow_one
: Β¬
IsPrimePow: {R : Type ?u.58996} β†’ [inst : CommMonoidWithZero R] β†’ R β†’ Prop
IsPrimePow
(
1: ?m.59001
1
:
R: Type ?u.58984
R
) :=
isUnit_one: βˆ€ {M : Type ?u.59413} [inst : Monoid M], IsUnit 1
isUnit_one
.
not_isPrimePow: βˆ€ {R : Type ?u.59437} [inst : CommMonoidWithZero R] {n : R}, IsUnit n β†’ Β¬IsPrimePow n
not_isPrimePow
#align not_is_prime_pow_one
not_isPrimePow_one: βˆ€ {R : Type u_1} [inst : CommMonoidWithZero R], Β¬IsPrimePow 1
not_isPrimePow_one
theorem
Prime.isPrimePow: βˆ€ {p : R}, Prime p β†’ IsPrimePow p
Prime.isPrimePow
{
p: R
p
:
R: Type ?u.59707
R
} (
hp: Prime p
hp
:
Prime: {Ξ± : Type ?u.59721} β†’ [inst : CommMonoidWithZero Ξ±] β†’ Ξ± β†’ Prop
Prime
p: R
p
) :
IsPrimePow: {R : Type ?u.59747} β†’ [inst : CommMonoidWithZero R] β†’ R β†’ Prop
IsPrimePow
p: R
p
:= ⟨
p: R
p
,
1: ?m.59794
1
,
hp: Prime p
hp
,
zero_lt_one: βˆ€ {Ξ± : Type ?u.59818} [inst : Zero Ξ±] [inst_1 : One Ξ±] [inst_2 : PartialOrder Ξ±] [inst_3 : ZeroLEOneClass Ξ±] [inst_4 : NeZero 1], 0 < 1
zero_lt_one
,

Goals accomplished! πŸ™
R: Type u_1

inst✝: CommMonoidWithZero R

n, p✝: R

k: β„•

p: R

hp: Prime p


p ^ 1 = p

Goals accomplished! πŸ™
⟩ #align prime.is_prime_pow
Prime.isPrimePow: βˆ€ {R : Type u_1} [inst : CommMonoidWithZero R] {p : R}, Prime p β†’ IsPrimePow p
Prime.isPrimePow
theorem
IsPrimePow.pow: βˆ€ {n : R}, IsPrimePow n β†’ βˆ€ {k : β„•}, k β‰  0 β†’ IsPrimePow (n ^ k)
IsPrimePow.pow
{
n: R
n
:
R: Type ?u.60643
R
} (hn :
IsPrimePow: {R : Type ?u.60657} β†’ [inst : CommMonoidWithZero R] β†’ R β†’ Prop
IsPrimePow
n: R
n
) {k :
β„•: Type
β„•
} (
hk: k β‰  0
hk
: k β‰ 
0: ?m.60688
0
) :
IsPrimePow: {R : Type ?u.60700} β†’ [inst : CommMonoidWithZero R] β†’ R β†’ Prop
IsPrimePow
(
n: R
n
^ k) := let ⟨
p: R
p
,
k': β„•
k'
,
hp: Prime p
hp
,
hk': 0 < k'
hk'
,
hn: p ^ k' = n
hn
⟩ := hn ⟨
p: R
p
, k *
k': β„•
k'
,
hp: Prime p
hp
,
mul_pos: βˆ€ {Ξ± : Type ?u.79410} {a b : Ξ±} [inst : MulZeroClass Ξ±] [inst_1 : Preorder Ξ±] [inst_2 : PosMulStrictMono Ξ±], 0 < a β†’ 0 < b β†’ 0 < a * b
mul_pos
hk: k β‰  0
hk
.
bot_lt: βˆ€ {Ξ± : Type ?u.79689} [inst : PartialOrder Ξ±] [inst_1 : OrderBot Ξ±] {a : Ξ±}, a β‰  βŠ₯ β†’ βŠ₯ < a
bot_lt
hk': 0 < k'
hk'
,

Goals accomplished! πŸ™
R: Type u_1

inst✝: CommMonoidWithZero R

n✝, p✝: R

k✝: β„•

n: R

hn✝: IsPrimePow n

k: β„•

hk: k β‰  0

p: R

k': β„•

hp: Prime p

hk': 0 < k'

hn: p ^ k' = n


p ^ (k * k') = n ^ k
R: Type u_1

inst✝: CommMonoidWithZero R

n✝, p✝: R

k✝: β„•

n: R

hn✝: IsPrimePow n

k: β„•

hk: k β‰  0

p: R

k': β„•

hp: Prime p

hk': 0 < k'

hn: p ^ k' = n


p ^ (k * k') = n ^ k
R: Type u_1

inst✝: CommMonoidWithZero R

n✝, p✝: R

k✝: β„•

n: R

hn✝: IsPrimePow n

k: β„•

hk: k β‰  0

p: R

k': β„•

hp: Prime p

hk': 0 < k'

hn: p ^ k' = n


(p ^ k') ^ k = n ^ k
R: Type u_1

inst✝: CommMonoidWithZero R

n✝, p✝: R

k✝: β„•

n: R

hn✝: IsPrimePow n

k: β„•

hk: k β‰  0

p: R

k': β„•

hp: Prime p

hk': 0 < k'

hn: p ^ k' = n


p ^ (k * k') = n ^ k
R: Type u_1

inst✝: CommMonoidWithZero R

n✝, p✝: R

k✝: β„•

n: R

hn✝: IsPrimePow n

k: β„•

hk: k β‰  0

p: R

k': β„•

hp: Prime p

hk': 0 < k'

hn: p ^ k' = n


n ^ k = n ^ k

Goals accomplished! πŸ™
⟩ #align is_prime_pow.pow
IsPrimePow.pow: βˆ€ {R : Type u_1} [inst : CommMonoidWithZero R] {n : R}, IsPrimePow n β†’ βˆ€ {k : β„•}, k β‰  0 β†’ IsPrimePow (n ^ k)
IsPrimePow.pow
theorem
IsPrimePow.ne_zero: βˆ€ [inst : NoZeroDivisors R] {n : R}, IsPrimePow n β†’ n β‰  0
IsPrimePow.ne_zero
[
NoZeroDivisors: (Mβ‚€ : Type ?u.80378) β†’ [inst : Mul Mβ‚€] β†’ [inst : Zero Mβ‚€] β†’ Prop
NoZeroDivisors
R: Type ?u.80366
R
] {
n: R
n
:
R: Type ?u.80366
R
} (h :
IsPrimePow: {R : Type ?u.80740} β†’ [inst : CommMonoidWithZero R] β†’ R β†’ Prop
IsPrimePow
n: R
n
) :
n: R
n
β‰ 
0: ?m.80767
0
:= fun
t: ?m.80809
t
=>
not_isPrimePow_zero: βˆ€ {R : Type ?u.80811} [inst : CommMonoidWithZero R] [inst_1 : NoZeroDivisors R], Β¬IsPrimePow 0
not_isPrimePow_zero
(
t: ?m.80809
t
β–Έ h) #align is_prime_pow.ne_zero
IsPrimePow.ne_zero: βˆ€ {R : Type u_1} [inst : CommMonoidWithZero R] [inst_1 : NoZeroDivisors R] {n : R}, IsPrimePow n β†’ n β‰  0
IsPrimePow.ne_zero
theorem
IsPrimePow.ne_one: βˆ€ {R : Type u_1} [inst : CommMonoidWithZero R] {n : R}, IsPrimePow n β†’ n β‰  1
IsPrimePow.ne_one
{
n: R
n
:
R: Type ?u.81038
R
} (h :
IsPrimePow: {R : Type ?u.81052} β†’ [inst : CommMonoidWithZero R] β†’ R β†’ Prop
IsPrimePow
n: R
n
) :
n: R
n
β‰ 
1: ?m.81081
1
:= fun
t: ?m.81491
t
=>
not_isPrimePow_one: βˆ€ {R : Type ?u.81493} [inst : CommMonoidWithZero R], Β¬IsPrimePow 1
not_isPrimePow_one
(
t: ?m.81491
t
β–Έ h) #align is_prime_pow.ne_one
IsPrimePow.ne_one: βˆ€ {R : Type u_1} [inst : CommMonoidWithZero R] {n : R}, IsPrimePow n β†’ n β‰  1
IsPrimePow.ne_one
section Nat theorem
isPrimePow_nat_iff: βˆ€ (n : β„•), IsPrimePow n ↔ βˆƒ p k, Nat.Prime p ∧ 0 < k ∧ p ^ k = n
isPrimePow_nat_iff
(n :
β„•: Type
β„•
) :
IsPrimePow: {R : Type ?u.81652} β†’ [inst : CommMonoidWithZero R] β†’ R β†’ Prop
IsPrimePow
n ↔ βˆƒ p k :
β„•: Type
β„•
,
Nat.Prime: β„• β†’ Prop
Nat.Prime
p ∧
0: ?m.81677
0
< k ∧ p ^ k = n :=

Goals accomplished! πŸ™
R: Type ?u.81638

inst✝: CommMonoidWithZero R

n✝, p: R

k, n: β„•


IsPrimePow n ↔ βˆƒ p k, Nat.Prime p ∧ 0 < k ∧ p ^ k = n

Goals accomplished! πŸ™
#align is_prime_pow_nat_iff
isPrimePow_nat_iff: βˆ€ (n : β„•), IsPrimePow n ↔ βˆƒ p k, Nat.Prime p ∧ 0 < k ∧ p ^ k = n
isPrimePow_nat_iff
theorem
Nat.Prime.isPrimePow: βˆ€ {p : β„•}, Prime p β†’ IsPrimePow p
Nat.Prime.isPrimePow
{p :
β„•: Type
β„•
} (
hp: Prime p
hp
: p.
Prime: β„• β†’ Prop
Prime
) :
IsPrimePow: {R : Type ?u.82161} β†’ [inst : CommMonoidWithZero R] β†’ R β†’ Prop
IsPrimePow
p :=
_root_.Prime.isPrimePow: βˆ€ {R : Type ?u.82195} [inst : CommMonoidWithZero R] {p : R}, _root_.Prime p β†’ IsPrimePow p
_root_.Prime.isPrimePow
(
prime_iff: βˆ€ {p : β„•}, Prime p ↔ _root_.Prime p
prime_iff
.
mp: βˆ€ {a b : Prop}, (a ↔ b) β†’ a β†’ b
mp
hp: Prime p
hp
) #align nat.prime.is_prime_pow
Nat.Prime.isPrimePow: βˆ€ {p : β„•}, Nat.Prime p β†’ IsPrimePow p
Nat.Prime.isPrimePow
theorem
isPrimePow_nat_iff_bounded: βˆ€ (n : β„•), IsPrimePow n ↔ βˆƒ p, p ≀ n ∧ βˆƒ k, k ≀ n ∧ Nat.Prime p ∧ 0 < k ∧ p ^ k = n
isPrimePow_nat_iff_bounded
(n :
β„•: Type
β„•
) :
IsPrimePow: {R : Type ?u.82241} β†’ [inst : CommMonoidWithZero R] β†’ R β†’ Prop
IsPrimePow
n ↔ βˆƒ p :
β„•: Type
β„•
, p ≀ n ∧ βˆƒ k :
β„•: Type
β„•
, k ≀ n ∧ p.
Prime: β„• β†’ Prop
Prime
∧
0: ?m.82276
0
< k ∧ p ^ k = n :=

Goals accomplished! πŸ™
R: Type ?u.82227

inst✝: CommMonoidWithZero R

n✝, p: R

k, n: β„•


IsPrimePow n ↔ βˆƒ p, p ≀ n ∧ βˆƒ k, k ≀ n ∧ Nat.Prime p ∧ 0 < k ∧ p ^ k = n
R: Type ?u.82227

inst✝: CommMonoidWithZero R

n✝, p: R

k, n: β„•


IsPrimePow n ↔ βˆƒ p, p ≀ n ∧ βˆƒ k, k ≀ n ∧ Nat.Prime p ∧ 0 < k ∧ p ^ k = n
R: Type ?u.82227

inst✝: CommMonoidWithZero R

n✝, p: R

k, n: β„•


(βˆƒ p k, Nat.Prime p ∧ 0 < k ∧ p ^ k = n) ↔ βˆƒ p, p ≀ n ∧ βˆƒ k, k ≀ n ∧ Nat.Prime p ∧ 0 < k ∧ p ^ k = n
R: Type ?u.82227

inst✝: CommMonoidWithZero R

n✝, p: R

k, n: β„•


(βˆƒ p k, Nat.Prime p ∧ 0 < k ∧ p ^ k = n) ↔ βˆƒ p, p ≀ n ∧ βˆƒ k, k ≀ n ∧ Nat.Prime p ∧ 0 < k ∧ p ^ k = n
R: Type ?u.82227

inst✝: CommMonoidWithZero R

n✝, p: R

k, n: β„•


IsPrimePow n ↔ βˆƒ p, p ≀ n ∧ βˆƒ k, k ≀ n ∧ Nat.Prime p ∧ 0 < k ∧ p ^ k = n
R: Type ?u.82227

inst✝: CommMonoidWithZero R

n✝, p: R

k, n: β„•


(βˆƒ p k, Nat.Prime p ∧ 0 < k ∧ p ^ k = n) β†’ βˆƒ p, p ≀ n ∧ βˆƒ k, k ≀ n ∧ Nat.Prime p ∧ 0 < k ∧ p ^ k = n
R: Type ?u.82227

inst✝: CommMonoidWithZero R

n✝, p: R

k, n: β„•


IsPrimePow n ↔ βˆƒ p, p ≀ n ∧ βˆƒ k, k ≀ n ∧ Nat.Prime p ∧ 0 < k ∧ p ^ k = n
R: Type ?u.82227

inst✝: CommMonoidWithZero R

n, p✝: R

k✝, p, k: β„•

hp: Nat.Prime p

hk: 0 < k


intro.intro.intro.intro
βˆƒ p_1, p_1 ≀ p ^ k ∧ βˆƒ k_1, k_1 ≀ p ^ k ∧ Nat.Prime p_1 ∧ 0 < k_1 ∧ p_1 ^ k_1 = p ^ k
R: Type ?u.82227

inst✝: CommMonoidWithZero R

n✝, p: R

k, n: β„•


IsPrimePow n ↔ βˆƒ p, p ≀ n ∧ βˆƒ k, k ≀ n ∧ Nat.Prime p ∧ 0 < k ∧ p ^ k = n
R: Type ?u.82227

inst✝: CommMonoidWithZero R

n, p✝: R

k✝, p, k: β„•

hp: Nat.Prime p

hk: 0 < k


intro.intro.intro.intro
p ≀ p ^ k
R: Type ?u.82227

inst✝: CommMonoidWithZero R

n✝, p: R

k, n: β„•


IsPrimePow n ↔ βˆƒ p, p ≀ n ∧ βˆƒ k, k ≀ n ∧ Nat.Prime p ∧ 0 < k ∧ p ^ k = n

Goals accomplished! πŸ™
R: Type ?u.82227

inst✝: CommMonoidWithZero R

n, p✝: R

k✝, p, k: β„•

hp: Nat.Prime p

hk: 0 < k


intro.intro.intro.intro
p ≀ p ^ k
R: Type ?u.82227

inst✝: CommMonoidWithZero R

n, p✝: R

k✝, p, k: β„•

hp: Nat.Prime p

hk: 0 < k


p ≀ p ^ k
R: Type ?u.82227

inst✝: CommMonoidWithZero R

n, p✝: R

k✝, p, k: β„•

hp: Nat.Prime p

hk: 0 < k


p ≀ p ^ k
R: Type ?u.82227

inst✝: CommMonoidWithZero R

n, p✝: R

k✝, p, k: β„•

hp: Nat.Prime p

hk: 0 < k


p
R: Type ?u.82227

inst✝: CommMonoidWithZero R

n, p✝: R

k✝, p, k: β„•

hp: Nat.Prime p

hk: 0 < k


p
R: Type ?u.82227

inst✝: CommMonoidWithZero R

n, p✝: R

k✝, p, k: β„•

hp: Nat.Prime p

hk: 0 < k


p ≀ p ^ k
R: Type ?u.82227

inst✝: CommMonoidWithZero R

n, p✝: R

k✝, p, k: β„•

hp: Nat.Prime p

hk: 0 < k


p
R: Type ?u.82227

inst✝: CommMonoidWithZero R

n, p✝: R

k✝, p, k: β„•

hp: Nat.Prime p

hk: 0 < k


p ^ 1
R: Type ?u.82227

inst✝: CommMonoidWithZero R

n, p✝: R

k✝, p, k: β„•

hp: Nat.Prime p

hk: 0 < k


p ^ 1

Goals accomplished! πŸ™
R: Type ?u.82227

inst✝: CommMonoidWithZero R

n✝, p: R

k, n: β„•


IsPrimePow n ↔ βˆƒ p, p ≀ n ∧ βˆƒ k, k ≀ n ∧ Nat.Prime p ∧ 0 < k ∧ p ^ k = n

Goals accomplished! πŸ™
#align is_prime_pow_nat_iff_bounded
isPrimePow_nat_iff_bounded: βˆ€ (n : β„•), IsPrimePow n ↔ βˆƒ p, p ≀ n ∧ βˆƒ k, k ≀ n ∧ Nat.Prime p ∧ 0 < k ∧ p ^ k = n
isPrimePow_nat_iff_bounded
instance: {n : β„•} β†’ Decidable (IsPrimePow n)
instance
{n :
β„•: Type
β„•
} :
Decidable: Prop β†’ Type
Decidable
(
IsPrimePow: {R : Type ?u.83287} β†’ [inst : CommMonoidWithZero R] β†’ R β†’ Prop
IsPrimePow
n) :=
decidable_of_iff': {a : Prop} β†’ (b : Prop) β†’ (a ↔ b) β†’ [inst : Decidable b] β†’ Decidable a
decidable_of_iff'
_: Prop
_
(
isPrimePow_nat_iff_bounded: βˆ€ (n : β„•), IsPrimePow n ↔ βˆƒ p, p ≀ n ∧ βˆƒ k, k ≀ n ∧ Nat.Prime p ∧ 0 < k ∧ p ^ k = n
isPrimePow_nat_iff_bounded
n) theorem
IsPrimePow.dvd: βˆ€ {n m : β„•}, IsPrimePow n β†’ m ∣ n β†’ m β‰  1 β†’ IsPrimePow m
IsPrimePow.dvd
{n m :
β„•: Type
β„•
} (hn :
IsPrimePow: {R : Type ?u.83823} β†’ [inst : CommMonoidWithZero R] β†’ R β†’ Prop
IsPrimePow
n) (
hm: m ∣ n
hm
: m ∣ n) (
hm₁: m β‰  1
hm₁
: m β‰ 
1: ?m.83868
1
) :
IsPrimePow: {R : Type ?u.83880} β†’ [inst : CommMonoidWithZero R] β†’ R β†’ Prop
IsPrimePow
m :=

Goals accomplished! πŸ™
R: Type ?u.83807

inst✝: CommMonoidWithZero R

n✝, p: R

k, n, m: β„•

hn: IsPrimePow n

hm: m ∣ n

hm₁: m β‰  1


R: Type ?u.83807

inst✝: CommMonoidWithZero R

n✝, p: R

k, n, m: β„•

hn: IsPrimePow n

hm: m ∣ n

hm₁: m β‰  1


R: Type ?u.83807

inst✝: CommMonoidWithZero R

n✝, p: R

k, n, m: β„•

hn: βˆƒ p k, Nat.Prime p ∧ 0 < k ∧ p ^ k = n

hm: m ∣ n

hm₁: m β‰  1


βˆƒ p k, Nat.Prime p ∧ 0 < k ∧ p ^ k = m
R: Type ?u.83807

inst✝: CommMonoidWithZero R

n✝, p: R

k, n, m: β„•

hn: βˆƒ p k, Nat.Prime p ∧ 0 < k ∧ p ^ k = n

hm: m ∣ n

hm₁: m β‰  1


βˆƒ p k, Nat.Prime p ∧ 0 < k ∧ p ^ k = m
R: Type ?u.83807

inst✝: CommMonoidWithZero R

n✝, p: R

k, n, m: β„•

hn: βˆƒ p k, Nat.Prime p ∧ 0 < k ∧ p ^ k = n

hm: m ∣ n

hm₁: m β‰  1


βˆƒ p k, Nat.Prime p ∧ 0 < k ∧ p ^ k = m
R: Type ?u.83807

inst✝: CommMonoidWithZero R

n✝, p: R

k, n, m: β„•

hn: IsPrimePow n

hm: m ∣ n

hm₁: m β‰  1


R: Type ?u.83807

inst✝: CommMonoidWithZero R

n, p✝: R

k✝, m: β„•

hm₁: m β‰  1

p, k: β„•

hp: Nat.Prime p

_hk: 0 < k

hm: m ∣ p ^ k


intro.intro.intro.intro
βˆƒ p k, Nat.Prime p ∧ 0 < k ∧ p ^ k = m
R: Type ?u.83807

inst✝: CommMonoidWithZero R

n✝, p: R

k, n, m: β„•

hn: IsPrimePow n

hm: m ∣ n

hm₁: m β‰  1


R: Type ?u.83807

inst✝: CommMonoidWithZero R

n, p✝: R

k✝, p, k: β„•

hp: Nat.Prime p

_hk: 0 < k

i: β„•

hik: i ≀ k

hm₁: p ^ i β‰  1

hm: p ^ i ∣ p ^ k


intro.intro.intro.intro.intro.intro
βˆƒ p_1 k, Nat.Prime p_1 ∧ 0 < k ∧ p_1 ^ k = p ^ i
R: Type ?u.83807

inst✝: CommMonoidWithZero R

n✝, p: R

k, n, m: β„•

hn: IsPrimePow n

hm: m ∣ n

hm₁: m β‰  1


R: Type ?u.83807

inst✝: CommMonoidWithZero R

n, p✝: R

k✝, p, k: β„•

hp: Nat.Prime p

_hk: 0 < k

i: β„•

hik: i ≀ k

hm₁: p ^ i β‰  1

hm: p ^ i ∣ p ^ k


intro.intro.intro.intro.intro.intro
0 < i
R: Type ?u.83807

inst✝: CommMonoidWithZero R

n✝, p: R

k, n, m: β„•

hn: IsPrimePow n

hm: m ∣ n

hm₁: m β‰  1


R: Type ?u.83807

inst✝: CommMonoidWithZero R

n, p✝: R

k✝, p, k: β„•

hp: Nat.Prime p

_hk: 0 < k

i: β„•

hik: i ≀ k

hm₁: p ^ i β‰  1

hm: p ^ i ∣ p ^ k


intro.intro.intro.intro.intro.intro.a
i β‰  0
R: Type ?u.83807

inst✝: CommMonoidWithZero R

n✝, p: R

k, n, m: β„•

hn: IsPrimePow n

hm: m ∣ n

hm₁: m β‰  1


R: Type ?u.83807

inst✝: CommMonoidWithZero R

n, p✝: R

k✝, p, k: β„•

hp: Nat.Prime p

_hk: 0 < k

hik: 0 ≀ k

hm₁: p ^ 0 β‰  1

hm: p ^ 0 ∣ p ^ k


intro.intro.intro.intro.intro.intro.a
R: Type ?u.83807

inst✝: CommMonoidWithZero R

n✝, p: R

k, n, m: β„•

hn: IsPrimePow n

hm: m ∣ n

hm₁: m β‰  1



Goals accomplished! πŸ™
#align is_prime_pow.dvd
IsPrimePow.dvd: βˆ€ {n m : β„•}, IsPrimePow n β†’ m ∣ n β†’ m β‰  1 β†’ IsPrimePow m
IsPrimePow.dvd
theorem
Nat.disjoint_divisors_filter_isPrimePow: βˆ€ {a b : β„•}, coprime a b β†’ Disjoint (Finset.filter IsPrimePow (divisors a)) (Finset.filter IsPrimePow (divisors b))
Nat.disjoint_divisors_filter_isPrimePow
{a b :
β„•: Type
β„•
} (
hab: coprime a b
hab
: a.
coprime: β„• β†’ β„• β†’ Prop
coprime
b) :
Disjoint: {Ξ± : Type ?u.84436} β†’ [inst : PartialOrder Ξ±] β†’ [inst : OrderBot Ξ±] β†’ Ξ± β†’ Ξ± β†’ Prop
Disjoint
(a.
divisors: β„• β†’ Finset β„•
divisors
.
filter: {Ξ± : Type ?u.84518} β†’ (p : Ξ± β†’ Prop) β†’ [inst : DecidablePred p] β†’ Finset Ξ± β†’ Finset Ξ±
filter
IsPrimePow: {R : Type ?u.84525} β†’ [inst : CommMonoidWithZero R] β†’ R β†’ Prop
IsPrimePow
) (b.
divisors: β„• β†’ Finset β„•
divisors
.
filter: {Ξ± : Type ?u.84591} β†’ (p : Ξ± β†’ Prop) β†’ [inst : DecidablePred p] β†’ Finset Ξ± β†’ Finset Ξ±
filter
IsPrimePow: {R : Type ?u.84598} β†’ [inst : CommMonoidWithZero R] β†’ R β†’ Prop
IsPrimePow
) :=

Goals accomplished! πŸ™
R: Type ?u.84416

inst✝: CommMonoidWithZero R

n, p: R

k, a, b: β„•

hab: coprime a b


Disjoint (Finset.filter IsPrimePow (divisors a)) (Finset.filter IsPrimePow (divisors b))
R: Type ?u.84416

inst✝: CommMonoidWithZero R

n, p: R

k, a, b: β„•

hab: coprime a b


βˆ€ ⦃a_1 : ℕ⦄, a_1 ∣ a β†’ a β‰  0 β†’ IsPrimePow a_1 β†’ a_1 ∣ b β†’ b β‰  0 β†’ Β¬IsPrimePow a_1
R: Type ?u.84416

inst✝: CommMonoidWithZero R

n, p: R

k, a, b: β„•

hab: coprime a b


Disjoint (Finset.filter IsPrimePow (divisors a)) (Finset.filter IsPrimePow (divisors b))
R: Type ?u.84416

inst✝: CommMonoidWithZero R

n✝, p: R

k, a, b: β„•

hab: coprime a b

n: β„•

han: n ∣ a

_ha: a β‰  0

hn: IsPrimePow n

hbn: n ∣ b

_hb: b β‰  0


R: Type ?u.84416

inst✝: CommMonoidWithZero R

n, p: R

k, a, b: β„•

hab: coprime a b


Disjoint (Finset.filter IsPrimePow (divisors a)) (Finset.filter IsPrimePow (divisors b))

Goals accomplished! πŸ™
#align nat.disjoint_divisors_filter_prime_pow
Nat.disjoint_divisors_filter_isPrimePow: βˆ€ {a b : β„•}, Nat.coprime a b β†’ Disjoint (Finset.filter IsPrimePow (Nat.divisors a)) (Finset.filter IsPrimePow (Nat.divisors b))
Nat.disjoint_divisors_filter_isPrimePow
theorem
IsPrimePow.two_le: βˆ€ {n : β„•}, IsPrimePow n β†’ 2 ≀ n
IsPrimePow.two_le
: βˆ€ {n :
β„•: Type
β„•
},
IsPrimePow: {R : Type ?u.85203} β†’ [inst : CommMonoidWithZero R] β†’ R β†’ Prop
IsPrimePow
n β†’
2: ?m.85235
2
≀ n | 0, h => (
not_isPrimePow_zero: βˆ€ {R : Type ?u.85296} [inst : CommMonoidWithZero R] [inst_1 : NoZeroDivisors R], Β¬IsPrimePow 0
not_isPrimePow_zero
h).
elim: βˆ€ {C : Sort ?u.85320}, False β†’ C
elim
| 1, h => (
not_isPrimePow_one: βˆ€ {R : Type ?u.85344} [inst : CommMonoidWithZero R], Β¬IsPrimePow 1
not_isPrimePow_one
h).
elim: βˆ€ {C : Sort ?u.85350}, False β†’ C
elim
|
_n: β„•
_n
+ 2, _ =>
le_add_self: βˆ€ {Ξ± : Type ?u.85443} [inst : CanonicallyOrderedAddMonoid Ξ±] {a b : Ξ±}, a ≀ b + a
le_add_self
#align is_prime_pow.two_le
IsPrimePow.two_le: βˆ€ {n : β„•}, IsPrimePow n β†’ 2 ≀ n
IsPrimePow.two_le
theorem
IsPrimePow.pos: βˆ€ {n : β„•}, IsPrimePow n β†’ 0 < n
IsPrimePow.pos
{n :
β„•: Type
β„•
} (hn :
IsPrimePow: {R : Type ?u.85646} β†’ [inst : CommMonoidWithZero R] β†’ R β†’ Prop
IsPrimePow
n) :
0: ?m.85679
0
< n :=
pos_of_gt: βˆ€ {M : Type ?u.85717} [inst : CanonicallyOrderedAddMonoid M] {n m : M}, n < m β†’ 0 < m
pos_of_gt
hn.
two_le: βˆ€ {n : β„•}, IsPrimePow n β†’ 2 ≀ n
two_le
#align is_prime_pow.pos
IsPrimePow.pos: βˆ€ {n : β„•}, IsPrimePow n β†’ 0 < n
IsPrimePow.pos
theorem
IsPrimePow.one_lt: βˆ€ {n : β„•}, IsPrimePow n β†’ 1 < n
IsPrimePow.one_lt
{n :
β„•: Type
β„•
} (h :
IsPrimePow: {R : Type ?u.85785} β†’ [inst : CommMonoidWithZero R] β†’ R β†’ Prop
IsPrimePow
n) :
1: ?m.85818
1
< n := h.
two_le: βˆ€ {n : β„•}, IsPrimePow n β†’ 2 ≀ n
two_le
#align is_prime_pow.one_lt
IsPrimePow.one_lt: βˆ€ {n : β„•}, IsPrimePow n β†’ 1 < n
IsPrimePow.one_lt
end Nat