Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(*): unify group/monoid_action, make semimodule extend action #850

Merged
merged 16 commits into from
Mar 28, 2019
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
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
12 changes: 3 additions & 9 deletions src/algebra/module.lean
Original file line number Diff line number Diff line change
Expand Up @@ -23,24 +23,16 @@ variables {α : Type u} {β : Type v} {γ : Type w} {δ : Type x}
(where `r : α` and `x : β`) with some natural associativity and
distributivity axioms similar to those on a ring. -/
class semimodule (α : Type u) (β : Type v) [semiring α]
[add_comm_monoid β] extends has_scalar α β :=
(smul_add : ∀(r : α) (x y : β), r • (x + y) = r • x + r • y)
[add_comm_monoid β] extends mul_action_add α β :=
(add_smul : ∀(r s : α) (x : β), (r + s) • x = r • x + s • x)
(mul_smul : ∀(r s : α) (x : β), (r * s) • x = r • s • x)
(one_smul : ∀x : β, (1 : α) • x = x)
(zero_smul : ∀x : β, (0 : α) • x = 0)
(smul_zero {} : ∀(r : α), r • (0 : β) = 0)

section semimodule
variables [R:semiring α] [add_comm_monoid β] [semimodule α β] (r s : α) (x y : β)
include R

theorem smul_add : r • (x + y) = r • x + r • y := semimodule.smul_add r x y
theorem add_smul : (r + s) • x = r • x + s • x := semimodule.add_smul r s x
theorem mul_smul : (r * s) • x = r • s • x := semimodule.mul_smul r s x
@[simp] theorem smul_zero : r • (0 : β) = 0 := semimodule.smul_zero r
variables (α)
@[simp] theorem one_smul : (1 : α) • x = x := semimodule.one_smul α x
@[simp] theorem zero_smul : (0 : α) • x = 0 := semimodule.zero_smul α x

lemma smul_smul : r • s • x = (r * s) • x := (mul_smul _ _ _).symm
Expand Down Expand Up @@ -315,6 +307,8 @@ variables (p p' : submodule α β)
variables {r : α} {x y : β}
include R

set_option class.instance_max_depth 36

theorem smul_mem_iff (r0 : r ≠ 0) : r • x ∈ p ↔ x ∈ p :=
⟨λ h, by simpa [smul_smul, inv_mul_cancel r0] using p.smul_mem (r⁻¹) h,
p.smul_mem r⟩
Expand Down
26 changes: 19 additions & 7 deletions src/algebra/pi_instances.lean
Original file line number Diff line number Diff line change
Expand Up @@ -61,16 +61,28 @@ instance add_comm_group [∀ i, add_comm_group $ f i] : add_comm_group
instance ring [∀ i, ring $ f i] : ring (Π i : I, f i) := by pi_instance
instance comm_ring [∀ i, comm_ring $ f i] : comm_ring (Π i : I, f i) := by pi_instance

instance semimodule (α) {r : semiring α} [∀ i, add_comm_monoid $ f i] [∀ i, semimodule α $ f i] : semimodule α (Π i : I, f i) :=
instance mul_action (α) {m : monoid α} [∀ i, mul_action α $ f i] : mul_action α (Π i : I, f i) :=
{ smul := λ c f i, c • f i,
smul_add := λ c f g, funext $ λ i, smul_add _ _ _,
add_smul := λ c f g, funext $ λ i, add_smul _ _ _,
mul_smul := λ r s f, funext $ λ i, mul_smul _ _ _,
one_smul := λ f, funext $ λ i, one_smul α _,
one_smul := λ f, funext $ λ i, one_smul α _ }

instance mul_action_add (α) {m : monoid α} [∀ i, add_monoid $ f i] [∀ i, mul_action_add α $ f i] : mul_action_add α (Π i : I, f i) :=
{ smul_zero := λ c, funext $ λ i, smul_zero _,
smul_add := λ c f g, funext $ λ i, smul_add _ _ _,
..pi.mul_action _ }

variables (I f)

instance semimodule (α) {r : semiring α} [∀ i, add_comm_monoid $ f i] [∀ i, semimodule α $ f i] : semimodule α (Π i : I, f i) :=
{ add_smul := λ c f g, funext $ λ i, add_smul _ _ _,
zero_smul := λ f, funext $ λ i, zero_smul α _,
smul_zero := λ c, funext $ λ i, smul_zero _ }
instance module (α) {r : ring α} [∀ i, add_comm_group $ f i] [∀ i, module α $ f i] : module α (Π i : I, f i) := {..pi.semimodule α}
instance vector_space (α) {r : discrete_field α} [∀ i, add_comm_group $ f i] [∀ i, vector_space α $ f i] : vector_space α (Π i : I, f i) := {..pi.module α}
..pi.mul_action_add _ }

