Zulip Chat Archive

Stream: maths

Topic: two different quotients by subgroup


Heather Macbeth (Jun 24 2022 at 06:47):

We have

import group_theory.group_action.basic

example {G : Type*} [group G] (H : subgroup G) :
  (@mul_action.orbit_rel H.opposite G _ _).r = (quotient_group.left_rel H).r :=
begin
  ext i j,
  change _  set.range _  _  H,
  split,
  { rintros h, rfl⟩,
    convert H.inv_mem h.prop,
    change  (_ * _)⁻¹ * _ = _,
    simp },
  { intros h,
    let x : H.opposite := mul_opposite.op (i⁻¹ * j)⁻¹, H.inv_mem h⟩,
    use x,
    change j * _⁻¹ = _,
    simp }
end

Heather Macbeth (Jun 24 2022 at 06:50):

But these are not defeq. So the quotients by the associated setoids are not the same type.

Heather Macbeth (Jun 24 2022 at 06:52):

I encountered this when trying to use docs#t2_space_of_properly_discontinuous_smul_of_t2_space (which uses the first quotient) on a quotient group (which is created from the second quotient).

Heather Macbeth (Jun 24 2022 at 06:55):

Not sure how to fix this ...

Eric Wieser (Jun 24 2022 at 08:13):

I think I remember @Yury G. Kudryashov suggesting in the past that we redefine left_rel in terms of orbit_rel

Eric Wieser (Jun 24 2022 at 09:00):

(I already redefined submodule quotients to match additive quotients, so I think such a change would be reasonable)

Yury G. Kudryashov (Jun 27 2022 at 04:09):

I see two ways to fix this.

  1. Redefine group/submodule quotients to use mul_action.orbit_rel.
  2. Reformulate your statement in terms of (proj : X → Y) (h : quotient_map proj) (h' : proj x = proj y <-> ...).
    I prefer the first approach but I have no time to do this refactor myself.

Yury G. Kudryashov (Jun 27 2022 at 04:46):

BTW, should we redefine orbit_rel so that it is always an equivalence relation? E.g., x ~ y if there exist a and b such that ax = by.

Heather Macbeth (Jun 27 2022 at 15:02):

Yury G. Kudryashov said:

BTW, should we redefine orbit_rel so that it is always an equivalence relation? E.g., x ~ y if there exist a and b such that ax = by.

If I remember correctly, @Joseph Myers did something like this in the special case of docs#ray_vector.setoid

Heather Macbeth (Jun 28 2022 at 00:32):

Yury G. Kudryashov said:

I prefer the first approach but I have no time to do this refactor myself.

OK, I'm trying this out in branch#var-quotient, but I still don't have a sense of how big a refactor it would be.

Heather Macbeth (Jun 28 2022 at 11:34):

The first real consequence of the refactor I've encountered is that it breaks the following, which used to be definitional equalities:

import group_theory.coset

variables (G : Type*) [group G] (H : subgroup G)

example :
  @quotient_group.left_rel G _ H = @quotient_add_group.left_rel (additive G) _ H.to_add_subgroup :=
rfl

example : (G  H) = (additive G  H.to_add_subgroup) := rfl

Still trying to figure out exactly why, and whether this defeq is something worth caring about.

Heather Macbeth (Jun 28 2022 at 11:45):

Perhaps the more natural way to phrase this is that

example : additive (G  H) = (additive G  H.to_add_subgroup) := rfl

breaks. So I claim we have to choose between that and

example : quotient (mul_action.orbit_rel H.opposite G) = (G  H) := rfl

(the goal of the refactor).

Kevin Buzzard (Jun 28 2022 at 11:54):

I have been doing category theory in Lean for a while and have kind of become immune to this phenomenon -- I expect things to be isomorphic, not equal (equality is kind of banned in category theory). If M=N then G/M and G/N are not equal in Lean, or perhaps not equal without some pain attached; instead we write down an isomorphism between them: docs#quotient_group.equiv_quotient_of_eq (and the proof is nothing like refl). This has the same feeling.

Heather Macbeth (Jun 28 2022 at 11:55):

Indeed, but by the same logic maybe the whole refactor is not worth while, and instead we should go with Yury's second suggestion?

Heather Macbeth (Jun 28 2022 at 11:56):

On the other hand, @Yury G. Kudryashov considered this the less preferable option of the two.

Heather Macbeth (Jun 28 2022 at 12:10):

I wonder if we can fix it by redefining the group quotient using right rather than left cosets, which avoids the need for opposite ...

Yury G. Kudryashov (Jun 28 2022 at 12:40):

Another approach: you use your proof to define isomorphisms (equiv, homeomorph, measurable_equiv) between two quotient spaces, then use these isomorphisms to transfer some properties.

Yury G. Kudryashov (Jun 28 2022 at 12:40):

I'm not sure which approach is better in the long term.

Eric Wieser (Jun 28 2022 at 12:58):

Heather Macbeth said:

Still trying to figure out exactly why,

Here's some progress:

import group_theory.coset

variables (G : Type*) [group G] (H : subgroup G)

example :
  @quotient_group.left_rel G _ H =
    (@quotient_add_group.left_rel (additive G) _ H.to_add_subgroup).comap additive.of_mul :=
begin
  ext,
  dsimp [quotient_group.left_rel, quotient_add_group.left_rel, mul_action.orbit_rel,
    add_action.orbit_rel, setoid.rel, mul_action.orbit, add_action.orbit, subgroup.opposite,
      add_subgroup.opposite, set.range, set_like.has_coe_to_sort, subgroup.set_like,
         add_subgroup.set_like, submonoid.to_add_submonoid, function.on_fun, coe_sort,
          set_like.has_mem, set.preimage, additive.add_action, add_action.to_has_vadd,
          op_smul_eq_mul, subgroup.mul_action, submonoid.mul_action],
  sorry
end

Eric Wieser (Jun 28 2022 at 13:00):

attribute [semireducible] mul_opposite fixes your original issue

Eric Wieser (Jun 28 2022 at 13:00):

For some reason docs#mul_opposite is irreducible but docs#add_opposite is semireducible

Heather Macbeth (Jun 28 2022 at 13:34):

Thanks for the detective work @Eric Wieser !!

Eric Wieser (Jun 28 2022 at 13:42):

I'm not sure whether or not mul_opposite _should_ be irreducible, but at any rate people who care about the defeq you mention are likely to want to make mul_opposite semireducible locally anyway

Eric Wieser (Jun 28 2022 at 13:45):

This does raise that even with structure eta in Lean 4, making multiplicative a structure loses some useful defeqs

Heather Macbeth (Jun 29 2022 at 02:52):

#15045


Last updated: Dec 20 2023 at 11:08 UTC