Skip to content
This repository has been archived by the owner on Jul 24, 2024. It is now read-only.

[Merged by Bors] - refactor(data/nat/factorization): Change definition of factorization to be computable #12301

Closed
wants to merge 62 commits into from
Closed
Show file tree
Hide file tree
Changes from 8 commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
bacc815
initial
BoltonBailey Feb 26, 2022
42ee7fe
finish proof
BoltonBailey Feb 26, 2022
5c703d9
added lemma to part
BoltonBailey Feb 26, 2022
c1bd8eb
minor change
BoltonBailey Feb 26, 2022
2930c99
changes
BoltonBailey Mar 1, 2022
a74a858
Merge branch 'master' of github.com:leanprover-community/mathlib into…
BoltonBailey Mar 1, 2022
a88213a
change lemma
BoltonBailey Mar 1, 2022
c3b32f9
delete lemma
BoltonBailey Mar 1, 2022
45cc4cb
Merge branch 'master' of github.com:leanprover-community/mathlib into…
BoltonBailey Apr 21, 2022
8641730
resolve sorry
BoltonBailey Apr 21, 2022
240ac77
Delete part.lean
BoltonBailey Apr 21, 2022
8147e21
Merge branch 'master' of github.com:leanprover-community/mathlib into…
BoltonBailey Apr 23, 2022
325001f
uncomment lemma
BoltonBailey Apr 23, 2022
46730dc
uncomment import
BoltonBailey Apr 23, 2022
a64267a
added changes
BoltonBailey Apr 25, 2022
e78a4c5
Merge branch 'master' of github.com:leanprover-community/mathlib into…
BoltonBailey Apr 27, 2022
a0f5888
exploartory lemmas
BoltonBailey Apr 27, 2022
04837e9
Merge branch 'master' into BoltonBailey/computable-factorization
stuart-presnell Jun 25, 2022
e451b10
Remove imports of `factorization/basic`
stuart-presnell Jun 25, 2022
38df0a6
Golf `mem_support_to_fun`
stuart-presnell Jun 25, 2022
7a5d894
Golf `multiplicity_eq_factorization`
stuart-presnell Jun 25, 2022
37ff88c
Golf `padic_val_nat_eq_factorization`
stuart-presnell Jun 25, 2022
032699b
Update src/data/nat/factorization.lean
BoltonBailey Jun 25, 2022
fe7dd4a
Move `dvd_iff_padic_val_nat_ne_zero`
stuart-presnell Jun 25, 2022
38f529d
Merge branch 'BoltonBailey/computable-factorization' of https://githu…
stuart-presnell Jun 25, 2022
f7b3676
Update imports to `data.nat.totient`
stuart-presnell Jun 25, 2022
768aab0
Add lemma `factorization_def`
stuart-presnell Jun 25, 2022
b7389e1
Delete `noncomputable`
stuart-presnell Jun 25, 2022
18b8edb
Fix `support_factorization`
stuart-presnell Jun 25, 2022
acbc9cf
Fix `factorization_zero` and `factorization_one`
stuart-presnell Jun 26, 2022
d22c21c
Fix lemmas with `sorry` in `factors_count_eq`
stuart-presnell Jun 26, 2022
1424438
Prove `factors_count_eq`
stuart-presnell Jun 27, 2022
440e4c7
Move and golf `prod_pow_prime_padic_val_nat`
stuart-presnell Jun 27, 2022
014aa96
Move and prove `eq_iff_prime_padic_val_nat_eq`
stuart-presnell Jun 27, 2022
1c6dd00
Update basic.lean
stuart-presnell Jun 27, 2022
6aae01c
Fix imports
stuart-presnell Jun 27, 2022
d8d27ec
Merge branch 'master' into BoltonBailey/computable-factorization
stuart-presnell Jun 27, 2022
b5d1096
Delete `multiplicity_eq_factorization`
stuart-presnell Jun 28, 2022
6fcc3ed
Move `prod_factors_gcd_mul_prod_factors_mul`
stuart-presnell Jun 28, 2022
9ee17fe
Merge branch 'master' into BoltonBailey/computable-factorization
stuart-presnell Jun 28, 2022
59affc4
Restore `padic_val` import
stuart-presnell Jun 28, 2022
c99e1be
Add `algebra.char_p.two` import
stuart-presnell Jun 28, 2022
669cfc0
Fix imports in `group_theory/exponent`
stuart-presnell Jun 28, 2022
01cc590
Import in `analysis/special_functions/log/basic`
stuart-presnell Jun 28, 2022
385651e
Delete `padic_val_nat_eq_factorization`
stuart-presnell Jun 28, 2022
c02c287
Fix nonterminal simps
stuart-presnell Jun 28, 2022
9bfdcac
Merge branch 'master' into BoltonBailey/computable-factorization
stuart-presnell Jun 30, 2022
ecad72a
Merge branch 'master' into BoltonBailey/computable-factorization
stuart-presnell Jul 2, 2022
d3960c7
Merge branch 'master' into BoltonBailey/computable-factorization
stuart-presnell Jul 15, 2022
04fc75e
Change `enat` to `part_enat`
stuart-presnell Jul 17, 2022
37891c1
Update src/data/nat/factorization/basic.lean
BoltonBailey Jul 18, 2022
be62ca2
Update src/data/nat/factorization/basic.lean
BoltonBailey Jul 18, 2022
7a55cdb
Update src/data/nat/totient.lean
BoltonBailey Jul 18, 2022
b5cc6f5
Update src/data/nat/totient.lean
BoltonBailey Jul 18, 2022
107eb2e
Update src/group_theory/exponent.lean
BoltonBailey Jul 18, 2022
6c4ccf8
Update src/group_theory/exponent.lean
BoltonBailey Jul 18, 2022
11bf3fe
Update src/data/nat/factorization/basic.lean
BoltonBailey Jul 18, 2022
bb8bc47
Merge branch 'master' of github.com:leanprover-community/mathlib into…
BoltonBailey Jul 19, 2022
a004018
Merge branch 'master' into BoltonBailey/computable-factorization
stuart-presnell Jul 19, 2022
6cbf4d9
Merge branch 'master' into BoltonBailey/computable-factorization
stuart-presnell Jul 20, 2022
6d0fc7b
Fix error in merge
stuart-presnell Jul 20, 2022
b49c9b7
Merge branch 'BoltonBailey/computable-factorization' of https://githu…
stuart-presnell Jul 20, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 25 additions & 1 deletion src/data/nat/factorization.lean
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ Authors: Stuart Presnell
import data.nat.prime
import data.finsupp.multiset
import algebra.big_operators.finsupp
import number_theory.padics.padic_norm
import tactic.linarith