variables {I f}

instance module (α) {r : ring α} [∀ i, add_comm_group $ f i] [∀ i, module α $ f i] : module α (Π i : I, f i) := {..pi.semimodule I f α}

instance vector_space (α) {r : discrete_field α} [∀ i, add_comm_group $ f i] [∀ i, vector_space α $ f i] : vector_space α (Π i : I, f i) := {..pi.module α}

instance left_cancel_semigroup [∀ i, left_cancel_semigroup $ f i] : left_cancel_semigroup (Π i : I, f i) :=
by pi_instance
Expand Down
6 changes: 6 additions & 0 deletions src/analysis/asymptotics.lean
Original file line number Diff line number Diff line change
Expand Up @@ -589,6 +589,8 @@ scalar multiplication is multiplication.
section
variables {K : Type*} [normed_field K] [normed_space K β] [normed_group γ]

set_option class.instance_max_depth 38

theorem is_O_const_smul_left {f : α → β} {g : α → γ} {l : filter α} (h : is_O f g l) (c : K) :
is_O (λ x, c • f x) g l :=
begin
Expand Down Expand Up @@ -628,6 +630,8 @@ end
section
variables {K : Type*} [normed_group β] [normed_field K] [normed_space K γ]

set_option class.instance_max_depth 38

theorem is_O_const_smul_right {f : α → β} {g : α → γ} {l : filter α} {c : K} (hc : c ≠ 0) :
is_O f (λ x, c • g x) l ↔ is_O f g l :=
begin
Expand All @@ -649,6 +653,8 @@ end
section
variables {K : Type*} [normed_field K] [normed_space K β] [normed_space K γ]

set_option class.instance_max_depth 38

theorem is_O_smul {k : α → K} {f : α → β} {g : α → γ} {l : filter α} (h : is_O f g l) :
is_O (λ x, k x • f x) (λ x, k x • g x) l :=
begin
Expand Down
2 changes: 2 additions & 0 deletions src/analysis/normed_space/basic.lean
Original file line number Diff line number Diff line change
Expand Up @@ -340,6 +340,8 @@ instance normed_field.to_normed_space : normed_space α α :=
{ dist_eq := normed_field.dist_eq,
norm_smul := normed_field.norm_mul }

set_option class.instance_max_depth 38

lemma norm_smul [normed_space α β] (s : α) (x : β) : ∥s • x∥ = ∥s∥ * ∥x∥ :=
normed_space.norm_smul s x

Expand Down
2 changes: 2 additions & 0 deletions src/analysis/normed_space/deriv.lean
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,8 @@ theorem has_fderiv_at_const (c : F) (x : E) :
has_fderiv_at K (λ x, c) (λ y, 0) x :=
has_fderiv_at_filter_const _ _ _

set_option class.instance_max_depth 38

