Zulip Chat Archive
Stream: new members
Topic: is_iso identity and composition, maximal groupoid
Alena Gusakov (Jun 28 2020 at 16:43):
So I'm trying to prove two things, namely the identity morphism is an isomorphism and composition of isomorphisms is an isomorphism. I'd like to use these proofs to show that the maximal groupoid of C is a subcategory of C.
For identity morphism, looking through isomorphism.lean
, there is a statement that proves that identity morphisms are isomorphisms. I'm probably overcomplicating this, but is there a way to prove it in the way I've set it up? Is there even a point to proving it this way?
import category_theory.category -- this transitively imports
-- category_theory.category
-- category_theory.functor
-- category_theory.natural_transformation
import category_theory.isomorphism
import tactic
open category_theory
universes v u
variables (C : Type u) [category.{v} C]
def identity_is_iso {X : C} : is_iso (𝟙 X) :=
begin
have hcomp : 𝟙 X ≫ 𝟙 X = 𝟙 X :=
by {rw [category.id_comp]},
have hinv2 : (𝟙 X) = inv (𝟙 X) :=
by {sorry},
sorry,
end
When it comes to composition of morphisms, I pretty much have the same questions. What I have is really overcomplicating something I think is supposed to be really simple.
import category_theory.category -- this transitively imports
-- category_theory.category
-- category_theory.functor
-- category_theory.natural_transformation
import category_theory.isomorphism
import tactic
open category_theory
universes v u
variables (C : Type u) [category.{v} C]
-- need f.hom ≫ g.hom ≫ g.inv ≫ f.inv = 𝟙 X
def hom_comp_is_iso {X Y Z : C} (f : X ≅ Y) (g : Y ≅ Z) :
is_iso (f.hom ≫ g.hom) :=
begin
have hfx : 𝟙 X = f.hom ≫ f.inv :=
by {sorry},
have hfy : 𝟙 Y = f.inv ≫ f.hom :=
by {sorry},
have hgy : 𝟙 Y = g.hom ≫ g.inv :=
by {sorry},
have hgz : 𝟙 Z = g.inv ≫ g.hom :=
by {sorry},
have hfin1 : 𝟙 X = f.hom ≫ g.hom ≫ g.inv ≫ f.inv :=
calc 𝟙 X = f.hom ≫ f.inv :
by {sorry}
... = f.hom ≫ 𝟙 Y ≫ f.inv :
by {sorry}
... = f.hom ≫ g.hom ≫ g.inv ≫ f.inv :
by {sorry},
sorry,
end
-- incredibly inefficient. not even gonna bother with this.
-- figure out how to rephrase.
Also, are these definitions good to use in proving that the maximal groupoid is a subcategory? Is there another way I should be phrasing things? I want to be able to explicitly see what's going on because I'm still getting used to Lean syntax. It seems like there's a proof of Groupoid.{v u}
being large_category.{max v u}
, but I don't really see why a groupoid must necessarily be a large category. Unless I'm misunderstanding, should there be some way of proving groupoids are just categories, not necessarily large/small?
Alena Gusakov (Jun 28 2020 at 16:50):
Oops, looks like I was using out-of-date syntax for this stuff, don't know if that changes things much
Bhavik Mehta (Jun 28 2020 at 16:50):
There was a patch some time ago which means you don't need to explicitly name and include the category instance
Alena Gusakov (Jun 28 2020 at 16:50):
Gotcha, I'll change that
Bhavik Mehta (Jun 28 2020 at 16:51):
Also for the identity iso stuff, I think you are overcomplicating it a bit. In particular, notice that is_iso
is a class with three fields, to construct the fact that it's an iso you just need to supply those three fields - you can get their names by doing {!!}
(instead of begin/end) and the lightbulb will have an option about a skeleton
Alena Gusakov (Jun 28 2020 at 16:52):
Does that also apply to the composition stuff?
Bhavik Mehta (Jun 28 2020 at 16:53):
Yeah, it applies to basically anything where you want to prove is_iso
directly
Alena Gusakov (Jun 28 2020 at 16:54):
Okay, good to know. Thanks! I might come back into this thread later once I rewrite stuff if things aren't working still
Bhavik Mehta (Jun 28 2020 at 17:28):
On your Groupoid
thing, Groupoid
is actually the category of groupoids, so it should be a large category. I think you want groupoid
, which is the type of a groupoid
Alena Gusakov (Jun 28 2020 at 21:16):
Oh, that makes a lot of sense, thanks
Alena Gusakov (Jun 28 2020 at 21:18):
I figured out identity_is_iso
but I can't seem to get the composition one - maybe my syntax is off?
import category_theory.category -- this transitively imports
-- category_theory.category
-- category_theory.functor
-- category_theory.natural_transformation
import category_theory.isomorphism
import tactic
open category_theory
universes v u
variables (C : Type u) [category.{v} C]
-- need f.hom ≫ g.hom ≫ g.inv ≫ f.inv = 𝟙 X and vice versa
def iso_comp_is_iso {X Y Z : C} (f : X ⟶ Y) (g : Y ⟶ Z) [is_iso f] [is_iso g] :
is_iso (f ≫ g) :=
{ inv := (inv g ≫ inv f),
hom_inv_id' := (f ≫ g) ≫ (inv g ≫ inv f) = 𝟙 X--by rw [category.assoc ] sorry,--is_iso.hom_inv_id' g],
inv_hom_id' := _}
end
Alena Gusakov (Jun 28 2020 at 21:18):
The error I'm getting is at the equals sign before 𝟙 X
and it looks like
type mismatch at field 'hom_inv_id''
(f ≫ g) ≫ inv g ≫ inv f = ⁇
has type
Prop : Type
but is expected to have type
auto_param ((f ≫ g) ≫ inv g ≫ inv f = 𝟙 X) (name.mk_string "obviously" name.anonymous) : Prop
Reid Barton (Jun 28 2020 at 21:19):
You put what you need to prove where you were supposed to put a proof.
Alena Gusakov (Jun 28 2020 at 21:20):
Oh, oops. Thanks!
Last updated: Dec 20 2023 at 11:08 UTC