Zulip Chat Archive
Stream: general
Topic: definition of `equiv`
Kevin Buzzard (Aug 21 2019 at 11:48):
/-- `α ≃ β` is the type of functions from `α → β` with a two-sided inverse. -/ structure equiv (α : Sort*) (β : Sort*) := (to_fun : α → β) (inv_fun : β → α) (left_inv : left_inverse inv_fun to_fun) (right_inv : right_inverse inv_fun to_fun)
Why was it decided to use left_inverse
and right_inverse
, rather than the other possibilities inv_fun \circ to_fun = id
or \forall x, inv_fun (to_fun x) = x
? Both of my suggestions seem more natural to me.
Chris Hughes (Aug 21 2019 at 11:59):
The first thing you'd do when defining an equiv using your definition is apply funext
. This definition saves you that trouble.
Kevin Buzzard (Aug 21 2019 at 12:00):
I thought I was offering both a pre-funext and a post-funext suggestion?
Mario Carneiro (Aug 21 2019 at 12:01):
the second one is defeq to the existing definition
Mario Carneiro (Aug 21 2019 at 12:01):
I guess the reasoning is, if you have a definition for something why not use it when it's obviously applicable
Mario Carneiro (Aug 21 2019 at 12:02):
If you don't think that left_inverse
is appropriate here, when would it ever be appropriate?
Patrick Massot (Aug 21 2019 at 12:03):
The "pre-funext" vs "post-funext" dilemma is unfortunately unfixable. In my experience, you will always want both, depending on what you are proving.
Kevin Buzzard (Aug 21 2019 at 12:04):
the second one is defeq to the existing definition
Right, but it's less obfuscated!
Kevin Buzzard (Aug 21 2019 at 12:05):
If you don't think that
left_inverse
is appropriate here, when would it ever be appropriate?
I don't think I've ever used it...(and that's not only because I can never remember whether it says fg=id or gf=id)
Mario Carneiro (Aug 21 2019 at 12:07):
that's actually a totally reasonable response too. I'm not sure I would have ever defined left_inverse
and right_inverse
; they aren't abbreviating enough to be worth it, plus they are easily confused and differ only in argument order
Kevin Buzzard (Aug 21 2019 at 12:17):
So this "left" and "right" stuff comes up sometimes, and I can never remember which way round things are. If is a left -module then that means acts on the left, so r \bub m
. This one I remember because I have to in my day job. left_distrib
I have no idea what this means, I just use mul_add
or add_mul
as appropriate, because I know what these mean. left_inverse
I have no idea what this means, but it seems to be actually longer than its definition, whatever the definition is. Is there some rule of thumb? Left associative I think I understand -- that means that , right? That is maybe a more sensible use of left
?
Mario Carneiro (Aug 21 2019 at 12:22):
left distrib is the same as left assoc - a * (b + c) = ...
Mario Carneiro (Aug 21 2019 at 12:24):
you put a thing on the left and distribute it
Mario Carneiro (Aug 21 2019 at 12:25):
as for left inverse, your guess is as good as mine. Blame the category theorists
Mario Carneiro (Aug 21 2019 at 12:26):
actually it probably originates in group theory
Mario Carneiro (Aug 21 2019 at 12:26):
category theorists like to call these things monos and sections
Mario Carneiro (Aug 21 2019 at 12:26):
which is confusing in a completely different way
Reid Barton (Aug 21 2019 at 12:55):
I just remember that the first law (left_inv
) wants an argument which is the same type as the first function (to_fun
) and then the same for the second law/function
Kevin Buzzard (Aug 21 2019 at 14:06):
In data.equiv.basic
there is
@[trans] protected def trans (e₁ : α ≃ β) (e₂ : β ≃ γ) : α ≃ γ := ⟨e₂.to_fun ∘ e₁.to_fun, e₁.inv_fun ∘ e₂.inv_fun, e₂.left_inv.comp e₁.left_inv, e₂.right_inv.comp e₁.right_inv⟩
and the proofs would not typecheck if one used the more low-level definitions. Here it seems to work because there is a function called function.left_inverse.comp
Simon Hudon (Aug 21 2019 at 14:14):
There's an attribute higher_order
if, from the post-ext formulation, you want to create the pre-ext formulation of a lemma
Floris van Doorn (Aug 21 2019 at 14:37):
I remember left-inverse/right-inverse as follows: if you have g ∘ f = id
in the equation g
is on the left, so it is a left-inverse of f
, and f
is on the right, so it is a right-inverse of g
.
Kevin Buzzard (Aug 21 2019 at 14:38):
Yeah, this is just the sort of idea that I find really hard to remember like that. Because on other days I might figure that g
is on the left, so f
is a left-inverse of g
.
Kevin Buzzard (Aug 21 2019 at 14:39):
The only reason I can remember what a left -module is (" goes on the left" as opposed to "the module goes on the left") is that this comes up time and time again in the stuff I read.
Floris van Doorn (Aug 21 2019 at 14:46):
Makes sense. I get confused myself about most other left/right distinctions (in left_distrib
and add_le_add_left
, or the direction of assoc
), just not this one.
Scott Morrison (Aug 21 2019 at 21:46):
The corresponding fields in iso
(which works fine for Type
, as long as you don't mind a fixed universe) are called hom_inv_id
and inv_hom_id
, which are a little easier to remember.
Scott Morrison (Aug 21 2019 at 21:47):
(Except that they are actually called hom_inv_id'
and inv_hom_id'
, because they have auto_param
s which hopefully mean you don't even need to write them.)
Last updated: Dec 20 2023 at 11:08 UTC