theorem has_fderiv_at_filter_smul {f : E → F} {f' : E → F} {x : E} {L : filter E}
(c : K) (h : has_fderiv_at_filter K f f' x L) :
has_fderiv_at_filter K (λ x, c • f x) (λ x, c • f' x) x L :=
Expand Down
1 change: 1 addition & 0 deletions src/field_theory/mv_polynomial.lean
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ begin
exact degrees_X _
end

set_option class.instance_max_depth 50
lemma indicator_mem_restrict_degree (c : σ → α) :
indicator c ∈ restrict_degree σ α (fintype.card α - 1) :=
begin
Expand Down
99 changes: 60 additions & 39 deletions src/group_theory/group_action.lean
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,24 @@ class has_scalar (α : Type u) (γ : Type v) := (smul : α → γ → γ)

infixr ` • `:73 := has_scalar.smul

class monoid_action (α : Type u) (β : Type v) [monoid α] extends has_scalar α β :=
(one : ∀ b : β, (1 : α) • b = b)
(mul : ∀ (x y : α) (b : β), (x * y) • b = x • y • b)
/-- Typeclass for multiplictive actions by monoids. This generalizes group actions. -/
class mul_action (α : Type u) (β : Type v) [monoid α] extends has_scalar α β :=
(one_smul : ∀ b : β, (1 : α) • b = b)
(mul_smul : ∀ (x y : α) (b : β), (x * y) • b = x • y • b)

namespace monoid_action
section
variables [monoid α] [mul_action α β]

theorem mul_smul (a₁ a₂ : α) (b : β) : (a₁ * a₂) • b = a₁ • a₂ • b := mul_action.mul_smul _ _ _

variables (α) [monoid α] [monoid_action α β]
variable (α)
@[simp] theorem one_smul (b : β) : (1 : α) • b = b := mul_action.one_smul α _

end

namespace mul_action

variables (α) [monoid α] [mul_action α β]

def orbit (b : β) := set.range (λ x : α, x • b)

Expand All @@ -32,7 +43,7 @@ iff.rfl
⟨x, rfl⟩

@[simp] lemma mem_orbit_self (b : β) : b ∈ orbit α b :=
⟨1, by simp [monoid_action.one]⟩
⟨1, by simp [mul_action.one_smul]⟩

instance orbit_fintype (b : β) [fintype α] [decidable_eq β] :
fintype (orbit α b) := set.fintype_range _
Expand Down Expand Up @@ -62,33 +73,31 @@ lemma mem_fixed_points' {b : β} : b ∈ fixed_points α β ↔
λ h b, mem_stabilizer_iff.2 (h _ (mem_orbit _ _))⟩

def comp_hom [monoid γ] (g : γ → α) [is_monoid_hom g] :
monoid_action γ β :=
mul_action γ β :=
{ smul := λ x b, (g x) • b,
one := by simp [is_monoid_hom.map_one g, monoid_action.one],
mul := by simp [is_monoid_hom.map_mul g, monoid_action.mul] }
one_smul := by simp [is_monoid_hom.map_one g, mul_action.one_smul],
mul_smul := by simp [is_monoid_hom.map_mul g, mul_action.mul_smul] }

end monoid_action
end mul_action

class group_action (α : Type u) (β : Type v) [group α] extends monoid_action α β

namespace group_action
variables [group α] [group_action α β]
namespace mul_action
variables [group α] [mul_action α β]

section
open monoid_action quotient_group
open mul_action quotient_group

variables (α) (β)

def to_perm (g : α) : equiv.perm β :=
{ to_fun := (•) g,
inv_fun := (•) g⁻¹,
left_inv := λ a, by rw [← monoid_action.mul, inv_mul_self, monoid_action.one],
right_inv := λ a, by rw [← monoid_action.mul, mul_inv_self, monoid_action.one] }
left_inv := λ a, by rw [← mul_action.mul_smul, inv_mul_self, mul_action.one_smul],
right_inv := λ a, by rw [← mul_action.mul_smul, mul_inv_self, mul_action.one_smul] }

variables {α} {β}

instance : is_group_hom (to_perm α β) :=
{ mul := λ x y, equiv.ext _ _ (λ a, monoid_action.mul x y a) }
{ mul := λ x y, equiv.ext _ _ (λ a, mul_action.mul_smul x y a) }

lemma bijective (g : α) : function.bijective (λ b : β, g • b) :=
(to_perm α β g).bijective
Expand All @@ -97,25 +106,21 @@ lemma orbit_eq_iff {a b : β} :
orbit α a = orbit α b ↔ a ∈ orbit α b:=
⟨λ h, h ▸ mem_orbit_self _,
λ ⟨x, (hx : x • b = a)⟩, set.ext (λ c, ⟨λ ⟨y, (hy : y • a = c)⟩, ⟨y * x,
show (y * x) • b = c, by rwa [monoid_action.mul, hx]⟩,
show (y * x) • b = c, by rwa [mul_action.mul_smul, hx]⟩,
λ ⟨y, (hy : y • b = c)⟩, ⟨y * x⁻¹,
show (y * x⁻¹) • a = c, by
conv {to_rhs, rw [← hy, ← mul_one y, ← inv_mul_self x, ← mul_assoc,
monoid_action.mul, hx]}⟩⟩)⟩
mul_action.mul_smul, hx]}⟩⟩)⟩

