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

[Merged by Bors] - feat(linear_algebra/invariant_basis_number): strong_rank_condition_iff_succ #9128

Closed
wants to merge 58 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
fddf261
add natural inclusion
riccardobrasca Sep 10, 2021
a060a97
add strong_rank_condition_iff
riccardobrasca Sep 10, 2021
8d45d54
Update src/linear_algebra/free_module.lean
riccardobrasca Sep 13, 2021
40d5808
Update src/linear_algebra/invariant_basis_number.lean
riccardobrasca Sep 13, 2021
d12acbe
Update src/linear_algebra/invariant_basis_number.lean
riccardobrasca Sep 13, 2021
a243479
Update src/linear_algebra/free_module.lean
riccardobrasca Sep 13, 2021
f3f9c6f
Update src/linear_algebra/free_module.lean
riccardobrasca Sep 13, 2021
e4d46f8
fix build
riccardobrasca Sep 13, 2021
2a23f2d
add exten_by_one
riccardobrasca Sep 13, 2021
9a38685
dd extend_apply' and extend_injective
riccardobrasca Sep 13, 2021
7e994e8
golf
riccardobrasca Sep 13, 2021
3492dad
add extend_by_one_of_one
riccardobrasca Sep 13, 2021
7f9a2a2
golf
riccardobrasca Sep 13, 2021
badec8b
add extend_by_one_mul
riccardobrasca Sep 13, 2021
b0f1290
fix build
riccardobrasca Sep 13, 2021
6f2a436
fix name
riccardobrasca Sep 13, 2021
6de73e6
better nam
riccardobrasca Sep 13, 2021
e9dce92
add pi.extend_by_zero.linear_map
riccardobrasca Sep 13, 2021
f99046c
useless
riccardobrasca Sep 13, 2021
4e6787b
fix build
riccardobrasca Sep 14, 2021
8e2fa86
doc
riccardobrasca Sep 14, 2021
f9616cd
typo
riccardobrasca Sep 14, 2021
9fbaac8
typo
riccardobrasca Sep 14, 2021
ea62a08
riccardobrasca Sep 14, 2021
6202578
golf
riccardobrasca Sep 14, 2021
4aa99a8
fix build
riccardobrasca Sep 14, 2021
7e97dc8
golf
riccardobrasca Sep 14, 2021
3348b86
add lemmas
riccardobrasca Sep 14, 2021
1991d09
add function.extend_smul
riccardobrasca Sep 14, 2021
fc8204f
fix build
riccardobrasca Sep 14, 2021
32470ae
fix name
riccardobrasca Sep 14, 2021
aac5986
doc
riccardobrasca Sep 14, 2021
a0c4688
fix name autogenerated
riccardobrasca Sep 14, 2021
68c2500
fix build
riccardobrasca Sep 14, 2021
58a0a53
fix build
riccardobrasca Sep 14, 2021
97b0570
explicit variable
riccardobrasca Sep 14, 2021
747e766
fix build
riccardobrasca Sep 14, 2021
1137194
fix build
riccardobrasca Sep 14, 2021
2729c91
unused argument
riccardobrasca Sep 15, 2021
e8f373d
fix build
riccardobrasca Sep 15, 2021
3570fdd
Update src/linear_algebra/invariant_basis_number.lean
riccardobrasca Sep 15, 2021
7ca0a75
add @[mk_iff] to strong_rank_condition
riccardobrasca Sep 15, 2021
3b6bd12
Update src/linear_algebra/pi.lean
riccardobrasca Sep 15, 2021
ad69679
Update src/linear_algebra/pi.lean
riccardobrasca Sep 15, 2021
ed4d589
Update src/algebra/group/pi.lean
riccardobrasca Sep 15, 2021
7fe1d6a
better name
riccardobrasca Sep 15, 2021
d6a07dd
reorganize a section
riccardobrasca Sep 15, 2021
368bcdd
Update src/linear_algebra/pi.lean
riccardobrasca Sep 15, 2021
65ae338
golf
riccardobrasca Sep 15, 2021
61fbe55
fix build
riccardobrasca Sep 15, 2021
36e15b3
fix build
riccardobrasca Sep 15, 2021
c5e5f2e
Merge branch 'master' into strong_rank_iff
riccardobrasca Sep 16, 2021
f15908a
cyclic import
riccardobrasca Sep 16, 2021
7eedf41
move lemma
riccardobrasca Sep 18, 2021
33ccb51
Merge branch 'master' into strong_rank_iff
riccardobrasca Sep 18, 2021
3fa9b8b
golf
riccardobrasca Sep 18, 2021
2b04535
Merge branch 'master' into strong_rank_iff
riccardobrasca Sep 21, 2021
e7b0c91
Merge branch 'master' into strong_rank_iff
riccardobrasca Sep 23, 2021
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
13 changes: 13 additions & 0 deletions src/algebra/group/pi.lean
Original file line number Diff line number Diff line change
Expand Up @@ -257,3 +257,16 @@ lemma pi.piecewise_div [Π i, has_div (f i)] (s : set I) [Π i, decidable (i ∈
s.piecewise_op₂ _ _ _ _ (λ _, (/))

end piecewise

section extend

variables {ι : Type u} {η : Type v} (R : Type w) (s : ι → η)

/-- `function.extend s f 1` as a bundled hom. -/
@[to_additive function.extend_by_zero.hom "`function.extend s f 0` as a bundled hom.", simps]
noncomputable def function.extend_by_one.hom [mul_one_class R] : (ι → R) →* (η → R) :=
{ to_fun := λ f, function.extend s f 1,
map_one' := function.extend_one s,
map_mul' := λ f g, by { simpa using function.extend_mul s f g 1 1 } }

end extend
9 changes: 9 additions & 0 deletions src/algebra/module/pi.lean
Original file line number Diff line number Diff line change
Expand Up @@ -201,3 +201,12 @@ instance (α) {r : semiring α} {m : Π i, add_comm_monoid $ f i}
(λ i, (smul_eq_zero.mp (congr_fun h i)).resolve_left hc))⟩

end pi

section extend

@[to_additive]
lemma function.extend_smul {R α β γ} [has_scalar R γ] (r : R) (f : α → β) (g : α → γ) (e : β → γ) :
function.extend f (r • g) (r • e) = r • function.extend f g e :=
funext $ λ _, by convert (apply_dite ((•) r) _ _ _).symm

end extend
29 changes: 29 additions & 0 deletions src/data/pi.lean
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,35 @@ function.update_injective _ i
end
end pi

section extend

namespace function

variables {α β γ : Type*}

@[to_additive]
lemma extend_one [has_one γ] (f : α → β) :
function.extend f (1 : α → γ) (1 : β → γ) = 1 :=
funext $ λ _, by apply if_t_t _ _

@[to_additive]
lemma extend_mul [has_mul γ] (f : α → β) (g₁ g₂ : α → γ) (e₁ e₂ : β → γ) :
function.extend f (g₁ * g₂) (e₁ * e₂) = function.extend f g₁ e₁ * function.extend f g₂ e₂ :=
funext $ λ _, by convert (apply_dite2 (*) _ _ _ _ _).symm

@[to_additive]
lemma extend_inv [has_inv γ] (f : α → β) (g : α → γ) (e : β → γ) :
function.extend f (g⁻¹) (e⁻¹) = (function.extend f g e)⁻¹ :=
funext $ λ _, by convert (apply_dite has_inv.inv _ _ _).symm

@[to_additive]
lemma extend_div [has_div γ] (f : α → β) (g₁ g₂ : α → γ) (e₁ e₂ : β → γ) :
function.extend f (g₁ / g₂) (e₁ / e₂) = function.extend f g₁ e₁ / function.extend f g₂ e₂ :=
funext $ λ _, by convert (apply_dite2 (/) _ _ _ _ _).symm

end function
end extend

lemma subsingleton.pi_single_eq {α : Type*} [decidable_eq I] [subsingleton I] [has_zero α]
(i : I) (x : α) :
pi.single i x = λ _, x :=
Expand Down
14 changes: 14 additions & 0 deletions src/linear_algebra/invariant_basis_number.lean
Original file line number Diff line number Diff line change
Expand Up @@ -71,13 +71,27 @@ variables (R : Type u) [ring R]

/-- We say that `R` satisfies the strong rank condition if `(fin n → R) →ₗ[R] (fin m → R)` injective
implies `n ≤ m`. -/
@[mk_iff]
class strong_rank_condition : Prop :=
(le_of_fin_injective : ∀ {n m : ℕ} (f : (fin n → R) →ₗ[R] (fin m → R)), injective f → n ≤ m)

lemma le_of_fin_injective [strong_rank_condition R] {n m : ℕ} (f : (fin n → R) →ₗ[R] (fin m → R)) :
injective f → n ≤ m :=
strong_rank_condition.le_of_fin_injective f

/-- A ring satisfies the strong rank condition if and only if, for all `n : ℕ`, any linear map
`(fin (n + 1) → R) →ₗ[R] (fin n → R)` is not injective. -/
lemma strong_rank_condition_iff_succ : strong_rank_condition R ↔
∀ (n : ℕ) (f : (fin (n + 1) → R) →ₗ[R] (fin n → R)), ¬function.injective f :=
begin
refine ⟨λ h n, λ f hf, _, λ h, ⟨λ n m f hf, _⟩⟩,
{ letI : strong_rank_condition R := h,
exact nat.not_succ_le_self n (le_of_fin_injective R f hf) },
{ by_contra H,
exact h m (f.comp (function.extend_by_zero.linear_map R (fin.cast_le (not_le.1 H))))
(hf.comp (function.extend_injective (rel_embedding.injective _) 0)) }
end

lemma card_le_of_injective [strong_rank_condition R] {α β : Type*} [fintype α] [fintype β]
(f : (α → R) →ₗ[R] (β → R)) (i : injective f) : fintype.card α ≤ fintype.card β :=
begin
Expand Down
13 changes: 13 additions & 0 deletions src/linear_algebra/pi.lean
Original file line number Diff line number Diff line change
Expand Up @@ -331,3 +331,16 @@ def sum_arrow_lequiv_prod_arrow (α β R M : Type*) [semiring R] [add_comm_monoi
((sum_arrow_lequiv_prod_arrow α β R M).symm (f, g)) (sum.inr b) = g b := rfl

end linear_equiv

section extend

variables (R) {η : Type x} [semiring R] (s : ι → η)

/-- `function.extend s f 0` as a bundled linear map. -/
@[simps]
noncomputable def function.extend_by_zero.linear_map : (ι → R) →ₗ[R] (η → R) :=
{ to_fun := λ f, function.extend s f 0,
map_smul' := λ r f, by { simpa using function.extend_smul r s f 0 },
..function.extend_by_zero.hom R s }

end extend
14 changes: 14 additions & 0 deletions src/logic/function/basic.lean
Original file line number Diff line number Diff line change
Expand Up @@ -485,6 +485,20 @@ begin
exact congr_arg g (hf $ classical.some_spec (exists_apply_eq_apply f a))
end

@[simp] lemma extend_apply' (g : α → γ) (e' : β → γ) (b : β) (hb : ¬∃ a, f a = b) :
extend f g e' b = e' b :=
by simp [function.extend_def, hb]

lemma extend_injective (hf : injective f) (e' : β → γ) :
injective (λ g, extend f g e') :=
begin
intros g₁ g₂ hg,
refine funext (λ x, _),
have H := congr_fun hg (f x),
simp only [hf, extend_apply] at H,
exact H
end

@[simp] lemma extend_comp (hf : injective f) (g : α → γ) (e' : β → γ) :
extend f g e' ∘ f = g :=
funext $ λ a, extend_apply hf g e' a
Expand Down