Pi instances for multiplicative actions #
This file defines instances for mul_action and related structures on Pi Types
@[protected, instance]
def
pi.has_vadd
{I : Type u}
{f : I → Type v}
{α : Type u_1}
[Π (i : I), has_vadd α (f i)] :
has_vadd α (Π (i : I), f i)
Equations
- pi.has_vadd = {vadd := λ (s : α) (x : Π (i : I), f i) (i : I), s +ᵥ x i}
@[protected, instance]
def
pi.has_scalar
{I : Type u}
{f : I → Type v}
{α : Type u_1}
[Π (i : I), has_scalar α (f i)] :
has_scalar α (Π (i : I), f i)
Equations
- pi.has_scalar = {smul := λ (s : α) (x : Π (i : I), f i) (i : I), s • x i}
theorem
pi.smul_def
{I : Type u}
{f : I → Type v}
(x : Π (i : I), f i)
{α : Type u_1}
[Π (i : I), has_scalar α (f i)]
(s : α) :
@[simp]
theorem
pi.smul_apply
{I : Type u}
{f : I → Type v}
(x : Π (i : I), f i)
(i : I)
{α : Type u_1}
[Π (i : I), has_scalar α (f i)]
(s : α) :
@[protected, instance]
def
pi.has_vadd'
{I : Type u}
{f : I → Type v}
{g : I → Type u_1}
[Π (i : I), has_vadd (f i) (g i)] :
has_vadd (Π (i : I), f i) (Π (i : I), g i)
Equations
- pi.has_vadd' = {vadd := λ (s : Π (i : I), f i) (x : Π (i : I), g i) (i : I), s i +ᵥ x i}
@[protected, instance]
def
pi.has_scalar'
{I : Type u}
{f : I → Type v}
{g : I → Type u_1}
[Π (i : I), has_scalar (f i) (g i)] :
has_scalar (Π (i : I), f i) (Π (i : I), g i)
Equations
- pi.has_scalar' = {smul := λ (s : Π (i : I), f i) (x : Π (i : I), g i) (i : I), s i • x i}
@[simp]
theorem
pi.smul_apply'
{I : Type u}
{f : I → Type v}
(i : I)
{g : I → Type u_1}
[Π (i : I), has_scalar (f i) (g i)]
(s : Π (i : I), f i)
(x : Π (i : I), g i) :
@[protected, instance]
def
pi.is_scalar_tower
{I : Type u}
{f : I → Type v}
{α : Type u_1}
{β : Type u_2}
[has_scalar α β]
[Π (i : I), has_scalar β (f i)]
[Π (i : I), has_scalar α (f i)]
[∀ (i : I), is_scalar_tower α β (f i)] :
is_scalar_tower α β (Π (i : I), f i)
@[protected, instance]
def
pi.is_scalar_tower'
{I : Type u}
{f : I → Type v}
{g : I → Type u_1}
{α : Type u_2}
[Π (i : I), has_scalar α (f i)]
[Π (i : I), has_scalar (f i) (g i)]
[Π (i : I), has_scalar α (g i)]
[∀ (i : I), is_scalar_tower α (f i) (g i)] :
is_scalar_tower α (Π (i : I), f i) (Π (i : I), g i)
@[protected, instance]
def
pi.is_scalar_tower''
{I : Type u}
{f : I → Type v}
{g : I → Type u_1}
{h : I → Type u_2}
[Π (i : I), has_scalar (f i) (g i)]
[Π (i : I), has_scalar (g i) (h i)]
[Π (i : I), has_scalar (f i) (h i)]
[∀ (i : I), is_scalar_tower (f i) (g i) (h i)] :
is_scalar_tower (Π (i : I), f i) (Π (i : I), g i) (Π (i : I), h i)
@[protected, instance]
def
pi.smul_comm_class
{I : Type u}
{f : I → Type v}
{α : Type u_1}
{β : Type u_2}
[Π (i : I), has_scalar α (f i)]
[Π (i : I), has_scalar β (f i)]
[∀ (i : I), smul_comm_class α β (f i)] :
smul_comm_class α β (Π (i : I), f i)
@[protected, instance]
def
pi.vadd_comm_class
{I : Type u}
{f : I → Type v}
{α : Type u_1}
{β : Type u_2}
[Π (i : I), has_vadd α (f i)]
[Π (i : I), has_vadd β (f i)]
[∀ (i : I), vadd_comm_class α β (f i)] :
vadd_comm_class α β (Π (i : I), f i)
@[protected, instance]
def
pi.smul_comm_class'
{I : Type u}
{f : I → Type v}
{g : I → Type u_1}
{α : Type u_2}
[Π (i : I), has_scalar α (g i)]
[Π (i : I), has_scalar (f i) (g i)]
[∀ (i : I), smul_comm_class α (f i) (g i)] :
smul_comm_class α (Π (i : I), f i) (Π (i : I), g i)
@[protected, instance]
def
pi.vadd_comm_class'
{I : Type u}
{f : I → Type v}
{g : I → Type u_1}
{α : Type u_2}
[Π (i : I), has_vadd α (g i)]
[Π (i : I), has_vadd (f i) (g i)]
[∀ (i : I), vadd_comm_class α (f i) (g i)] :
vadd_comm_class α (Π (i : I), f i) (Π (i : I), g i)
@[protected, instance]
def
pi.smul_comm_class''
{I : Type u}
{f : I → Type v}
{g : I → Type u_1}
{h : I → Type u_2}
[Π (i : I), has_scalar (g i) (h i)]
[Π (i : I), has_scalar (f i) (h i)]
[∀ (i : I), smul_comm_class (f i) (g i) (h i)] :
smul_comm_class (Π (i : I), f i) (Π (i : I), g i) (Π (i : I), h i)
@[protected, instance]
def
pi.vadd_comm_class''
{I : Type u}
{f : I → Type v}
{g : I → Type u_1}
{h : I → Type u_2}
[Π (i : I), has_vadd (g i) (h i)]
[Π (i : I), has_vadd (f i) (h i)]
[∀ (i : I), vadd_comm_class (f i) (g i) (h i)] :
vadd_comm_class (Π (i : I), f i) (Π (i : I), g i) (Π (i : I), h i)
@[protected, instance]
def
pi.is_central_scalar
{I : Type u}
{f : I → Type v}
{α : Type u_1}
[Π (i : I), has_scalar α (f i)]
[Π (i : I), has_scalar αᵐᵒᵖ (f i)]
[∀ (i : I), is_central_scalar α (f i)] :
is_central_scalar α (Π (i : I), f i)
theorem
pi.has_faithful_vadd_at
{I : Type u}
{f : I → Type v}
{α : Type u_1}
[Π (i : I), has_vadd α (f i)]
[∀ (i : I), nonempty (f i)]
(i : I)
[has_faithful_vadd α (f i)] :
has_faithful_vadd α (Π (i : I), f i)
theorem
pi.has_faithful_scalar_at
{I : Type u}
{f : I → Type v}
{α : Type u_1}
[Π (i : I), has_scalar α (f i)]
[∀ (i : I), nonempty (f i)]
(i : I)
[has_faithful_scalar α (f i)] :
has_faithful_scalar α (Π (i : I), f i)
If f i
has a faithful scalar action for a given i
, then so does Π i, f i
. This is
not an instance as i
cannot be inferred.
@[protected, instance]
def
pi.has_faithful_scalar
{I : Type u}
{f : I → Type v}
{α : Type u_1}
[nonempty I]
[Π (i : I), has_scalar α (f i)]
[∀ (i : I), nonempty (f i)]
[∀ (i : I), has_faithful_scalar α (f i)] :
has_faithful_scalar α (Π (i : I), f i)
@[protected, instance]
def
pi.has_faithful_vadd
{I : Type u}
{f : I → Type v}
{α : Type u_1}
[nonempty I]
[Π (i : I), has_vadd α (f i)]
[∀ (i : I), nonempty (f i)]
[∀ (i : I), has_faithful_vadd α (f i)] :
has_faithful_vadd α (Π (i : I), f i)
@[protected, instance]
def
pi.add_action
{I : Type u}
{f : I → Type v}
(α : Type u_1)
{m : add_monoid α}
[Π (i : I), add_action α (f i)] :
add_action α (Π (i : I), f i)
Equations
- pi.add_action α = {to_has_vadd := {vadd := has_vadd.vadd pi.has_vadd}, zero_vadd := _, add_vadd := _}
@[protected, instance]
def
pi.mul_action
{I : Type u}
{f : I → Type v}
(α : Type u_1)
{m : monoid α}
[Π (i : I), mul_action α (f i)] :
mul_action α (Π (i : I), f i)
Equations
- pi.mul_action α = {to_has_scalar := {smul := has_scalar.smul pi.has_scalar}, one_smul := _, mul_smul := _}
@[protected, instance]
def
pi.add_action'
{I : Type u}
{f : I → Type v}
{g : I → Type u_1}
{m : Π (i : I), add_monoid (f i)}
[Π (i : I), add_action (f i) (g i)] :
add_action (Π (i : I), f i) (Π (i : I), g i)
Equations
- pi.add_action' = {to_has_vadd := {vadd := has_vadd.vadd pi.has_vadd'}, zero_vadd := _, add_vadd := _}
@[protected, instance]
def
pi.mul_action'
{I : Type u}
{f : I → Type v}
{g : I → Type u_1}
{m : Π (i : I), monoid (f i)}
[Π (i : I), mul_action (f i) (g i)] :
mul_action (Π (i : I), f i) (Π (i : I), g i)
Equations
- pi.mul_action' = {to_has_scalar := {smul := has_scalar.smul pi.has_scalar'}, one_smul := _, mul_smul := _}
@[protected, instance]
def
pi.distrib_mul_action
{I : Type u}
{f : I → Type v}
(α : Type u_1)
{m : monoid α}
{n : Π (i : I), add_monoid (f i)}
[Π (i : I), distrib_mul_action α (f i)] :
distrib_mul_action α (Π (i : I), f i)
Equations
- pi.distrib_mul_action α = {to_mul_action := {to_has_scalar := mul_action.to_has_scalar (pi.mul_action α), one_smul := _, mul_smul := _}, smul_add := _, smul_zero := _}
@[protected, instance]
def
pi.distrib_mul_action'
{I : Type u}
{f : I → Type v}
{g : I → Type u_1}
{m : Π (i : I), monoid (f i)}
{n : Π (i : I), add_monoid (g i)}
[Π (i : I), distrib_mul_action (f i) (g i)] :
distrib_mul_action (Π (i : I), f i) (Π (i : I), g i)
Equations
- pi.distrib_mul_action' = {to_mul_action := pi.mul_action' (λ (i : I), distrib_mul_action.to_mul_action), smul_add := _, smul_zero := _}
theorem
pi.single_smul
{I : Type u}
{f : I → Type v}
{α : Type u_1}
[monoid α]
[Π (i : I), add_monoid (f i)]
[Π (i : I), distrib_mul_action α (f i)]
[decidable_eq I]
(i : I)
(r : α)
(x : f i) :
theorem
pi.single_smul'
{I : Type u}
{α : Type u_1}
{β : Type u_2}
[monoid α]
[add_monoid β]
[distrib_mul_action α β]
[decidable_eq I]
(i : I)
(r : α)
(x : β) :
A version of pi.single_smul
for non-dependent functions. It is useful in cases Lean fails
to apply pi.single_smul
.
theorem
pi.single_smul₀
{I : Type u}
{f : I → Type v}
{g : I → Type u_1}
[Π (i : I), monoid_with_zero (f i)]
[Π (i : I), add_monoid (g i)]
[Π (i : I), distrib_mul_action (f i) (g i)]
[decidable_eq I]
(i : I)
(r : f i)
(x : g i) :
@[protected, instance]
def
pi.mul_distrib_mul_action
{I : Type u}
{f : I → Type v}
(α : Type u_1)
{m : monoid α}
{n : Π (i : I), monoid (f i)}
[Π (i : I), mul_distrib_mul_action α (f i)] :
mul_distrib_mul_action α (Π (i : I), f i)
Equations
- pi.mul_distrib_mul_action α = {to_mul_action := {to_has_scalar := mul_action.to_has_scalar (pi.mul_action α), one_smul := _, mul_smul := _}, smul_mul := _, smul_one := _}
@[protected, instance]
def
pi.mul_distrib_mul_action'
{I : Type u}
{f : I → Type v}
{g : I → Type u_1}
{m : Π (i : I), monoid (f i)}
{n : Π (i : I), monoid (g i)}
[Π (i : I), mul_distrib_mul_action (f i) (g i)] :
mul_distrib_mul_action (Π (i : I), f i) (Π (i : I), g i)
Equations
- pi.mul_distrib_mul_action' = {to_mul_action := pi.mul_action' (λ (i : I), mul_distrib_mul_action.to_mul_action), smul_mul := _, smul_one := _}
theorem
function.update_vadd
{I : Type u}
{f : I → Type v}
{α : Type u_1}
[Π (i : I), has_vadd α (f i)]
[decidable_eq I]
(c : α)
(f₁ : Π (i : I), f i)
(i : I)
(x₁ : f i) :
function.update (c +ᵥ f₁) i (c +ᵥ x₁) = c +ᵥ function.update f₁ i x₁
theorem
function.update_smul
{I : Type u}
{f : I → Type v}
{α : Type u_1}
[Π (i : I), has_scalar α (f i)]
[decidable_eq I]
(c : α)
(f₁ : Π (i : I), f i)
(i : I)
(x₁ : f i) :
function.update (c • f₁) i (c • x₁) = c • function.update f₁ i x₁
theorem
function.extend_smul
{R : Type u_1}
{α : Type u_2}
{β : Type u_3}
{γ : Type u_4}
[has_scalar R γ]
(r : R)
(f : α → β)
(g : α → γ)
(e : β → γ) :
function.extend f (r • g) (r • e) = r • function.extend f g e
theorem
function.extend_vadd
{R : Type u_1}
{α : Type u_2}
{β : Type u_3}
{γ : Type u_4}
[has_vadd R γ]
(r : R)
(f : α → β)
(g : α → γ)
(e : β → γ) :
function.extend f (r +ᵥ g) (r +ᵥ e) = r +ᵥ function.extend f g e