instance (b : β) : is_subgroup (stabilizer α b) :=
{ one_mem := monoid_action.one _ _,
{ one_mem := mul_action.one_smul _ _,
mul_mem := λ x y (hx : x • b = b) (hy : y • b = b),
show (x * y) • b = b, by rw monoid_action.mul; simp *,
show (x * y) • b = b, by rw mul_action.mul_smul; simp *,
inv_mem := λ x (hx : x • b = b), show x⁻¹ • b = b,
by rw [← hx, ← monoid_action.mul, inv_mul_self, monoid_action.one, hx] }

variables (β)
by rw [← hx, ← mul_action.mul_smul, inv_mul_self, mul_action.one_smul, hx] }

def comp_hom [group γ] (g : γ → α) [is_group_hom g] :
group_action γ β := { ..monoid_action.comp_hom β g }

variables (α)
variables (α) (β)

def orbit_rel : setoid β :=
{ r := λ a b, a ∈ orbit α b,
Expand All @@ -131,35 +136,51 @@ noncomputable def orbit_equiv_quotient_stabilizer (b : β) :
equiv.symm (@equiv.of_bijective _ _
(λ x : quotient (stabilizer α b), quotient.lift_on' x
(λ x, (⟨x • b, mem_orbit _ _⟩ : orbit α b))
(λ g h (H : _ = _), subtype.eq $ (group_action.bijective (g⁻¹)).1
(λ g h (H : _ = _), subtype.eq $ (mul_action.bijective (g⁻¹)).1
$ show g⁻¹ • (g • b) = g⁻¹ • (h • b),
by rw [← monoid_action.mul, ← monoid_action.mul,
H, inv_mul_self, monoid_action.one]))
by rw [← mul_action.mul_smul, ← mul_action.mul_smul,
H, inv_mul_self, mul_action.one_smul]))
⟨λ g h, quotient.induction_on₂' g h (λ g h H, quotient.sound' $
have H : g • b = h • b := subtype.mk.inj H,
show (g⁻¹ * h) • b = b,
by rw [monoid_action.mul, ← H, ← monoid_action.mul, inv_mul_self, monoid_action.one]),
by rw [mul_action.mul_smul, ← H, ← mul_action.mul_smul, inv_mul_self, mul_action.one_smul]),
λ ⟨b, ⟨g, hgb⟩⟩, ⟨g, subtype.eq hgb⟩⟩)

end

open quotient_group monoid_action is_subgroup
open quotient_group mul_action is_subgroup

def mul_left_cosets (H : set α) [is_subgroup H]
(x : α) (y : quotient H) : quotient H :=
quotient.lift_on' y (λ y, quotient_group.mk ((x : α) * y))
(λ a b (hab : _ ∈ H), quotient_group.eq.2
(by rwa [mul_inv_rev, ← mul_assoc, mul_assoc (a⁻¹), inv_mul_self, mul_one]))

instance (H : set α) [is_subgroup H] : group_action α (quotient H) :=
instance (H : set α) [is_subgroup H] : mul_action α (quotient H) :=
{ smul := mul_left_cosets H,
one := λ a, quotient.induction_on' a (λ a, quotient_group.eq.2
one_smul := λ a, quotient.induction_on' a (λ a, quotient_group.eq.2
(by simp [is_submonoid.one_mem])),
mul := λ x y a, quotient.induction_on' a (λ a, quotient_group.eq.2
mul_smul := λ x y a, quotient.induction_on' a (λ a, quotient_group.eq.2
(by simp [mul_inv_rev, is_submonoid.one_mem, mul_assoc])) }

