Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit c12aced

Browse files
eric-wieserdupuisf
andcommitted
feat(algebra/star): star_linear_equiv (#9426)
Co-authored-by: Frédéric Dupuis <dupuisf@iro.umontreal.ca> Co-authored-by: Frédéric Dupuis <31101893+dupuisf@users.noreply.github.com>
1 parent 158fbc5 commit c12aced

File tree

3 files changed

+72
-5
lines changed

3 files changed

+72
-5
lines changed

src/algebra/ring/comp_typeclasses.lean

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Authors: Frédéric Dupuis, Heather Macbeth
55
-/
66

77
import algebra.ring.basic
8+
import data.equiv.ring
89

910
/-!
1011
# Propositional typeclasses on several ring homs
@@ -90,6 +91,31 @@ instance triples₂ {σ₂₁ : R₂ →+* R₁} [ring_hom_inv_pair σ₁₂ σ
9091
ring_hom_comp_triple σ₂₁ σ₁₂ (ring_hom.id R₂) :=
9192
by simp only [comp_eq₂]⟩
9293

94+
/--
95+
Construct a `ring_hom_inv_pair` from both directions of a ring equiv.
96+
97+
This is not an instance, as for equivalences that are involutions, a better instance
98+
would be `ring_hom_inv_pair e e`. Indeed, this declaration is not currently used in mathlib.
99+
100+
See note [reducible non-instances].
101+
-/
102+
@[reducible]
103+
lemma of_ring_equiv (e : R₁ ≃+* R₂) :
104+
ring_hom_inv_pair (↑e : R₁ →+* R₂) ↑e.symm :=
105+
⟨e.symm_to_ring_hom_comp_to_ring_hom, e.symm.symm_to_ring_hom_comp_to_ring_hom⟩
106+
107+
/--
108+
Swap the direction of a `ring_hom_inv_pair`. This is not an instance as it would loop, and better
109+
instances are often available and may often be preferrable to using this one. Indeed, this
110+
declaration is not currently used in mathlib.
111+
112+
See note [reducible non-instances].
113+
-/
114+
@[reducible]
115+
lemma symm (σ₁₂ : R₁ →+* R₂) (σ₂₁ : R₂ →+* R₁) [ring_hom_inv_pair σ₁₂ σ₂₁] :
116+
ring_hom_inv_pair σ₂₁ σ₁₂ :=
117+
⟨ring_hom_inv_pair.comp_eq₂, ring_hom_inv_pair.comp_eq⟩
118+
93119
end ring_hom_inv_pair
94120

95121
namespace ring_hom_comp_triple

src/algebra/star/basic.lean

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,10 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Scott Morrison
55
-/
66
import tactic.apply_fun
7-
import algebra.order.ring
8-
import algebra.opposites
9-
import algebra.big_operators.basic
10-
import algebra.group_power.lemmas
117
import algebra.field_power
128
import data.equiv.ring_aut
13-
import data.equiv.mul_add_aut
149
import group_theory.group_action.units
10+
import algebra.ring.comp_typeclasses
1511

1612
/-!
1713
# Star monoids, rings, and modules
@@ -288,6 +284,17 @@ attribute [simp] star_smul
288284
instance star_monoid.to_star_module [comm_monoid R] [star_monoid R] : star_module R R :=
289285
⟨star_mul'⟩
290286

287+
namespace ring_hom_inv_pair
288+
289+
/-- Instance needed to define star-linear maps over a commutative star ring
290+
(ex: conjugate-linear maps when R = ℂ). -/
291+
instance [comm_semiring R] [star_ring R] :
292+
ring_hom_inv_pair ((star_ring_aut : ring_aut R) : R →+* R)
293+
((star_ring_aut : ring_aut R) : R →+* R) :=
294+
⟨ring_hom.ext star_star, ring_hom.ext star_star⟩
295+
296+
end ring_hom_inv_pair
297+
291298
/-! ### Instances -/
292299

293300
namespace units

src/algebra/star/module.lean

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/-
2+
Copyright (c) 2021 Eric Wieser. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Eric Wieser, Frédéric Dupuis
5+
-/
6+
import algebra.star.basic
7+
import data.equiv.module
8+
9+
/-!
10+
# The star operation, bundled as a star-linear equiv
11+
12+
We define `star_linear_equiv`, which is the star operation bundled as a star-linear map.
13+
It is defined on a star algebra `A` over the base ring `R`.
14+
15+
## TODO
16+
17+
- Define `star_linear_equiv` for noncommutative `R`. We only the commutative case for now since,
18+
in the noncommutative case, the ring hom needs to reverse the order of multiplication. This
19+
requires a ring hom of type `R →+* Rᵒᵖ`, which is very undesirable in the commutative case.
20+
One way out would be to define a new typeclass `is_op R S` and have an instance `is_op R R`
21+
for commutative `R`.
22+
- Also note that such a definition involving `Rᵒᵖ` or `is_op R S` would require adding
23+
the appropriate `ring_hom_inv_pair` instances to be able to define the semilinear
24+
equivalence.
25+
-/
26+
27+
/-- If `A` is a module over a commutative `R` with compatible actions,
28+
then `star` is a semilinear equivalence. -/
29+
def star_linear_equiv {R : Type*} {A : Type*}
30+
[comm_ring R] [star_ring R] [semiring A] [star_ring A] [module R A] [star_module R A] :
31+
A ≃ₛₗ[((star_ring_aut : ring_aut R) : R →+* R)] A :=
32+
{ to_fun := star,
33+
map_smul' := star_smul,
34+
.. star_add_equiv }

0 commit comments

Comments
 (0)