/-!
Expand Down Expand Up @@ -42,7 +43,30 @@ namespace nat

/-- `n.factorization` is the finitely supported function `ℕ →₀ ℕ`
mapping each prime factor of `n` to its multiplicity in `n`. -/
noncomputable def factorization (n : ℕ) : ℕ →₀ ℕ := (n.factors : multiset ℕ).to_finsupp
def factorization (n : ℕ) : ℕ →₀ ℕ :=
{ support := n.factors.to_finset,
to_fun := λ p, if p.prime then padic_val_nat p n else 0,
mem_support_to_fun :=
begin
intro a,
rw list.mem_to_finset,
by_cases hn0 : n = 0,
{ sorry, },
rw mem_factors hn0,
simp only [ne.def, ite_eq_right_iff, exists_prop],
sorry,
end }
BoltonBailey marked this conversation as resolved.
Show resolved Hide resolved


lemma multiplicity_eq_factorization {n p : ℕ} (pp : p.prime) (hn : n ≠ 0) :
multiplicity p n = n.factorization p :=
begin
have hdom : (multiplicity p n).dom,
{ rw multiplicity.nat.multiplicity_dom_iff, split, exact hn, sorry, },
simp [factorization, pp],
rw part.get_or_else_of_dom (multiplicity p n) hdom,
simp,
BoltonBailey marked this conversation as resolved.
Show resolved Hide resolved
end

/-! ### Basic facts about factorization -/

Expand Down
10 changes: 10 additions & 0 deletions src/data/part.lean
Original file line number Diff line number Diff line change
Expand Up @@ -193,13 +193,23 @@ otherwise. -/
def get_or_else (a : part α) [decidable a.dom] (d : α) :=
if ha : a.dom then a.get ha else d



@[simp] lemma get_or_else_none (d : α) [decidable (none : part α).dom] : get_or_else none d = d :=
dif_neg id

@[simp] lemma get_or_else_some (a : α) (d : α) [decidable (some a).dom] :
get_or_else (some a) d = a :=
dif_pos trivial

lemma get_or_else_of_dom (a : part α) (h : a.dom) [decidable a.dom] (d : α) :
get_or_else a d = a.get h :=
begin
rw ←get_or_else_some (a.get h) d,
congr,
simp,
end

