Zulip Chat Archive

Stream: Is there code for X?

Topic: Double opposite is the same ring/algebra


Eric Wieser (Aug 04 2023 at 06:31):

This worked in Lean 3, but the new structure-based MulIOpposite makes it no longer work:

local attribute [semireducible] mul_opposite
example {M} [monoid M] : Mᵐᵒᵖᵐᵒᵖ ≃* M := mul_equiv.refl M
example {R} [ring R] : Rᵐᵒᵖᵐᵒᵖ ≃+* R := ring_equiv.refl R
-- ok, this one didn't work very well
example {R A} [comm_ring R] [ring A] [algebra R A] : Aᵐᵒᵖᵐᵒᵖ ≃ₐ[R] A :=
  by convert @alg_equiv.refl R A _ _ _; ext; refl

Eric Wieser (Aug 04 2023 at 06:32):

I'm not too upset that these no longer work; but do we have them anywhere in mathlib?

Eric Wieser (Aug 04 2023 at 06:35):

If we don't already have them, it's not too hard to build the last one as:

@[simps]
def mul_opposite.op_op_alg_equiv : Aᵐᵒᵖᵐᵒᵖ ≃ₐ[R] A :=
alg_equiv.of_linear_equiv
  ((mul_opposite.op_linear_equiv _).trans (mul_opposite.op_linear_equiv _)).symm
  (λ x y, rfl)
  (λ r, rfl)

Eric Wieser (Aug 04 2023 at 07:28):

A related question is whether we have ℂᵐᵒᵖ ≃ₐ[ℂ] ℂ anywhere; the closest I can find is docs#RingHom.fromOpposite

Kevin Buzzard (Aug 04 2023 at 11:17):

You mean docs#Complex.conj ? Oh that doesn't exist any more? And docs#starRingEnd is a ring hom, not an algebra equiv?

Eric Wieser (Aug 04 2023 at 11:21):

Sorry, that question was unclear: I mean id

Eric Wieser (Aug 04 2023 at 11:30):

Either way, I just ended up writing all these (in lean3, so now I need to wait for mathport to start up)

Eric Wieser (Aug 04 2023 at 12:13):

#6364 has ℂᵐᵒᵖ ≃ₐ[ℂ] ℂ and some missing AlgHom versions of RingHom helpers.

Eric Wieser (Aug 04 2023 at 12:14):

The motivation for all this was to build Aᵐᵒᵖ ⊗[R] Bᵐᵒᵖ ≃ₐ[S] (A ⊗[R] B)ᵐᵒᵖ, which in turn I needed to build one of those "conjure a hom then ext" proofs

Kevin Buzzard (Aug 04 2023 at 12:52):

(oh I'm an idiot -- complex conjugation is not C-linear)

Eric Wieser (Aug 11 2023 at 10:11):

Eric Wieser said:

#6364 has ℂᵐᵒᵖ ≃ₐ[ℂ] ℂ and some missing AlgHom versions of RingHom helpers.

:ping_pong:; this is unfortunately a bit long, but it's all just expansion of existing boilerplate.

Eric Wieser (Aug 11 2023 at 14:38):

#6525 contains the titular result of this thread, along with some other helpers I needed for Aᵐᵒᵖ ⊗[R] Bᵐᵒᵖ ≃ₐ[S] (A ⊗[R] B)ᵐᵒᵖ. (#6555)


Last updated: Dec 20 2023 at 11:08 UTC