instance mul_left_cosets_comp_subtype_val (H I : set α) [is_subgroup H] [is_subgroup I] :
group_action I (quotient H) :=
group_action.comp_hom (quotient H) (subtype.val : I → α)
mul_action I (quotient H) :=
mul_action.comp_hom (quotient H) (subtype.val : I → α)

end mul_action

/-- Typeclass for multiplicative actions on additive structures. This generalizes group modules. -/
class mul_action_add (α : Type u) (β : Type v) [monoid α] [add_monoid β] extends mul_action α β :=
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe this should be called distrib_mul_action

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like that name. I renamed it.

(smul_add : ∀(r : α) (x y : β), r • (x + y) = r • x + r • y)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think swapping lhs and rhs would make a better simp lemma

Copy link
Member Author

@jcommelin jcommelin Mar 27, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That goes contrary to how these distributivity laws are written elsewhere in mathlib. In general I think neither direction is good enough to be a simp-lemma. You rewrite both ways quite often (I think).

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The difference here is that r and x, y have different types. Reversing the sides puts x and y together and then they can interact in some way.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, but very often you actually don't want them together, in practice. There is only one occurence of ← smul_add and two (smul_add _ _ _).symm in mathlib at the moment. But there are lots of occurences with the current direction.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Neither direction should be a simp lemma, because distributivity expansion can blow up theorems, but as a manually applied rewrite it should be this direction, because the LHS is more likely to match than the RHS (because you are duplicating a term rather than merging terms).

(smul_zero {} : ∀(r : α), r • (0 : β) = 0)

section
variables [monoid α] [add_monoid β] [mul_action_add α β]

theorem smul_add (a : α) (b₁ b₂ : β) : a • (b₁ + b₂) = a • b₁ + a • b₂ :=
mul_action_add.smul_add _ _ _

end group_action
@[simp] theorem smul_zero (a : α) : a • (0 : β) = 0 :=
mul_action_add.smul_zero _

end
20 changes: 10 additions & 10 deletions src/group_theory/sylow.lean
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ Authors: Chris Hughes
import group_theory.group_action group_theory.quotient_group
import group_theory.order_of_element data.zmod.basic algebra.pi_instances

open equiv fintype finset group_action monoid_action function
open equiv fintype finset mul_action function
open equiv.perm is_subgroup list quotient_group
universes u v w
variables {G : Type u} {α : Type v} {β : Type w} [group G]

local attribute [instance, priority 0] subtype.fintype set_fintype classical.prop_decidable

namespace group_action
variables [group_action G α]
namespace mul_action
variables [mul_action G α]

lemma mem_fixed_points_iff_card_orbit_eq_one {a : α}
[fintype (orbit G a)] : a ∈ fixed_points G α ↔ card (orbit G a) = 1 :=
Expand Down Expand Up @@ -58,7 +58,7 @@ begin
end
... = _ : by simp; refl

end group_action
end mul_action

