Built with
doc-gen4 , running Lean4.
Bubbles (
) indicate interactive fragments: hover for details, tap to reveal contents.
Use
Ctrl+β Ctrl+β to navigate,
Ctrl+π±οΈ to focus.
On Mac, use
Cmd instead of
Ctrl .
/-
Copyright (c) 2021 Eric Wieser. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Eric Wieser
! This file was ported from Lean 3 source module algebra.star.pi
! leanprover-community/mathlib commit 9abfa6f0727d5adc99067e325e15d1a9de17fd8e
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Algebra.Star.Basic
import Mathlib.Algebra.Ring.Pi
/-!
# `star` on pi types
We put a `Star` structure on pi types that operates elementwise, such that it describes the
complex conjugation of vectors.
-/
universe u v w
variable { I : Type u }
-- The indexing type
variable { f : I β Type v }
-- The family of types already equipped with instances
namespace Pi
instance : {I : Type u} β {f : I β Type v } β [inst : (i : I ) β Star (f i ) ] β Star ((i : I ) β f i ) instance [β i , Star ( f i )] : Star (β i , f i ) where star x i := star : {R : Type ?u.42} β [self : Star R ] β R β R star ( x i )
@[ simp ]
theorem star_apply : β {I : Type u} {f : I β Type v } [inst : (i : I ) β Star (f i ) ] (x : (i : I ) β f i ) (i : I ), star x i = star (x i ) star_apply [β i , Star ( f i )] ( x : β i , f i ) ( i : I ) : star : {R : Type ?u.193} β [self : Star R ] β R β R star x i = star : {R : Type ?u.231} β [self : Star R ] β R β R star ( x i ) :=
rfl : β {Ξ± : Sort ?u.243} {a : Ξ± }, a = a rfl
#align pi.star_apply Pi.star_apply : β {I : Type u} {f : I β Type v } [inst : (i : I ) β Star (f i ) ] (x : (i : I ) β f i ) (i : I ), star x i = star (x i ) Pi.star_apply
theorem star_def : β [inst : (i : I ) β Star (f i ) ] (x : (i : I ) β f i ), star x = fun i => star (x i ) star_def [β i , Star ( f i )] ( x : β i , f i ) : star : {R : Type ?u.297} β [self : Star R ] β R β R star x = fun i => star : {R : Type ?u.339} β [self : Star R ] β R β R star ( x i ) :=
rfl : β {Ξ± : Sort ?u.353} {a : Ξ± }, a = a rfl
#align pi.star_def Pi.star_def : β {I : Type u} {f : I β Type v } [inst : (i : I ) β Star (f i ) ] (x : (i : I ) β f i ), star x = fun i => star (x i ) Pi.star_def
instance [β i , Star ( f i )] [β i , TrivialStar ( f i )] : TrivialStar (β i , f i )
where star_trivial _ := funext : β {Ξ± : Sort ?u.475} {Ξ² : Ξ± β Sort ?u.474 } {f g : (x : Ξ± ) β Ξ² x }, (β (x : Ξ± ), f x = g x ) β f = g funext fun _ => star_trivial _
instance [β i , InvolutiveStar : Type ?u.582 β Type ?u.582 InvolutiveStar ( f i )] : InvolutiveStar : Type ?u.586 β Type ?u.586 InvolutiveStar (β i , f i )
where star_involutive _ := funext : β {Ξ± : Sort ?u.640} {Ξ² : Ξ± β Sort ?u.639 } {f g : (x : Ξ± ) β Ξ² x }, (β (x : Ξ± ), f x = g x ) β f = g funext fun _ => star_star _
instance [β i , Semigroup ( f i )] [β i , StarSemigroup ( f i )] : StarSemigroup (β i , f i )
where star_mul _ _ := funext : β {Ξ± : Sort ?u.2003} {Ξ² : Ξ± β Sort ?u.2002 } {f g : (x : Ξ± ) β Ξ² x }, (β (x : Ξ± ), f x = g x ) β f = g funext fun _ => star_mul _ _
instance [β i , AddMonoid : Type ?u.2216 β Type ?u.2216 AddMonoid ( f i )] [β i , StarAddMonoid ( f i )] : StarAddMonoid (β i , f i )
where star_add _ _ := funext : β {Ξ± : Sort ?u.2381} {Ξ² : Ξ± β Sort ?u.2380 } {f g : (x : Ξ± ) β Ξ² x }, (β (x : Ξ± ), f x = g x ) β f = g funext fun _ => star_add _ _
instance [β i , NonUnitalSemiring : Type ?u.2597 β Type ?u.2597 NonUnitalSemiring ( f i )] [β i , StarRing ( f i )] : StarRing (β i , f i )
where star_add _ _ := funext : β {Ξ± : Sort ?u.2864} {Ξ² : Ξ± β Sort ?u.2863 } {f g : (x : Ξ± ) β Ξ² x }, (β (x : Ξ± ), f x = g x ) β f = g funext fun _ => star_add _ _
instance { R : Type w } [β i , SMul : Type ?u.3689 β Type ?u.3688 β Type (max?u.3689?u.3688) SMul R ( f i )] [ Star R ] [β i , Star ( f i )]
[β i , StarModule : (R : Type ?u.3709) β (A : Type ?u.3708) β [inst : Star R ] β [inst : Star A ] β [inst : SMul R A ] β Prop StarModule R ( f i )] : StarModule : (R : Type ?u.3742) β (A : Type ?u.3741) β [inst : Star R ] β [inst : Star A ] β [inst : SMul R A ] β Prop StarModule R (β i , f i )
where star_smul r x := funext : β {Ξ± : Sort ?u.3908} {Ξ² : Ξ± β Sort ?u.3907 } {f g : (x : Ξ± ) β Ξ² x }, (β (x : Ξ± ), f x = g x ) β f = g funext fun i => star_smul r ( x i )
theorem single_star [β i , AddMonoid : Type ?u.4061 β Type ?u.4061 AddMonoid ( f i )] [β i , StarAddMonoid ( f i )] [ DecidableEq : Sort ?u.4085 β Sort (max1?u.4085) DecidableEq I ] ( i : I )
( a : f i ) : Pi.single : {I : Type ?u.4100} β
{f : I β Type ?u.4099 } β [inst : DecidableEq I ] β [inst : (i : I ) β Zero (f i ) ] β (i : I ) β f i β (j : I ) β f j Pi.single i ( star : {R : Type ?u.4105} β [self : Star R ] β R β R star a ) = star : {R : Type ?u.5310} β [self : Star R ] β R β R star ( Pi.single : {I : Type ?u.5314} β
{f : I β Type ?u.5313 } β [inst : DecidableEq I ] β [inst : (i : I ) β Zero (f i ) ] β (i : I ) β f i β (j : I ) β f j Pi.single i a ) :=
single_op : β {I : Type ?u.5492} {f : I β Type ?u.5491 } [inst : DecidableEq I ] [inst_1 : (i : I ) β Zero (f i ) ]
{g : I β Type ?u.5493 } [inst_2 : (i : I ) β Zero (g i ) ] (op : (i : I ) β f i β g i ),
(β (i : I ), op i 0 = 0 ) β β (i : I ) (x : f i ), single i (op i x ) = fun j => op j (single i x j ) single_op ( fun i => @ star : {R : Type ?u.5503} β [self : Star R ] β R β R star ( f i ) _) ( fun _ => star_zero _ ) i a
#align pi.single_star Pi.single_star
end Pi
namespace Function
theorem update_star [β i , Star ( f i )] [ DecidableEq : Sort ?u.6688 β Sort (max1?u.6688) DecidableEq I ] ( h : β i : I , f i ) ( i : I ) ( a : f i ) :
Function.update : {Ξ± : Sort ?u.6708} β {Ξ² : Ξ± β Sort ?u.6707 } β [inst : DecidableEq Ξ± ] β ((a : Ξ± ) β Ξ² a ) β (a' : Ξ± ) β Ξ² a' β (a : Ξ± ) β Ξ² a Function.update ( star : {R : Type ?u.6712} β [self : Star R ] β R β R star h ) i ( star : {R : Type ?u.6765} β [self : Star R ] β R β R star a ) = star : {R : Type ?u.6820} β [self : Star R ] β R β R star ( Function.update : {Ξ± : Sort ?u.6824} β {Ξ² : Ξ± β Sort ?u.6823 } β [inst : DecidableEq Ξ± ] β ((a : Ξ± ) β Ξ² a ) β (a' : Ξ± ) β Ξ² a' β (a : Ξ± ) β Ξ² a Function.update h i a ) :=
funext : β {Ξ± : Sort ?u.6927} {Ξ² : Ξ± β Sort ?u.6926 } {f g : (x : Ξ± ) β Ξ² x }, (β (x : Ξ± ), f x = g x ) β f = g funext fun j => ( apply_update : β {ΞΉ : Sort ?u.6943} [inst : DecidableEq ΞΉ ] {Ξ± : ΞΉ β Sort ?u.6944 } {Ξ² : ΞΉ β Sort ?u.6945 } (f : (i : ΞΉ ) β Ξ± i β Ξ² i )
(g : (i : ΞΉ ) β Ξ± i ) (i : ΞΉ ) (v : Ξ± i ) (j : ΞΉ ), f j (update g i v j ) = update (fun k => f k (g k ) ) i (f i v ) j apply_update ( fun _ => star : {R : Type ?u.6953} β [self : Star R ] β R β R star) h i a j ). symm : β {Ξ± : Sort ?u.7006} {a b : Ξ± }, a = b β b = a symm
#align function.update_star Function.update_star
theorem star_sum_elim { I J Ξ± : Type _ } ( x : I β Ξ± ) ( y : J β Ξ± ) [ Star Ξ± ] :
star : {R : Type ?u.7100} β [self : Star R ] β R β R star ( Sum.elim : {Ξ± : Type ?u.7105} β {Ξ² : Type ?u.7104} β {Ξ³ : Sort ?u.7103} β (Ξ± β Ξ³ ) β (Ξ² β Ξ³ ) β Ξ± β Ξ² β Ξ³ Sum.elim x y ) = Sum.elim : {Ξ± : Type ?u.7155} β {Ξ² : Type ?u.7154} β {Ξ³ : Sort ?u.7153} β (Ξ± β Ξ³ ) β (Ξ² β Ξ³ ) β Ξ± β Ξ² β Ξ³ Sum.elim ( star : {R : Type ?u.7159} β [self : Star R ] β R β R star x ) ( star : {R : Type ?u.7202} β [self : Star R ] β R β R star y ) := by
ext x ; cases x <;> simp only [ Pi.star_apply : β {I : Type ?u.7374} {f : I β Type ?u.7373 } [inst : (i : I ) β Star (f i ) ] (x : (i : I ) β f i ) (i : I ),
star x i = star (x i ) Pi.star_apply, Sum.elim_inl : β {Ξ± : Type ?u.7703} {Ξ² : Type ?u.7704} {Ξ³ : Sort ?u.7705} (f : Ξ± β Ξ³ ) (g : Ξ² β Ξ³ ) (x : Ξ± ),
Sum.elim f g (Sum.inl x ) = f x Sum.elim_inl, Sum.elim_inr : β {Ξ± : Type ?u.7719} {Ξ² : Type ?u.7720} {Ξ³ : Sort ?u.7721} (f : Ξ± β Ξ³ ) (g : Ξ² β Ξ³ ) (x : Ξ² ),
Sum.elim f g (Sum.inr x ) = g x Sum.elim_inr]
#align function.star_sum_elim Function.star_sum_elim
end Function