Zulip Chat Archive

Stream: Is there code for X?

Topic: equivalence of fibres over equal base points?


Scott Morrison (Aug 03 2023 at 23:56):

What is

def foo (α : J  Type _) {j j' : J} (h : j = j') : α j  α j' where
  toFun a := congrArg α h  a
  invFun a := congrArg α h.symm  a
  left_inv a := by aesop
  right_inv a := by aesop

called?

Scott Morrison (Aug 03 2023 at 23:56):

(Presumably it is in the library somewhere!)

Adam Topaz (Aug 04 2023 at 00:16):

docs#Equiv.congr ?

Arend Mellendijk (Aug 04 2023 at 00:17):

Equiv.cast (congrArg α h)?
docs#Equiv.cast

Scott Morrison (Aug 04 2023 at 00:28):

Thanks! I might combine those suggestions and add

def Equiv.congr (α : J  Type _) {j j' : J} (h : j = j') : α j  α j' :=
  Equiv.cast (congrArg α h)

Eric Wieser (Aug 04 2023 at 05:23):

That strikes me as not a great name, given how maybe other equivs have congr in their name, and the existence of docs#Equiv.equivCongr

Anatole Dedecker (Aug 04 2023 at 07:43):

Is docs#Equiv.cast really not enough here? It feels a bit overkill to add a special definition for this case

Eric Wieser (Aug 04 2023 at 08:49):

I think the argument goes that it's useful to be able to find h by unification

Antoine Chambert-Loir (Aug 05 2023 at 08:22):

Scott Morrison said:

What is

def foo (α : J  Type _) {j j' : J} (h : j = j') : α j  α j' where
  toFun a := congrArg α h  a
  invFun a := congrArg α h.symm  a
  left_inv a := by aesop
  right_inv a := by aesop

called?

Can't resist writing it's called 'foo'.

Johan Commelin (Aug 05 2023 at 11:25):

I guess it could be called eqToEquiv, just like we have eqToIso, etc...

Scott Morrison (Aug 05 2023 at 11:27):

It is currently called Equiv.transport in #6379, where I use it in building the monoidal structure on graded objects. I was not able to find something that worked just using Equiv.cast, but if anyone would like to experiment, they're welcome to push commits. :-)

Eric Wieser (Aug 05 2023 at 13:18):

These sound somewhat similar to the problems I faced when putting the monoid structure on DirectSum; are the constructions analogous in some way?

Scott Morrison (Aug 05 2023 at 23:37):

What do you mean by "putting the monoid structure on DirectSum"?

Eric Wieser (Aug 05 2023 at 23:40):

I'm referring to these three lemmas and their use in docs#DirectSum.semiring

Scott Morrison (Aug 05 2023 at 23:44):

I don't think it is directly related. The thing Joël and I have done here is:

variable {V : Type u} [Category.{v} V] [Preadditive V] [MonoidalCategory V] [MonoidalPreadditive V]
  [HasFiniteBiproducts V] [HasZeroObject V]

/-- The tensor product of graded objects `X` and `Y` is, in each degree `i`,
the biproduct over `a + b = i` of `X a ⊗ Y b`. -/
def tensorObj (X Y : GradedObject  V) (i : ) : V :=
  biproduct (fun p : antidiagonal i => (X p.1.1)  (Y p.1.2))

/-- The tensor product of morphisms between graded objects is the diagonal map
consisting of tensor products of components. -/
def tensorHom {W X Y Z : GradedObject  V} (f : W  X) (g : Y  Z) :
    tensorObj W Y  tensorObj X Z :=
  fun _ => biproduct.map fun p => f p.1.1  g p.1.2

/-- The tensor unit in graded `V`-objects is the tensor unit in `V`, supported in grading 0. -/
def tensorUnit : GradedObject  V
| 0 => 𝟙_ V
| _ + 1 => 0

-- Construction of unitors and associators, and many lemmas.

instance : MonoidalCategory (GradedObject  V) where
  ...

Scott Morrison (Aug 05 2023 at 23:45):

If you set V = AddCommGroup, then Mon_ (GradedObject ℕ V) will be equivalent to -graded rings.

Eric Wieser (Aug 05 2023 at 23:52):

I assume you use antidiagonal i and not {p // p.1 + p.2 = i} because you need finiteness in some way?


Last updated: Dec 20 2023 at 11:08 UTC