lemma quotient_group.card_preimage_mk [fintype G] (s : set G) [is_subgroup s]
(t : set (quotient s)) : fintype.card (quotient_group.mk ⁻¹' t) =
Expand Down Expand Up @@ -98,11 +98,11 @@ def rotate_vectors_prod_eq_one (G : Type*) [group G] (n : ℕ+) (m : multiplicat
(v : vectors_prod_eq_one G n) : vectors_prod_eq_one G n :=
⟨⟨v.1.to_list.rotate m.1, by simp⟩, prod_rotate_eq_one_of_prod_eq_one v.2 _⟩

instance rotate_vectors_prod_eq_one.is_group_action (n : ℕ+) :
group_action (multiplicative (zmod n)) (vectors_prod_eq_one G n) :=
instance rotate_vectors_prod_eq_one.mul_action (n : ℕ+) :
mul_action (multiplicative (zmod n)) (vectors_prod_eq_one G n) :=
{ smul := (rotate_vectors_prod_eq_one G n),
one := λ v, subtype.eq $ vector.eq _ _ $ rotate_zero v.1.to_list,
mul := λ a b ⟨⟨v, hv₁⟩, hv₂⟩, subtype.eq $ vector.eq _ _ $
one_smul := λ v, subtype.eq $ vector.eq _ _ $ rotate_zero v.1.to_list,
mul_smul := λ a b ⟨⟨v, hv₁⟩, hv₂⟩, subtype.eq $ vector.eq _ _ $
show v.rotate ((a + b : zmod n).val) = list.rotate (list.rotate v (b.val)) (a.val),
by rw [zmod.add_val, rotate_rotate, ← rotate_mod _ (b.1 + a.1), add_comm, hv₁] }

Expand All @@ -128,7 +128,7 @@ have hcard : card (vectors_prod_eq_one G (n + 1)) = card G ^ (n : ℕ),
set.card_range_of_injective (mk_vector_prod_eq_one_inj _), card_vector],
have hzmod : fintype.card (multiplicative (zmod p')) =
(p' : ℕ) ^ 1 := (nat.pow_one p').symm ▸ card_fin _,
have hmodeq : _ = _ := @group_action.card_modeq_card_fixed_points
have hmodeq : _ = _ := @mul_action.card_modeq_card_fixed_points
(multiplicative (zmod p')) (vectors_prod_eq_one G p') _ _ _ _ _ _ 1 hp hzmod,
have hdvdcard : p ∣ fintype.card (vectors_prod_eq_one G (n + 1)) :=
calc p ∣ card G ^ 1 : by rwa nat.pow_one
Expand Down Expand Up @@ -157,7 +157,7 @@ let ⟨a, ha⟩ := this in
(hp.2 _ (order_of_dvd_of_pow_eq_one this)).resolve_left
(λ h, ha1 (order_of_eq_one_iff.1 h))⟩

open is_subgroup is_submonoid is_group_hom group_action
open is_subgroup is_submonoid is_group_hom mul_action

lemma mem_fixed_points_mul_left_cosets_iff_mem_normalizer {H : set G} [is_subgroup H] [fintype H]
{x : G} : (x : quotient H) ∈ fixed_points H (quotient H) ↔ x ∈ normalizer H :=
Expand Down
2 changes: 2 additions & 0 deletions src/linear_algebra/basic.lean
Original file line number Diff line number Diff line change
Expand Up @@ -1175,6 +1175,8 @@ variables [module α β] [module α γ] [module α δ]
include α
open linear_map

set_option class.instance_max_depth 39

def smul_of_unit (a : units α) : β ≃ₗ[α] β :=
of_linear ((a:α) • 1 : β →ₗ β) (((a⁻¹ : units α) : α) • 1 : β →ₗ β)
(by rw [smul_comp, comp_smul, smul_smul, units.mul_inv, one_smul]; refl)
Expand Down
4 changes: 4 additions & 0 deletions src/linear_algebra/basis.lean
Original file line number Diff line number Diff line change
Expand Up @@ -426,6 +426,8 @@ open submodule
/- TODO: some of the following proofs can generalized with a zero_ne_one predicate type class
(instead of a data containing type classs) -/

set_option class.instance_max_depth 36

lemma mem_span_insert_exchange : x ∈ span α (insert y s) → x ∉ span α s → y ∈ span α (insert x s) :=
begin
simp [mem_span_insert],
Expand All @@ -435,6 +437,8 @@ begin
simp [a0, smul_add, smul_smul]
end

set_option class.instance_max_depth 32

lemma linear_independent_iff_not_mem_span : linear_independent α s ↔ (∀x∈s, x ∉ span α (s \ {x})) :=
linear_independent_iff_not_smul_mem_span.trans
⟨λ H x xs hx, one_ne_zero (H x xs 1 $ by simpa),
Expand Down
2 changes: 1 addition & 1 deletion src/linear_algebra/finsupp.lean
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,7 @@ section vector_space
universes u

open vector_space
set_option class.instance_max_depth 70
set_option class.instance_max_depth 100

lemma cardinal_mk_eq_cardinal_mk_field_pow_dim
{α β : Type u} [discrete_field α] [add_comm_group β] [vector_space α β]
Expand Down
Loading