@[simp] theorem mem_to_option {o : part α} [decidable o.dom] {a : α} :
a ∈ to_option o ↔ a ∈ o :=
begin
Expand Down
52 changes: 26 additions & 26 deletions src/number_theory/padics/padic_norm.lean
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import ring_theory.int.basic
import tactic.basic
import tactic.ring_exp
import number_theory.divisors
import data.nat.factorization
-- import data.nat.factorization

/-!
# p-adic norm
Expand Down Expand Up @@ -473,34 +473,34 @@ protected lemma padic_val_nat.div' {p : ℕ} [p_prime : fact p.prime] :
{ exact hc } },
end

lemma padic_val_nat_eq_factorization (p n : ℕ) [hp : fact p.prime] :
padic_val_nat p n = n.factorization p :=
begin
by_cases hn : n = 0, { subst hn, simp },
rw @padic_val_nat_def p _ n hn,
simp [@multiplicity_eq_factorization n p hp.elim hn],
end
-- lemma padic_val_nat_eq_factorization (p n : ℕ) [hp : fact p.prime] :
BoltonBailey marked this conversation as resolved.
Show resolved Hide resolved
-- padic_val_nat p n = n.factorization p :=
-- begin
-- by_cases hn : n = 0, { subst hn, simp },
-- rw @padic_val_nat_def p _ n hn,
-- simp [@multiplicity_eq_factorization n p hp.elim hn],
-- end

open_locale big_operators

lemma prod_pow_prime_padic_val_nat (n : nat) (hn : n ≠ 0) (m : nat) (pr : n < m) :
∏ p in finset.filter nat.prime (finset.range m), p ^ (padic_val_nat p n) = n :=
begin
nth_rewrite_rhs 0 ←factorization_prod_pow_eq_self hn,
rw eq_comm,
apply finset.prod_subset_one_on_sdiff,
{ exact λ p hp, finset.mem_filter.mpr
⟨finset.mem_range.mpr (gt_of_gt_of_ge pr (le_of_mem_factorization hp)),
prime_of_mem_factorization hp⟩ },
{ intros p hp,
cases finset.mem_sdiff.mp hp with hp1 hp2,
haveI := fact_iff.mpr (finset.mem_filter.mp hp1).2,
rw padic_val_nat_eq_factorization p n,
simp [finsupp.not_mem_support_iff.mp hp2] },
{ intros p hp,
haveI := fact_iff.mpr (prime_of_mem_factorization hp),
simp [padic_val_nat_eq_factorization] }
end
-- lemma prod_pow_prime_padic_val_nat (n : nat) (hn : n ≠ 0) (m : nat) (pr : n < m) :
-- ∏ p in finset.filter nat.prime (finset.range m), p ^ (padic_val_nat p n) = n :=
-- begin
-- nth_rewrite_rhs 0 ←factorization_prod_pow_eq_self hn,
-- rw eq_comm,
-- apply finset.prod_subset_one_on_sdiff,
-- { exact λ p hp, finset.mem_filter.mpr
-- ⟨finset.mem_range.mpr (gt_of_gt_of_ge pr (le_of_mem_factorization hp)),
-- prime_of_mem_factorization hp⟩ },
-- { intros p hp,
-- cases finset.mem_sdiff.mp hp with hp1 hp2,
-- haveI := fact_iff.mpr (finset.mem_filter.mp hp1).2,
-- rw padic_val_nat_eq_factorization p n,
-- simp [finsupp.not_mem_support_iff.mp hp2] },
-- { intros p hp,
-- haveI := fact_iff.mpr (prime_of_mem_factorization hp),
-- simp [padic_val_nat_eq_factorization] }
-- end

lemma range_pow_padic_val_nat_subset_divisors {n : ℕ} (p : ℕ) [fact p.prime] (hn : n ≠ 0) :
(finset.range (padic_val_nat p n + 1)).image (pow p) ⊆ n.divisors :=
Expand Down
7 changes: 2 additions & 5 deletions src/ring_theory/multiplicity.lean
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ Authors: Robert Y. Lewis, Chris Hughes
import algebra.associated
import algebra.big_operators.basic
import ring_theory.valuation.basic
import data.nat.factorization
-- import data.nat.factorization
import data.nat.log

/-!
# Multiplicity of a divisor
Expand Down Expand Up @@ -486,8 +487,4 @@ begin
exact hp this
end

lemma multiplicity_eq_factorization {n p : ℕ} (pp : p.prime) (hn : n ≠ 0) :
multiplicity p n = n.factorization p :=
multiplicity.eq_coe_iff.mpr ⟨pow_factorization_dvd n p, pow_succ_factorization_not_dvd hn pp⟩

end nat