Imports
/-
Copyright (c) 2026 Bjørn Kjos-Hanssen. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Bjørn Kjos-Hanssen
-/
module
public import Mathlib.Data.Matrix.PEquiv
public import Mathlib.Probability.Distributions.Poisson.Basic
public import Mathlib.Analysis.Normed.Lp.lpSpace
public import Physlib.Meta.TODO.Basic
public import MathlibStinespring dilation
@[expose] public sectionTODO "There is a different version of the Stienspring dilation in
`QuantumInfo.Channels.CPTP`. We should unify the the version here with that one.
Some of the definitions here are more general then the ones in `QuantumInfo` as they
do not restrict to `ℂ`. This is something we should modify in `QuantumInfo`."Completely positive map given by a (not necessarily minimal) Kraus family.
def krausApply {R : Type*} [Mul R] [Star R] [AddCommMonoid R]
{q r : Type*} [Fintype q] [Fintype r]
(K : r → Matrix q q R) (ρ : Matrix q q R) : Matrix q q R :=
∑ i, K i * ρ * (K i)ᴴKraus operator preserves PSD property.
lemma krausApply.posSemidef {R : Type*} [Ring R] [PartialOrder R] [StarRing R]
[AddLeftMono R]
{q r : Type*} [Fintype q] [Fintype r]
(K : r → Matrix q q R)
{ρ : Matrix q q R} (hρ : ρ.PosSemidef) :
(krausApply K ρ).PosSemidef :=
posSemidef_sum _ fun _ _ => hρ.mul_mul_conjTranspose_same _Quantum channel.
def QuantumChannel {R : Type*} [Mul R] [One R] [Star R] [AddCommMonoid R]
{q r : Type*} [Fintype q] [Fintype r] [DecidableEq q]
(K : r → Matrix q q R) :=
∑ i, (K i)ᴴ * K i = 1Quantum operation.
def QuantumOperation {R : Type*} [RCLike R]
{q r : Type*} [Fintype q] [Fintype r] [DecidableEq q]
(K : r → Matrix q q R) := ∑ i, (K i)ᴴ * K i ≤ 1Density matrix.
def densityMatrix {R : Type*} [Ring R] [PartialOrder R] [StarRing R] (d : Type*) [Fintype d] :=
{ρ : Matrix d d R // ρ.PosSemidef ∧ ρ.trace = 1}Density matrices are closed under real convex combinations.
right R:Type u_1inst✝:RCLike Rd:ℕρ₀:densityMatrix (Fin d)ρ₁:densityMatrix (Fin d)t:Rhp₀:0 ≤ thp₁:0 ≤ 1 - t⊢ t * 1 + (1 - t) • 1 = 1
simp All goals completed! 🐙⟩
Also known as partialTraceRight.
def tr₂ {R : Type*} [Ring R] {m n m' : Type*} [Fintype n]
(ρ : Matrix (m × n) (m' × n) R) : Matrix m m' R :=
fun i j => ∑ k, ρ (i, k) (j, k)
stinespringOp is often written as V.
def stinespringOp {R : Type*} [Ring R]
{m r : Type*} [Fintype r] [DecidableEq r]
(K : r → Matrix m m R) : Matrix (m × r) m R :=
let V₀ : Matrix (m × r) (m × Fin 1) R :=
∑ i, K i ⊗ₖ single i (0 : Fin 1) (1 : R)
fun x y => V₀ x (y,0)The Stinespring dilation.
def stinespringDilation {R : Type*} [Ring R] [StarRing R]
{m r : Type*} [Fintype r] [DecidableEq r] [Fintype m]
(K : r → Matrix m m R)
(ρ : Matrix m m R) :=
let V := stinespringOp K;
V * ρ * VᴴThe partial trace of the Stinespring dilation.
def stinespringForm {R : Type*} [Ring R] [StarRing R]
{m r : Type*} [Fintype r] [DecidableEq r] [Fintype m]
(K : r → Matrix m m R) :=
fun ρ => tr₂ (stinespringDilation K ρ)A useful identity for Stinespring dilations.
lemma stinespringOp_adjoint_mul_self {R : Type*} [Ring R] [StarRing R]
{m r : Type*} [Fintype r] [DecidableEq r] [Fintype m]
(K : r → Matrix m m R) :
∑ i, star K i * K i = (stinespringOp K)ᴴ * stinespringOp K := by R:Type u_1inst✝⁴:Ring Rinst✝³:StarRing Rm:Type u_2r:Type u_3inst✝²:Fintype rinst✝¹:DecidableEq rinst✝:Fintype mK:r → Matrix m m R⊢ ∑ i, star K i * K i = (stinespringOp K)ᴴ * stinespringOp K
ext i j R:Type u_1inst✝⁴:Ring Rinst✝³:StarRing Rm:Type u_2r:Type u_3inst✝²:Fintype rinst✝¹:DecidableEq rinst✝:Fintype mK:r → Matrix m m Ri:mj:m⊢ (∑ i, star K i * K i) i j = ((stinespringOp K)ᴴ * stinespringOp K) i j
unfold stinespringOp R:Type u_1inst✝⁴:Ring Rinst✝³:StarRing Rm:Type u_2r:Type u_3inst✝²:Fintype rinst✝¹:DecidableEq rinst✝:Fintype mK:r → Matrix m m Ri:mj:m⊢ (∑ i, star K i * K i) i j =
((have V₀ := ∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1);
fun x y => V₀ x (y, 0))ᴴ *
have V₀ := ∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1);
fun x y => V₀ x (y, 0))
i j
rw [Matrix.mul_apply R:Type u_1inst✝⁴:Ring Rinst✝³:StarRing Rm:Type u_2r:Type u_3inst✝²:Fintype rinst✝¹:DecidableEq rinst✝:Fintype mK:r → Matrix m m Ri:mj:m⊢ (∑ i, star K i * K i) i j =
∑ j_1,
(have V₀ := ∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1);
fun x y => V₀ x (y, 0))ᴴ
i j_1 *
(∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) j_1 (j, 0) R:Type u_1inst✝⁴:Ring Rinst✝³:StarRing Rm:Type u_2r:Type u_3inst✝²:Fintype rinst✝¹:DecidableEq rinst✝:Fintype mK:r → Matrix m m Ri:mj:m⊢ (∑ i, star K i * K i) i j =
∑ j_1,
(have V₀ := ∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1);
fun x y => V₀ x (y, 0))ᴴ
i j_1 *
(∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) j_1 (j, 0)] R:Type u_1inst✝⁴:Ring Rinst✝³:StarRing Rm:Type u_2r:Type u_3inst✝²:Fintype rinst✝¹:DecidableEq rinst✝:Fintype mK:r → Matrix m m Ri:mj:m⊢ (∑ i, star K i * K i) i j =
∑ j_1,
(have V₀ := ∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1);
fun x y => V₀ x (y, 0))ᴴ
i j_1 *
(∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) j_1 (j, 0)
rw [Matrix.sum_apply R:Type u_1inst✝⁴:Ring Rinst✝³:StarRing Rm:Type u_2r:Type u_3inst✝²:Fintype rinst✝¹:DecidableEq rinst✝:Fintype mK:r → Matrix m m Ri:mj:m⊢ ∑ c, (star K c * K c) i j =
∑ j_1,
(have V₀ := ∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1);
fun x y => V₀ x (y, 0))ᴴ
i j_1 *
(∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) j_1 (j, 0) R:Type u_1inst✝⁴:Ring Rinst✝³:StarRing Rm:Type u_2r:Type u_3inst✝²:Fintype rinst✝¹:DecidableEq rinst✝:Fintype mK:r → Matrix m m Ri:mj:m⊢ ∑ c, (star K c * K c) i j =
∑ j_1,
(have V₀ := ∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1);
fun x y => V₀ x (y, 0))ᴴ
i j_1 *
(∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) j_1 (j, 0)] R:Type u_1inst✝⁴:Ring Rinst✝³:StarRing Rm:Type u_2r:Type u_3inst✝²:Fintype rinst✝¹:DecidableEq rinst✝:Fintype mK:r → Matrix m m Ri:mj:m⊢ ∑ c, (star K c * K c) i j =
∑ j_1,
(have V₀ := ∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1);
fun x y => V₀ x (y, 0))ᴴ
i j_1 *
(∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) j_1 (j, 0)
simp only [Pi.star_apply, Matrix.mul_apply, star_apply, single, Fin.isValue, Matrix.sum_apply,
kroneckerMap_apply, of_apply, and_true, mul_ite, mul_one, mul_zero, Finset.sum_ite_eq',
Finset.mem_univ, ↓reduceIte, conjTranspose_apply] R:Type u_1inst✝⁴:Ring Rinst✝³:StarRing Rm:Type u_2r:Type u_3inst✝²:Fintype rinst✝¹:DecidableEq rinst✝:Fintype mK:r → Matrix m m Ri:mj:m⊢ ∑ x, ∑ x_1, star (K x x_1 i) * K x x_1 j = ∑ x, star (K x.2 x.1 i) * K x.2 x.1 j;
erw [ Finset.sum_product, R:Type u_1inst✝⁴:Ring Rinst✝³:StarRing Rm:Type u_2r:Type u_3inst✝²:Fintype rinst✝¹:DecidableEq rinst✝:Fintype mK:r → Matrix m m Ri:mj:m⊢ ∑ x, ∑ x_1, star (K x x_1 i) * K x x_1 j = ∑ x, ∑ y, star (K (x, y).2 (x, y).1 i) * K (x, y).2 (x, y).1 j Finset.sum_comm R:Type u_1inst✝⁴:Ring Rinst✝³:StarRing Rm:Type u_2r:Type u_3inst✝²:Fintype rinst✝¹:DecidableEq rinst✝:Fintype mK:r → Matrix m m Ri:mj:m⊢ ∑ y, ∑ x, star (K x y i) * K x y j = ∑ x, ∑ y, star (K (x, y).2 (x, y).1 i) * K (x, y).2 (x, y).1 j ] All goals completed! 🐙A useful identity for completely positive, trace non-increasing maps.
lemma stinespringForm_CPTNI {R : Type*} [RCLike R]
{m r : Type*} [Fintype r] [DecidableEq r] [Fintype m] [DecidableEq m]
(K : r → Matrix m m R)
(hK : ∑ i, (K i)ᴴ * K i ≤ 1) :
(stinespringOp K)ᴴ * (stinespringOp K) ≤ 1 := by R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i ≤ 1⊢ (stinespringOp K)ᴴ * stinespringOp K ≤ 1
convert hK R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i ≤ 1⊢ (stinespringOp K)ᴴ * stinespringOp K = ∑ i, (K i)ᴴ * K i
rw [← stinespringOp_adjoint_mul_self R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i ≤ 1⊢ ∑ i, star K i * K i = ∑ i, (K i)ᴴ * K i R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i ≤ 1⊢ ∑ i, star K i * K i = ∑ i, (K i)ᴴ * K i] R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i ≤ 1⊢ ∑ i, star K i * K i = ∑ i, (K i)ᴴ * K i
rfl All goals completed! 🐙
The Stinespring operator of a completely positive, trace-preserving maps
is an isometry. (Note that stinespringOp K is not a square matrix in general.)
lemma stinespringForm_CPTP_isometry {R : Type*} [Ring R] [StarRing R]
{m r : Type*} [Fintype r] [DecidableEq r] [Fintype m] [DecidableEq m]
{K : r → Matrix m m R}
(hK : ∑ i, (K i)ᴴ * K i = 1) :
(stinespringOp K)ᴴ * (stinespringOp K) = 1 := by R:Type u_1inst✝⁵:Ring Rinst✝⁴:StarRing Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1⊢ (stinespringOp K)ᴴ * stinespringOp K = 1
rw [← hK R:Type u_1inst✝⁵:Ring Rinst✝⁴:StarRing Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1⊢ (stinespringOp K)ᴴ * stinespringOp K = ∑ i, (K i)ᴴ * K i R:Type u_1inst✝⁵:Ring Rinst✝⁴:StarRing Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1⊢ (stinespringOp K)ᴴ * stinespringOp K = ∑ i, (K i)ᴴ * K i] R:Type u_1inst✝⁵:Ring Rinst✝⁴:StarRing Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1⊢ (stinespringOp K)ᴴ * stinespringOp K = ∑ i, (K i)ᴴ * K i
rw [← stinespringOp_adjoint_mul_self R:Type u_1inst✝⁵:Ring Rinst✝⁴:StarRing Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1⊢ ∑ i, star K i * K i = ∑ i, (K i)ᴴ * K i R:Type u_1inst✝⁵:Ring Rinst✝⁴:StarRing Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1⊢ ∑ i, star K i * K i = ∑ i, (K i)ᴴ * K i] R:Type u_1inst✝⁵:Ring Rinst✝⁴:StarRing Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1⊢ ∑ i, star K i * K i = ∑ i, (K i)ᴴ * K i
rfl All goals completed! 🐙
Proving the columns of V = stinespringOp K are independent is a step
on the way to constructing the unitary dilation.
lemma stinespringOrtho {R : Type*} [RCLike R]
{m r : Type*} [Fintype r] [DecidableEq r] [Fintype m] [DecidableEq m]
{K : r → Matrix m m R}
(hK : ∑ i, (K i)ᴴ * K i = 1) :
Orthonormal (𝕜 := R)
fun j : m => WithLp.toLp 2 fun i : m × r => stinespringOp K i j := by R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1⊢ Orthonormal R fun j => WithLp.toLp 2 fun i => stinespringOp K i j
refine orthonormal_iff_ite.mpr ?_ R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1⊢ ∀ (i j : m),
inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i) (WithLp.toLp 2 fun i => stinespringOp K i j) =
if i = j then 1 else 0
intro i j R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:m⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i) (WithLp.toLp 2 fun i => stinespringOp K i j) =
if i = j then 1 else 0
have h₁ : (((stinespringOp K)ᴴ * stinespringOp K) i j)
= ((1 : Matrix m m R) i j) := by R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1⊢ Orthonormal R fun j => WithLp.toLp 2 fun i => stinespringOp K i j R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:((stinespringOp K)ᴴ * stinespringOp K) i j = 1 i j⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i) (WithLp.toLp 2 fun i => stinespringOp K i j) =
if i = j then 1 else 0
rw [stinespringForm_CPTP_isometry hK R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:m⊢ 1 i j = 1 i j R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:((stinespringOp K)ᴴ * stinespringOp K) i j = 1 i j⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i) (WithLp.toLp 2 fun i => stinespringOp K i j) =
if i = j then 1 else 0] R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:((stinespringOp K)ᴴ * stinespringOp K) i j = 1 i j⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i) (WithLp.toLp 2 fun i => stinespringOp K i j) =
if i = j then 1 else 0 R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:((stinespringOp K)ᴴ * stinespringOp K) i j = 1 i j⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i) (WithLp.toLp 2 fun i => stinespringOp K i j) =
if i = j then 1 else 0
rw [mul_apply R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:∑ j_1, (stinespringOp K)ᴴ i j_1 * stinespringOp K j_1 j = 1 i j⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i) (WithLp.toLp 2 fun i => stinespringOp K i j) =
if i = j then 1 else 0 R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:∑ j_1, (stinespringOp K)ᴴ i j_1 * stinespringOp K j_1 j = 1 i j⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i) (WithLp.toLp 2 fun i => stinespringOp K i j) =
if i = j then 1 else 0] at h₁ R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:∑ j_1, (stinespringOp K)ᴴ i j_1 * stinespringOp K j_1 j = 1 i j⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i) (WithLp.toLp 2 fun i => stinespringOp K i j) =
if i = j then 1 else 0
by_cases g₀ : i = j pos R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:∑ j_1, (stinespringOp K)ᴴ i j_1 * stinespringOp K j_1 j = 1 i jg₀:i = j⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i) (WithLp.toLp 2 fun i => stinespringOp K i j) =
if i = j then 1 else 0neg R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:∑ j_1, (stinespringOp K)ᴴ i j_1 * stinespringOp K j_1 j = 1 i jg₀:¬i = j⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i) (WithLp.toLp 2 fun i => stinespringOp K i j) =
if i = j then 1 else 0
· pos R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:∑ j_1, (stinespringOp K)ᴴ i j_1 * stinespringOp K j_1 j = 1 i jg₀:i = j⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i) (WithLp.toLp 2 fun i => stinespringOp K i j) =
if i = j then 1 else 0 subst i pos R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1j:mh₁:∑ j_1, (stinespringOp K)ᴴ j j_1 * stinespringOp K j_1 j = 1 j j⊢ inner R (WithLp.toLp 2 fun i => stinespringOp K i j) (WithLp.toLp 2 fun i => stinespringOp K i j) =
if j = j then 1 else 0
simp only [conjTranspose_apply, star_def, one_apply_eq] at h₁ pos R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1j:mh₁:∑ x, (starRingEnd R) (stinespringOp K x j) * stinespringOp K x j = 1⊢ inner R (WithLp.toLp 2 fun i => stinespringOp K i j) (WithLp.toLp 2 fun i => stinespringOp K i j) =
if j = j then 1 else 0
rw [← h₁ pos R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1j:mh₁:∑ x, (starRingEnd R) (stinespringOp K x j) * stinespringOp K x j = 1⊢ inner R (WithLp.toLp 2 fun i => stinespringOp K i j) (WithLp.toLp 2 fun i => stinespringOp K i j) =
if j = j then ∑ x, (starRingEnd R) (stinespringOp K x j) * stinespringOp K x j else 0 pos R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1j:mh₁:∑ x, (starRingEnd R) (stinespringOp K x j) * stinespringOp K x j = 1⊢ inner R (WithLp.toLp 2 fun i => stinespringOp K i j) (WithLp.toLp 2 fun i => stinespringOp K i j) =
if j = j then ∑ x, (starRingEnd R) (stinespringOp K x j) * stinespringOp K x j else 0]pos R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1j:mh₁:∑ x, (starRingEnd R) (stinespringOp K x j) * stinespringOp K x j = 1⊢ inner R (WithLp.toLp 2 fun i => stinespringOp K i j) (WithLp.toLp 2 fun i => stinespringOp K i j) =
if j = j then ∑ x, (starRingEnd R) (stinespringOp K x j) * stinespringOp K x j else 0
simp only [inner_self_eq_norm_sq_to_K] pos R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1j:mh₁:∑ x, (starRingEnd R) (stinespringOp K x j) * stinespringOp K x j = 1⊢ ↑‖WithLp.toLp 2 fun i => stinespringOp K i j‖ ^ 2 =
if True then ∑ x, (starRingEnd R) (stinespringOp K x j) * stinespringOp K x j else 0
generalize stinespringOp K = α pos R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1j:mh₁:∑ x, (starRingEnd R) (stinespringOp K x j) * stinespringOp K x j = 1α:Matrix (m × r) m R⊢ ↑‖WithLp.toLp 2 fun i => α i j‖ ^ 2 = if True then ∑ x, (starRingEnd R) (α x j) * α x j else 0
simp only [↓reduceIte] pos R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1j:mh₁:∑ x, (starRingEnd R) (stinespringOp K x j) * stinespringOp K x j = 1α:Matrix (m × r) m R⊢ ↑‖WithLp.toLp 2 fun i => α i j‖ ^ 2 = ∑ x, (starRingEnd R) (α x j) * α x j
simp_rw [ pos R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1j:mh₁:∑ x, (starRingEnd R) (stinespringOp K x j) * stinespringOp K x j = 1α:Matrix (m × r) m R⊢ ↑‖WithLp.toLp 2 fun i => α i j‖ ^ 2 = ∑ x, (starRingEnd R) (α x j) * α x jRCLike.conj_mul pos R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1j:mh₁:∑ x, (starRingEnd R) (stinespringOp K x j) * stinespringOp K x j = 1α:Matrix (m × r) m R⊢ ↑‖WithLp.toLp 2 fun i => α i j‖ ^ 2 = ∑ x, ↑‖α x j‖ ^ 2]
norm_cast pos R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1j:mh₁:∑ x, (starRingEnd R) (stinespringOp K x j) * stinespringOp K x j = 1α:Matrix (m × r) m R⊢ ‖WithLp.toLp 2 fun i => α i j‖ ^ 2 = ∑ i, ‖α i j‖ ^ 2
exact EuclideanSpace.norm_sq_eq (WithLp.toLp 2 fun i ↦ α i j) All goals completed! 🐙
· neg R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:∑ j_1, (stinespringOp K)ᴴ i j_1 * stinespringOp K j_1 j = 1 i jg₀:¬i = j⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i) (WithLp.toLp 2 fun i => stinespringOp K i j) =
if i = j then 1 else 0 rw [if_neg g₀ neg R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:∑ j_1, (stinespringOp K)ᴴ i j_1 * stinespringOp K j_1 j = 1 i jg₀:¬i = j⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i) (WithLp.toLp 2 fun i => stinespringOp K i j) = 0 neg R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:∑ j_1, (stinespringOp K)ᴴ i j_1 * stinespringOp K j_1 j = 1 i jg₀:¬i = j⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i) (WithLp.toLp 2 fun i => stinespringOp K i j) = 0]neg R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:∑ j_1, (stinespringOp K)ᴴ i j_1 * stinespringOp K j_1 j = 1 i jg₀:¬i = j⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i) (WithLp.toLp 2 fun i => stinespringOp K i j) = 0
have : (1 : Matrix m m R) i j = 0 := by R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1⊢ Orthonormal R fun j => WithLp.toLp 2 fun i => stinespringOp K i j neg R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:∑ j_1, (stinespringOp K)ᴴ i j_1 * stinespringOp K j_1 j = 1 i jg₀:¬i = jthis:1 i j = 0⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i) (WithLp.toLp 2 fun i => stinespringOp K i j) = 0
exact one_apply_ne' fun a ↦ g₀ (id (Eq.symm a))neg R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:∑ j_1, (stinespringOp K)ᴴ i j_1 * stinespringOp K j_1 j = 1 i jg₀:¬i = jthis:1 i j = 0⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i) (WithLp.toLp 2 fun i => stinespringOp K i j) = 0neg R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:∑ j_1, (stinespringOp K)ᴴ i j_1 * stinespringOp K j_1 j = 1 i jg₀:¬i = jthis:1 i j = 0⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i) (WithLp.toLp 2 fun i => stinespringOp K i j) = 0
rw [this neg R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:∑ j_1, (stinespringOp K)ᴴ i j_1 * stinespringOp K j_1 j = 0g₀:¬i = jthis:1 i j = 0⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i) (WithLp.toLp 2 fun i => stinespringOp K i j) = 0 neg R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:∑ j_1, (stinespringOp K)ᴴ i j_1 * stinespringOp K j_1 j = 0g₀:¬i = jthis:1 i j = 0⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i) (WithLp.toLp 2 fun i => stinespringOp K i j) = 0] at h₁neg R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:∑ j_1, (stinespringOp K)ᴴ i j_1 * stinespringOp K j_1 j = 0g₀:¬i = jthis:1 i j = 0⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i) (WithLp.toLp 2 fun i => stinespringOp K i j) = 0
rw [← h₁ neg R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:∑ j_1, (stinespringOp K)ᴴ i j_1 * stinespringOp K j_1 j = 0g₀:¬i = jthis:1 i j = 0⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i) (WithLp.toLp 2 fun i => stinespringOp K i j) =
∑ j_1, (stinespringOp K)ᴴ i j_1 * stinespringOp K j_1 j neg R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:∑ j_1, (stinespringOp K)ᴴ i j_1 * stinespringOp K j_1 j = 0g₀:¬i = jthis:1 i j = 0⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i) (WithLp.toLp 2 fun i => stinespringOp K i j) =
∑ j_1, (stinespringOp K)ᴴ i j_1 * stinespringOp K j_1 j]neg R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:∑ j_1, (stinespringOp K)ᴴ i j_1 * stinespringOp K j_1 j = 0g₀:¬i = jthis:1 i j = 0⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i) (WithLp.toLp 2 fun i => stinespringOp K i j) =
∑ j_1, (stinespringOp K)ᴴ i j_1 * stinespringOp K j_1 j
simp only [inner, conjTranspose_apply, star_def] neg R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:∑ j_1, (stinespringOp K)ᴴ i j_1 * stinespringOp K j_1 j = 0g₀:¬i = jthis:1 i j = 0⊢ ∑ x, stinespringOp K x j * (starRingEnd R) (stinespringOp K x i) =
∑ x, (starRingEnd R) (stinespringOp K x i) * stinespringOp K x j
congr neg.e_f R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:∑ j_1, (stinespringOp K)ᴴ i j_1 * stinespringOp K j_1 j = 0g₀:¬i = jthis:1 i j = 0⊢ (fun x => stinespringOp K x j * (starRingEnd R) (stinespringOp K x i)) = fun x =>
(starRingEnd R) (stinespringOp K x i) * stinespringOp K x j
ext x neg.e_f R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mK:r → Matrix m m RhK:∑ i, (K i)ᴴ * K i = 1i:mj:mh₁:∑ j_1, (stinespringOp K)ᴴ i j_1 * stinespringOp K j_1 j = 0g₀:¬i = jthis:1 i j = 0x:m × r⊢ stinespringOp K x j * (starRingEnd R) (stinespringOp K x i) =
(starRingEnd R) (stinespringOp K x i) * stinespringOp K x j
ring_nf All goals completed! 🐙
m will of course be finite and bounded by n here,
but no need to assume or prove that.
lemma basisCard {R : Type*} [RCLike R] {n m : Type*} [Fintype n] {s : Matrix n m R}
(ho : Orthonormal R fun j ↦ WithLp.toLp 2 fun i ↦ s i j) :
Fintype.card n =
ho.toSubtypeRange.exists_orthonormalBasis_extension.choose.card :=
Fintype.card_coe _ ▸ (Nat.cast_inj.mp <|
(rank_eq_card_basis <| PiLp.basisFun _ _ _).symm.trans <|
rank_eq_card_basis
ho.toSubtypeRange.exists_orthonormalBasis_extension.choose_spec.choose.toBasis)
Calculating the cardinality of the orthonormal basis obtained by
extending the Stinespring orthonormal set, the columns of stinespringOp K.
lemma stinespringCard {R : Type*} [RCLike R]
{m r : Type*} [Fintype r] [DecidableEq r] [Fintype m] [DecidableEq m]
{K : r → Matrix m m R}
(hK : ∑ i, (K i)ᴴ * K i = 1) :
Fintype.card (m × r) = (stinespringOrtho
hK).toSubtypeRange.exists_orthonormalBasis_extension.choose.card :=
basisCard <| stinespringOrtho hKSee discussion at https://leanprover.zulipchat.com/#narrow/channel/217875-Is-there-code-for-X.3F/topic/succAbove.20and.20predAbove.20lemmas/with/584270574
def Fin.predAbove_of_ne {n : ℕ} {k i : Fin n}
(h : i ≠ k) : Fin (n - 1) := by n:ℕk:Fin ni:Fin nh:i ≠ k⊢ Fin (n - 1)
by_cases H : i.1 > k.1 pos n:ℕk:Fin ni:Fin nh:i ≠ kH:↑i > ↑k⊢ Fin (n - 1)neg n:ℕk:Fin ni:Fin nh:i ≠ kH:¬↑i > ↑k⊢ Fin (n - 1)
· pos n:ℕk:Fin ni:Fin nh:i ≠ kH:↑i > ↑k⊢ Fin (n - 1) exact ⟨i.1 - 1, by n:ℕk:Fin ni:Fin nh:i ≠ kH:↑i > ↑k⊢ ↑i - 1 < n - 1 omega All goals completed! 🐙⟩
· neg n:ℕk:Fin ni:Fin nh:i ≠ kH:¬↑i > ↑k⊢ Fin (n - 1) exact ⟨i.1, by n:ℕk:Fin ni:Fin nh:i ≠ kH:¬↑i > ↑k⊢ ↑i < n - 1 omega All goals completed! 🐙⟩
A "missing lemma" for Fin types.
lemma Fin.predAbove_of_ne_injective (n : ℕ) (k x y : Fin n)
(hx : x ≠ k) (hy : y ≠ k)
(heq : Fin.predAbove_of_ne hx = Fin.predAbove_of_ne hy) : x = y := by n:ℕk:Fin nx:Fin ny:Fin nhx:x ≠ khy:y ≠ kheq:predAbove_of_ne hx = predAbove_of_ne hy⊢ x = y
unfold predAbove_of_ne at heq n:ℕk:Fin nx:Fin ny:Fin nhx:x ≠ khy:y ≠ kheq:(if H : ↑x > ↑k then ⟨↑x - 1, ⋯⟩ else ⟨↑x, ⋯⟩) = if H : ↑y > ↑k then ⟨↑y - 1, ⋯⟩ else ⟨↑y, ⋯⟩⊢ x = y
split_ifs at heq pos n:ℕk:Fin nx:Fin ny:Fin nhx:x ≠ khy:y ≠ kh✝¹:↑x > ↑kh✝:↑y > ↑kheq:⟨↑x - 1, ⋯⟩ = ⟨↑y - 1, ⋯⟩⊢ x = yneg n:ℕk:Fin nx:Fin ny:Fin nhx:x ≠ khy:y ≠ kh✝¹:↑x > ↑kh✝:¬↑y > ↑kheq:⟨↑x - 1, ⋯⟩ = ⟨↑y, ⋯⟩⊢ x = ypos n:ℕk:Fin nx:Fin ny:Fin nhx:x ≠ khy:y ≠ kh✝¹:¬↑x > ↑kh✝:↑y > ↑kheq:⟨↑x, ⋯⟩ = ⟨↑y - 1, ⋯⟩⊢ x = yneg n:ℕk:Fin nx:Fin ny:Fin nhx:x ≠ khy:y ≠ kh✝¹:¬↑x > ↑kh✝:¬↑y > ↑kheq:⟨↑x, ⋯⟩ = ⟨↑y, ⋯⟩⊢ x = y
all_goals
· neg n:ℕk:Fin nx:Fin ny:Fin nhx:x ≠ khy:y ≠ kh✝¹:¬↑x > ↑kh✝:¬↑y > ↑kheq:⟨↑x, ⋯⟩ = ⟨↑y, ⋯⟩⊢ x = y simp only [mk.injEq] at heq neg n:ℕk:Fin nx:Fin ny:Fin nhx:x ≠ khy:y ≠ kh✝¹:¬↑x > ↑kh✝:¬↑y > ↑kheq:↑x = ↑y⊢ x = y
omega All goals completed! 🐙
The way this is written, Fin r and Fin (r-1) both occur
so it is tricky to go to a general Fintype.
def onbPart {R : Type*} [RCLike R]
{m r : ℕ} {K : Fin r → Matrix (Fin m) (Fin m) R}
(hK : ∑ i, (K i)ᴴ * K i = 1) (x : Fin m × Fin r) {z : Fin r} (hx : ¬x.2 = z) :
-- if we make it `r+2` then the `x.2≠0` becomes unused.
Fin m × Fin r → R := by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1x:Fin m × Fin rz:Fin rhx:¬x.2 = z⊢ Fin m × Fin r → R
let theRange := Submodule.span R <| Set.range
fun j => WithLp.toLp 2 fun i ↦ stinespringOp K i j R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1x:Fin m × Fin rz:Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)⊢ Fin m × Fin r → R
have (w : Fin m × Fin (r-1)) :=
((exists_orthonormalBasis R theRangeᗮ).choose_spec.choose
(Finset.equivOfCardEq (complCard hK z) ⟨w, Finset.mem_univ _⟩)).1.1 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1x:Fin m × Fin rz:Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)this:Fin m × Fin (r - 1) → Fin m × Fin r → R⊢ Fin m × Fin r → R
apply this R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1x:Fin m × Fin rz:Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)this:Fin m × Fin (r - 1) → Fin m × Fin r → R⊢ Fin m × Fin (r - 1)
exact (x.1, Fin.predAbove_of_ne hx) All goals completed! 🐙
/- The custom in quantum information theory is to use
|e₁>< e₁| as ancillary; we allow an arbitrary (standard) basis vector.
-/
lemma onbPart_inner {R : Type*} [RCLike R] {m r : ℕ} {K : Fin r → Matrix (Fin m) (Fin m) R}
(hK : ∑ i, (K i)ᴴ * K i = 1) {z : Fin r}
{y : Fin m × Fin r} (hy : ¬y.2 = z)
{x : Fin m × Fin r} (hx : ¬x.2 = z)
(h : y ≠ x) :
inner R (WithLp.toLp 2 <| onbPart hK y hy)
(WithLp.toLp 2 <| onbPart hK x hx) = 0 := by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ x⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0
let theRange := Submodule.span R <| Set.range
fun j => WithLp.toLp 2 fun i ↦ stinespringOp K i j R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0
let α := (exists_orthonormalBasis R theRangeᗮ).choose_spec R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0
have := α.choose.orthonormal.2 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:Pairwise fun i j => inner R (α.choose i) (α.choose j) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0
simp only [Pairwise, ne_eq, Submodule.coe_inner, Subtype.forall,
Subtype.mk.injEq] at this R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0
have h₁ := this (WithLp.toLp 2 <| onbPart hK y hy)
(by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0⊢ WithLp.toLp 2 (onbPart hK y hy) ∈ theRangeᗮ R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0 simp [onbPart] All goals completed! 🐙 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0) (by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0⊢ ⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩ ∈ ⋯.choose R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0
simp only [onbPart, WithLp.toLp_ofLp, Subtype.coe_eta] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0⊢ ⋯.choose ((Finset.equivOfCardEq ⋯) ⟨(y.1, Fin.predAbove_of_ne hy), ⋯⟩) ∈ ⋯.choose R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0
rw [α.choose_spec R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0⊢ ↑((Finset.equivOfCardEq ⋯) ⟨(y.1, Fin.predAbove_of_ne hy), ⋯⟩) ∈ ⋯.choose R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0⊢ ↑((Finset.equivOfCardEq ⋯) ⟨(y.1, Fin.predAbove_of_ne hy), ⋯⟩) ∈ ⋯.choose R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0⊢ ↑((Finset.equivOfCardEq ⋯) ⟨(y.1, Fin.predAbove_of_ne hy), ⋯⟩) ∈ ⋯.choose R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0
simp All goals completed! 🐙 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0)
(WithLp.toLp 2 <| onbPart hK x hx)
(by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0⊢ WithLp.toLp 2 (onbPart hK x hx) ∈ theRangeᗮ R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0 simp [onbPart] All goals completed! 🐙 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0) (by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0⊢ ⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩ ∈ ⋯.choose R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0
simp only [onbPart, WithLp.toLp_ofLp, Subtype.coe_eta] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0⊢ ⋯.choose ((Finset.equivOfCardEq ⋯) ⟨(x.1, Fin.predAbove_of_ne hx), ⋯⟩) ∈ ⋯.choose R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0
rw [α.choose_spec R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0⊢ ↑((Finset.equivOfCardEq ⋯) ⟨(x.1, Fin.predAbove_of_ne hx), ⋯⟩) ∈ ⋯.choose R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0⊢ ↑((Finset.equivOfCardEq ⋯) ⟨(x.1, Fin.predAbove_of_ne hx), ⋯⟩) ∈ ⋯.choose R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0⊢ ↑((Finset.equivOfCardEq ⋯) ⟨(x.1, Fin.predAbove_of_ne hx), ⋯⟩) ∈ ⋯.choose R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0
simp All goals completed! 🐙 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0) (by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0⊢ ¬WithLp.toLp 2 (onbPart hK y hy) = WithLp.toLp 2 (onbPart hK x hx) R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0
simp only [onbPart, WithLp.toLp_ofLp, SetLike.coe_eq_coe] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0⊢ ¬⋯.choose ((Finset.equivOfCardEq ⋯) ⟨(y.1, Fin.predAbove_of_ne hy), ⋯⟩) =
⋯.choose ((Finset.equivOfCardEq ⋯) ⟨(x.1, Fin.predAbove_of_ne hx), ⋯⟩) R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0
rw [α.choose_spec R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0⊢ ¬↑((Finset.equivOfCardEq ⋯) ⟨(y.1, Fin.predAbove_of_ne hy), ⋯⟩) =
↑((Finset.equivOfCardEq ⋯) ⟨(x.1, Fin.predAbove_of_ne hx), ⋯⟩) R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0⊢ ¬↑((Finset.equivOfCardEq ⋯) ⟨(y.1, Fin.predAbove_of_ne hy), ⋯⟩) =
↑((Finset.equivOfCardEq ⋯) ⟨(x.1, Fin.predAbove_of_ne hx), ⋯⟩) R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0⊢ ¬↑((Finset.equivOfCardEq ⋯) ⟨(y.1, Fin.predAbove_of_ne hy), ⋯⟩) =
↑((Finset.equivOfCardEq ⋯) ⟨(x.1, Fin.predAbove_of_ne hx), ⋯⟩) R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0
simp only [SetLike.coe_eq_coe, EmbeddingLike.apply_eq_iff_eq,
Subtype.mk.injEq, Prod.mk.injEq, not_and] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0⊢ y.1 = x.1 → ¬Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hx R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0
intro hyz R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0hyz:y.1 = x.1⊢ ¬Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hx R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0
contrapose! h R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0hyz:y.1 = x.1h:Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hx⊢ y = x R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0
have : y.2.1 ≠ z := Fin.val_ne_of_ne hy R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this✝:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0hyz:y.1 = x.1h:Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hxthis:↑y.2 ≠ ↑z⊢ y = x R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0
have : x.2.1 ≠ z := Fin.val_ne_of_ne hx R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this✝¹:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0hyz:y.1 = x.1h:Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hxthis✝:↑y.2 ≠ ↑zthis:↑x.2 ≠ ↑z⊢ y = x R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0
have : y.2.1 = x.2.1 := by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0⊢ ¬WithLp.toLp 2 (onbPart hK y hy) = WithLp.toLp 2 (onbPart hK x hx) R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this✝²:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0hyz:y.1 = x.1h:Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hxthis✝¹:↑y.2 ≠ ↑zthis✝:↑x.2 ≠ ↑zthis:↑y.2 = ↑x.2⊢ y = x R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0
suffices y.2 = x.2 by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this✝²:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0hyz:y.1 = x.1h:Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hxthis✝¹:↑y.2 ≠ ↑zthis✝:↑x.2 ≠ ↑zthis:y.2 = x.2⊢ ↑y.2 = ↑x.2 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this✝¹:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0hyz:y.1 = x.1h:Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hxthis✝:↑y.2 ≠ ↑zthis:↑x.2 ≠ ↑z⊢ y.2 = x.2 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this✝²:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0hyz:y.1 = x.1h:Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hxthis✝¹:↑y.2 ≠ ↑zthis✝:↑x.2 ≠ ↑zthis:↑y.2 = ↑x.2⊢ y = x R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0 rw [this R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this✝²:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0hyz:y.1 = x.1h:Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hxthis✝¹:↑y.2 ≠ ↑zthis✝:↑x.2 ≠ ↑zthis:y.2 = x.2⊢ ↑x.2 = ↑x.2 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this✝¹:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0hyz:y.1 = x.1h:Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hxthis✝:↑y.2 ≠ ↑zthis:↑x.2 ≠ ↑z⊢ y.2 = x.2 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this✝²:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0hyz:y.1 = x.1h:Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hxthis✝¹:↑y.2 ≠ ↑zthis✝:↑x.2 ≠ ↑zthis:↑y.2 = ↑x.2⊢ y = x R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this✝¹:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0hyz:y.1 = x.1h:Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hxthis✝:↑y.2 ≠ ↑zthis:↑x.2 ≠ ↑z⊢ y.2 = x.2 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this✝²:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0hyz:y.1 = x.1h:Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hxthis✝¹:↑y.2 ≠ ↑zthis✝:↑x.2 ≠ ↑zthis:↑y.2 = ↑x.2⊢ y = x R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this✝¹:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0hyz:y.1 = x.1h:Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hxthis✝:↑y.2 ≠ ↑zthis:↑x.2 ≠ ↑z⊢ y.2 = x.2 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this✝²:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0hyz:y.1 = x.1h:Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hxthis✝¹:↑y.2 ≠ ↑zthis✝:↑x.2 ≠ ↑zthis:↑y.2 = ↑x.2⊢ y = x R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0
apply Fin.predAbove_of_ne_injective heq R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this✝¹:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0hyz:y.1 = x.1h:Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hxthis✝:↑y.2 ≠ ↑zthis:↑x.2 ≠ ↑z⊢ Fin.predAbove_of_ne ?hx = Fin.predAbove_of_ne ?hyk R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this✝¹:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0hyz:y.1 = x.1h:Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hxthis✝:↑y.2 ≠ ↑zthis:↑x.2 ≠ ↑z⊢ Fin rhx R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this✝¹:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0hyz:y.1 = x.1h:Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hxthis✝:↑y.2 ≠ ↑zthis:↑x.2 ≠ ↑z⊢ y.2 ≠ ?khy R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this✝¹:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0hyz:y.1 = x.1h:Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hxthis✝:↑y.2 ≠ ↑zthis:↑x.2 ≠ ↑z⊢ x.2 ≠ ?k R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this✝²:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0hyz:y.1 = x.1h:Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hxthis✝¹:↑y.2 ≠ ↑zthis✝:↑x.2 ≠ ↑zthis:↑y.2 = ↑x.2⊢ y = x R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0
omega R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this✝²:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0hyz:y.1 = x.1h:Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hxthis✝¹:↑y.2 ≠ ↑zthis✝:↑x.2 ≠ ↑zthis:↑y.2 = ↑x.2⊢ y = x R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this✝²:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0hyz:y.1 = x.1h:Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hxthis✝¹:↑y.2 ≠ ↑zthis✝:↑x.2 ≠ ↑zthis:↑y.2 = ↑x.2⊢ y = x R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0
have : y.2 = x.2 := by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0⊢ ¬WithLp.toLp 2 (onbPart hK y hy) = WithLp.toLp 2 (onbPart hK x hx) R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this✝³:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0hyz:y.1 = x.1h:Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hxthis✝²:↑y.2 ≠ ↑zthis✝¹:↑x.2 ≠ ↑zthis✝:↑y.2 = ↑x.2this:y.2 = x.2⊢ y = x R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0 omega R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this✝³:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0hyz:y.1 = x.1h:Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hxthis✝²:↑y.2 ≠ ↑zthis✝¹:↑x.2 ≠ ↑zthis✝:↑y.2 = ↑x.2this:y.2 = x.2⊢ y = x R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = ztheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this✝³:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0hyz:y.1 = x.1h:Fin.predAbove_of_ne hy = Fin.predAbove_of_ne hxthis✝²:↑y.2 ≠ ↑zthis✝¹:↑x.2 ≠ ↑zthis✝:↑y.2 = ↑x.2this:y.2 = x.2⊢ y = x R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0
exact Prod.ext hyz this All goals completed! 🐙 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0) R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) = 0
rw [← h₁ R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) =
inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) =
inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩)] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) =
inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩)
simp_rw [ R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ry:Fin m × Fin rhy:¬y.2 = zx:Fin m × Fin rhx:¬x.2 = zh:y ≠ xtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)α:∃ b, ⇑b = Subtype.val := ···this:∀ (a : WithLp 2 (Fin m × Fin r → R)) (b : a ∈ theRangeᗮ) (b_1 : ⟨a, b⟩ ∈ ⋯.choose) (a_1 : WithLp 2 (Fin m × Fin r → R))
(b_2 : a_1 ∈ theRangeᗮ) (b_3 : ⟨a_1, b_2⟩ ∈ ⋯.choose),
¬a = a_1 → inner R ↑(α.choose ⟨⟨a, b⟩, b_1⟩) ↑(α.choose ⟨⟨a_1, b_2⟩, b_3⟩) = 0h₁:inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩) = 0⊢ inner R (WithLp.toLp 2 (onbPart hK y hy)) (WithLp.toLp 2 (onbPart hK x hx)) =
inner R ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK y hy), ⋯⟩, ⋯⟩) ↑(α.choose ⟨⟨WithLp.toLp 2 (onbPart hK x hx), ⋯⟩, ⋯⟩)α.choose_spec All goals completed! 🐙]The vectors in the Stinespring orthonormal basis have norm 1.
lemma onbPart_norm {R : Type*} [RCLike R] {m r : ℕ} {K : Fin r → Matrix (Fin m) (Fin m) R}
(hK : ∑ i, (K i)ᴴ * K i = 1) (x : Fin m × Fin r)
{z : Fin r} (hx : ¬x.2 = z) :
‖WithLp.toLp 2 <| onbPart hK x hx‖ = 1 :=
let theRange := Submodule.span R <| Set.range
fun j => WithLp.toLp 2 fun i ↦ stinespringOp K i j
(exists_orthonormalBasis R theRangeᗮ).choose_spec.choose.orthonormal.1 _
Also known as unitaryDilation. Respects x,y order.
def Ud {R : Type*} [RCLike R] {m r : ℕ}
{K : Fin r → Matrix (Fin m) (Fin m) R}
(hK : ∑ i, (K i)ᴴ * K i = 1) (z : Fin r) :
Matrix (Fin m × Fin r) (Fin m × Fin r) R := by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin r⊢ Matrix (Fin m × Fin r) (Fin m × Fin r) R
intro x y R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rx:Fin m × Fin ry:Fin m × Fin r⊢ R
by_cases hy : y.2 = z pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rx:Fin m × Fin ry:Fin m × Fin rhy:y.2 = z⊢ Rneg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rx:Fin m × Fin ry:Fin m × Fin rhy:¬y.2 = z⊢ R
· pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rx:Fin m × Fin ry:Fin m × Fin rhy:y.2 = z⊢ R exact stinespringOp K x y.1 All goals completed! 🐙
· neg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rx:Fin m × Fin ry:Fin m × Fin rhy:¬y.2 = z⊢ R exact onbPart hK y hy x All goals completed! 🐙This generalization of Stinespring dilation has the right "shape" but otherwise nothing specific to it.
def general_dilation {R : Type*}
{m r : Type*} [DecidableEq r]
(z : r)
(S : Matrix (m × r) m R)
(M : Matrix (m × r) (m × r) R) :
Matrix (m × r) (m × r) R := fun x y =>
ite (y.2 = z) (S x y.1) (M x y)A general, not necessarily unitary, dilation.
def dilation {R : Type*} [Ring R]
{m r : Type*} [Fintype r] [DecidableEq r]
(K : r → Matrix m m R) (z : r) (M : Matrix (m × r) (m × r) R) :
Matrix (m × r) (m × r) R := general_dilation z (stinespringOp K) (M)
One version of orthonormality of stinespringOp.
theorem Ud_orthonormal₁ {R : Type*} [RCLike R] {m r : ℕ} {K : Fin r → Matrix (Fin m) (Fin m) R}
(hK : ∑ i, (K i)ᴴ * K i = 1) (z : Fin r) :
Orthonormal R fun y ↦ if hy : y.2 = z then WithLp.toLp 2 fun i ↦ stinespringOp K i y.1
else WithLp.toLp 2 fun i ↦ onbPart hK y hy i := by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin r⊢ Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i
constructor left R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin r⊢ ∀ (i : Fin m × Fin r),
‖(fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1
else WithLp.toLp 2 fun i => onbPart hK y hy i)
i‖ =
1right R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin r⊢ Pairwise fun i j =>
inner R
((fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1
else WithLp.toLp 2 fun i => onbPart hK y hy i)
i)
((fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1
else WithLp.toLp 2 fun i => onbPart hK y hy i)
j) =
0
· left R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin r⊢ ∀ (i : Fin m × Fin r),
‖(fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1
else WithLp.toLp 2 fun i => onbPart hK y hy i)
i‖ =
1 intro i left R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin r⊢ ‖(fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i)
i‖ =
1
simp only left R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin r⊢ ‖if hy : i.2 = z then WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1
else WithLp.toLp 2 fun i_1 => onbPart hK i hy i_1‖ =
1
split_ifs with g₀ pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rg₀:i.2 = z⊢ ‖WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1‖ = 1neg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rg₀:¬i.2 = z⊢ ‖WithLp.toLp 2 fun i_1 => onbPart hK i g₀ i_1‖ = 1
· pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rg₀:i.2 = z⊢ ‖WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1‖ = 1 apply (stinespringOrtho hK).1 All goals completed! 🐙
· neg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rg₀:¬i.2 = z⊢ ‖WithLp.toLp 2 fun i_1 => onbPart hK i g₀ i_1‖ = 1 apply onbPart_norm All goals completed! 🐙
· right R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin r⊢ Pairwise fun i j =>
inner R
((fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1
else WithLp.toLp 2 fun i => onbPart hK y hy i)
i)
((fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1
else WithLp.toLp 2 fun i => onbPart hK y hy i)
j) =
0 intro i j h right R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ j⊢ inner R
((fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i)
i)
((fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i)
j) =
0
simp only right R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ j⊢ inner R
(if hy : i.2 = z then WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1
else WithLp.toLp 2 fun i_1 => onbPart hK i hy i_1)
(if hy : j.2 = z then WithLp.toLp 2 fun i => stinespringOp K i j.1 else WithLp.toLp 2 fun i => onbPart hK j hy i) =
0
let theRange := Submodule.span R <| Set.range
fun j => WithLp.toLp 2 fun i ↦ stinespringOp K i j right R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)⊢ inner R
(if hy : i.2 = z then WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1
else WithLp.toLp 2 fun i_1 => onbPart hK i hy i_1)
(if hy : j.2 = z then WithLp.toLp 2 fun i => stinespringOp K i j.1 else WithLp.toLp 2 fun i => onbPart hK j hy i) =
0
split_ifs with g₀ g₁ g₂ pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:j.2 = z⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) (WithLp.toLp 2 fun i => stinespringOp K i j.1) = 0neg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:¬j.2 = z⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) (WithLp.toLp 2 fun i => onbPart hK j g₁ i) = 0pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:¬i.2 = zg₂:j.2 = z⊢ inner R (WithLp.toLp 2 fun i_1 => onbPart hK i g₀ i_1) (WithLp.toLp 2 fun i => stinespringOp K i j.1) = 0neg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:¬i.2 = zg₂:¬j.2 = z⊢ inner R (WithLp.toLp 2 fun i_1 => onbPart hK i g₀ i_1) (WithLp.toLp 2 fun i => onbPart hK j g₂ i) = 0
· pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:j.2 = z⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) (WithLp.toLp 2 fun i => stinespringOp K i j.1) = 0 apply (stinespringOrtho hK).2 pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:j.2 = z⊢ i.1 ≠ j.1
contrapose! h pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:j.2 = zh:i.1 = j.1⊢ i = j
refine Prod.ext_iff.mpr ?_ pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:j.2 = zh:i.1 = j.1⊢ i.1 = j.1 ∧ i.2 = j.2
constructor pos.left R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:j.2 = zh:i.1 = j.1⊢ i.1 = j.1pos.right R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:j.2 = zh:i.1 = j.1⊢ i.2 = j.2
· pos.left R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:j.2 = zh:i.1 = j.1⊢ i.1 = j.1 tauto All goals completed! 🐙
· pos.right R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:j.2 = zh:i.1 = j.1⊢ i.2 = j.2 rw [g₀, pos.right R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:j.2 = zh:i.1 = j.1⊢ z = j.2 All goals completed! 🐙g₁ pos.right R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:j.2 = zh:i.1 = j.1⊢ z = z All goals completed! 🐙] All goals completed! 🐙
· neg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:¬j.2 = z⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) (WithLp.toLp 2 fun i => onbPart hK j g₁ i) = 0 -- use that they came from `theRange`, `theRangeᗮ` respectively.
have h₀ : (WithLp.toLp 2 fun i_1 ↦ stinespringOp K i_1 i.1) ∈ theRange := by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin r⊢ Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i neg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:¬j.2 = zh₀:(WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) ∈ theRange⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) (WithLp.toLp 2 fun i => onbPart hK j g₁ i) = 0
unfold theRange R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:¬j.2 = z⊢ (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) ∈
Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)neg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:¬j.2 = zh₀:(WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) ∈ theRange⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) (WithLp.toLp 2 fun i => onbPart hK j g₁ i) = 0
generalize stinespringOp K = α R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:¬j.2 = zα:Matrix (Fin m × Fin r) (Fin m) R⊢ (WithLp.toLp 2 fun i_1 => α i_1 i.1) ∈ Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => α i j)neg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:¬j.2 = zh₀:(WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) ∈ theRange⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) (WithLp.toLp 2 fun i => onbPart hK j g₁ i) = 0
apply Submodule.mem_span_of_mem R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:¬j.2 = zα:Matrix (Fin m × Fin r) (Fin m) R⊢ (WithLp.toLp 2 fun i_1 => α i_1 i.1) ∈ Set.range fun j => WithLp.toLp 2 fun i => α i jneg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:¬j.2 = zh₀:(WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) ∈ theRange⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) (WithLp.toLp 2 fun i => onbPart hK j g₁ i) = 0
simpneg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:¬j.2 = zh₀:(WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) ∈ theRange⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) (WithLp.toLp 2 fun i => onbPart hK j g₁ i) = 0neg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:¬j.2 = zh₀:(WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) ∈ theRange⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) (WithLp.toLp 2 fun i => onbPart hK j g₁ i) = 0
have h₁ : (WithLp.toLp 2 fun i ↦ onbPart hK j g₁ i) ∈ theRangeᗮ := by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin r⊢ Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i neg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:¬j.2 = zh₀:(WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) ∈ theRangeh₁:(WithLp.toLp 2 fun i => onbPart hK j g₁ i) ∈ theRangeᗮ⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) (WithLp.toLp 2 fun i => onbPart hK j g₁ i) = 0
unfold theRange R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:¬j.2 = zh₀:(WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) ∈ theRange⊢ (WithLp.toLp 2 fun i => onbPart hK j g₁ i) ∈
(Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j))ᗮneg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:¬j.2 = zh₀:(WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) ∈ theRangeh₁:(WithLp.toLp 2 fun i => onbPart hK j g₁ i) ∈ theRangeᗮ⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) (WithLp.toLp 2 fun i => onbPart hK j g₁ i) = 0
simp [onbPart]neg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:¬j.2 = zh₀:(WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) ∈ theRangeh₁:(WithLp.toLp 2 fun i => onbPart hK j g₁ i) ∈ theRangeᗮ⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) (WithLp.toLp 2 fun i => onbPart hK j g₁ i) = 0neg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:i.2 = zg₁:¬j.2 = zh₀:(WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) ∈ theRangeh₁:(WithLp.toLp 2 fun i => onbPart hK j g₁ i) ∈ theRangeᗮ⊢ inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1) (WithLp.toLp 2 fun i => onbPart hK j g₁ i) = 0
exact h₁ _ h₀ All goals completed! 🐙
· pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:¬i.2 = zg₂:j.2 = z⊢ inner R (WithLp.toLp 2 fun i_1 => onbPart hK i g₀ i_1) (WithLp.toLp 2 fun i => stinespringOp K i j.1) = 0 have h₀' : (WithLp.toLp 2 fun i_1 ↦ stinespringOp K i_1 j.1) ∈ theRange := by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin r⊢ Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:¬i.2 = zg₂:j.2 = zh₀':(WithLp.toLp 2 fun i_1 => stinespringOp K i_1 j.1) ∈ theRange⊢ inner R (WithLp.toLp 2 fun i_1 => onbPart hK i g₀ i_1) (WithLp.toLp 2 fun i => stinespringOp K i j.1) = 0
unfold theRange R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:¬i.2 = zg₂:j.2 = z⊢ (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 j.1) ∈
Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:¬i.2 = zg₂:j.2 = zh₀':(WithLp.toLp 2 fun i_1 => stinespringOp K i_1 j.1) ∈ theRange⊢ inner R (WithLp.toLp 2 fun i_1 => onbPart hK i g₀ i_1) (WithLp.toLp 2 fun i => stinespringOp K i j.1) = 0
generalize stinespringOp K = α R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:¬i.2 = zg₂:j.2 = zα:Matrix (Fin m × Fin r) (Fin m) R⊢ (WithLp.toLp 2 fun i_1 => α i_1 j.1) ∈ Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => α i j)pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:¬i.2 = zg₂:j.2 = zh₀':(WithLp.toLp 2 fun i_1 => stinespringOp K i_1 j.1) ∈ theRange⊢ inner R (WithLp.toLp 2 fun i_1 => onbPart hK i g₀ i_1) (WithLp.toLp 2 fun i => stinespringOp K i j.1) = 0
apply Submodule.mem_span_of_mem R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:¬i.2 = zg₂:j.2 = zα:Matrix (Fin m × Fin r) (Fin m) R⊢ (WithLp.toLp 2 fun i_1 => α i_1 j.1) ∈ Set.range fun j => WithLp.toLp 2 fun i => α i jpos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:¬i.2 = zg₂:j.2 = zh₀':(WithLp.toLp 2 fun i_1 => stinespringOp K i_1 j.1) ∈ theRange⊢ inner R (WithLp.toLp 2 fun i_1 => onbPart hK i g₀ i_1) (WithLp.toLp 2 fun i => stinespringOp K i j.1) = 0
simppos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:¬i.2 = zg₂:j.2 = zh₀':(WithLp.toLp 2 fun i_1 => stinespringOp K i_1 j.1) ∈ theRange⊢ inner R (WithLp.toLp 2 fun i_1 => onbPart hK i g₀ i_1) (WithLp.toLp 2 fun i => stinespringOp K i j.1) = 0pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:¬i.2 = zg₂:j.2 = zh₀':(WithLp.toLp 2 fun i_1 => stinespringOp K i_1 j.1) ∈ theRange⊢ inner R (WithLp.toLp 2 fun i_1 => onbPart hK i g₀ i_1) (WithLp.toLp 2 fun i => stinespringOp K i j.1) = 0
have h₁ : (WithLp.toLp 2 fun t ↦ onbPart hK i g₀ t) ∈ theRangeᗮ := by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin r⊢ Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:¬i.2 = zg₂:j.2 = zh₀':(WithLp.toLp 2 fun i_1 => stinespringOp K i_1 j.1) ∈ theRangeh₁:(WithLp.toLp 2 fun t => onbPart hK i g₀ t) ∈ theRangeᗮ⊢ inner R (WithLp.toLp 2 fun i_1 => onbPart hK i g₀ i_1) (WithLp.toLp 2 fun i => stinespringOp K i j.1) = 0
unfold theRange R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:¬i.2 = zg₂:j.2 = zh₀':(WithLp.toLp 2 fun i_1 => stinespringOp K i_1 j.1) ∈ theRange⊢ (WithLp.toLp 2 fun t => onbPart hK i g₀ t) ∈
(Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j))ᗮpos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:¬i.2 = zg₂:j.2 = zh₀':(WithLp.toLp 2 fun i_1 => stinespringOp K i_1 j.1) ∈ theRangeh₁:(WithLp.toLp 2 fun t => onbPart hK i g₀ t) ∈ theRangeᗮ⊢ inner R (WithLp.toLp 2 fun i_1 => onbPart hK i g₀ i_1) (WithLp.toLp 2 fun i => stinespringOp K i j.1) = 0
simp [onbPart]pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:¬i.2 = zg₂:j.2 = zh₀':(WithLp.toLp 2 fun i_1 => stinespringOp K i_1 j.1) ∈ theRangeh₁:(WithLp.toLp 2 fun t => onbPart hK i g₀ t) ∈ theRangeᗮ⊢ inner R (WithLp.toLp 2 fun i_1 => onbPart hK i g₀ i_1) (WithLp.toLp 2 fun i => stinespringOp K i j.1) = 0pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:¬i.2 = zg₂:j.2 = zh₀':(WithLp.toLp 2 fun i_1 => stinespringOp K i_1 j.1) ∈ theRangeh₁:(WithLp.toLp 2 fun t => onbPart hK i g₀ t) ∈ theRangeᗮ⊢ inner R (WithLp.toLp 2 fun i_1 => onbPart hK i g₀ i_1) (WithLp.toLp 2 fun i => stinespringOp K i j.1) = 0
have := h₁ _ h₀' pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:¬i.2 = zg₂:j.2 = zh₀':(WithLp.toLp 2 fun i_1 => stinespringOp K i_1 j.1) ∈ theRangeh₁:(WithLp.toLp 2 fun t => onbPart hK i g₀ t) ∈ theRangeᗮthis:inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 j.1) (WithLp.toLp 2 fun t => onbPart hK i g₀ t) = 0⊢ inner R (WithLp.toLp 2 fun i_1 => onbPart hK i g₀ i_1) (WithLp.toLp 2 fun i => stinespringOp K i j.1) = 0
generalize (WithLp.toLp 2 fun i_1 ↦ onbPart hK i g₀ i_1) = α at * pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:¬i.2 = zg₂:j.2 = zh₀':(WithLp.toLp 2 fun i_1 => stinespringOp K i_1 j.1) ∈ theRangeα:WithLp 2 (Fin m × Fin r → R)h₁:α ∈ theRangeᗮthis:inner R (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 j.1) α = 0⊢ inner R α (WithLp.toLp 2 fun i => stinespringOp K i j.1) = 0
generalize (WithLp.toLp 2 fun i ↦ stinespringOp K i j.1) = β at * pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:¬i.2 = zg₂:j.2 = zα:WithLp 2 (Fin m × Fin r → R)h₁:α ∈ theRangeᗮβ:WithLp 2 (Fin m × Fin r → R)h₀':β ∈ theRangethis:inner R β α = 0⊢ inner R α β = 0
exact inner_eq_zero_symm.mp (h₁ β h₀') All goals completed! 🐙
· neg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ri:Fin m × Fin rj:Fin m × Fin rh:i ≠ jtheRange:Submodule R (WithLp 2 (Fin m × Fin r → R)) := Submodule.span R (Set.range fun j => WithLp.toLp 2 fun i => stinespringOp K i j)g₀:¬i.2 = zg₂:¬j.2 = z⊢ inner R (WithLp.toLp 2 fun i_1 => onbPart hK i g₀ i_1) (WithLp.toLp 2 fun i => onbPart hK j g₂ i) = 0 exact onbPart_inner hK g₀ g₂ h All goals completed! 🐙The Stinespring dilation columns form an orthonormal basis.
theorem Ud_orthonormal₂ {R : Type*} [RCLike R]
{m r : ℕ} {K : Fin r → Matrix (Fin m) (Fin m) R}
(hK : ∑ i, (K i)ᴴ * K i = 1) (z : Fin r) :
Orthonormal R fun y ↦
WithLp.toLp 2 fun i ↦ if hy : y.2 = z then stinespringOp K i y.1 else onbPart hK y hy i := by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin r⊢ Orthonormal R fun y => WithLp.toLp 2 fun i => if hy : y.2 = z then stinespringOp K i y.1 else onbPart hK y hy i
have h₀ := Ud_orthonormal₁ hK z R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i⊢ Orthonormal R fun y => WithLp.toLp 2 fun i => if hy : y.2 = z then stinespringOp K i y.1 else onbPart hK y hy i
constructor left R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i⊢ ∀ (i : Fin m × Fin r),
‖(fun y => WithLp.toLp 2 fun i => if hy : y.2 = z then stinespringOp K i y.1 else onbPart hK y hy i) i‖ = 1right R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i⊢ Pairwise fun i j =>
inner R ((fun y => WithLp.toLp 2 fun i => if hy : y.2 = z then stinespringOp K i y.1 else onbPart hK y hy i) i)
((fun y => WithLp.toLp 2 fun i => if hy : y.2 = z then stinespringOp K i y.1 else onbPart hK y hy i) j) =
0
· left R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i⊢ ∀ (i : Fin m × Fin r),
‖(fun y => WithLp.toLp 2 fun i => if hy : y.2 = z then stinespringOp K i y.1 else onbPart hK y hy i) i‖ = 1 intro i left R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii:Fin m × Fin r⊢ ‖(fun y => WithLp.toLp 2 fun i => if hy : y.2 = z then stinespringOp K i y.1 else onbPart hK y hy i) i‖ = 1
have := h₀.1 i left R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii:Fin m × Fin rthis:‖(fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i)
i‖ =
1⊢ ‖(fun y => WithLp.toLp 2 fun i => if hy : y.2 = z then stinespringOp K i y.1 else onbPart hK y hy i) i‖ = 1
rw [← this left R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii:Fin m × Fin rthis:‖(fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i)
i‖ =
1⊢ ‖(fun y => WithLp.toLp 2 fun i => if hy : y.2 = z then stinespringOp K i y.1 else onbPart hK y hy i) i‖ =
‖(fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i)
i‖ left R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii:Fin m × Fin rthis:‖(fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i)
i‖ =
1⊢ ‖(fun y => WithLp.toLp 2 fun i => if hy : y.2 = z then stinespringOp K i y.1 else onbPart hK y hy i) i‖ =
‖(fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i)
i‖] left R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii:Fin m × Fin rthis:‖(fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i)
i‖ =
1⊢ ‖(fun y => WithLp.toLp 2 fun i => if hy : y.2 = z then stinespringOp K i y.1 else onbPart hK y hy i) i‖ =
‖(fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i)
i‖
congr left R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii:Fin m × Fin rthis:‖(fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i)
i‖ =
1⊢ (fun y => WithLp.toLp 2 fun i => if hy : y.2 = z then stinespringOp K i y.1 else onbPart hK y hy i) i =
(fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i)
i
ext y left R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii:Fin m × Fin rthis:‖(fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i)
i‖ =
1y:Fin m × Fin r⊢ ((fun y => WithLp.toLp 2 fun i => if hy : y.2 = z then stinespringOp K i y.1 else onbPart hK y hy i) i).ofLp y =
((fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1
else WithLp.toLp 2 fun i => onbPart hK y hy i)
i).ofLp
y
simp only left R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii:Fin m × Fin rthis:‖(fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i)
i‖ =
1y:Fin m × Fin r⊢ (if hy : i.2 = z then stinespringOp K y i.1 else onbPart hK i hy y) =
(if hy : i.2 = z then WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1
else WithLp.toLp 2 fun i_1 => onbPart hK i hy i_1).ofLp
y
split_ifs with g₀ pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii:Fin m × Fin rthis:‖(fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i)
i‖ =
1y:Fin m × Fin rg₀:i.2 = z⊢ stinespringOp K y i.1 = (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1).ofLp yneg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii:Fin m × Fin rthis:‖(fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i)
i‖ =
1y:Fin m × Fin rg₀:¬i.2 = z⊢ onbPart hK i g₀ y = (WithLp.toLp 2 fun i_1 => onbPart hK i g₀ i_1).ofLp y <;> pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii:Fin m × Fin rthis:‖(fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i)
i‖ =
1y:Fin m × Fin rg₀:i.2 = z⊢ stinespringOp K y i.1 = (WithLp.toLp 2 fun i_1 => stinespringOp K i_1 i.1).ofLp yneg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii:Fin m × Fin rthis:‖(fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i)
i‖ =
1y:Fin m × Fin rg₀:¬i.2 = z⊢ onbPart hK i g₀ y = (WithLp.toLp 2 fun i_1 => onbPart hK i g₀ i_1).ofLp y simp All goals completed! 🐙
· right R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy i⊢ Pairwise fun i j =>
inner R ((fun y => WithLp.toLp 2 fun i => if hy : y.2 = z then stinespringOp K i y.1 else onbPart hK y hy i) i)
((fun y => WithLp.toLp 2 fun i => if hy : y.2 = z then stinespringOp K i y.1 else onbPart hK y hy i) j) =
0 intro _ _ hij right R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii✝:Fin m × Fin rj✝:Fin m × Fin rhij:i✝ ≠ j✝⊢ inner R ((fun y => WithLp.toLp 2 fun i => if hy : y.2 = z then stinespringOp K i y.1 else onbPart hK y hy i) i✝)
((fun y => WithLp.toLp 2 fun i => if hy : y.2 = z then stinespringOp K i y.1 else onbPart hK y hy i) j✝) =
0
have := h₀.2 hij right R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii✝:Fin m × Fin rj✝:Fin m × Fin rhij:i✝ ≠ j✝this:(fun i j =>
inner R
((fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1
else WithLp.toLp 2 fun i => onbPart hK y hy i)
i)
((fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1
else WithLp.toLp 2 fun i => onbPart hK y hy i)
j) =
0)
i✝ j✝⊢ inner R ((fun y => WithLp.toLp 2 fun i => if hy : y.2 = z then stinespringOp K i y.1 else onbPart hK y hy i) i✝)
((fun y => WithLp.toLp 2 fun i => if hy : y.2 = z then stinespringOp K i y.1 else onbPart hK y hy i) j✝) =
0
simp only at this ⊢ right R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii✝:Fin m × Fin rj✝:Fin m × Fin rhij:i✝ ≠ j✝this:inner R
(if hy : i✝.2 = z then WithLp.toLp 2 fun i => stinespringOp K i i✝.1 else WithLp.toLp 2 fun i => onbPart hK i✝ hy i)
(if hy : j✝.2 = z then WithLp.toLp 2 fun i => stinespringOp K i j✝.1
else WithLp.toLp 2 fun i => onbPart hK j✝ hy i) =
0⊢ inner R (WithLp.toLp 2 fun i => if hy : i✝.2 = z then stinespringOp K i i✝.1 else onbPart hK i✝ hy i)
(WithLp.toLp 2 fun i => if hy : j✝.2 = z then stinespringOp K i j✝.1 else onbPart hK j✝ hy i) =
0
rw [← this right R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii✝:Fin m × Fin rj✝:Fin m × Fin rhij:i✝ ≠ j✝this:inner R
(if hy : i✝.2 = z then WithLp.toLp 2 fun i => stinespringOp K i i✝.1 else WithLp.toLp 2 fun i => onbPart hK i✝ hy i)
(if hy : j✝.2 = z then WithLp.toLp 2 fun i => stinespringOp K i j✝.1
else WithLp.toLp 2 fun i => onbPart hK j✝ hy i) =
0⊢ inner R (WithLp.toLp 2 fun i => if hy : i✝.2 = z then stinespringOp K i i✝.1 else onbPart hK i✝ hy i)
(WithLp.toLp 2 fun i => if hy : j✝.2 = z then stinespringOp K i j✝.1 else onbPart hK j✝ hy i) =
inner R
(if hy : i✝.2 = z then WithLp.toLp 2 fun i => stinespringOp K i i✝.1 else WithLp.toLp 2 fun i => onbPart hK i✝ hy i)
(if hy : j✝.2 = z then WithLp.toLp 2 fun i => stinespringOp K i j✝.1 else WithLp.toLp 2 fun i => onbPart hK j✝ hy i) right R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii✝:Fin m × Fin rj✝:Fin m × Fin rhij:i✝ ≠ j✝this:inner R
(if hy : i✝.2 = z then WithLp.toLp 2 fun i => stinespringOp K i i✝.1 else WithLp.toLp 2 fun i => onbPart hK i✝ hy i)
(if hy : j✝.2 = z then WithLp.toLp 2 fun i => stinespringOp K i j✝.1
else WithLp.toLp 2 fun i => onbPart hK j✝ hy i) =
0⊢ inner R (WithLp.toLp 2 fun i => if hy : i✝.2 = z then stinespringOp K i i✝.1 else onbPart hK i✝ hy i)
(WithLp.toLp 2 fun i => if hy : j✝.2 = z then stinespringOp K i j✝.1 else onbPart hK j✝ hy i) =
inner R
(if hy : i✝.2 = z then WithLp.toLp 2 fun i => stinespringOp K i i✝.1 else WithLp.toLp 2 fun i => onbPart hK i✝ hy i)
(if hy : j✝.2 = z then WithLp.toLp 2 fun i => stinespringOp K i j✝.1 else WithLp.toLp 2 fun i => onbPart hK j✝ hy i)]right R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii✝:Fin m × Fin rj✝:Fin m × Fin rhij:i✝ ≠ j✝this:inner R
(if hy : i✝.2 = z then WithLp.toLp 2 fun i => stinespringOp K i i✝.1 else WithLp.toLp 2 fun i => onbPart hK i✝ hy i)
(if hy : j✝.2 = z then WithLp.toLp 2 fun i => stinespringOp K i j✝.1
else WithLp.toLp 2 fun i => onbPart hK j✝ hy i) =
0⊢ inner R (WithLp.toLp 2 fun i => if hy : i✝.2 = z then stinespringOp K i i✝.1 else onbPart hK i✝ hy i)
(WithLp.toLp 2 fun i => if hy : j✝.2 = z then stinespringOp K i j✝.1 else onbPart hK j✝ hy i) =
inner R
(if hy : i✝.2 = z then WithLp.toLp 2 fun i => stinespringOp K i i✝.1 else WithLp.toLp 2 fun i => onbPart hK i✝ hy i)
(if hy : j✝.2 = z then WithLp.toLp 2 fun i => stinespringOp K i j✝.1 else WithLp.toLp 2 fun i => onbPart hK j✝ hy i)
split_ifs at * with g₀ g₁ pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii✝:Fin m × Fin rj✝:Fin m × Fin rhij:i✝ ≠ j✝g₀:i✝.2 = zg₁:j✝.2 = zthis:inner R (WithLp.toLp 2 fun i => stinespringOp K i i✝.1) (WithLp.toLp 2 fun i => stinespringOp K i j✝.1) = 0⊢ inner R (WithLp.toLp 2 fun i => stinespringOp K i i✝.1) (WithLp.toLp 2 fun i => stinespringOp K i j✝.1) =
inner R (WithLp.toLp 2 fun i => stinespringOp K i i✝.1) (WithLp.toLp 2 fun i => stinespringOp K i j✝.1)neg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii✝:Fin m × Fin rj✝:Fin m × Fin rhij:i✝ ≠ j✝g₀:i✝.2 = zg₁:¬j✝.2 = zthis:inner R (WithLp.toLp 2 fun i => stinespringOp K i i✝.1) (WithLp.toLp 2 fun i => onbPart hK j✝ g₁ i) = 0⊢ inner R (WithLp.toLp 2 fun i => stinespringOp K i i✝.1) (WithLp.toLp 2 fun i => onbPart hK j✝ g₁ i) =
inner R (WithLp.toLp 2 fun i => stinespringOp K i i✝.1) (WithLp.toLp 2 fun i => onbPart hK j✝ g₁ i)pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii✝:Fin m × Fin rj✝:Fin m × Fin rhij:i✝ ≠ j✝g₀:¬i✝.2 = zh✝:j✝.2 = zthis:inner R (WithLp.toLp 2 fun i => onbPart hK i✝ g₀ i) (WithLp.toLp 2 fun i => stinespringOp K i j✝.1) = 0⊢ inner R (WithLp.toLp 2 fun i => onbPart hK i✝ g₀ i) (WithLp.toLp 2 fun i => stinespringOp K i j✝.1) =
inner R (WithLp.toLp 2 fun i => onbPart hK i✝ g₀ i) (WithLp.toLp 2 fun i => stinespringOp K i j✝.1)neg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii✝:Fin m × Fin rj✝:Fin m × Fin rhij:i✝ ≠ j✝g₀:¬i✝.2 = zh✝:¬j✝.2 = zthis:inner R (WithLp.toLp 2 fun i => onbPart hK i✝ g₀ i) (WithLp.toLp 2 fun i => onbPart hK j✝ h✝ i) = 0⊢ inner R (WithLp.toLp 2 fun i => onbPart hK i✝ g₀ i) (WithLp.toLp 2 fun i => onbPart hK j✝ h✝ i) =
inner R (WithLp.toLp 2 fun i => onbPart hK i✝ g₀ i) (WithLp.toLp 2 fun i => onbPart hK j✝ h✝ i) <;> pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii✝:Fin m × Fin rj✝:Fin m × Fin rhij:i✝ ≠ j✝g₀:i✝.2 = zg₁:j✝.2 = zthis:inner R (WithLp.toLp 2 fun i => stinespringOp K i i✝.1) (WithLp.toLp 2 fun i => stinespringOp K i j✝.1) = 0⊢ inner R (WithLp.toLp 2 fun i => stinespringOp K i i✝.1) (WithLp.toLp 2 fun i => stinespringOp K i j✝.1) =
inner R (WithLp.toLp 2 fun i => stinespringOp K i i✝.1) (WithLp.toLp 2 fun i => stinespringOp K i j✝.1)neg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii✝:Fin m × Fin rj✝:Fin m × Fin rhij:i✝ ≠ j✝g₀:i✝.2 = zg₁:¬j✝.2 = zthis:inner R (WithLp.toLp 2 fun i => stinespringOp K i i✝.1) (WithLp.toLp 2 fun i => onbPart hK j✝ g₁ i) = 0⊢ inner R (WithLp.toLp 2 fun i => stinespringOp K i i✝.1) (WithLp.toLp 2 fun i => onbPart hK j✝ g₁ i) =
inner R (WithLp.toLp 2 fun i => stinespringOp K i i✝.1) (WithLp.toLp 2 fun i => onbPart hK j✝ g₁ i)pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii✝:Fin m × Fin rj✝:Fin m × Fin rhij:i✝ ≠ j✝g₀:¬i✝.2 = zh✝:j✝.2 = zthis:inner R (WithLp.toLp 2 fun i => onbPart hK i✝ g₀ i) (WithLp.toLp 2 fun i => stinespringOp K i j✝.1) = 0⊢ inner R (WithLp.toLp 2 fun i => onbPart hK i✝ g₀ i) (WithLp.toLp 2 fun i => stinespringOp K i j✝.1) =
inner R (WithLp.toLp 2 fun i => onbPart hK i✝ g₀ i) (WithLp.toLp 2 fun i => stinespringOp K i j✝.1)neg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rh₀:Orthonormal R fun y =>
if hy : y.2 = z then WithLp.toLp 2 fun i => stinespringOp K i y.1 else WithLp.toLp 2 fun i => onbPart hK y hy ii✝:Fin m × Fin rj✝:Fin m × Fin rhij:i✝ ≠ j✝g₀:¬i✝.2 = zh✝:¬j✝.2 = zthis:inner R (WithLp.toLp 2 fun i => onbPart hK i✝ g₀ i) (WithLp.toLp 2 fun i => onbPart hK j✝ h✝ i) = 0⊢ inner R (WithLp.toLp 2 fun i => onbPart hK i✝ g₀ i) (WithLp.toLp 2 fun i => onbPart hK j✝ h✝ i) =
inner R (WithLp.toLp 2 fun i => onbPart hK i✝ g₀ i) (WithLp.toLp 2 fun i => onbPart hK j✝ h✝ i) rfl All goals completed! 🐙
If β has length 1 then the dot product of β with itself is 1.
lemma smul_self_one_of_norm_one {R : Type*} [RCLike R]
{t : Type*} [Fintype t] {β : t → R} (hj : ‖WithLp.toLp 2 β‖ = 1) :
∑ x, (starRingEnd R) (β x) * β x = 1 := by R:Type u_1inst✝¹:RCLike Rt:Type u_2inst✝:Fintype tβ:t → Rhj:‖WithLp.toLp 2 β‖ = 1⊢ ∑ x, (starRingEnd R) (β x) * β x = 1
refine Eq.symm ((fun {z w} ↦ RCLike.ext_iff.mpr) ?_) R:Type u_1inst✝¹:RCLike Rt:Type u_2inst✝:Fintype tβ:t → Rhj:‖WithLp.toLp 2 β‖ = 1⊢ re 1 = re (∑ x, (starRingEnd R) (β x) * β x) ∧ im 1 = im (∑ x, (starRingEnd R) (β x) * β x)
constructor left R:Type u_1inst✝¹:RCLike Rt:Type u_2inst✝:Fintype tβ:t → Rhj:‖WithLp.toLp 2 β‖ = 1⊢ re 1 = re (∑ x, (starRingEnd R) (β x) * β x)right R:Type u_1inst✝¹:RCLike Rt:Type u_2inst✝:Fintype tβ:t → Rhj:‖WithLp.toLp 2 β‖ = 1⊢ im 1 = im (∑ x, (starRingEnd R) (β x) * β x)
· left R:Type u_1inst✝¹:RCLike Rt:Type u_2inst✝:Fintype tβ:t → Rhj:‖WithLp.toLp 2 β‖ = 1⊢ re 1 = re (∑ x, (starRingEnd R) (β x) * β x) simp only [one_re, map_sum, mul_re, conj_re, conj_im, neg_mul, sub_neg_eq_add] left R:Type u_1inst✝¹:RCLike Rt:Type u_2inst✝:Fintype tβ:t → Rhj:‖WithLp.toLp 2 β‖ = 1⊢ 1 = ∑ x, (re (β x) * re (β x) + im (β x) * im (β x))
rw [← one_pow 2 left R:Type u_1inst✝¹:RCLike Rt:Type u_2inst✝:Fintype tβ:t → Rhj:‖WithLp.toLp 2 β‖ = 1⊢ 1 ^ 2 = ∑ x, (re (β x) * re (β x) + im (β x) * im (β x)) left R:Type u_1inst✝¹:RCLike Rt:Type u_2inst✝:Fintype tβ:t → Rhj:‖WithLp.toLp 2 β‖ = 1⊢ 1 ^ 2 = ∑ x, (re (β x) * re (β x) + im (β x) * im (β x))] left R:Type u_1inst✝¹:RCLike Rt:Type u_2inst✝:Fintype tβ:t → Rhj:‖WithLp.toLp 2 β‖ = 1⊢ 1 ^ 2 = ∑ x, (re (β x) * re (β x) + im (β x) * im (β x))
rw [← hj left R:Type u_1inst✝¹:RCLike Rt:Type u_2inst✝:Fintype tβ:t → Rhj:‖WithLp.toLp 2 β‖ = 1⊢ ‖WithLp.toLp 2 β‖ ^ 2 = ∑ x, (re (β x) * re (β x) + im (β x) * im (β x)) left R:Type u_1inst✝¹:RCLike Rt:Type u_2inst✝:Fintype tβ:t → Rhj:‖WithLp.toLp 2 β‖ = 1⊢ ‖WithLp.toLp 2 β‖ ^ 2 = ∑ x, (re (β x) * re (β x) + im (β x) * im (β x))]left R:Type u_1inst✝¹:RCLike Rt:Type u_2inst✝:Fintype tβ:t → Rhj:‖WithLp.toLp 2 β‖ = 1⊢ ‖WithLp.toLp 2 β‖ ^ 2 = ∑ x, (re (β x) * re (β x) + im (β x) * im (β x))
simp_rw [ left R:Type u_1inst✝¹:RCLike Rt:Type u_2inst✝:Fintype tβ:t → Rhj:‖WithLp.toLp 2 β‖ = 1⊢ ‖WithLp.toLp 2 β‖ ^ 2 = ∑ x, (re (β x) * re (β x) + im (β x) * im (β x))← RCLike.norm_sq_eq_def left R:Type u_1inst✝¹:RCLike Rt:Type u_2inst✝:Fintype tβ:t → Rhj:‖WithLp.toLp 2 β‖ = 1⊢ ‖WithLp.toLp 2 β‖ ^ 2 = ∑ x, ‖β x‖ ^ 2]
exact EuclideanSpace.norm_sq_eq (WithLp.toLp 2 β) All goals completed! 🐙
· right R:Type u_1inst✝¹:RCLike Rt:Type u_2inst✝:Fintype tβ:t → Rhj:‖WithLp.toLp 2 β‖ = 1⊢ im 1 = im (∑ x, (starRingEnd R) (β x) * β x) simp only [one_im, map_sum, mul_im, conj_re, conj_im, neg_mul] right R:Type u_1inst✝¹:RCLike Rt:Type u_2inst✝:Fintype tβ:t → Rhj:‖WithLp.toLp 2 β‖ = 1⊢ 0 = ∑ x, (re (β x) * im (β x) + -(im (β x) * re (β x)))
symm right R:Type u_1inst✝¹:RCLike Rt:Type u_2inst✝:Fintype tβ:t → Rhj:‖WithLp.toLp 2 β‖ = 1⊢ ∑ x, (re (β x) * im (β x) + -(im (β x) * re (β x))) = 0
apply Fintype.sum_eq_zero right R:Type u_1inst✝¹:RCLike Rt:Type u_2inst✝:Fintype tβ:t → Rhj:‖WithLp.toLp 2 β‖ = 1⊢ ∀ (a : t), re (β a) * im (β a) + -(im (β a) * re (β a)) = 0
ring_nf right R:Type u_1inst✝¹:RCLike Rt:Type u_2inst✝:Fintype tβ:t → Rhj:‖WithLp.toLp 2 β‖ = 1⊢ ∀ (a : t), True
simp All goals completed! 🐙A matrix whose columns are orthonormal is unitary.
theorem unitary_of_orthonormal {R : Type*} [RCLike R]
{m r : Type*} [Fintype r] [DecidableEq r] [Fintype m] [DecidableEq m]
(α : Matrix (m × r) (m × r) R)
(h₀ : Orthonormal R fun i ↦ WithLp.toLp 2 (α i)) : α * star α = 1 := by R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mα:Matrix (m × r) (m × r) Rh₀:Orthonormal R fun i => WithLp.toLp 2 (α i)⊢ α * star α = 1
ext i j R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mα:Matrix (m × r) (m × r) Rh₀:Orthonormal R fun i => WithLp.toLp 2 (α i)i:m × rj:m × r⊢ (α * star α) i j = 1 i j
rw [mul_apply R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mα:Matrix (m × r) (m × r) Rh₀:Orthonormal R fun i => WithLp.toLp 2 (α i)i:m × rj:m × r⊢ ∑ j_1, α i j_1 * star α j_1 j = 1 i j R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mα:Matrix (m × r) (m × r) Rh₀:Orthonormal R fun i => WithLp.toLp 2 (α i)i:m × rj:m × r⊢ ∑ j_1, α i j_1 * star α j_1 j = 1 i j] R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mα:Matrix (m × r) (m × r) Rh₀:Orthonormal R fun i => WithLp.toLp 2 (α i)i:m × rj:m × r⊢ ∑ j_1, α i j_1 * star α j_1 j = 1 i j
apply star_injective R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mα:Matrix (m × r) (m × r) Rh₀:Orthonormal R fun i => WithLp.toLp 2 (α i)i:m × rj:m × r⊢ star (∑ j_1, α i j_1 * star α j_1 j) = star (1 i j)
simp only [star_apply, star_def, star_sum, star_mul', RingHomCompTriple.comp_apply,
RingHom.id_apply] R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mα:Matrix (m × r) (m × r) Rh₀:Orthonormal R fun i => WithLp.toLp 2 (α i)i:m × rj:m × r⊢ ∑ x, (starRingEnd R) (α i x) * α j x = (starRingEnd R) (1 i j)
by_cases H : i = j pos R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mα:Matrix (m × r) (m × r) Rh₀:Orthonormal R fun i => WithLp.toLp 2 (α i)i:m × rj:m × rH:i = j⊢ ∑ x, (starRingEnd R) (α i x) * α j x = (starRingEnd R) (1 i j)neg R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mα:Matrix (m × r) (m × r) Rh₀:Orthonormal R fun i => WithLp.toLp 2 (α i)i:m × rj:m × rH:¬i = j⊢ ∑ x, (starRingEnd R) (α i x) * α j x = (starRingEnd R) (1 i j)
· pos R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mα:Matrix (m × r) (m × r) Rh₀:Orthonormal R fun i => WithLp.toLp 2 (α i)i:m × rj:m × rH:i = j⊢ ∑ x, (starRingEnd R) (α i x) * α j x = (starRingEnd R) (1 i j) subst i pos R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mα:Matrix (m × r) (m × r) Rh₀:Orthonormal R fun i => WithLp.toLp 2 (α i)j:m × r⊢ ∑ x, (starRingEnd R) (α j x) * α j x = (starRingEnd R) (1 j j)
simp only [one_apply_eq, map_one] pos R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mα:Matrix (m × r) (m × r) Rh₀:Orthonormal R fun i => WithLp.toLp 2 (α i)j:m × r⊢ ∑ x, (starRingEnd R) (α j x) * α j x = 1
exact smul_self_one_of_norm_one <| h₀.1 _ All goals completed! 🐙
· neg R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mα:Matrix (m × r) (m × r) Rh₀:Orthonormal R fun i => WithLp.toLp 2 (α i)i:m × rj:m × rH:¬i = j⊢ ∑ x, (starRingEnd R) (α i x) * α j x = (starRingEnd R) (1 i j) rw [one_apply_ne' <| H ∘ Eq.symm, neg R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mα:Matrix (m × r) (m × r) Rh₀:Orthonormal R fun i => WithLp.toLp 2 (α i)i:m × rj:m × rH:¬i = j⊢ ∑ x, (starRingEnd R) (α i x) * α j x = (starRingEnd R) 0 neg R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mα:Matrix (m × r) (m × r) Rh₀:Orthonormal R fun i => WithLp.toLp 2 (α i)i:m × rj:m × rH:¬i = j⊢ ∑ x, (starRingEnd R) (α i x) * α j x = 0 map_zero neg R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mα:Matrix (m × r) (m × r) Rh₀:Orthonormal R fun i => WithLp.toLp 2 (α i)i:m × rj:m × rH:¬i = j⊢ ∑ x, (starRingEnd R) (α i x) * α j x = 0neg R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mα:Matrix (m × r) (m × r) Rh₀:Orthonormal R fun i => WithLp.toLp 2 (α i)i:m × rj:m × rH:¬i = j⊢ ∑ x, (starRingEnd R) (α i x) * α j x = 0]neg R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mα:Matrix (m × r) (m × r) Rh₀:Orthonormal R fun i => WithLp.toLp 2 (α i)i:m × rj:m × rH:¬i = j⊢ ∑ x, (starRingEnd R) (α i x) * α j x = 0
convert h₀.2 H e'_2 R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mα:Matrix (m × r) (m × r) Rh₀:Orthonormal R fun i => WithLp.toLp 2 (α i)i:m × rj:m × rH:¬i = j⊢ ∑ x, (starRingEnd R) (α i x) * α j x = inner R ((fun i => WithLp.toLp 2 (α i)) i) ((fun i => WithLp.toLp 2 (α i)) j)
simp only [inner] e'_2 R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mα:Matrix (m × r) (m × r) Rh₀:Orthonormal R fun i => WithLp.toLp 2 (α i)i:m × rj:m × rH:¬i = j⊢ ∑ x, (starRingEnd R) (α i x) * α j x = ∑ x, α j x * star (α i x)
congr e'_2.e_f R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mα:Matrix (m × r) (m × r) Rh₀:Orthonormal R fun i => WithLp.toLp 2 (α i)i:m × rj:m × rH:¬i = j⊢ (fun x => (starRingEnd R) (α i x) * α j x) = fun x => α j x * star (α i x)
ext l e'_2.e_f R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mα:Matrix (m × r) (m × r) Rh₀:Orthonormal R fun i => WithLp.toLp 2 (α i)i:m × rj:m × rH:¬i = jl:m × r⊢ (starRingEnd R) (α i l) * α j l = α j l * star (α i l)
nth_rw 1 [mul_comm e'_2.e_f R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mα:Matrix (m × r) (m × r) Rh₀:Orthonormal R fun i => WithLp.toLp 2 (α i)i:m × rj:m × rH:¬i = jl:m × r⊢ α j l * (starRingEnd R) (α i l) = α j l * star (α i l)] e'_2.e_f R:Type u_1inst✝⁴:RCLike Rm:Type u_2r:Type u_3inst✝³:Fintype rinst✝²:DecidableEq rinst✝¹:Fintype minst✝:DecidableEq mα:Matrix (m × r) (m × r) Rh₀:Orthonormal R fun i => WithLp.toLp 2 (α i)i:m × rj:m × rH:¬i = jl:m × r⊢ α j l * (starRingEnd R) (α i l) = α j l * star (α i l)
rfl All goals completed! 🐙The transpose of the unitary dilation is unitary.
lemma Ud_unitaryT {R : Type*} [RCLike R]
{m r : ℕ} {K : Fin r → Matrix (Fin m) (Fin m) R}
(hK : ∑ i, (K i)ᴴ * K i = 1) (z : Fin r) :
(Ud hK z)ᵀ ∈ unitary _ := by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin r⊢ (Ud hK z)ᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)
have H₀ := unitary_of_orthonormal (Ud hK z)ᵀ
<| Ud_orthonormal₂ hK z R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rH₀:(Ud hK z)ᵀ * star (Ud hK z)ᵀ = 1⊢ (Ud hK z)ᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)
constructor left R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rH₀:(Ud hK z)ᵀ * star (Ud hK z)ᵀ = 1⊢ star (Ud hK z)ᵀ * (Ud hK z)ᵀ = 1right R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rH₀:(Ud hK z)ᵀ * star (Ud hK z)ᵀ = 1⊢ (Ud hK z)ᵀ * star (Ud hK z)ᵀ = 1
· left R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rH₀:(Ud hK z)ᵀ * star (Ud hK z)ᵀ = 1⊢ star (Ud hK z)ᵀ * (Ud hK z)ᵀ = 1 exact (mul_eq_one_comm_of_card_eq _ _ _ rfl).mp H₀ All goals completed! 🐙
· right R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rH₀:(Ud hK z)ᵀ * star (Ud hK z)ᵀ = 1⊢ (Ud hK z)ᵀ * star (Ud hK z)ᵀ = 1 exact H₀ All goals completed! 🐙
The unitary dilation Ud is in fact unitary.
lemma Ud_unitary {R : Type*} [RCLike R]
{m r : ℕ} {K : Fin r → Matrix (Fin m) (Fin m) R}
(hK : ∑ i, (K i)ᴴ * K i = 1) (z : Fin r) :
(Ud hK z) ∈ unitary _ := by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin r⊢ Ud hK z ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)
have := Ud_unitaryT hK z R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rthis:(Ud hK z)ᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)⊢ Ud hK z ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)
generalize Ud hK z = U at * R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rU:Matrix (Fin m × Fin r) (Fin m × Fin r) Rthis:Uᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)⊢ U ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)
have : star U * U = 1 := by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin r⊢ Ud hK z ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R) R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rU:Matrix (Fin m × Fin r) (Fin m × Fin r) Rthis✝:Uᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)this:star U * U = 1⊢ U ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)
have := this.2 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rU:Matrix (Fin m × Fin r) (Fin m × Fin r) Rthis✝:Uᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)this:Uᵀ * star Uᵀ = 1⊢ star U * U = 1 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rU:Matrix (Fin m × Fin r) (Fin m × Fin r) Rthis✝:Uᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)this:star U * U = 1⊢ U ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)
have : (Uᵀ * star Uᵀ)ᵀ = 1ᵀ := transpose_inj.mpr this R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rU:Matrix (Fin m × Fin r) (Fin m × Fin r) Rthis✝¹:Uᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)this✝:Uᵀ * star Uᵀ = 1this:(Uᵀ * star Uᵀ)ᵀ = 1ᵀ⊢ star U * U = 1 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rU:Matrix (Fin m × Fin r) (Fin m × Fin r) Rthis✝:Uᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)this:star U * U = 1⊢ U ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)
simp only [transpose_mul, transpose_transpose, transpose_one] at this R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rU:Matrix (Fin m × Fin r) (Fin m × Fin r) Rthis✝¹:Uᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)this✝:Uᵀ * star Uᵀ = 1this:(star Uᵀ)ᵀ * U = 1⊢ star U * U = 1 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rU:Matrix (Fin m × Fin r) (Fin m × Fin r) Rthis✝:Uᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)this:star U * U = 1⊢ U ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)
have : (star Uᵀ)ᵀ = star U := by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin r⊢ Ud hK z ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R) R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rU:Matrix (Fin m × Fin r) (Fin m × Fin r) Rthis✝²:Uᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)this✝¹:Uᵀ * star Uᵀ = 1this✝:(star Uᵀ)ᵀ * U = 1this:(star Uᵀ)ᵀ = star U⊢ star U * U = 1 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rU:Matrix (Fin m × Fin r) (Fin m × Fin r) Rthis✝:Uᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)this:star U * U = 1⊢ U ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)
exact Eq.symm (Matrix.ext fun i ↦ congrFun rfl) R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rU:Matrix (Fin m × Fin r) (Fin m × Fin r) Rthis✝²:Uᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)this✝¹:Uᵀ * star Uᵀ = 1this✝:(star Uᵀ)ᵀ * U = 1this:(star Uᵀ)ᵀ = star U⊢ star U * U = 1 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rU:Matrix (Fin m × Fin r) (Fin m × Fin r) Rthis✝:Uᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)this:star U * U = 1⊢ U ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R) R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rU:Matrix (Fin m × Fin r) (Fin m × Fin r) Rthis✝²:Uᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)this✝¹:Uᵀ * star Uᵀ = 1this✝:(star Uᵀ)ᵀ * U = 1this:(star Uᵀ)ᵀ = star U⊢ star U * U = 1 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rU:Matrix (Fin m × Fin r) (Fin m × Fin r) Rthis✝:Uᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)this:star U * U = 1⊢ U ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)
rw [← this R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rU:Matrix (Fin m × Fin r) (Fin m × Fin r) Rthis✝²:Uᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)this✝¹:Uᵀ * star Uᵀ = 1this✝:(star Uᵀ)ᵀ * U = 1this:(star Uᵀ)ᵀ = star U⊢ (star Uᵀ)ᵀ * U = 1 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rU:Matrix (Fin m × Fin r) (Fin m × Fin r) Rthis✝²:Uᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)this✝¹:Uᵀ * star Uᵀ = 1this✝:(star Uᵀ)ᵀ * U = 1this:(star Uᵀ)ᵀ = star U⊢ (star Uᵀ)ᵀ * U = 1 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rU:Matrix (Fin m × Fin r) (Fin m × Fin r) Rthis✝:Uᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)this:star U * U = 1⊢ U ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rU:Matrix (Fin m × Fin r) (Fin m × Fin r) Rthis✝²:Uᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)this✝¹:Uᵀ * star Uᵀ = 1this✝:(star Uᵀ)ᵀ * U = 1this:(star Uᵀ)ᵀ = star U⊢ (star Uᵀ)ᵀ * U = 1 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rU:Matrix (Fin m × Fin r) (Fin m × Fin r) Rthis✝:Uᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)this:star U * U = 1⊢ U ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)
tauto R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rU:Matrix (Fin m × Fin r) (Fin m × Fin r) Rthis✝:Uᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)this:star U * U = 1⊢ U ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R) R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rU:Matrix (Fin m × Fin r) (Fin m × Fin r) Rthis✝:Uᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)this:star U * U = 1⊢ U ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)
constructor left R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rU:Matrix (Fin m × Fin r) (Fin m × Fin r) Rthis✝:Uᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)this:star U * U = 1⊢ star U * U = 1right R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rU:Matrix (Fin m × Fin r) (Fin m × Fin r) Rthis✝:Uᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)this:star U * U = 1⊢ U * star U = 1
· left R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rU:Matrix (Fin m × Fin r) (Fin m × Fin r) Rthis✝:Uᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)this:star U * U = 1⊢ star U * U = 1 exact this All goals completed! 🐙
· right R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rU:Matrix (Fin m × Fin r) (Fin m × Fin r) Rthis✝:Uᵀ ∈ unitary (Matrix (Fin m × Fin r) (Fin m × Fin r) R)this:star U * U = 1⊢ U * star U = 1 exact (mul_eq_one_comm_of_card_eq _ _ _ rfl).mp this All goals completed! 🐙Taking the partial trace of a tensor product with a matrix of trace 1 is the identity map.
lemma tr₂_e₀Xe₀ {R : Type*} [RCLike R]
{m w : Type*} [Fintype w]
(e : Matrix w w R) (htr : e.trace = 1)
(ρ : Matrix m m R) :
tr₂ (ρ ⊗ₖ e) = ρ := by R:Type u_1inst✝¹:RCLike Rm:Type u_2w:Type u_3inst✝:Fintype we:Matrix w w Rhtr:e.trace = 1ρ:Matrix m m R⊢ tr₂ (kroneckerMap (fun x1 x2 => x1 * x2) ρ e) = ρ
unfold tr₂ kroneckerMap R:Type u_1inst✝¹:RCLike Rm:Type u_2w:Type u_3inst✝:Fintype we:Matrix w w Rhtr:e.trace = 1ρ:Matrix m m R⊢ (fun i j => ∑ k, of (fun i j => (fun x1 x2 => x1 * x2) (ρ i.1 j.1) (e i.2 j.2)) (i, k) (j, k)) = ρ
simp only [of_apply] R:Type u_1inst✝¹:RCLike Rm:Type u_2w:Type u_3inst✝:Fintype we:Matrix w w Rhtr:e.trace = 1ρ:Matrix m m R⊢ (fun i j => ∑ x, ρ i j * e x x) = ρ
ext i j R:Type u_1inst✝¹:RCLike Rm:Type u_2w:Type u_3inst✝:Fintype we:Matrix w w Rhtr:e.trace = 1ρ:Matrix m m Ri:mj:m⊢ ∑ x, ρ i j * e x x = ρ i j
have : ∑ x, ρ i j * e x x
= ρ i j * ∑ x, e x x := by R:Type u_1inst✝¹:RCLike Rm:Type u_2w:Type u_3inst✝:Fintype we:Matrix w w Rhtr:e.trace = 1ρ:Matrix m m R⊢ tr₂ (kroneckerMap (fun x1 x2 => x1 * x2) ρ e) = ρ R:Type u_1inst✝¹:RCLike Rm:Type u_2w:Type u_3inst✝:Fintype we:Matrix w w Rhtr:e.trace = 1ρ:Matrix m m Ri:mj:mthis:∑ x, ρ i j * e x x = ρ i j * ∑ x, e x x⊢ ∑ x, ρ i j * e x x = ρ i j rw [Finset.mul_sum R:Type u_1inst✝¹:RCLike Rm:Type u_2w:Type u_3inst✝:Fintype we:Matrix w w Rhtr:e.trace = 1ρ:Matrix m m Ri:mj:m⊢ ∑ x, ρ i j * e x x = ∑ i_1, ρ i j * e i_1 i_1 R:Type u_1inst✝¹:RCLike Rm:Type u_2w:Type u_3inst✝:Fintype we:Matrix w w Rhtr:e.trace = 1ρ:Matrix m m Ri:mj:mthis:∑ x, ρ i j * e x x = ρ i j * ∑ x, e x x⊢ ∑ x, ρ i j * e x x = ρ i j] R:Type u_1inst✝¹:RCLike Rm:Type u_2w:Type u_3inst✝:Fintype we:Matrix w w Rhtr:e.trace = 1ρ:Matrix m m Ri:mj:mthis:∑ x, ρ i j * e x x = ρ i j * ∑ x, e x x⊢ ∑ x, ρ i j * e x x = ρ i j R:Type u_1inst✝¹:RCLike Rm:Type u_2w:Type u_3inst✝:Fintype we:Matrix w w Rhtr:e.trace = 1ρ:Matrix m m Ri:mj:mthis:∑ x, ρ i j * e x x = ρ i j * ∑ x, e x x⊢ ∑ x, ρ i j * e x x = ρ i j
rw [this R:Type u_1inst✝¹:RCLike Rm:Type u_2w:Type u_3inst✝:Fintype we:Matrix w w Rhtr:e.trace = 1ρ:Matrix m m Ri:mj:mthis:∑ x, ρ i j * e x x = ρ i j * ∑ x, e x x⊢ ρ i j * ∑ x, e x x = ρ i j R:Type u_1inst✝¹:RCLike Rm:Type u_2w:Type u_3inst✝:Fintype we:Matrix w w Rhtr:e.trace = 1ρ:Matrix m m Ri:mj:mthis:∑ x, ρ i j * e x x = ρ i j * ∑ x, e x x⊢ ρ i j * ∑ x, e x x = ρ i j] R:Type u_1inst✝¹:RCLike Rm:Type u_2w:Type u_3inst✝:Fintype we:Matrix w w Rhtr:e.trace = 1ρ:Matrix m m Ri:mj:mthis:∑ x, ρ i j * e x x = ρ i j * ∑ x, e x x⊢ ρ i j * ∑ x, e x x = ρ i j
unfold trace at htr R:Type u_1inst✝¹:RCLike Rm:Type u_2w:Type u_3inst✝:Fintype we:Matrix w w Rhtr:∑ i, e.diag i = 1ρ:Matrix m m Ri:mj:mthis:∑ x, ρ i j * e x x = ρ i j * ∑ x, e x x⊢ ρ i j * ∑ x, e x x = ρ i j
simp only [diag_apply] at htr R:Type u_1inst✝¹:RCLike Rm:Type u_2w:Type u_3inst✝:Fintype we:Matrix w w Rρ:Matrix m m Ri:mj:mthis:∑ x, ρ i j * e x x = ρ i j * ∑ x, e x xhtr:∑ x, e x x = 1⊢ ρ i j * ∑ x, e x x = ρ i j
rw [htr R:Type u_1inst✝¹:RCLike Rm:Type u_2w:Type u_3inst✝:Fintype we:Matrix w w Rρ:Matrix m m Ri:mj:mthis:∑ x, ρ i j * e x x = ρ i j * ∑ x, e x xhtr:∑ x, e x x = 1⊢ ρ i j * 1 = ρ i j R:Type u_1inst✝¹:RCLike Rm:Type u_2w:Type u_3inst✝:Fintype we:Matrix w w Rρ:Matrix m m Ri:mj:mthis:∑ x, ρ i j * e x x = ρ i j * ∑ x, e x xhtr:∑ x, e x x = 1⊢ ρ i j * 1 = ρ i j] R:Type u_1inst✝¹:RCLike Rm:Type u_2w:Type u_3inst✝:Fintype we:Matrix w w Rρ:Matrix m m Ri:mj:mthis:∑ x, ρ i j * e x x = ρ i j * ∑ x, e x xhtr:∑ x, e x x = 1⊢ ρ i j * 1 = ρ i j
simp All goals completed! 🐙The Stinespring unitary form.
def stinespringUnitaryForm {R : Type*} [RCLike R] {m r : ℕ}
{K : Fin r → Matrix (Fin m) (Fin m) R}
(hK : ∑ i, (K i)ᴴ * K i = 1) (z : Fin r)
(ρ : Matrix (Fin m) (Fin m) R) :
(Matrix (Fin m) (Fin m) R) :=
let U := Ud hK z
tr₂ (U * (ρ ⊗ₖ (single z z 1)) * Uᴴ)The Stinespring unitary form, general version.
def stinespringUnitaryForm_e {R : Type*} [RCLike R] {m r : ℕ}
{K : Fin r → Matrix (Fin m) (Fin m) R}
(hK : ∑ i, (K i)ᴴ * K i = 1) (z : Fin r) (e : Matrix (Fin r) (Fin r) R)
(ρ : Matrix (Fin m) (Fin m) R) :
(Matrix (Fin m) (Fin m) R) :=
let U := Ud hK z
tr₂ (U * (ρ ⊗ₖ e) * Uᴴ)Trace-free version of the Stinespring Dilation Theorem.
theorem tracefree_version {R : Type*} [RCLike R]
{m r : Type*} [Fintype r] [DecidableEq r] [Fintype m]
{K : r → Matrix m m R}
(ρ : Matrix m m R) :
let K' := fun i x y => star <| K i y x; let U := (stinespringOp K');
Uᴴ * (ρ ⊗ₖ (1 : Matrix r r R)) * U = stinespringForm K ρ := by R:Type u_1inst✝³:RCLike Rm:Type u_2r:Type u_3inst✝²:Fintype rinst✝¹:DecidableEq rinst✝:Fintype mK:r → Matrix m m Rρ:Matrix m m R⊢ let K' := fun i x y => star (K i y x);
let U := stinespringOp K';
Uᴴ * kroneckerMap (fun x1 x2 => x1 * x2) ρ 1 * U = stinespringForm K ρ
-- Since my proof broke in 4.27 -> 4.31, here's Aristotle's proof.
simp only [stinespringOp, star_def, Fin.isValue, stinespringForm, stinespringDilation] R:Type u_1inst✝³:RCLike Rm:Type u_2r:Type u_3inst✝²:Fintype rinst✝¹:DecidableEq rinst✝:Fintype mK:r → Matrix m m Rρ:Matrix m m R⊢ ((fun x y =>
(∑ x, kroneckerMap (fun x1 x2 => x1 * x2) (fun x_1 y => (starRingEnd R) (K x y x_1)) (single x 0 1)) x
(y, 0))ᴴ *
kroneckerMap (fun x1 x2 => x1 * x2) ρ 1 *
fun x y =>
(∑ x, kroneckerMap (fun x1 x2 => x1 * x2) (fun x_1 y => (starRingEnd R) (K x y x_1)) (single x 0 1)) x (y, 0)) =
tr₂
((fun x y => (∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) x (y, 0)) * ρ *
(fun x y => (∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) x (y, 0))ᴴ);
ext x y R:Type u_1inst✝³:RCLike Rm:Type u_2r:Type u_3inst✝²:Fintype rinst✝¹:DecidableEq rinst✝:Fintype mK:r → Matrix m m Rρ:Matrix m m Rx:my:m⊢ ((fun x y =>
(∑ x, kroneckerMap (fun x1 x2 => x1 * x2) (fun x_1 y => (starRingEnd R) (K x y x_1)) (single x 0 1)) x
(y, 0))ᴴ *
kroneckerMap (fun x1 x2 => x1 * x2) ρ 1 *
fun x y =>
(∑ x, kroneckerMap (fun x1 x2 => x1 * x2) (fun x_1 y => (starRingEnd R) (K x y x_1)) (single x 0 1)) x (y, 0))
x y =
tr₂
((fun x y => (∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) x (y, 0)) * ρ *
(fun x y => (∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) x (y, 0))ᴴ)
x y
simp only [Fin.isValue, Matrix.mul_apply, conjTranspose_apply, star_def, kroneckerMap_apply,
Matrix.one_apply, mul_ite, mul_one, mul_zero, tr₂] R:Type u_1inst✝³:RCLike Rm:Type u_2r:Type u_3inst✝²:Fintype rinst✝¹:DecidableEq rinst✝:Fintype mK:r → Matrix m m Rρ:Matrix m m Rx:my:m⊢ ∑ x_1,
(∑ x_2,
if x_2.2 = x_1.2 then
(starRingEnd R)
((∑ x, kroneckerMap (fun x1 x2 => x1 * x2) (fun x_3 y => (starRingEnd R) (K x y x_3)) (single x 0 1)) x_2
(x, 0)) *
ρ x_2.1 x_1.1
else 0) *
(∑ x, kroneckerMap (fun x1 x2 => x1 * x2) (fun x_2 y => (starRingEnd R) (K x y x_2)) (single x 0 1)) x_1 (y, 0) =
∑ x_1,
∑ x_2,
(∑ j, (∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) (x, x_1) (j, 0) * ρ j x_2) *
(starRingEnd R) ((∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) (y, x_1) (x_2, 0))
ring_nf R:Type u_1inst✝³:RCLike Rm:Type u_2r:Type u_3inst✝²:Fintype rinst✝¹:DecidableEq rinst✝:Fintype mK:r → Matrix m m Rρ:Matrix m m Rx:my:m⊢ ∑ x_1,
(∑ x_2,
if x_2.2 = x_1.2 then
(starRingEnd R)
((∑ x, kroneckerMap (fun x1 x2 => x1 * x2) (fun x_3 y => (starRingEnd R) (K x y x_3)) (single x 0 1)) x_2
(x, 0)) *
ρ x_2.1 x_1.1
else 0) *
(∑ x, kroneckerMap (fun x1 x2 => x1 * x2) (fun x_2 y => (starRingEnd R) (K x y x_2)) (single x 0 1)) x_1 (y, 0) =
∑ x_1,
∑ x_2,
(∑ x_3, (∑ x, kroneckerMap (fun x1 x2 => x1 * x2) (K x) (single x 0 1)) (x, x_1) (x_3, 0) * ρ x_3 x_2) *
(starRingEnd R) ((∑ x, kroneckerMap (fun x1 x2 => x1 * x2) (K x) (single x 0 1)) (y, x_1) (x_2, 0));
simp only [Fin.isValue, Matrix.sum_apply, kroneckerMap_apply, map_sum, map_mul,
RingHomCompTriple.comp_apply, RingHom.id_apply, Fintype.sum_prod_type, Finset.sum_ite_eq',
Finset.mem_univ, ↓reduceIte] R:Type u_1inst✝³:RCLike Rm:Type u_2r:Type u_3inst✝²:Fintype rinst✝¹:DecidableEq rinst✝:Fintype mK:r → Matrix m m Rρ:Matrix m m Rx:my:m⊢ ∑ x_1,
∑ x_2,
(∑ x_3, (∑ x_4, K x_4 x x_3 * (starRingEnd R) (single x_4 0 1 x_2 0)) * ρ x_3 x_1) *
∑ x, (starRingEnd R) (K x y x_1) * single x 0 1 x_2 0 =
∑ x_1,
∑ x_2,
(∑ x_3, (∑ x_4, K x_4 x x_3 * single x_4 0 1 x_1 0) * ρ x_3 x_2) *
∑ x, (starRingEnd R) (K x y x_2) * (starRingEnd R) (single x 0 1 x_1 0);
simp only [single, Fin.isValue, of_apply, and_true, MonoidWithZeroHom.map_ite_one_zero, mul_ite,
mul_one, mul_zero, Finset.sum_ite_eq', Finset.mem_univ, ↓reduceIte] R:Type u_1inst✝³:RCLike Rm:Type u_2r:Type u_3inst✝²:Fintype rinst✝¹:DecidableEq rinst✝:Fintype mK:r → Matrix m m Rρ:Matrix m m Rx:my:m⊢ ∑ x_1, ∑ x_2, (∑ x_3, K x_2 x x_3 * ρ x_3 x_1) * (starRingEnd R) (K x_2 y x_1) =
∑ x_1, ∑ x_2, (∑ x_3, K x_1 x x_3 * ρ x_3 x_2) * (starRingEnd R) (K x_1 y x_2);
exact Finset.sum_comm All goals completed! 🐙A Heisberg picture / Schrödinger picture view of the Stinespring dilation.
theorem heisenberg_schrõdinger {R : Type*} [RCLike R]
{m r : Type*} [Fintype r] [DecidableEq r] [Fintype m]
{K : r → Matrix m m R}
(ρ : Matrix m m R) :
let K' := fun i x y => star <| K i y x
let U := (stinespringOp K'); let V := stinespringOp K
let schrõdinger := tr₂ (V * ρ * Vᴴ); -- evolve the state forward: V = V(t), ρ = ρ(0)
let heisenberg := Uᴴ * (ρ ⊗ₖ (1 : Matrix r r R)) * U;
-- ρ ⊗ₖ 1 is an "observable"; evolve it backward
schrõdinger = heisenberg := by R:Type u_1inst✝³:RCLike Rm:Type u_2r:Type u_3inst✝²:Fintype rinst✝¹:DecidableEq rinst✝:Fintype mK:r → Matrix m m Rρ:Matrix m m R⊢ let K' := fun i x y => star (K i y x);
let U := stinespringOp K';
let V := stinespringOp K;
let schrõdinger := tr₂ (V * ρ * Vᴴ);
let heisenberg := Uᴴ * kroneckerMap (fun x1 x2 => x1 * x2) ρ 1 * U;
schrõdinger = heisenberg
intro K' U R:Type u_1inst✝³:RCLike Rm:Type u_2r:Type u_3inst✝²:Fintype rinst✝¹:DecidableEq rinst✝:Fintype mK:r → Matrix m m Rρ:Matrix m m RK':r → m → m → R := fun i x y => star (K i y x)U:Matrix (m × r) m R := stinespringOp K'⊢ let V := stinespringOp K;
let schrõdinger := tr₂ (V * ρ * Vᴴ);
let heisenberg := Uᴴ * kroneckerMap (fun x1 x2 => x1 * x2) ρ 1 * U;
schrõdinger = heisenberg
rw [tracefree_version R:Type u_1inst✝³:RCLike Rm:Type u_2r:Type u_3inst✝²:Fintype rinst✝¹:DecidableEq rinst✝:Fintype mK:r → Matrix m m Rρ:Matrix m m RK':r → m → m → R := fun i x y => star (K i y x)U:Matrix (m × r) m R := stinespringOp K'⊢ let V := stinespringOp K;
let schrõdinger := tr₂ (V * ρ * Vᴴ);
let heisenberg := stinespringForm K ρ;
schrõdinger = heisenberg R:Type u_1inst✝³:RCLike Rm:Type u_2r:Type u_3inst✝²:Fintype rinst✝¹:DecidableEq rinst✝:Fintype mK:r → Matrix m m Rρ:Matrix m m RK':r → m → m → R := fun i x y => star (K i y x)U:Matrix (m × r) m R := stinespringOp K'⊢ let V := stinespringOp K;
let schrõdinger := tr₂ (V * ρ * Vᴴ);
let heisenberg := stinespringForm K ρ;
schrõdinger = heisenberg] R:Type u_1inst✝³:RCLike Rm:Type u_2r:Type u_3inst✝²:Fintype rinst✝¹:DecidableEq rinst✝:Fintype mK:r → Matrix m m Rρ:Matrix m m RK':r → m → m → R := fun i x y => star (K i y x)U:Matrix (m × r) m R := stinespringOp K'⊢ let V := stinespringOp K;
let schrõdinger := tr₂ (V * ρ * Vᴴ);
let heisenberg := stinespringForm K ρ;
schrõdinger = heisenberg
rfl All goals completed! 🐙
A further generalization of stinespringGeneralForm.
def generalForm {R : Type*} [RCLike R]
{m r : Type*} [Fintype r] [DecidableEq r] [Fintype m]
(z : r)
(S : Matrix (m × r) m R)
(M : Matrix (m × r) (m × r) R) :=
let U := general_dilation z S M
fun ρ => tr₂ (U * (ρ ⊗ₖ (single z z 1)) * Uᴴ)General form of the Stinespring dilation.
def stinespringGeneralForm {R : Type*} [RCLike R]
{m r : Type*} [Fintype r] [DecidableEq r] [Fintype m]
(K : r → Matrix m m R) (z : r)
(M : Matrix (m × r) (m × r) R) :=
let U := dilation K z M
fun ρ => tr₂ (U * (ρ ⊗ₖ (single z z 1)) * Uᴴ)Even more general form of the Stinespring dilation.
def stinespringGeneralForm_e {R : Type*} [RCLike R]
{m r : Type*} [Fintype r] [DecidableEq r] [Fintype m]
(K : r → Matrix m m R) (z : r) (e : Matrix r r R)
(M : Matrix (m × r) (m × r) R) :=
let U := dilation K z M
fun ρ => tr₂ (U * (ρ ⊗ₖ e) * Uᴴ)
When we plug in M = Ud hK
into the general stinespringGeneralForm,
then we do get
stinespringUnitaryForm hK.
theorem unitaryForm_of_general {R : Type*} [RCLike R] {m r : ℕ}
{K : Fin r → Matrix (Fin m) (Fin m) R}
(hK : ∑ i, (K i)ᴴ * K i = 1) (z : Fin r) :
stinespringGeneralForm K z (Ud hK z) =
stinespringUnitaryForm hK z := by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin r⊢ stinespringGeneralForm K z (Ud hK z) = stinespringUnitaryForm hK z
unfold
stinespringUnitaryForm tr₂ Ud
stinespringGeneralForm dilation general_dilation tr₂ R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin r⊢ (have U := fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y;
fun ρ i j => ∑ k, (U * kroneckerMap (fun x1 x2 => x1 * x2) ρ (single z z 1) * Uᴴ) (i, k) (j, k)) =
fun ρ =>
have U := fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x;
fun i j => ∑ k, (U * kroneckerMap (fun x1 x2 => x1 * x2) ρ (single z z 1) * Uᴴ) (i, k) (j, k)
ext a b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin m⊢ ∑ k,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ)
(b, k) (x✝, k) =
∑ k,
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ)
(b, k) (x✝, k)
congr e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin m⊢ (fun k =>
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ)
(b, k) (x✝, k)) =
fun k =>
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ)
(b, k) (x✝, k)
ext c e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin r⊢ ((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ)
(b, c) (x✝, c) =
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ)
(b, c) (x✝, c)
repeat rw [mul_apply e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin r⊢ ∑ j,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) j *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
j (x✝, c) =
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ)
(b, c) (x✝, c) e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin r⊢ ∑ j,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) j *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
j (x✝, c) =
∑ j,
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) j *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ j (x✝, c)] e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin r⊢ ∑ j,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) j *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
j (x✝, c) =
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ)
(b, c) (x✝, c) e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin r⊢ ∑ j,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) j *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
j (x✝, c) =
∑ j,
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) j *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ j (x✝, c)e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin r⊢ ∑ j,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) j *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
j (x✝, c) =
∑ j,
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) j *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ j (x✝, c)
repeat rw [Fintype.sum_prod_type e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin r⊢ ∑ x,
∑ y,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) (x, y) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(x, y) (x✝, c) =
∑ j,
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) j *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ j (x✝, c) e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin r⊢ ∑ x,
∑ y,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) (x, y) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(x, y) (x✝, c) =
∑ x,
∑ y,
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) (x, y) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ (x, y) (x✝, c)] e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin r⊢ ∑ x,
∑ y,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) (x, y) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(x, y) (x✝, c) =
∑ j,
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) j *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ j (x✝, c)e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin r⊢ ∑ x,
∑ y,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) (x, y) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(x, y) (x✝, c) =
∑ x,
∑ y,
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) (x, y) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ (x, y) (x✝, c)e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin r⊢ ∑ x,
∑ y,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) (x, y) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(x, y) (x✝, c) =
∑ x,
∑ y,
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) (x, y) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ (x, y) (x✝, c)
congr e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin r⊢ (fun x =>
∑ y,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) (x, y) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(x, y) (x✝, c)) =
fun x =>
∑ y,
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) (x, y) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ (x, y) (x✝, c)
ext d e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin m⊢ ∑ y,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) (d, y) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(d, y) (x✝, c) =
∑ y,
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) (d, y) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ (d, y) (x✝, c)
congr e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin m⊢ (fun y =>
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) (d, y) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(d, y) (x✝, c)) =
fun y =>
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) (d, y) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ (d, y) (x✝, c)
ext e e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ ((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) (d, e) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(d, e) (x✝, c) =
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) (d, e) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ (d, e) (x✝, c)
repeat rw [mul_apply e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (∑ j,
(if j.2 = z then stinespringOp K (b, c) j.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) (b, c) j) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1) j (d, e)) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(d, e) (x✝, c) =
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) (d, e) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ (d, e) (x✝, c) e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (∑ j,
(if j.2 = z then stinespringOp K (b, c) j.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) (b, c) j) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1) j (d, e)) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(d, e) (x✝, c) =
(∑ j,
(if hy : j.2 = z then stinespringOp K (b, c) j.1 else onbPart hK j hy (b, c)) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1) j (d, e)) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ (d, e) (x✝, c)] e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (∑ j,
(if j.2 = z then stinespringOp K (b, c) j.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) (b, c) j) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1) j (d, e)) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(d, e) (x✝, c) =
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1))
(b, c) (d, e) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ (d, e) (x✝, c)e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (∑ j,
(if j.2 = z then stinespringOp K (b, c) j.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) (b, c) j) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1) j (d, e)) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(d, e) (x✝, c) =
(∑ j,
(if hy : j.2 = z then stinespringOp K (b, c) j.1 else onbPart hK j hy (b, c)) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1) j (d, e)) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ (d, e) (x✝, c)e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (∑ j,
(if j.2 = z then stinespringOp K (b, c) j.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) (b, c) j) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1) j (d, e)) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(d, e) (x✝, c) =
(∑ j,
(if hy : j.2 = z then stinespringOp K (b, c) j.1 else onbPart hK j hy (b, c)) *
kroneckerMap (fun x1 x2 => x1 * x2) a (single z z 1) j (d, e)) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ (d, e) (x✝, c)
simp only [kroneckerMap_apply, ite_mul, dite_mul,
conjTranspose_apply, star_def] e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (∑ x,
if x.2 = z then stinespringOp K (b, c) x.1 * (a x.1 d * single z z 1 x.2 e)
else
if h : x.2 = z then stinespringOp K (b, c) x.1 * (a x.1 d * single z z 1 x.2 e)
else onbPart hK x h (b, c) * (a x.1 d * single z z 1 x.2 e)) *
(starRingEnd R)
(if e = z then stinespringOp K (x✝, c) d
else if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c)) =
(∑ x,
if h : x.2 = z then stinespringOp K (b, c) x.1 * (a x.1 d * single z z 1 x.2 e)
else onbPart hK x h (b, c) * (a x.1 d * single z z 1 x.2 e)) *
(starRingEnd R) (if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c))
repeat rw [Fintype.sum_prod_type e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (∑ x,
∑ y,
if (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * single z z 1 (x, y).2 e)
else
if h : (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * single z z 1 (x, y).2 e)
else onbPart hK (x, y) h (b, c) * (a (x, y).1 d * single z z 1 (x, y).2 e)) *
(starRingEnd R)
(if e = z then stinespringOp K (x✝, c) d
else if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c)) =
(∑ x,
if h : x.2 = z then stinespringOp K (b, c) x.1 * (a x.1 d * single z z 1 x.2 e)
else onbPart hK x h (b, c) * (a x.1 d * single z z 1 x.2 e)) *
(starRingEnd R) (if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c)) e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (∑ x,
∑ y,
if (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * single z z 1 (x, y).2 e)
else
if h : (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * single z z 1 (x, y).2 e)
else onbPart hK (x, y) h (b, c) * (a (x, y).1 d * single z z 1 (x, y).2 e)) *
(starRingEnd R)
(if e = z then stinespringOp K (x✝, c) d
else if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c)) =
(∑ x,
∑ y,
if h : (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * single z z 1 (x, y).2 e)
else onbPart hK (x, y) h (b, c) * (a (x, y).1 d * single z z 1 (x, y).2 e)) *
(starRingEnd R) (if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c))] e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (∑ x,
∑ y,
if (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * single z z 1 (x, y).2 e)
else
if h : (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * single z z 1 (x, y).2 e)
else onbPart hK (x, y) h (b, c) * (a (x, y).1 d * single z z 1 (x, y).2 e)) *
(starRingEnd R)
(if e = z then stinespringOp K (x✝, c) d
else if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c)) =
(∑ x,
if h : x.2 = z then stinespringOp K (b, c) x.1 * (a x.1 d * single z z 1 x.2 e)
else onbPart hK x h (b, c) * (a x.1 d * single z z 1 x.2 e)) *
(starRingEnd R) (if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c))e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (∑ x,
∑ y,
if (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * single z z 1 (x, y).2 e)
else
if h : (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * single z z 1 (x, y).2 e)
else onbPart hK (x, y) h (b, c) * (a (x, y).1 d * single z z 1 (x, y).2 e)) *
(starRingEnd R)
(if e = z then stinespringOp K (x✝, c) d
else if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c)) =
(∑ x,
∑ y,
if h : (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * single z z 1 (x, y).2 e)
else onbPart hK (x, y) h (b, c) * (a (x, y).1 d * single z z 1 (x, y).2 e)) *
(starRingEnd R) (if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c))e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (∑ x,
∑ y,
if (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * single z z 1 (x, y).2 e)
else
if h : (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * single z z 1 (x, y).2 e)
else onbPart hK (x, y) h (b, c) * (a (x, y).1 d * single z z 1 (x, y).2 e)) *
(starRingEnd R)
(if e = z then stinespringOp K (x✝, c) d
else if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c)) =
(∑ x,
∑ y,
if h : (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * single z z 1 (x, y).2 e)
else onbPart hK (x, y) h (b, c) * (a (x, y).1 d * single z z 1 (x, y).2 e)) *
(starRingEnd R) (if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c))
congr e_f.e_f.e_f.e_a.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (fun x =>
∑ y,
if (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * single z z 1 (x, y).2 e)
else
if h : (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * single z z 1 (x, y).2 e)
else onbPart hK (x, y) h (b, c) * (a (x, y).1 d * single z z 1 (x, y).2 e)) =
fun x =>
∑ y,
if h : (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * single z z 1 (x, y).2 e)
else onbPart hK (x, y) h (b, c) * (a (x, y).1 d * single z z 1 (x, y).2 e)e_f.e_f.e_f.e_a.e_6 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (if e = z then stinespringOp K (x✝, c) d
else if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c)) =
if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c)
· e_f.e_f.e_f.e_a.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (fun x =>
∑ y,
if (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * single z z 1 (x, y).2 e)
else
if h : (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * single z z 1 (x, y).2 e)
else onbPart hK (x, y) h (b, c) * (a (x, y).1 d * single z z 1 (x, y).2 e)) =
fun x =>
∑ y,
if h : (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * single z z 1 (x, y).2 e)
else onbPart hK (x, y) h (b, c) * (a (x, y).1 d * single z z 1 (x, y).2 e) ext f e_f.e_f.e_f.e_a.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin rf:Fin m⊢ (∑ y,
if (f, y).2 = z then stinespringOp K (b, c) (f, y).1 * (a (f, y).1 d * single z z 1 (f, y).2 e)
else
if h : (f, y).2 = z then stinespringOp K (b, c) (f, y).1 * (a (f, y).1 d * single z z 1 (f, y).2 e)
else onbPart hK (f, y) h (b, c) * (a (f, y).1 d * single z z 1 (f, y).2 e)) =
∑ y,
if h : (f, y).2 = z then stinespringOp K (b, c) (f, y).1 * (a (f, y).1 d * single z z 1 (f, y).2 e)
else onbPart hK (f, y) h (b, c) * (a (f, y).1 d * single z z 1 (f, y).2 e)
congr e_f.e_f.e_f.e_a.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin rf:Fin m⊢ (fun y =>
if (f, y).2 = z then stinespringOp K (b, c) (f, y).1 * (a (f, y).1 d * single z z 1 (f, y).2 e)
else
if h : (f, y).2 = z then stinespringOp K (b, c) (f, y).1 * (a (f, y).1 d * single z z 1 (f, y).2 e)
else onbPart hK (f, y) h (b, c) * (a (f, y).1 d * single z z 1 (f, y).2 e)) =
fun y =>
if h : (f, y).2 = z then stinespringOp K (b, c) (f, y).1 * (a (f, y).1 d * single z z 1 (f, y).2 e)
else onbPart hK (f, y) h (b, c) * (a (f, y).1 d * single z z 1 (f, y).2 e)
ext g e_f.e_f.e_f.e_a.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin rf:Fin mg:Fin r⊢ (if (f, g).2 = z then stinespringOp K (b, c) (f, g).1 * (a (f, g).1 d * single z z 1 (f, g).2 e)
else
if h : (f, g).2 = z then stinespringOp K (b, c) (f, g).1 * (a (f, g).1 d * single z z 1 (f, g).2 e)
else onbPart hK (f, g) h (b, c) * (a (f, g).1 d * single z z 1 (f, g).2 e)) =
if h : (f, g).2 = z then stinespringOp K (b, c) (f, g).1 * (a (f, g).1 d * single z z 1 (f, g).2 e)
else onbPart hK (f, g) h (b, c) * (a (f, g).1 d * single z z 1 (f, g).2 e)
simp only [ite_eq_right_iff, left_eq_dite_iff, mul_eq_mul_right_iff, mul_eq_zero] e_f.e_f.e_f.e_a.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin rf:Fin mg:Fin r⊢ g = z → ∀ (h : ¬g = z), stinespringOp K (b, c) f = onbPart hK (f, g) ⋯ (b, c) ∨ a f d = 0 ∨ single z z 1 g e = 0
intro hg e_f.e_f.e_f.e_a.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin rf:Fin mg:Fin rhg:g = z⊢ ∀ (h : ¬g = z), stinespringOp K (b, c) f = onbPart hK (f, g) ⋯ (b, c) ∨ a f d = 0 ∨ single z z 1 g e = 0
subst g e_f.e_f.e_f.e_a.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin rf:Fin m⊢ ∀ (h : ¬z = z), stinespringOp K (b, c) f = onbPart hK (f, z) ⋯ (b, c) ∨ a f d = 0 ∨ single z z 1 z e = 0
intro h e_f.e_f.e_f.e_a.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin rf:Fin mh:¬z = z⊢ stinespringOp K (b, c) f = onbPart hK (f, z) ⋯ (b, c) ∨ a f d = 0 ∨ single z z 1 z e = 0
simp at h ⊢ All goals completed! 🐙
· e_f.e_f.e_f.e_a.e_6 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (if e = z then stinespringOp K (x✝, c) d
else if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c)) =
if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c) split_ifs with g₀ pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin rg₀:e = z⊢ stinespringOp K (x✝, c) d = stinespringOp K (x✝, c) dneg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin rg₀:¬e = z⊢ onbPart hK (d, e) ⋯ (x✝, c) = onbPart hK (d, e) ⋯ (x✝, c) <;> pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin rg₀:e = z⊢ stinespringOp K (x✝, c) d = stinespringOp K (x✝, c) dneg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin rg₀:¬e = z⊢ onbPart hK (d, e) ⋯ (x✝, c) = onbPart hK (d, e) ⋯ (x✝, c) rfl All goals completed! 🐙The Stinespring unitary form as a general form applied to the unitary dilation.
theorem unitaryForm_of_general_e {R : Type*} [RCLike R] {m r : ℕ}
{K : Fin r → Matrix (Fin m) (Fin m) R}
(hK : ∑ i, (K i)ᴴ * K i = 1) (z : Fin r) (e : Matrix (Fin r) (Fin r) R) :
stinespringGeneralForm_e K z e (Ud hK z) =
stinespringUnitaryForm_e hK z e := by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re:Matrix (Fin r) (Fin r) R⊢ stinespringGeneralForm_e K z e (Ud hK z) = stinespringUnitaryForm_e hK z e
unfold
stinespringUnitaryForm_e tr₂ Ud
stinespringGeneralForm_e dilation general_dilation tr₂ R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re:Matrix (Fin r) (Fin r) R⊢ (have U := fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y;
fun ρ i j => ∑ k, (U * kroneckerMap (fun x1 x2 => x1 * x2) ρ e * Uᴴ) (i, k) (j, k)) =
fun ρ =>
have U := fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x;
fun i j => ∑ k, (U * kroneckerMap (fun x1 x2 => x1 * x2) ρ e * Uᴴ) (i, k) (j, k)
ext a b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin m⊢ ∑ k,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a e *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ)
(b, k) (x✝, k) =
∑ k,
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a e *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ)
(b, k) (x✝, k)
congr e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin m⊢ (fun k =>
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a e *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ)
(b, k) (x✝, k)) =
fun k =>
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a e *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ)
(b, k) (x✝, k)
ext c e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin r⊢ ((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a e *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ)
(b, c) (x✝, c) =
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a e *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ)
(b, c) (x✝, c)
repeat rw [mul_apply e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin r⊢ ∑ j,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a e)
(b, c) j *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
j (x✝, c) =
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a e *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ)
(b, c) (x✝, c) e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin r⊢ ∑ j,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a e)
(b, c) j *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
j (x✝, c) =
∑ j,
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a e)
(b, c) j *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ j (x✝, c)] e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin r⊢ ∑ j,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a e)
(b, c) j *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
j (x✝, c) =
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a e *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ)
(b, c) (x✝, c) e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin r⊢ ∑ j,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a e)
(b, c) j *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
j (x✝, c) =
∑ j,
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a e)
(b, c) j *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ j (x✝, c)e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin r⊢ ∑ j,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a e)
(b, c) j *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
j (x✝, c) =
∑ j,
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a e)
(b, c) j *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ j (x✝, c)
repeat rw [Fintype.sum_prod_type e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin r⊢ ∑ x,
∑ y,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a e)
(b, c) (x, y) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(x, y) (x✝, c) =
∑ j,
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a e)
(b, c) j *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ j (x✝, c) e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin r⊢ ∑ x,
∑ y,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a e)
(b, c) (x, y) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(x, y) (x✝, c) =
∑ x,
∑ y,
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a e)
(b, c) (x, y) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ (x, y) (x✝, c)] e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin r⊢ ∑ x,
∑ y,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a e)
(b, c) (x, y) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(x, y) (x✝, c) =
∑ j,
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a e)
(b, c) j *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ j (x✝, c)e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin r⊢ ∑ x,
∑ y,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a e)
(b, c) (x, y) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(x, y) (x✝, c) =
∑ x,
∑ y,
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a e)
(b, c) (x, y) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ (x, y) (x✝, c)e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin r⊢ ∑ x,
∑ y,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a e)
(b, c) (x, y) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(x, y) (x✝, c) =
∑ x,
∑ y,
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a e)
(b, c) (x, y) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ (x, y) (x✝, c)
congr e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin r⊢ (fun x =>
∑ y,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a e)
(b, c) (x, y) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(x, y) (x✝, c)) =
fun x =>
∑ y,
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a e)
(b, c) (x, y) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ (x, y) (x✝, c)
ext d e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin m⊢ ∑ y,
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a e)
(b, c) (d, y) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(d, y) (x✝, c) =
∑ y,
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a e)
(b, c) (d, y) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ (d, y) (x✝, c)
congr e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin m⊢ (fun y =>
((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a e)
(b, c) (d, y) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(d, y) (x✝, c)) =
fun y =>
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a e)
(b, c) (d, y) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ (d, y) (x✝, c)
ext e e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ ((fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y) *
kroneckerMap (fun x1 x2 => x1 * x2) a e✝)
(b, c) (d, e) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(d, e) (x✝, c) =
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a e✝)
(b, c) (d, e) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ (d, e) (x✝, c)
repeat rw [mul_apply e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (∑ j,
(if j.2 = z then stinespringOp K (b, c) j.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) (b, c) j) *
kroneckerMap (fun x1 x2 => x1 * x2) a e✝ j (d, e)) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(d, e) (x✝, c) =
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a e✝)
(b, c) (d, e) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ (d, e) (x✝, c) e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (∑ j,
(if j.2 = z then stinespringOp K (b, c) j.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) (b, c) j) *
kroneckerMap (fun x1 x2 => x1 * x2) a e✝ j (d, e)) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(d, e) (x✝, c) =
(∑ j,
(if hy : j.2 = z then stinespringOp K (b, c) j.1 else onbPart hK j hy (b, c)) *
kroneckerMap (fun x1 x2 => x1 * x2) a e✝ j (d, e)) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ (d, e) (x✝, c)] e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (∑ j,
(if j.2 = z then stinespringOp K (b, c) j.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) (b, c) j) *
kroneckerMap (fun x1 x2 => x1 * x2) a e✝ j (d, e)) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(d, e) (x✝, c) =
((fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) *
kroneckerMap (fun x1 x2 => x1 * x2) a e✝)
(b, c) (d, e) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ (d, e) (x✝, c)e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (∑ j,
(if j.2 = z then stinespringOp K (b, c) j.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) (b, c) j) *
kroneckerMap (fun x1 x2 => x1 * x2) a e✝ j (d, e)) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(d, e) (x✝, c) =
(∑ j,
(if hy : j.2 = z then stinespringOp K (b, c) j.1 else onbPart hK j hy (b, c)) *
kroneckerMap (fun x1 x2 => x1 * x2) a e✝ j (d, e)) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ (d, e) (x✝, c)e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (∑ j,
(if j.2 = z then stinespringOp K (b, c) j.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) (b, c) j) *
kroneckerMap (fun x1 x2 => x1 * x2) a e✝ j (d, e)) *
(fun x y =>
if y.2 = z then stinespringOp K x y.1
else (fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x) x y)ᴴ
(d, e) (x✝, c) =
(∑ j,
(if hy : j.2 = z then stinespringOp K (b, c) j.1 else onbPart hK j hy (b, c)) *
kroneckerMap (fun x1 x2 => x1 * x2) a e✝ j (d, e)) *
(fun x y => if hy : y.2 = z then stinespringOp K x y.1 else onbPart hK y hy x)ᴴ (d, e) (x✝, c)
simp only [kroneckerMap_apply, ite_mul, dite_mul,
conjTranspose_apply, star_def] e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (∑ x,
if x.2 = z then stinespringOp K (b, c) x.1 * (a x.1 d * e✝ x.2 e)
else
if h : x.2 = z then stinespringOp K (b, c) x.1 * (a x.1 d * e✝ x.2 e)
else onbPart hK x h (b, c) * (a x.1 d * e✝ x.2 e)) *
(starRingEnd R)
(if e = z then stinespringOp K (x✝, c) d
else if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c)) =
(∑ x,
if h : x.2 = z then stinespringOp K (b, c) x.1 * (a x.1 d * e✝ x.2 e)
else onbPart hK x h (b, c) * (a x.1 d * e✝ x.2 e)) *
(starRingEnd R) (if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c))
repeat rw [Fintype.sum_prod_type e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (∑ x,
∑ y,
if (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * e✝ (x, y).2 e)
else
if h : (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * e✝ (x, y).2 e)
else onbPart hK (x, y) h (b, c) * (a (x, y).1 d * e✝ (x, y).2 e)) *
(starRingEnd R)
(if e = z then stinespringOp K (x✝, c) d
else if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c)) =
(∑ x,
if h : x.2 = z then stinespringOp K (b, c) x.1 * (a x.1 d * e✝ x.2 e)
else onbPart hK x h (b, c) * (a x.1 d * e✝ x.2 e)) *
(starRingEnd R) (if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c)) e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (∑ x,
∑ y,
if (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * e✝ (x, y).2 e)
else
if h : (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * e✝ (x, y).2 e)
else onbPart hK (x, y) h (b, c) * (a (x, y).1 d * e✝ (x, y).2 e)) *
(starRingEnd R)
(if e = z then stinespringOp K (x✝, c) d
else if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c)) =
(∑ x,
∑ y,
if h : (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * e✝ (x, y).2 e)
else onbPart hK (x, y) h (b, c) * (a (x, y).1 d * e✝ (x, y).2 e)) *
(starRingEnd R) (if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c))] e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (∑ x,
∑ y,
if (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * e✝ (x, y).2 e)
else
if h : (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * e✝ (x, y).2 e)
else onbPart hK (x, y) h (b, c) * (a (x, y).1 d * e✝ (x, y).2 e)) *
(starRingEnd R)
(if e = z then stinespringOp K (x✝, c) d
else if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c)) =
(∑ x,
if h : x.2 = z then stinespringOp K (b, c) x.1 * (a x.1 d * e✝ x.2 e)
else onbPart hK x h (b, c) * (a x.1 d * e✝ x.2 e)) *
(starRingEnd R) (if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c))e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (∑ x,
∑ y,
if (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * e✝ (x, y).2 e)
else
if h : (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * e✝ (x, y).2 e)
else onbPart hK (x, y) h (b, c) * (a (x, y).1 d * e✝ (x, y).2 e)) *
(starRingEnd R)
(if e = z then stinespringOp K (x✝, c) d
else if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c)) =
(∑ x,
∑ y,
if h : (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * e✝ (x, y).2 e)
else onbPart hK (x, y) h (b, c) * (a (x, y).1 d * e✝ (x, y).2 e)) *
(starRingEnd R) (if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c))e_f.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (∑ x,
∑ y,
if (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * e✝ (x, y).2 e)
else
if h : (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * e✝ (x, y).2 e)
else onbPart hK (x, y) h (b, c) * (a (x, y).1 d * e✝ (x, y).2 e)) *
(starRingEnd R)
(if e = z then stinespringOp K (x✝, c) d
else if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c)) =
(∑ x,
∑ y,
if h : (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * e✝ (x, y).2 e)
else onbPart hK (x, y) h (b, c) * (a (x, y).1 d * e✝ (x, y).2 e)) *
(starRingEnd R) (if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c))
congr e_f.e_f.e_f.e_a.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (fun x =>
∑ y,
if (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * e✝ (x, y).2 e)
else
if h : (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * e✝ (x, y).2 e)
else onbPart hK (x, y) h (b, c) * (a (x, y).1 d * e✝ (x, y).2 e)) =
fun x =>
∑ y,
if h : (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * e✝ (x, y).2 e)
else onbPart hK (x, y) h (b, c) * (a (x, y).1 d * e✝ (x, y).2 e)e_f.e_f.e_f.e_a.e_6 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (if e = z then stinespringOp K (x✝, c) d
else if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c)) =
if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c)
· e_f.e_f.e_f.e_a.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (fun x =>
∑ y,
if (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * e✝ (x, y).2 e)
else
if h : (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * e✝ (x, y).2 e)
else onbPart hK (x, y) h (b, c) * (a (x, y).1 d * e✝ (x, y).2 e)) =
fun x =>
∑ y,
if h : (x, y).2 = z then stinespringOp K (b, c) (x, y).1 * (a (x, y).1 d * e✝ (x, y).2 e)
else onbPart hK (x, y) h (b, c) * (a (x, y).1 d * e✝ (x, y).2 e) ext f e_f.e_f.e_f.e_a.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin rf:Fin m⊢ (∑ y,
if (f, y).2 = z then stinespringOp K (b, c) (f, y).1 * (a (f, y).1 d * e✝ (f, y).2 e)
else
if h : (f, y).2 = z then stinespringOp K (b, c) (f, y).1 * (a (f, y).1 d * e✝ (f, y).2 e)
else onbPart hK (f, y) h (b, c) * (a (f, y).1 d * e✝ (f, y).2 e)) =
∑ y,
if h : (f, y).2 = z then stinespringOp K (b, c) (f, y).1 * (a (f, y).1 d * e✝ (f, y).2 e)
else onbPart hK (f, y) h (b, c) * (a (f, y).1 d * e✝ (f, y).2 e)
congr e_f.e_f.e_f.e_a.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin rf:Fin m⊢ (fun y =>
if (f, y).2 = z then stinespringOp K (b, c) (f, y).1 * (a (f, y).1 d * e✝ (f, y).2 e)
else
if h : (f, y).2 = z then stinespringOp K (b, c) (f, y).1 * (a (f, y).1 d * e✝ (f, y).2 e)
else onbPart hK (f, y) h (b, c) * (a (f, y).1 d * e✝ (f, y).2 e)) =
fun y =>
if h : (f, y).2 = z then stinespringOp K (b, c) (f, y).1 * (a (f, y).1 d * e✝ (f, y).2 e)
else onbPart hK (f, y) h (b, c) * (a (f, y).1 d * e✝ (f, y).2 e)
ext g e_f.e_f.e_f.e_a.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin rf:Fin mg:Fin r⊢ (if (f, g).2 = z then stinespringOp K (b, c) (f, g).1 * (a (f, g).1 d * e✝ (f, g).2 e)
else
if h : (f, g).2 = z then stinespringOp K (b, c) (f, g).1 * (a (f, g).1 d * e✝ (f, g).2 e)
else onbPart hK (f, g) h (b, c) * (a (f, g).1 d * e✝ (f, g).2 e)) =
if h : (f, g).2 = z then stinespringOp K (b, c) (f, g).1 * (a (f, g).1 d * e✝ (f, g).2 e)
else onbPart hK (f, g) h (b, c) * (a (f, g).1 d * e✝ (f, g).2 e)
simp only [ite_eq_right_iff, left_eq_dite_iff, mul_eq_mul_right_iff, mul_eq_zero] e_f.e_f.e_f.e_a.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin rf:Fin mg:Fin r⊢ g = z → ∀ (h : ¬g = z), stinespringOp K (b, c) f = onbPart hK (f, g) ⋯ (b, c) ∨ a f d = 0 ∨ e✝ g e = 0
intro hg e_f.e_f.e_f.e_a.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin rf:Fin mg:Fin rhg:g = z⊢ ∀ (h : ¬g = z), stinespringOp K (b, c) f = onbPart hK (f, g) ⋯ (b, c) ∨ a f d = 0 ∨ e✝ g e = 0
subst g e_f.e_f.e_f.e_a.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin rf:Fin m⊢ ∀ (h : ¬z = z), stinespringOp K (b, c) f = onbPart hK (f, z) ⋯ (b, c) ∨ a f d = 0 ∨ e✝ z e = 0
intro h e_f.e_f.e_f.e_a.e_f.e_f R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin rf:Fin mh:¬z = z⊢ stinespringOp K (b, c) f = onbPart hK (f, z) ⋯ (b, c) ∨ a f d = 0 ∨ e✝ z e = 0
simp at h ⊢ All goals completed! 🐙
· e_f.e_f.e_f.e_a.e_6 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin r⊢ (if e = z then stinespringOp K (x✝, c) d
else if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c)) =
if h : e = z then stinespringOp K (x✝, c) d else onbPart hK (d, e) ⋯ (x✝, c) split_ifs with g₀ pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin rg₀:e = z⊢ stinespringOp K (x✝, c) d = stinespringOp K (x✝, c) dneg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin rg₀:¬e = z⊢ onbPart hK (d, e) ⋯ (x✝, c) = onbPart hK (d, e) ⋯ (x✝, c) <;> pos R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin rg₀:e = z⊢ stinespringOp K (x✝, c) d = stinespringOp K (x✝, c) dneg R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin re✝:Matrix (Fin r) (Fin r) Ra:Matrix (Fin m) (Fin m) Rb:Fin mx✝:Fin mc:Fin rd:Fin me:Fin rg₀:¬e = z⊢ onbPart hK (d, e) ⋯ (x✝, c) = onbPart hK (d, e) ⋯ (x✝, c) rfl All goals completed! 🐙Note we don't need any special properties of M, and we don't need K to be CPTP.
Uses Fin types because of the use of
Fin.sum_univ_succAbove in the proof.
lemma stinespringGeneralForm_works {R : Type*} [RCLike R] {m r : ℕ}
(K : Fin r → Matrix (Fin m) (Fin m) R) (z : Fin r)
(M : Matrix (Fin m × Fin r) (Fin m × Fin r) R) :
stinespringGeneralForm K z M = krausApply K := by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) R⊢ stinespringGeneralForm K z M = krausApply K
-- my 4.27 proof failed in 4.31 so this is Aristotle:
unfold stinespringGeneralForm krausApply dilation general_dilation stinespringOp tr₂ R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) R⊢ (have U := fun x y =>
if y.2 = z then (∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) x (y.1, 0) else M x y;
fun ρ i j => ∑ k, (U * kroneckerMap (fun x1 x2 => x1 * x2) ρ (single z z 1) * Uᴴ) (i, k) (j, k)) =
fun ρ => ∑ i, K i * ρ * (K i)ᴴ;
ext ρ i j R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin m⊢ ∑ k,
((fun x y =>
if y.2 = z then (∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) x (y.1, 0) else M x y) *
kroneckerMap (fun x1 x2 => x1 * x2) ρ (single z z 1) *
(fun x y =>
if y.2 = z then (∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) x (y.1, 0) else M x y)ᴴ)
(i, k) (j, k) =
(∑ i, K i * ρ * (K i)ᴴ) i j;
simp only [Fin.isValue, Matrix.sum_apply, kroneckerMap_apply, Matrix.mul_apply, ite_mul,
conjTranspose_apply, star_def] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin m⊢ ∑ x,
∑ x_1,
(∑ x_2,
if x_2.2 = z then (∑ x_3, K x_3 i x_2.1 * single x_3 0 1 x 0) * (ρ x_2.1 x_1.1 * single z z 1 x_2.2 x_1.2)
else M (i, x) x_2 * (ρ x_2.1 x_1.1 * single z z 1 x_2.2 x_1.2)) *
(starRingEnd R) (if x_1.2 = z then ∑ x_2, K x_2 j x_1.1 * single x_2 0 1 x 0 else M (j, x) x_1) =
∑ x, ∑ x_1, (∑ j, K x i j * ρ j x_1) * (starRingEnd R) (K x j x_1);
simp only [single, Fin.isValue, of_apply, and_true, mul_ite, mul_one, mul_zero,
Finset.sum_ite_eq', Finset.mem_univ, ↓reduceIte, Finset.sum_ite, not_and,
Finset.sum_const_zero, add_zero] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin m⊢ ∑ x,
∑ x_1,
(∑ x_2 ∈ {x | x.2 = z} with z = x_2.2 ∧ z = x_1.2, K x i x_2.1 * ρ x_2.1 x_1.1 +
∑ x_2 ∈ {x | ¬x.2 = z} with z = x_2.2 ∧ z = x_1.2, M (i, x) x_2 * ρ x_2.1 x_1.1) *
(starRingEnd R) (if x_1.2 = z then K x j x_1.1 else M (j, x) x_1) =
∑ x, ∑ x_1, (∑ j, K x i j * ρ j x_1) * (starRingEnd R) (K x j x_1);
refine Finset.sum_congr rfl fun x _ => ?_ R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin mx:Fin rx✝:x ∈ Finset.univ⊢ ∑ x_1,
(∑ x_2 ∈ {x | x.2 = z} with z = x_2.2 ∧ z = x_1.2, K x i x_2.1 * ρ x_2.1 x_1.1 +
∑ x_2 ∈ {x | ¬x.2 = z} with z = x_2.2 ∧ z = x_1.2, M (i, x) x_2 * ρ x_2.1 x_1.1) *
(starRingEnd R) (if x_1.2 = z then K x j x_1.1 else M (j, x) x_1) =
∑ x_1, (∑ j, K x i j * ρ j x_1) * (starRingEnd R) (K x j x_1)
rw [ ← Finset.sum_subset
(Finset.subset_univ (Finset.image (fun y : Fin m => ( y, z ) ) Finset.univ)) R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin mx:Fin rx✝:x ∈ Finset.univ⊢ ∑ x_1 ∈ Finset.image (fun y => (y, z)) Finset.univ,
(∑ x_2 ∈ {x | x.2 = z} with z = x_2.2 ∧ z = x_1.2, K x i x_2.1 * ρ x_2.1 x_1.1 +
∑ x_2 ∈ {x | ¬x.2 = z} with z = x_2.2 ∧ z = x_1.2, M (i, x) x_2 * ρ x_2.1 x_1.1) *
(starRingEnd R) (if x_1.2 = z then K x j x_1.1 else M (j, x) x_1) =
∑ x_1, (∑ j, K x i j * ρ j x_1) * (starRingEnd R) (K x j x_1)R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin mx:Fin rx✝:x ∈ Finset.univ⊢ ∀ x_1 ∈ Finset.univ,
x_1 ∉ Finset.image (fun y => (y, z)) Finset.univ →
(∑ x_2 ∈ {x | x.2 = z} with z = x_2.2 ∧ z = x_1.2, K x i x_2.1 * ρ x_2.1 x_1.1 +
∑ x_2 ∈ {x | ¬x.2 = z} with z = x_2.2 ∧ z = x_1.2, M (i, x) x_2 * ρ x_2.1 x_1.1) *
(starRingEnd R) (if x_1.2 = z then K x j x_1.1 else M (j, x) x_1) =
0 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin mx:Fin rx✝:x ∈ Finset.univ⊢ ∑ x_1 ∈ Finset.image (fun y => (y, z)) Finset.univ,
(∑ x_2 ∈ {x | x.2 = z} with z = x_2.2 ∧ z = x_1.2, K x i x_2.1 * ρ x_2.1 x_1.1 +
∑ x_2 ∈ {x | ¬x.2 = z} with z = x_2.2 ∧ z = x_1.2, M (i, x) x_2 * ρ x_2.1 x_1.1) *
(starRingEnd R) (if x_1.2 = z then K x j x_1.1 else M (j, x) x_1) =
∑ x_1, (∑ j, K x i j * ρ j x_1) * (starRingEnd R) (K x j x_1)R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin mx:Fin rx✝:x ∈ Finset.univ⊢ ∀ x_1 ∈ Finset.univ,
x_1 ∉ Finset.image (fun y => (y, z)) Finset.univ →
(∑ x_2 ∈ {x | x.2 = z} with z = x_2.2 ∧ z = x_1.2, K x i x_2.1 * ρ x_2.1 x_1.1 +
∑ x_2 ∈ {x | ¬x.2 = z} with z = x_2.2 ∧ z = x_1.2, M (i, x) x_2 * ρ x_2.1 x_1.1) *
(starRingEnd R) (if x_1.2 = z then K x j x_1.1 else M (j, x) x_1) =
0] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin mx:Fin rx✝:x ∈ Finset.univ⊢ ∑ x_1 ∈ Finset.image (fun y => (y, z)) Finset.univ,
(∑ x_2 ∈ {x | x.2 = z} with z = x_2.2 ∧ z = x_1.2, K x i x_2.1 * ρ x_2.1 x_1.1 +
∑ x_2 ∈ {x | ¬x.2 = z} with z = x_2.2 ∧ z = x_1.2, M (i, x) x_2 * ρ x_2.1 x_1.1) *
(starRingEnd R) (if x_1.2 = z then K x j x_1.1 else M (j, x) x_1) =
∑ x_1, (∑ j, K x i j * ρ j x_1) * (starRingEnd R) (K x j x_1)R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin mx:Fin rx✝:x ∈ Finset.univ⊢ ∀ x_1 ∈ Finset.univ,
x_1 ∉ Finset.image (fun y => (y, z)) Finset.univ →
(∑ x_2 ∈ {x | x.2 = z} with z = x_2.2 ∧ z = x_1.2, K x i x_2.1 * ρ x_2.1 x_1.1 +
∑ x_2 ∈ {x | ¬x.2 = z} with z = x_2.2 ∧ z = x_1.2, M (i, x) x_2 * ρ x_2.1 x_1.1) *
(starRingEnd R) (if x_1.2 = z then K x j x_1.1 else M (j, x) x_1) =
0
· R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin mx:Fin rx✝:x ∈ Finset.univ⊢ ∑ x_1 ∈ Finset.image (fun y => (y, z)) Finset.univ,
(∑ x_2 ∈ {x | x.2 = z} with z = x_2.2 ∧ z = x_1.2, K x i x_2.1 * ρ x_2.1 x_1.1 +
∑ x_2 ∈ {x | ¬x.2 = z} with z = x_2.2 ∧ z = x_1.2, M (i, x) x_2 * ρ x_2.1 x_1.1) *
(starRingEnd R) (if x_1.2 = z then K x j x_1.1 else M (j, x) x_1) =
∑ x_1, (∑ j, K x i j * ρ j x_1) * (starRingEnd R) (K x j x_1) rw [ Finset.sum_image R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin mx:Fin rx✝:x ∈ Finset.univ⊢ ∑ x_1,
(∑ x_2 ∈ {x | x.2 = z} with z = x_2.2 ∧ z = (x_1, z).2, K x i x_2.1 * ρ x_2.1 (x_1, z).1 +
∑ x_2 ∈ {x | ¬x.2 = z} with z = x_2.2 ∧ z = (x_1, z).2, M (i, x) x_2 * ρ x_2.1 (x_1, z).1) *
(starRingEnd R) (if (x_1, z).2 = z then K x j (x_1, z).1 else M (j, x) (x_1, z)) =
∑ x_1, (∑ j, K x i j * ρ j x_1) * (starRingEnd R) (K x j x_1)R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin mx:Fin rx✝:x ∈ Finset.univ⊢ Set.InjOn (fun y => (y, z)) ↑Finset.univ R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin mx:Fin rx✝:x ∈ Finset.univ⊢ ∑ x_1,
(∑ x_2 ∈ {x | x.2 = z} with z = x_2.2 ∧ z = (x_1, z).2, K x i x_2.1 * ρ x_2.1 (x_1, z).1 +
∑ x_2 ∈ {x | ¬x.2 = z} with z = x_2.2 ∧ z = (x_1, z).2, M (i, x) x_2 * ρ x_2.1 (x_1, z).1) *
(starRingEnd R) (if (x_1, z).2 = z then K x j (x_1, z).1 else M (j, x) (x_1, z)) =
∑ x_1, (∑ j, K x i j * ρ j x_1) * (starRingEnd R) (K x j x_1)R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin mx:Fin rx✝:x ∈ Finset.univ⊢ Set.InjOn (fun y => (y, z)) ↑Finset.univ ] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin mx:Fin rx✝:x ∈ Finset.univ⊢ ∑ x_1,
(∑ x_2 ∈ {x | x.2 = z} with z = x_2.2 ∧ z = (x_1, z).2, K x i x_2.1 * ρ x_2.1 (x_1, z).1 +
∑ x_2 ∈ {x | ¬x.2 = z} with z = x_2.2 ∧ z = (x_1, z).2, M (i, x) x_2 * ρ x_2.1 (x_1, z).1) *
(starRingEnd R) (if (x_1, z).2 = z then K x j (x_1, z).1 else M (j, x) (x_1, z)) =
∑ x_1, (∑ j, K x i j * ρ j x_1) * (starRingEnd R) (K x j x_1)R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin mx:Fin rx✝:x ∈ Finset.univ⊢ Set.InjOn (fun y => (y, z)) ↑Finset.univ
· R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin mx:Fin rx✝:x ∈ Finset.univ⊢ ∑ x_1,
(∑ x_2 ∈ {x | x.2 = z} with z = x_2.2 ∧ z = (x_1, z).2, K x i x_2.1 * ρ x_2.1 (x_1, z).1 +
∑ x_2 ∈ {x | ¬x.2 = z} with z = x_2.2 ∧ z = (x_1, z).2, M (i, x) x_2 * ρ x_2.1 (x_1, z).1) *
(starRingEnd R) (if (x_1, z).2 = z then K x j (x_1, z).1 else M (j, x) (x_1, z)) =
∑ x_1, (∑ j, K x i j * ρ j x_1) * (starRingEnd R) (K x j x_1) simp only [and_true, Finset.sum_filter, ite_not, ↓reduceIte] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin mx:Fin rx✝:x ∈ Finset.univ⊢ ∑ x_1,
((∑ a, if a.2 = z then if z = a.2 then K x i a.1 * ρ a.1 x_1 else 0 else 0) +
∑ x_2, if x_2.2 = z then 0 else if z = x_2.2 then M (i, x) x_2 * ρ x_2.1 x_1 else 0) *
(starRingEnd R) (K x j x_1) =
∑ x_1, (∑ j, K x i j * ρ j x_1) * (starRingEnd R) (K x j x_1);
refine Finset.sum_congr rfl fun y _ => ?_ R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin mx:Fin rx✝¹:x ∈ Finset.univy:Fin mx✝:y ∈ Finset.univ⊢ ((∑ a, if a.2 = z then if z = a.2 then K x i a.1 * ρ a.1 y else 0 else 0) +
∑ x_1, if x_1.2 = z then 0 else if z = x_1.2 then M (i, x) x_1 * ρ x_1.1 y else 0) *
(starRingEnd R) (K x j y) =
(∑ j, K x i j * ρ j y) * (starRingEnd R) (K x j y)
erw [ Finset.sum_product, R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin mx:Fin rx✝¹:x ∈ Finset.univy:Fin mx✝:y ∈ Finset.univ⊢ ((∑ x_1, ∑ y_1, if (x_1, y_1).2 = z then if z = (x_1, y_1).2 then K x i (x_1, y_1).1 * ρ (x_1, y_1).1 y else 0 else 0) +
∑ x_1, if x_1.2 = z then 0 else if z = x_1.2 then M (i, x) x_1 * ρ x_1.1 y else 0) *
(starRingEnd R) (K x j y) =
(∑ j, K x i j * ρ j y) * (starRingEnd R) (K x j y) Finset.sum_product R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin mx:Fin rx✝¹:x ∈ Finset.univy:Fin mx✝:y ∈ Finset.univ⊢ ((∑ x_1, ∑ y_1, if (x_1, y_1).2 = z then if z = (x_1, y_1).2 then K x i (x_1, y_1).1 * ρ (x_1, y_1).1 y else 0 else 0) +
∑ x_1,
∑ y_1, if (x_1, y_1).2 = z then 0 else if z = (x_1, y_1).2 then M (i, x) (x_1, y_1) * ρ (x_1, y_1).1 y else 0) *
(starRingEnd R) (K x j y) =
(∑ j, K x i j * ρ j y) * (starRingEnd R) (K x j y) ] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin mx:Fin rx✝¹:x ∈ Finset.univy:Fin mx✝:y ∈ Finset.univ⊢ ((∑ x_1, ∑ y_1, if (x_1, y_1).2 = z then if z = (x_1, y_1).2 then K x i (x_1, y_1).1 * ρ (x_1, y_1).1 y else 0 else 0) +
∑ x_1,
∑ y_1, if (x_1, y_1).2 = z then 0 else if z = (x_1, y_1).2 then M (i, x) (x_1, y_1) * ρ (x_1, y_1).1 y else 0) *
(starRingEnd R) (K x j y) =
(∑ j, K x i j * ρ j y) * (starRingEnd R) (K x j y)
simp [ Finset.sum_ite, Finset.filter_eq', Finset.filter_ne' ] All goals completed! 🐙;
· R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin mx:Fin rx✝:x ∈ Finset.univ⊢ Set.InjOn (fun y => (y, z)) ↑Finset.univ simp only [Finset.coe_univ, Set.injOn_univ] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin mx:Fin rx✝:x ∈ Finset.univ⊢ Function.Injective fun y => (y, z);
exact fun a b h => by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin mx:Fin rx✝:x ∈ Finset.univa:Fin mb:Fin mh:(fun y => (y, z)) a = (fun y => (y, z)) b⊢ a = b injection h All goals completed! 🐙;
· R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rz:Fin rM:Matrix (Fin m × Fin r) (Fin m × Fin r) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin mx:Fin rx✝:x ∈ Finset.univ⊢ ∀ x_1 ∈ Finset.univ,
x_1 ∉ Finset.image (fun y => (y, z)) Finset.univ →
(∑ x_2 ∈ {x | x.2 = z} with z = x_2.2 ∧ z = x_1.2, K x i x_2.1 * ρ x_2.1 x_1.1 +
∑ x_2 ∈ {x | ¬x.2 = z} with z = x_2.2 ∧ z = x_1.2, M (i, x) x_2 * ρ x_2.1 x_1.1) *
(starRingEnd R) (if x_1.2 = z then K x j x_1.1 else M (j, x) x_1) =
0 aesop All goals completed! 🐙Notice that unitarity is a side property, it is not why the Stinespring form works.
Here z is the coordinate used for the ancilla.
lemma stinespringUnitaryForm_works {R : Type*} [RCLike R] {m r : ℕ}
{K : Fin r → Matrix (Fin m) (Fin m) R}
(hK : ∑ i, (K i)ᴴ * K i = 1) (z : Fin r) :
stinespringUnitaryForm hK z = krausApply K := by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin r⊢ stinespringUnitaryForm hK z = krausApply K
rw [← stinespringGeneralForm_works K z (Ud hK z) R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin r⊢ stinespringUnitaryForm hK z = stinespringGeneralForm K z (Ud hK z) R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin r⊢ stinespringUnitaryForm hK z = stinespringGeneralForm K z (Ud hK z) ] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin r⊢ stinespringUnitaryForm hK z = stinespringGeneralForm K z (Ud hK z)
rw [unitaryForm_of_general R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin r⊢ stinespringUnitaryForm hK z = stinespringUnitaryForm hK z All goals completed! 🐙] All goals completed! 🐙
The "orthogonal" CPTP completion of a CPTNI map.
Vtilde is an alternative name for krausCompletion.
def krausCompletion {R : Type*} [RCLike R] {m r : ℕ}
(K : Fin r → Matrix (Fin m) (Fin m) R) :
Matrix (Fin m × Fin (r+1)) (Fin m) R := fun x => dite (x.2 < r)
(fun H => stinespringOp K ⟨x.1, ⟨x.2, H⟩⟩)
fun _ => (CFC.sqrt (1 - (stinespringOp K)ᴴ * (stinespringOp K)) : Matrix _ _ _) x.1
Entrywise formula for the Stinespring isometry: its ((x₁, x₂), y) entry is K x₂ x₁ y.
theorem stinespringOp_apply {R : Type*} [Ring R] {m r : Type*} [Fintype r] [DecidableEq r]
(K : r → Matrix m m R) (x : m × r) (y : m) :
stinespringOp K x y = K x.2 x.1 y := by R:Type u_1inst✝²:Ring Rm:Type u_2r:Type u_3inst✝¹:Fintype rinst✝:DecidableEq rK:r → Matrix m m Rx:m × ry:m⊢ stinespringOp K x y = K x.2 x.1 y
unfold stinespringOp R:Type u_1inst✝²:Ring Rm:Type u_2r:Type u_3inst✝¹:Fintype rinst✝:DecidableEq rK:r → Matrix m m Rx:m × ry:m⊢ (∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) x (y, 0) = K x.2 x.1 y
simp [Matrix.sum_apply, Matrix.kroneckerMap_apply, Matrix.single_apply] All goals completed! 🐙
The Gram matrix of the Stinespring isometry is ∑ i, (K i)ᴴ * K i.
theorem stinespringOp_gram {R : Type*} [RCLike R] {m r : ℕ}
(K : Fin r → Matrix (Fin m) (Fin m) R) :
(stinespringOp K)ᴴ * stinespringOp K = ∑ i, star (K i) * K i := by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) R⊢ (stinespringOp K)ᴴ * stinespringOp K = ∑ i, star (K i) * K i
ext a b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Ra:Fin mb:Fin m⊢ ((stinespringOp K)ᴴ * stinespringOp K) a b = (∑ i, star (K i) * K i) a b
rw [Matrix.mul_apply, R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Ra:Fin mb:Fin m⊢ ∑ j, (stinespringOp K)ᴴ a j * stinespringOp K j b = (∑ i, star (K i) * K i) a b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Ra:Fin mb:Fin m⊢ ∑ j, (stinespringOp K)ᴴ a j * stinespringOp K j b = ∑ c, (star (K c) * K c) a b Matrix.sum_apply R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Ra:Fin mb:Fin m⊢ ∑ j, (stinespringOp K)ᴴ a j * stinespringOp K j b = ∑ c, (star (K c) * K c) a b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Ra:Fin mb:Fin m⊢ ∑ j, (stinespringOp K)ᴴ a j * stinespringOp K j b = ∑ c, (star (K c) * K c) a b] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Ra:Fin mb:Fin m⊢ ∑ j, (stinespringOp K)ᴴ a j * stinespringOp K j b = ∑ c, (star (K c) * K c) a b
simp only [Matrix.conjTranspose_apply, stinespringOp_apply] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Ra:Fin mb:Fin m⊢ ∑ x, star (K x.2 x.1 a) * K x.2 x.1 b = ∑ c, (star (K c) * K c) a b
rw [← Finset.univ_product_univ, R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Ra:Fin mb:Fin m⊢ ∑ x ∈ Finset.univ ×ˢ Finset.univ, star (K x.2 x.1 a) * K x.2 x.1 b = ∑ c, (star (K c) * K c) a b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Ra:Fin mb:Fin m⊢ ∑ y, ∑ x, star (K (x, y).2 (x, y).1 a) * K (x, y).2 (x, y).1 b = ∑ c, (star (K c) * K c) a b Finset.sum_product, R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Ra:Fin mb:Fin m⊢ ∑ x, ∑ y, star (K (x, y).2 (x, y).1 a) * K (x, y).2 (x, y).1 b = ∑ c, (star (K c) * K c) a b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Ra:Fin mb:Fin m⊢ ∑ y, ∑ x, star (K (x, y).2 (x, y).1 a) * K (x, y).2 (x, y).1 b = ∑ c, (star (K c) * K c) a b Finset.sum_comm R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Ra:Fin mb:Fin m⊢ ∑ y, ∑ x, star (K (x, y).2 (x, y).1 a) * K (x, y).2 (x, y).1 b = ∑ c, (star (K c) * K c) a b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Ra:Fin mb:Fin m⊢ ∑ y, ∑ x, star (K (x, y).2 (x, y).1 a) * K (x, y).2 (x, y).1 b = ∑ c, (star (K c) * K c) a b] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Ra:Fin mb:Fin m⊢ ∑ y, ∑ x, star (K (x, y).2 (x, y).1 a) * K (x, y).2 (x, y).1 b = ∑ c, (star (K c) * K c) a b
apply Finset.sum_congr rfl R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Ra:Fin mb:Fin m⊢ ∀ x ∈ Finset.univ, ∑ x_1, star (K (x_1, x).2 (x_1, x).1 a) * K (x_1, x).2 (x_1, x).1 b = (star (K x) * K x) a b
intro i _ R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Ra:Fin mb:Fin mi:Fin ra✝:i ∈ Finset.univ⊢ ∑ x, star (K (x, i).2 (x, i).1 a) * K (x, i).2 (x, i).1 b = (star (K i) * K i) a b
rw [Matrix.mul_apply R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Ra:Fin mb:Fin mi:Fin ra✝:i ∈ Finset.univ⊢ ∑ x, star (K (x, i).2 (x, i).1 a) * K (x, i).2 (x, i).1 b = ∑ j, star (K i) a j * K i j b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Ra:Fin mb:Fin mi:Fin ra✝:i ∈ Finset.univ⊢ ∑ x, star (K (x, i).2 (x, i).1 a) * K (x, i).2 (x, i).1 b = ∑ j, star (K i) a j * K i j b] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Ra:Fin mb:Fin mi:Fin ra✝:i ∈ Finset.univ⊢ ∑ x, star (K (x, i).2 (x, i).1 a) * K (x, i).2 (x, i).1 b = ∑ j, star (K i) a j * K i j b
apply Finset.sum_congr rfl R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Ra:Fin mb:Fin mi:Fin ra✝:i ∈ Finset.univ⊢ ∀ x ∈ Finset.univ, star (K (x, i).2 (x, i).1 a) * K (x, i).2 (x, i).1 b = star (K i) a x * K i x b
intro x1 _ R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Ra:Fin mb:Fin mi:Fin ra✝¹:i ∈ Finset.univx1:Fin ma✝:x1 ∈ Finset.univ⊢ star (K (x1, i).2 (x1, i).1 a) * K (x1, i).2 (x1, i).1 b = star (K i) a x1 * K i x1 b
simp [Matrix.star_apply] All goals completed! 🐙
Mar 14, 2026 by Bjørn for 4.27
June 13, 2026 by Aristotle for 4.31 including
stinespringOp_gram and stinespringOp_apply.
lemma krausCompletion_isometry_of_TNI {R : Type*} [RCLike R] {m r : ℕ}
{K : Fin r → Matrix (Fin m) (Fin m) R}
(hK : ∑ i, star K i * K i ≤ 1) :
(krausCompletion K)ᴴ * krausCompletion K = 1 := by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
set S := stinespringOp K with hS R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp K⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
-- `Sᴴ * S = ∑ i, (K i)ᴴ * K i`, hence `1 - Sᴴ * S` is positive semidefinite.
have hgram : Sᴴ * S = ∑ i, star (K i) * K i := stinespringOp_gram K R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K i⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
have h0 : 0 ≤ 1 - Sᴴ * S := by rw [hgram R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K i⊢ 0 ≤ 1 - ∑ i, star (K i) * K i R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K i⊢ 0 ≤ 1 - ∑ i, star (K i) * K i R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * S⊢ (krausCompletion K)ᴴ * krausCompletion K = 1] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K i⊢ 0 ≤ 1 - ∑ i, star (K i) * K i R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * S⊢ (krausCompletion K)ᴴ * krausCompletion K = 1; exact sub_nonneg.mpr hK R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * S⊢ (krausCompletion K)ᴴ * krausCompletion K = 1 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * S⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
-- `W` is the (selfadjoint) square root of `1 - Sᴴ * S`, completing the isometry.
set W := CFC.sqrt (1 - Sᴴ * S) with hW R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
have hWsa : Wᴴ = W := IsSelfAdjoint.of_nonneg (CFC.sqrt_nonneg _) R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
have hWW : Wᴴ * W = 1 - Sᴴ * S := by
rw [hWsa R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = W⊢ W * W = 1 - Sᴴ * S R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = W⊢ W * W = 1 - Sᴴ * S R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * S⊢ (krausCompletion K)ᴴ * krausCompletion K = 1] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = W⊢ W * W = 1 - Sᴴ * S R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * S⊢ (krausCompletion K)ᴴ * krausCompletion K = 1; exact CFC.sqrt_mul_sqrt_self _ h0 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * S⊢ (krausCompletion K)ᴴ * krausCompletion K = 1 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * S⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
-- The first `r` blocks of the completion are the blocks of `S`.
have hcast : ∀ (x : Fin m) (i : Fin r) (c : Fin m),
krausCompletion K (x, i.castSucc) c = S (x, i) c := by
intro x i c R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Sx:Fin mi:Fin rc:Fin m⊢ krausCompletion K (x, i.castSucc) c = S (x, i) c R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) c⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
rw [hS R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Sx:Fin mi:Fin rc:Fin m⊢ krausCompletion K (x, i.castSucc) c = stinespringOp K (x, i) c R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Sx:Fin mi:Fin rc:Fin m⊢ krausCompletion K (x, i.castSucc) c = stinespringOp K (x, i) c R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) c⊢ (krausCompletion K)ᴴ * krausCompletion K = 1] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Sx:Fin mi:Fin rc:Fin m⊢ krausCompletion K (x, i.castSucc) c = stinespringOp K (x, i) c R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) c⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
unfold krausCompletion R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Sx:Fin mi:Fin rc:Fin m⊢ (if H : ↑(x, i.castSucc).2 < r then stinespringOp K ((x, i.castSucc).1, ⟨↑(x, i.castSucc).2, H⟩)
else CFC.sqrt (1 - (stinespringOp K)ᴴ * stinespringOp K) (x, i.castSucc).1)
c =
stinespringOp K (x, i) c R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) c⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
rw [dif_pos (by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Sx:Fin mi:Fin rc:Fin m⊢ ↑(x, i.castSucc).2 < r R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Sx:Fin mi:Fin rc:Fin m⊢ stinespringOp K ((x, i.castSucc).1, ⟨↑(x, i.castSucc).2, ⋯⟩) c = stinespringOp K (x, i) c R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) c⊢ (krausCompletion K)ᴴ * krausCompletion K = 1 exact i.isLt All goals completed! 🐙 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Sx:Fin mi:Fin rc:Fin m⊢ stinespringOp K ((x, i.castSucc).1, ⟨↑(x, i.castSucc).2, ⋯⟩) c = stinespringOp K (x, i) c R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) c⊢ (krausCompletion K)ᴴ * krausCompletion K = 1)] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Sx:Fin mi:Fin rc:Fin m⊢ stinespringOp K ((x, i.castSucc).1, ⟨↑(x, i.castSucc).2, ⋯⟩) c = stinespringOp K (x, i) c R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) c⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
congr 1 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) c⊢ (krausCompletion K)ᴴ * krausCompletion K = 1 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) c⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
-- The last block of the completion is `W`.
have hlast : ∀ (x : Fin m) (c : Fin m),
krausCompletion K (x, Fin.last r) c = W x c := by
intro x c R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) cx:Fin mc:Fin m⊢ krausCompletion K (x, Fin.last r) c = W x c R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x c⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
rw [hW, R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) cx:Fin mc:Fin m⊢ krausCompletion K (x, Fin.last r) c = CFC.sqrt (1 - Sᴴ * S) x c R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) cx:Fin mc:Fin m⊢ krausCompletion K (x, Fin.last r) c = CFC.sqrt (1 - (stinespringOp K)ᴴ * stinespringOp K) x c R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x c⊢ (krausCompletion K)ᴴ * krausCompletion K = 1 hS R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) cx:Fin mc:Fin m⊢ krausCompletion K (x, Fin.last r) c = CFC.sqrt (1 - (stinespringOp K)ᴴ * stinespringOp K) x c R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) cx:Fin mc:Fin m⊢ krausCompletion K (x, Fin.last r) c = CFC.sqrt (1 - (stinespringOp K)ᴴ * stinespringOp K) x c R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x c⊢ (krausCompletion K)ᴴ * krausCompletion K = 1] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) cx:Fin mc:Fin m⊢ krausCompletion K (x, Fin.last r) c = CFC.sqrt (1 - (stinespringOp K)ᴴ * stinespringOp K) x c R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x c⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
unfold krausCompletion R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) cx:Fin mc:Fin m⊢ (if H : ↑(x, Fin.last r).2 < r then stinespringOp K ((x, Fin.last r).1, ⟨↑(x, Fin.last r).2, H⟩)
else CFC.sqrt (1 - (stinespringOp K)ᴴ * stinespringOp K) (x, Fin.last r).1)
c =
CFC.sqrt (1 - (stinespringOp K)ᴴ * stinespringOp K) x c R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x c⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
rw [dif_neg (by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) cx:Fin mc:Fin m⊢ ¬↑(x, Fin.last r).2 < r R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x c⊢ (krausCompletion K)ᴴ * krausCompletion K = 1 simp All goals completed! 🐙 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x c⊢ (krausCompletion K)ᴴ * krausCompletion K = 1)] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x c⊢ (krausCompletion K)ᴴ * krausCompletion K = 1 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x c⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
-- `Cᴴ * C = Sᴴ * S + Wᴴ * W` by splitting the row sum into the first `r` blocks and the last.
have key : (krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W := by
ext a b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin m⊢ ((krausCompletion K)ᴴ * krausCompletion K) a b = (Sᴴ * S + Wᴴ * W) a b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
rw [Matrix.mul_apply, R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin m⊢ ∑ j, (krausCompletion K)ᴴ a j * krausCompletion K j b = (Sᴴ * S + Wᴴ * W) a b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin m⊢ ∑ j, (krausCompletion K)ᴴ a j * krausCompletion K j b = ∑ j, Sᴴ a j * S j b + ∑ j, Wᴴ a j * W j b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1 Matrix.add_apply, R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin m⊢ ∑ j, (krausCompletion K)ᴴ a j * krausCompletion K j b = (Sᴴ * S) a b + (Wᴴ * W) a b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin m⊢ ∑ j, (krausCompletion K)ᴴ a j * krausCompletion K j b = ∑ j, Sᴴ a j * S j b + ∑ j, Wᴴ a j * W j b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1 Matrix.mul_apply, R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin m⊢ ∑ j, (krausCompletion K)ᴴ a j * krausCompletion K j b = ∑ j, Sᴴ a j * S j b + (Wᴴ * W) a b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin m⊢ ∑ j, (krausCompletion K)ᴴ a j * krausCompletion K j b = ∑ j, Sᴴ a j * S j b + ∑ j, Wᴴ a j * W j b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1 Matrix.mul_apply R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin m⊢ ∑ j, (krausCompletion K)ᴴ a j * krausCompletion K j b = ∑ j, Sᴴ a j * S j b + ∑ j, Wᴴ a j * W j b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin m⊢ ∑ j, (krausCompletion K)ᴴ a j * krausCompletion K j b = ∑ j, Sᴴ a j * S j b + ∑ j, Wᴴ a j * W j b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin m⊢ ∑ j, (krausCompletion K)ᴴ a j * krausCompletion K j b = ∑ j, Sᴴ a j * S j b + ∑ j, Wᴴ a j * W j b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
simp only [Matrix.conjTranspose_apply] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin m⊢ ∑ x, star (krausCompletion K x a) * krausCompletion K x b = ∑ x, star (S x a) * S x b + ∑ x, star (W x a) * W x b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
have hSsum : (∑ p : Fin m × Fin r, star (S p a) * S p b)
= ∑ x, ∑ i, star (S (x, i) a) * S (x, i) b := by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1⊢ (krausCompletion K)ᴴ * krausCompletion K = 1 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) b⊢ ∑ x, star (krausCompletion K x a) * krausCompletion K x b = ∑ x, star (S x a) * S x b + ∑ x, star (W x a) * W x b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
rw [← Finset.univ_product_univ, R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin m⊢ ∑ p ∈ Finset.univ ×ˢ Finset.univ, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) b⊢ ∑ x, star (krausCompletion K x a) * krausCompletion K x b = ∑ x, star (S x a) * S x b + ∑ x, star (W x a) * W x b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1 Finset.sum_product R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin m⊢ ∑ x, ∑ y, star (S (x, y) a) * S (x, y) b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) b⊢ ∑ x, star (krausCompletion K x a) * krausCompletion K x b = ∑ x, star (S x a) * S x b + ∑ x, star (W x a) * W x b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) b⊢ ∑ x, star (krausCompletion K x a) * krausCompletion K x b = ∑ x, star (S x a) * S x b + ∑ x, star (W x a) * W x b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) b⊢ ∑ x, star (krausCompletion K x a) * krausCompletion K x b = ∑ x, star (S x a) * S x b + ∑ x, star (W x a) * W x b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
rw [← Finset.univ_product_univ, R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) b⊢ ∑ x ∈ Finset.univ ×ˢ Finset.univ, star (krausCompletion K x a) * krausCompletion K x b =
∑ x, star (S x a) * S x b + ∑ x, star (W x a) * W x b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) b⊢ ∑ x, ∑ y, star (krausCompletion K (x, y) a) * krausCompletion K (x, y) b =
∑ x, star (S x a) * S x b + ∑ x, star (W x a) * W x b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1 Finset.sum_product R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) b⊢ ∑ x, ∑ y, star (krausCompletion K (x, y) a) * krausCompletion K (x, y) b =
∑ x, star (S x a) * S x b + ∑ x, star (W x a) * W x b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) b⊢ ∑ x, ∑ y, star (krausCompletion K (x, y) a) * krausCompletion K (x, y) b =
∑ x, star (S x a) * S x b + ∑ x, star (W x a) * W x b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) b⊢ ∑ x, ∑ y, star (krausCompletion K (x, y) a) * krausCompletion K (x, y) b =
∑ x, star (S x a) * S x b + ∑ x, star (W x a) * W x b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
simp only [Fin.sum_univ_castSucc] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) b⊢ ∑ x,
(∑ i, star (krausCompletion K (x, i.castSucc) a) * krausCompletion K (x, i.castSucc) b +
star (krausCompletion K (x, Fin.last r) a) * krausCompletion K (x, Fin.last r) b) =
∑ x, star (S x a) * S x b + ∑ x, star (W x a) * W x b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
rw [Finset.sum_add_distrib, R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) b⊢ ∑ x, ∑ i, star (krausCompletion K (x, i.castSucc) a) * krausCompletion K (x, i.castSucc) b +
∑ x, star (krausCompletion K (x, Fin.last r) a) * krausCompletion K (x, Fin.last r) b =
∑ x, star (S x a) * S x b + ∑ x, star (W x a) * W x b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) b⊢ ∑ x, ∑ i, star (krausCompletion K (x, i.castSucc) a) * krausCompletion K (x, i.castSucc) b +
∑ x, star (krausCompletion K (x, Fin.last r) a) * krausCompletion K (x, Fin.last r) b =
∑ x, ∑ i, star (S (x, i) a) * S (x, i) b + ∑ x, star (W x a) * W x b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1 hSsum R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) b⊢ ∑ x, ∑ i, star (krausCompletion K (x, i.castSucc) a) * krausCompletion K (x, i.castSucc) b +
∑ x, star (krausCompletion K (x, Fin.last r) a) * krausCompletion K (x, Fin.last r) b =
∑ x, ∑ i, star (S (x, i) a) * S (x, i) b + ∑ x, star (W x a) * W x b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) b⊢ ∑ x, ∑ i, star (krausCompletion K (x, i.castSucc) a) * krausCompletion K (x, i.castSucc) b +
∑ x, star (krausCompletion K (x, Fin.last r) a) * krausCompletion K (x, Fin.last r) b =
∑ x, ∑ i, star (S (x, i) a) * S (x, i) b + ∑ x, star (W x a) * W x b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) b⊢ ∑ x, ∑ i, star (krausCompletion K (x, i.castSucc) a) * krausCompletion K (x, i.castSucc) b +
∑ x, star (krausCompletion K (x, Fin.last r) a) * krausCompletion K (x, Fin.last r) b =
∑ x, ∑ i, star (S (x, i) a) * S (x, i) b + ∑ x, star (W x a) * W x b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
congr 1 e_a R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) b⊢ ∑ x, ∑ i, star (krausCompletion K (x, i.castSucc) a) * krausCompletion K (x, i.castSucc) b =
∑ x, ∑ i, star (S (x, i) a) * S (x, i) be_a R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) b⊢ ∑ x, star (krausCompletion K (x, Fin.last r) a) * krausCompletion K (x, Fin.last r) b = ∑ x, star (W x a) * W x b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
· e_a R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) b⊢ ∑ x, ∑ i, star (krausCompletion K (x, i.castSucc) a) * krausCompletion K (x, i.castSucc) b =
∑ x, ∑ i, star (S (x, i) a) * S (x, i) b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1 apply Finset.sum_congr rfl e_a R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) b⊢ ∀ x ∈ Finset.univ,
∑ i, star (krausCompletion K (x, i.castSucc) a) * krausCompletion K (x, i.castSucc) b =
∑ i, star (S (x, i) a) * S (x, i) b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1; intro x _ e_a R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) bx:Fin ma✝:x ∈ Finset.univ⊢ ∑ i, star (krausCompletion K (x, i.castSucc) a) * krausCompletion K (x, i.castSucc) b =
∑ i, star (S (x, i) a) * S (x, i) b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
apply Finset.sum_congr rfl e_a R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) bx:Fin ma✝:x ∈ Finset.univ⊢ ∀ x_1 ∈ Finset.univ,
star (krausCompletion K (x, x_1.castSucc) a) * krausCompletion K (x, x_1.castSucc) b =
star (S (x, x_1) a) * S (x, x_1) b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1; intro i _ e_a R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) bx:Fin ma✝¹:x ∈ Finset.univi:Fin ra✝:i ∈ Finset.univ⊢ star (krausCompletion K (x, i.castSucc) a) * krausCompletion K (x, i.castSucc) b = star (S (x, i) a) * S (x, i) b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
rw [hcast x i a, e_a R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) bx:Fin ma✝¹:x ∈ Finset.univi:Fin ra✝:i ∈ Finset.univ⊢ star (S (x, i) a) * krausCompletion K (x, i.castSucc) b = star (S (x, i) a) * S (x, i) b All goals completed! 🐙 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1 hcast x i b e_a R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) bx:Fin ma✝¹:x ∈ Finset.univi:Fin ra✝:i ∈ Finset.univ⊢ star (S (x, i) a) * S (x, i) b = star (S (x, i) a) * S (x, i) b All goals completed! 🐙 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1] All goals completed! 🐙 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
· e_a R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) b⊢ ∑ x, star (krausCompletion K (x, Fin.last r) a) * krausCompletion K (x, Fin.last r) b = ∑ x, star (W x a) * W x b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1 apply Finset.sum_congr rfl e_a R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) b⊢ ∀ x ∈ Finset.univ,
star (krausCompletion K (x, Fin.last r) a) * krausCompletion K (x, Fin.last r) b = star (W x a) * W x b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1; intro x _ e_a R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) bx:Fin ma✝:x ∈ Finset.univ⊢ star (krausCompletion K (x, Fin.last r) a) * krausCompletion K (x, Fin.last r) b = star (W x a) * W x b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
rw [hlast x a, e_a R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) bx:Fin ma✝:x ∈ Finset.univ⊢ star (W x a) * krausCompletion K (x, Fin.last r) b = star (W x a) * W x b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1 hlast x b e_a R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ca:Fin mb:Fin mhSsum:∑ p, star (S p a) * S p b = ∑ x, ∑ i, star (S (x, i) a) * S (x, i) bx:Fin ma✝:x ∈ Finset.univ⊢ star (W x a) * W x b = star (W x a) * W x b R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ (krausCompletion K)ᴴ * krausCompletion K = 1
-- Finally `Sᴴ * S + Wᴴ * W = Sᴴ * S + (1 - Sᴴ * S) = 1`.
rw [key, R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ Sᴴ * S + Wᴴ * W = 1 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ Sᴴ * S + (1 - Sᴴ * S) = 1 hWW R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ Sᴴ * S + (1 - Sᴴ * S) = 1 R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ Sᴴ * S + (1 - Sᴴ * S) = 1] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, star K i * K i ≤ 1S:Matrix (Fin m × Fin r) (Fin m) R := stinespringOp KhS:S = stinespringOp Khgram:Sᴴ * S = ∑ i, star (K i) * K ih0:0 ≤ 1 - Sᴴ * SW:Matrix (Fin m) (Fin m) R := CFC.sqrt (1 - Sᴴ * S)hW:W = CFC.sqrt (1 - Sᴴ * S)hWsa:Wᴴ = WhWW:Wᴴ * W = 1 - Sᴴ * Shcast:∀ (x : Fin m) (i : Fin r) (c : Fin m), krausCompletion K (x, i.castSucc) c = S (x, i) chlast:∀ (x c : Fin m), krausCompletion K (x, Fin.last r) c = W x ckey:(krausCompletion K)ᴴ * krausCompletion K = Sᴴ * S + Wᴴ * W⊢ Sᴴ * S + (1 - Sᴴ * S) = 1
abel All goals completed! 🐙A unital operator.
def unital {R : Type*} [RCLike R] {m r : ℕ}
(K : Fin r → Matrix (Fin m) (Fin m) R) := ∑ i, K i * star (K i) = 1A subunital operator.
def subunital {R : Type*} [RCLike R] {m r : ℕ}
(K : Fin r → Matrix (Fin m) (Fin m) R) := ∑ i, K i * star (K i) ≤ 1
The identity Tr_B (A ⨂ B) = Tr(B) · A
lemma partialTrace_tensor {R : Type*} [RCLike R] {m n : ℕ}
(A : Matrix (Fin m) (Fin m) R) (B : Matrix (Fin n) (Fin n) R) :
tr₂ (A ⊗ₖ B) = (trace B) • A := by R:Type u_1inst✝:RCLike Rm:ℕn:ℕA:Matrix (Fin m) (Fin m) RB:Matrix (Fin n) (Fin n) R⊢ tr₂ (kroneckerMap (fun x1 x2 => x1 * x2) A B) = B.trace • A
unfold tr₂ trace kroneckerMap R:Type u_1inst✝:RCLike Rm:ℕn:ℕA:Matrix (Fin m) (Fin m) RB:Matrix (Fin n) (Fin n) R⊢ (fun i j => ∑ k, of (fun i j => (fun x1 x2 => x1 * x2) (A i.1 j.1) (B i.2 j.2)) (i, k) (j, k)) = (∑ i, B.diag i) • A
simp only [of_apply, diag_apply] R:Type u_1inst✝:RCLike Rm:ℕn:ℕA:Matrix (Fin m) (Fin m) RB:Matrix (Fin n) (Fin n) R⊢ (fun i j => ∑ x, A i j * B x x) = (∑ x, B x x) • A
ext i j R:Type u_1inst✝:RCLike Rm:ℕn:ℕA:Matrix (Fin m) (Fin m) RB:Matrix (Fin n) (Fin n) Ri:Fin mj:Fin m⊢ ∑ x, A i j * B x x = ((∑ x, B x x) • A) i j
simp only [Matrix.smul_apply, smul_eq_mul] R:Type u_1inst✝:RCLike Rm:ℕn:ℕA:Matrix (Fin m) (Fin m) RB:Matrix (Fin n) (Fin n) Ri:Fin mj:Fin m⊢ ∑ x, A i j * B x x = (∑ x, B x x) * A i j
have := @Finset.sum_mul (a := A i j) (ι := Fin n)
(s := Finset.univ) (f := fun k => B k k) _ _ R:Type u_1inst✝:RCLike Rm:ℕn:ℕA:Matrix (Fin m) (Fin m) RB:Matrix (Fin n) (Fin n) Ri:Fin mj:Fin mthis:(∑ i, B i i) * A i j = ∑ i_1, B i_1 i_1 * A i j⊢ ∑ x, A i j * B x x = (∑ x, B x x) * A i j
rw [this R:Type u_1inst✝:RCLike Rm:ℕn:ℕA:Matrix (Fin m) (Fin m) RB:Matrix (Fin n) (Fin n) Ri:Fin mj:Fin mthis:(∑ i, B i i) * A i j = ∑ i_1, B i_1 i_1 * A i j⊢ ∑ x, A i j * B x x = ∑ i_1, B i_1 i_1 * A i j R:Type u_1inst✝:RCLike Rm:ℕn:ℕA:Matrix (Fin m) (Fin m) RB:Matrix (Fin n) (Fin n) Ri:Fin mj:Fin mthis:(∑ i, B i i) * A i j = ∑ i_1, B i_1 i_1 * A i j⊢ ∑ x, A i j * B x x = ∑ i_1, B i_1 i_1 * A i j] R:Type u_1inst✝:RCLike Rm:ℕn:ℕA:Matrix (Fin m) (Fin m) RB:Matrix (Fin n) (Fin n) Ri:Fin mj:Fin mthis:(∑ i, B i i) * A i j = ∑ i_1, B i_1 i_1 * A i j⊢ ∑ x, A i j * B x x = ∑ i_1, B i_1 i_1 * A i j
simp_rw [ R:Type u_1inst✝:RCLike Rm:ℕn:ℕA:Matrix (Fin m) (Fin m) RB:Matrix (Fin n) (Fin n) Ri:Fin mj:Fin mthis:(∑ i, B i i) * A i j = ∑ i_1, B i_1 i_1 * A i j⊢ ∑ x, A i j * B x x = ∑ i_1, B i_1 i_1 * A i jmul_comm All goals completed! 🐙]A unitary dilation view of the application of a Kraus operator.
lemma krausApply_of_tensor {R : Type*} [RCLike R] {m r : ℕ}
{K : Fin r → Matrix (Fin m) (Fin m) R}
(hK : ∑ i, (K i)ᴴ * K i = 1) (z : Fin r)
(ρ α : Matrix (Fin m) (Fin m) R) (β : Matrix (Fin r) (Fin r) R)
(hβ : β.trace = 1) (h : (Ud hK z) * (ρ ⊗ₖ (single z z 1)) * (Ud hK z)ᴴ = α ⊗ₖ β) :
krausApply K ρ = α := by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rρ:Matrix (Fin m) (Fin m) Rα:Matrix (Fin m) (Fin m) Rβ:Matrix (Fin r) (Fin r) Rhβ:β.trace = 1h:Ud hK z * kroneckerMap (fun x1 x2 => x1 * x2) ρ (single z z 1) * (Ud hK z)ᴴ = kroneckerMap (fun x1 x2 => x1 * x2) α β⊢ krausApply K ρ = α
rw [← stinespringUnitaryForm_works hK R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rρ:Matrix (Fin m) (Fin m) Rα:Matrix (Fin m) (Fin m) Rβ:Matrix (Fin r) (Fin r) Rhβ:β.trace = 1h:Ud hK z * kroneckerMap (fun x1 x2 => x1 * x2) ρ (single z z 1) * (Ud hK z)ᴴ = kroneckerMap (fun x1 x2 => x1 * x2) α β⊢ stinespringUnitaryForm hK ?m.107 ρ = αR:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rρ:Matrix (Fin m) (Fin m) Rα:Matrix (Fin m) (Fin m) Rβ:Matrix (Fin r) (Fin r) Rhβ:β.trace = 1h:Ud hK z * kroneckerMap (fun x1 x2 => x1 * x2) ρ (single z z 1) * (Ud hK z)ᴴ = kroneckerMap (fun x1 x2 => x1 * x2) α β⊢ Fin r R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rρ:Matrix (Fin m) (Fin m) Rα:Matrix (Fin m) (Fin m) Rβ:Matrix (Fin r) (Fin r) Rhβ:β.trace = 1h:Ud hK z * kroneckerMap (fun x1 x2 => x1 * x2) ρ (single z z 1) * (Ud hK z)ᴴ = kroneckerMap (fun x1 x2 => x1 * x2) α β⊢ stinespringUnitaryForm hK ?m.107 ρ = αR:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rρ:Matrix (Fin m) (Fin m) Rα:Matrix (Fin m) (Fin m) Rβ:Matrix (Fin r) (Fin r) Rhβ:β.trace = 1h:Ud hK z * kroneckerMap (fun x1 x2 => x1 * x2) ρ (single z z 1) * (Ud hK z)ᴴ = kroneckerMap (fun x1 x2 => x1 * x2) α β⊢ Fin r] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rρ:Matrix (Fin m) (Fin m) Rα:Matrix (Fin m) (Fin m) Rβ:Matrix (Fin r) (Fin r) Rhβ:β.trace = 1h:Ud hK z * kroneckerMap (fun x1 x2 => x1 * x2) ρ (single z z 1) * (Ud hK z)ᴴ = kroneckerMap (fun x1 x2 => x1 * x2) α β⊢ stinespringUnitaryForm hK ?m.107 ρ = αR:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rρ:Matrix (Fin m) (Fin m) Rα:Matrix (Fin m) (Fin m) Rβ:Matrix (Fin r) (Fin r) Rhβ:β.trace = 1h:Ud hK z * kroneckerMap (fun x1 x2 => x1 * x2) ρ (single z z 1) * (Ud hK z)ᴴ = kroneckerMap (fun x1 x2 => x1 * x2) α β⊢ Fin r
· R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rρ:Matrix (Fin m) (Fin m) Rα:Matrix (Fin m) (Fin m) Rβ:Matrix (Fin r) (Fin r) Rhβ:β.trace = 1h:Ud hK z * kroneckerMap (fun x1 x2 => x1 * x2) ρ (single z z 1) * (Ud hK z)ᴴ = kroneckerMap (fun x1 x2 => x1 * x2) α β⊢ stinespringUnitaryForm hK ?m.107 ρ = α unfold stinespringUnitaryForm R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rρ:Matrix (Fin m) (Fin m) Rα:Matrix (Fin m) (Fin m) Rβ:Matrix (Fin r) (Fin r) Rhβ:β.trace = 1h:Ud hK z * kroneckerMap (fun x1 x2 => x1 * x2) ρ (single z z 1) * (Ud hK z)ᴴ = kroneckerMap (fun x1 x2 => x1 * x2) α β⊢ (have U := Ud hK ?m.107;
tr₂ (U * kroneckerMap (fun x1 x2 => x1 * x2) ρ (single ?m.107 ?m.107 1) * Uᴴ)) =
α
simp only R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rρ:Matrix (Fin m) (Fin m) Rα:Matrix (Fin m) (Fin m) Rβ:Matrix (Fin r) (Fin r) Rhβ:β.trace = 1h:Ud hK z * kroneckerMap (fun x1 x2 => x1 * x2) ρ (single z z 1) * (Ud hK z)ᴴ = kroneckerMap (fun x1 x2 => x1 * x2) α β⊢ tr₂ (Ud hK ?m.107 * kroneckerMap (fun x1 x2 => x1 * x2) ρ (single ?m.107 ?m.107 1) * (Ud hK ?m.107)ᴴ) = α
rw [h R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rρ:Matrix (Fin m) (Fin m) Rα:Matrix (Fin m) (Fin m) Rβ:Matrix (Fin r) (Fin r) Rhβ:β.trace = 1h:Ud hK z * kroneckerMap (fun x1 x2 => x1 * x2) ρ (single z z 1) * (Ud hK z)ᴴ = kroneckerMap (fun x1 x2 => x1 * x2) α β⊢ tr₂ (kroneckerMap (fun x1 x2 => x1 * x2) α β) = α R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rρ:Matrix (Fin m) (Fin m) Rα:Matrix (Fin m) (Fin m) Rβ:Matrix (Fin r) (Fin r) Rhβ:β.trace = 1h:Ud hK z * kroneckerMap (fun x1 x2 => x1 * x2) ρ (single z z 1) * (Ud hK z)ᴴ = kroneckerMap (fun x1 x2 => x1 * x2) α β⊢ tr₂ (kroneckerMap (fun x1 x2 => x1 * x2) α β) = α] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rρ:Matrix (Fin m) (Fin m) Rα:Matrix (Fin m) (Fin m) Rβ:Matrix (Fin r) (Fin r) Rhβ:β.trace = 1h:Ud hK z * kroneckerMap (fun x1 x2 => x1 * x2) ρ (single z z 1) * (Ud hK z)ᴴ = kroneckerMap (fun x1 x2 => x1 * x2) α β⊢ tr₂ (kroneckerMap (fun x1 x2 => x1 * x2) α β) = α
rw [partialTrace_tensor R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rρ:Matrix (Fin m) (Fin m) Rα:Matrix (Fin m) (Fin m) Rβ:Matrix (Fin r) (Fin r) Rhβ:β.trace = 1h:Ud hK z * kroneckerMap (fun x1 x2 => x1 * x2) ρ (single z z 1) * (Ud hK z)ᴴ = kroneckerMap (fun x1 x2 => x1 * x2) α β⊢ β.trace • α = α R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rρ:Matrix (Fin m) (Fin m) Rα:Matrix (Fin m) (Fin m) Rβ:Matrix (Fin r) (Fin r) Rhβ:β.trace = 1h:Ud hK z * kroneckerMap (fun x1 x2 => x1 * x2) ρ (single z z 1) * (Ud hK z)ᴴ = kroneckerMap (fun x1 x2 => x1 * x2) α β⊢ β.trace • α = α] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rρ:Matrix (Fin m) (Fin m) Rα:Matrix (Fin m) (Fin m) Rβ:Matrix (Fin r) (Fin r) Rhβ:β.trace = 1h:Ud hK z * kroneckerMap (fun x1 x2 => x1 * x2) ρ (single z z 1) * (Ud hK z)ᴴ = kroneckerMap (fun x1 x2 => x1 * x2) α β⊢ β.trace • α = α
rw [hβ R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rρ:Matrix (Fin m) (Fin m) Rα:Matrix (Fin m) (Fin m) Rβ:Matrix (Fin r) (Fin r) Rhβ:β.trace = 1h:Ud hK z * kroneckerMap (fun x1 x2 => x1 * x2) ρ (single z z 1) * (Ud hK z)ᴴ = kroneckerMap (fun x1 x2 => x1 * x2) α β⊢ 1 • α = α R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rρ:Matrix (Fin m) (Fin m) Rα:Matrix (Fin m) (Fin m) Rβ:Matrix (Fin r) (Fin r) Rhβ:β.trace = 1h:Ud hK z * kroneckerMap (fun x1 x2 => x1 * x2) ρ (single z z 1) * (Ud hK z)ᴴ = kroneckerMap (fun x1 x2 => x1 * x2) α β⊢ 1 • α = α] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) RhK:∑ i, (K i)ᴴ * K i = 1z:Fin rρ:Matrix (Fin m) (Fin m) Rα:Matrix (Fin m) (Fin m) Rβ:Matrix (Fin r) (Fin r) Rhβ:β.trace = 1h:Ud hK z * kroneckerMap (fun x1 x2 => x1 * x2) ρ (single z z 1) * (Ud hK z)ᴴ = kroneckerMap (fun x1 x2 => x1 * x2) α β⊢ 1 • α = α
simp All goals completed! 🐙Trace of partial trace equals trace.
lemma trace_tr₂ {R : Type*} [RCLike R] {m n : ℕ}
(ρ : Matrix (Fin m × Fin n) (Fin m × Fin n) R) :
trace ρ = trace (tr₂ ρ) := Fintype.sum_prod_type fun x ↦ ρ x xThe Kraus completion as a map from operations to channels.
def krausCompletionChannelMap {R : Type*} [RCLike R] {q r : ℕ}
{K : Fin r → Matrix (Fin q) (Fin q) R} (hK : QuantumOperation K) :
{K : Fin (r+1) → Matrix (Fin q) (Fin q) R | QuantumChannel K} := by R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) RhK:QuantumOperation K⊢ ↑{K | QuantumChannel K}
constructor property R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) RhK:QuantumOperation K⊢ ?val ∈ {K | QuantumChannel K}val R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) RhK:QuantumOperation K⊢ Fin (r + 1) → Matrix (Fin q) (Fin q) R
swap val R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) RhK:QuantumOperation K⊢ Fin (r + 1) → Matrix (Fin q) (Fin q) Rproperty R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) RhK:QuantumOperation K⊢ ?val ∈ {K | QuantumChannel K}
· val R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) RhK:QuantumOperation K⊢ Fin (r + 1) → Matrix (Fin q) (Fin q) R exact fun i x => krausCompletion K (x, i) All goals completed! 🐙
· property R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) RhK:QuantumOperation K⊢ (fun i x => krausCompletion K (x, i)) ∈ {K | QuantumChannel K} unfold QuantumChannel property R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) RhK:QuantumOperation K⊢ (fun i x => krausCompletion K (x, i)) ∈ {K | ∑ i, (K i)ᴴ * K i = 1}
rw [← krausCompletion_isometry_of_TNI hK property R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) RhK:QuantumOperation K⊢ (fun i x => krausCompletion K (x, i)) ∈ {K_1 | ∑ i, (K_1 i)ᴴ * K_1 i = (krausCompletion K)ᴴ * krausCompletion K} property R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) RhK:QuantumOperation K⊢ (fun i x => krausCompletion K (x, i)) ∈ {K_1 | ∑ i, (K_1 i)ᴴ * K_1 i = (krausCompletion K)ᴴ * krausCompletion K}] property R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) RhK:QuantumOperation K⊢ (fun i x => krausCompletion K (x, i)) ∈ {K_1 | ∑ i, (K_1 i)ᴴ * K_1 i = (krausCompletion K)ᴴ * krausCompletion K}
ext x y property R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) RhK:QuantumOperation Kx:Fin qy:Fin q⊢ (∑ i, ((fun i x => krausCompletion K (x, i)) i)ᴴ * (fun i x => krausCompletion K (x, i)) i) x y =
((krausCompletion K)ᴴ * krausCompletion K) x y
rw [mul_apply, property R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) RhK:QuantumOperation Kx:Fin qy:Fin q⊢ (∑ i, ((fun i x => krausCompletion K (x, i)) i)ᴴ * (fun i x => krausCompletion K (x, i)) i) x y =
∑ j, (krausCompletion K)ᴴ x j * krausCompletion K j y property R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) RhK:QuantumOperation Kx:Fin qy:Fin q⊢ ∑ c, (((fun i x => krausCompletion K (x, i)) c)ᴴ * (fun i x => krausCompletion K (x, i)) c) x y =
∑ y_1, ∑ x_1, (krausCompletion K)ᴴ x (x_1, y_1) * krausCompletion K (x_1, y_1) y Fintype.sum_prod_type, property R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) RhK:QuantumOperation Kx:Fin qy:Fin q⊢ (∑ i, ((fun i x => krausCompletion K (x, i)) i)ᴴ * (fun i x => krausCompletion K (x, i)) i) x y =
∑ x_1, ∑ y_1, (krausCompletion K)ᴴ x (x_1, y_1) * krausCompletion K (x_1, y_1) yproperty R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) RhK:QuantumOperation Kx:Fin qy:Fin q⊢ ∑ c, (((fun i x => krausCompletion K (x, i)) c)ᴴ * (fun i x => krausCompletion K (x, i)) c) x y =
∑ y_1, ∑ x_1, (krausCompletion K)ᴴ x (x_1, y_1) * krausCompletion K (x_1, y_1) y Finset.sum_comm, property R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) RhK:QuantumOperation Kx:Fin qy:Fin q⊢ (∑ i, ((fun i x => krausCompletion K (x, i)) i)ᴴ * (fun i x => krausCompletion K (x, i)) i) x y =
∑ y_1, ∑ x_1, (krausCompletion K)ᴴ x (x_1, y_1) * krausCompletion K (x_1, y_1) yproperty R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) RhK:QuantumOperation Kx:Fin qy:Fin q⊢ ∑ c, (((fun i x => krausCompletion K (x, i)) c)ᴴ * (fun i x => krausCompletion K (x, i)) c) x y =
∑ y_1, ∑ x_1, (krausCompletion K)ᴴ x (x_1, y_1) * krausCompletion K (x_1, y_1) y Matrix.sum_apply property R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) RhK:QuantumOperation Kx:Fin qy:Fin q⊢ ∑ c, (((fun i x => krausCompletion K (x, i)) c)ᴴ * (fun i x => krausCompletion K (x, i)) c) x y =
∑ y_1, ∑ x_1, (krausCompletion K)ᴴ x (x_1, y_1) * krausCompletion K (x_1, y_1) yproperty R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) RhK:QuantumOperation Kx:Fin qy:Fin q⊢ ∑ c, (((fun i x => krausCompletion K (x, i)) c)ᴴ * (fun i x => krausCompletion K (x, i)) c) x y =
∑ y_1, ∑ x_1, (krausCompletion K)ᴴ x (x_1, y_1) * krausCompletion K (x_1, y_1) y]property R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) RhK:QuantumOperation Kx:Fin qy:Fin q⊢ ∑ c, (((fun i x => krausCompletion K (x, i)) c)ᴴ * (fun i x => krausCompletion K (x, i)) c) x y =
∑ y_1, ∑ x_1, (krausCompletion K)ᴴ x (x_1, y_1) * krausCompletion K (x_1, y_1) y
congr All goals completed! 🐙The "not orthogonal" CPTP completion of a CPTNI map.
lemma CPTP_of_CPTNI {R : Type*} [RCLike R]
{q r : ℕ}
{K : Fin r → Matrix (Fin q) (Fin q) R}
(hq : QuantumOperation K) :
∃ K' : Fin (r+1) → Matrix (Fin q) (Fin q) R,
QuantumChannel K' ∧
∀ i, ∀ H : i ≠ Fin.last r, K' i = K ⟨i.1, Fin.val_lt_last H⟩ := by R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation K⊢ ∃ K', QuantumChannel K' ∧ ∀ (i : Fin (r + 1)) (H : i ≠ Fin.last r), K' i = K ⟨↑i, ⋯⟩
use (fun i x => krausCompletion K (x, i)) h R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation K⊢ (QuantumChannel fun i x => krausCompletion K (x, i)) ∧
∀ (i : Fin (r + 1)) (H : i ≠ Fin.last r), (fun i x => krausCompletion K (x, i)) i = K ⟨↑i, ⋯⟩
constructor h.left R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation K⊢ QuantumChannel fun i x => krausCompletion K (x, i)h.right R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation K⊢ ∀ (i : Fin (r + 1)) (H : i ≠ Fin.last r), (fun x => krausCompletion K (x, i)) = K ⟨↑i, ⋯⟩
· h.left R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation K⊢ QuantumChannel fun i x => krausCompletion K (x, i) exact (krausCompletionChannelMap hq).2 All goals completed! 🐙
· h.right R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation K⊢ ∀ (i : Fin (r + 1)) (H : i ≠ Fin.last r), (fun x => krausCompletion K (x, i)) = K ⟨↑i, ⋯⟩ unfold krausCompletion stinespringOp h.right R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation K⊢ ∀ (i : Fin (r + 1)) (H : i ≠ Fin.last r),
(fun x =>
if H : ↑(x, i).2 < r then fun y =>
(∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) ((x, i).1, ⟨↑(x, i).2, H⟩) (y, 0)
else
CFC.sqrt
(1 -
(have V₀ := ∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1);
fun x y => V₀ x (y, 0))ᴴ *
have V₀ := ∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1);
fun x y => V₀ x (y, 0))
(x, i).1) =
K ⟨↑i, ⋯⟩
simp only [ne_eq, Fin.isValue] h.right R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation K⊢ ∀ (i : Fin (r + 1)) (H : ¬i = Fin.last r),
(fun x =>
if h : ↑i < r then fun y => (∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) (x, ⟨↑i, ⋯⟩) (y, 0)
else
CFC.sqrt
(1 -
(fun x y => (∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) x (y, 0))ᴴ * fun x y =>
(∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) x (y, 0))
x) =
K ⟨↑i, ⋯⟩
intro i H h.right R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation Ki:Fin (r + 1)H:¬i = Fin.last r⊢ (fun x =>
if h : ↑i < r then fun y => (∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) (x, ⟨↑i, ⋯⟩) (y, 0)
else
CFC.sqrt
(1 -
(fun x y => (∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) x (y, 0))ᴴ * fun x y =>
(∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) x (y, 0))
x) =
K ⟨↑i, ⋯⟩
split_ifs with g₀ pos R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation Ki:Fin (r + 1)H:¬i = Fin.last rg₀:↑i < r⊢ (fun x y => (∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) (x, ⟨↑i, ⋯⟩) (y, 0)) = K ⟨↑i, ⋯⟩neg R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation Ki:Fin (r + 1)H:¬i = Fin.last rg₀:¬↑i < r⊢ (fun x =>
CFC.sqrt
(1 -
(fun x y => (∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) x (y, 0))ᴴ * fun x y =>
(∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) x (y, 0))
x) =
K ⟨↑i, ⋯⟩
· pos R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation Ki:Fin (r + 1)H:¬i = Fin.last rg₀:↑i < r⊢ (fun x y => (∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) (x, ⟨↑i, ⋯⟩) (y, 0)) = K ⟨↑i, ⋯⟩ unfold kroneckerMap single pos R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation Ki:Fin (r + 1)H:¬i = Fin.last rg₀:↑i < r⊢ (fun x y =>
(∑ i,
of fun i_1 j =>
(fun x1 x2 => x1 * x2) (K i i_1.1 j.1) (of (fun i' j' => if i = i' ∧ 0 = j' then 1 else 0) i_1.2 j.2))
(x, ⟨↑i, ⋯⟩) (y, 0)) =
K ⟨↑i, ⋯⟩
simp only [Fin.isValue, of_apply, mul_ite, mul_one, mul_zero] pos R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation Ki:Fin (r + 1)H:¬i = Fin.last rg₀:↑i < r⊢ (fun x y => (∑ x, of fun i j => if x = i.2 ∧ 0 = j.2 then K x i.1 j.1 else 0) (x, ⟨↑i, ⋯⟩) (y, 0)) = K ⟨↑i, ⋯⟩
have (j : Fin q × Fin 1) : (0 = j.2) = True := by R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation K⊢ ∃ K', QuantumChannel K' ∧ ∀ (i : Fin (r + 1)) (H : i ≠ Fin.last r), K' i = K ⟨↑i, ⋯⟩ pos R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation Ki:Fin (r + 1)H:¬i = Fin.last rg₀:↑i < rthis:∀ (j : Fin q × Fin 1), (0 = j.2) = True⊢ (fun x y => (∑ x, of fun i j => if x = i.2 ∧ 0 = j.2 then K x i.1 j.1 else 0) (x, ⟨↑i, ⋯⟩) (y, 0)) = K ⟨↑i, ⋯⟩
have := j.2.2 R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation Ki:Fin (r + 1)H:¬i = Fin.last rg₀:↑i < rj:Fin q × Fin 1this:↑j.2 < 1⊢ (0 = j.2) = True pos R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation Ki:Fin (r + 1)H:¬i = Fin.last rg₀:↑i < rthis:∀ (j : Fin q × Fin 1), (0 = j.2) = True⊢ (fun x y => (∑ x, of fun i j => if x = i.2 ∧ 0 = j.2 then K x i.1 j.1 else 0) (x, ⟨↑i, ⋯⟩) (y, 0)) = K ⟨↑i, ⋯⟩
simp only [Fin.isValue, eq_iff_iff, iff_true] R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation Ki:Fin (r + 1)H:¬i = Fin.last rg₀:↑i < rj:Fin q × Fin 1this:↑j.2 < 1⊢ 0 = j.2pos R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation Ki:Fin (r + 1)H:¬i = Fin.last rg₀:↑i < rthis:∀ (j : Fin q × Fin 1), (0 = j.2) = True⊢ (fun x y => (∑ x, of fun i j => if x = i.2 ∧ 0 = j.2 then K x i.1 j.1 else 0) (x, ⟨↑i, ⋯⟩) (y, 0)) = K ⟨↑i, ⋯⟩
omegapos R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation Ki:Fin (r + 1)H:¬i = Fin.last rg₀:↑i < rthis:∀ (j : Fin q × Fin 1), (0 = j.2) = True⊢ (fun x y => (∑ x, of fun i j => if x = i.2 ∧ 0 = j.2 then K x i.1 j.1 else 0) (x, ⟨↑i, ⋯⟩) (y, 0)) = K ⟨↑i, ⋯⟩pos R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation Ki:Fin (r + 1)H:¬i = Fin.last rg₀:↑i < rthis:∀ (j : Fin q × Fin 1), (0 = j.2) = True⊢ (fun x y => (∑ x, of fun i j => if x = i.2 ∧ 0 = j.2 then K x i.1 j.1 else 0) (x, ⟨↑i, ⋯⟩) (y, 0)) = K ⟨↑i, ⋯⟩
simp_rw [ pos R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation Ki:Fin (r + 1)H:¬i = Fin.last rg₀:↑i < rthis:∀ (j : Fin q × Fin 1), (0 = j.2) = True⊢ (fun x y => (∑ x, of fun i j => if x = i.2 ∧ 0 = j.2 then K x i.1 j.1 else 0) (x, ⟨↑i, ⋯⟩) (y, 0)) = K ⟨↑i, ⋯⟩this pos R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation Ki:Fin (r + 1)H:¬i = Fin.last rg₀:↑i < rthis:∀ (j : Fin q × Fin 1), (0 = j.2) = True⊢ (fun x y => (∑ x, of fun i j => if x = i.2 ∧ True then K x i.1 j.1 else 0) (x, ⟨↑i, ⋯⟩) (y, 0)) = K ⟨↑i, ⋯⟩]
ext a b pos R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation Ki:Fin (r + 1)H:¬i = Fin.last rg₀:↑i < rthis:∀ (j : Fin q × Fin 1), (0 = j.2) = Truea:Fin qb:Fin q⊢ (∑ x, of fun i j => if x = i.2 ∧ True then K x i.1 j.1 else 0) (a, ⟨↑i, ⋯⟩) (b, 0) = K ⟨↑i, ⋯⟩ a b
erw [Finset.sum_apply pos R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation Ki:Fin (r + 1)H:¬i = Fin.last rg₀:↑i < rthis:∀ (j : Fin q × Fin 1), (0 = j.2) = Truea:Fin qb:Fin q⊢ (∑ c, of (fun i j => if c = i.2 ∧ True then K c i.1 j.1 else 0) (a, ⟨↑i, ⋯⟩)) (b, 0) = K ⟨↑i, ⋯⟩ a b] pos R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation Ki:Fin (r + 1)H:¬i = Fin.last rg₀:↑i < rthis:∀ (j : Fin q × Fin 1), (0 = j.2) = Truea:Fin qb:Fin q⊢ (∑ c, of (fun i j => if c = i.2 ∧ True then K c i.1 j.1 else 0) (a, ⟨↑i, ⋯⟩)) (b, 0) = K ⟨↑i, ⋯⟩ a b
erw [Finset.sum_fn pos R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation Ki:Fin (r + 1)H:¬i = Fin.last rg₀:↑i < rthis:∀ (j : Fin q × Fin 1), (0 = j.2) = Truea:Fin qb:Fin q⊢ (fun a_1 => ∑ c, of (fun i j => if c = i.2 ∧ True then K c i.1 j.1 else 0) (a, ⟨↑i, ⋯⟩) a_1) (b, 0) = K ⟨↑i, ⋯⟩ a b] pos R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation Ki:Fin (r + 1)H:¬i = Fin.last rg₀:↑i < rthis:∀ (j : Fin q × Fin 1), (0 = j.2) = Truea:Fin qb:Fin q⊢ (fun a_1 => ∑ c, of (fun i j => if c = i.2 ∧ True then K c i.1 j.1 else 0) (a, ⟨↑i, ⋯⟩) a_1) (b, 0) = K ⟨↑i, ⋯⟩ a b
simp All goals completed! 🐙
· neg R:Type u_1inst✝:RCLike Rq:ℕr:ℕK:Fin r → Matrix (Fin q) (Fin q) Rhq:QuantumOperation Ki:Fin (r + 1)H:¬i = Fin.last rg₀:¬↑i < r⊢ (fun x =>
CFC.sqrt
(1 -
(fun x y => (∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) x (y, 0))ᴴ * fun x y =>
(∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) x (y, 0))
x) =
K ⟨↑i, ⋯⟩ exact False.elim <| H <| Fin.eq_last_of_not_lt g₀ All goals completed! 🐙Partial trace on the left of a tensor product.
def partialTraceLeft {R : Type*} [RCLike R]
{m n : Type*} [Fintype m]
(ρ : Matrix (m × n)
(m × n) R) : Matrix (n) (n) R :=
fun i j => ∑ k : m, ρ (k, i) (k, j)A version of the Stinespring Dilation Theorem.
theorem stinespringForm_eq {R : Type*} [RCLike R] {m r : ℕ}
(K : Fin r → Matrix (Fin m) (Fin m) R)
(ρ : Matrix (Fin m) (Fin m) R) :
tr₂ (stinespringDilation K ρ) = krausApply K ρ := by R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rρ:Matrix (Fin m) (Fin m) R⊢ tr₂ (stinespringDilation K ρ) = krausApply K ρ
unfold tr₂ stinespringDilation krausApply R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rρ:Matrix (Fin m) (Fin m) R⊢ (fun i j => ∑ k, (stinespringOp K * ρ * (stinespringOp K)ᴴ) (i, k) (j, k)) = ∑ i, K i * ρ * (K i)ᴴ
ext i j R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin m⊢ ∑ k, (stinespringOp K * ρ * (stinespringOp K)ᴴ) (i, k) (j, k) = (∑ i, K i * ρ * (K i)ᴴ) i j
simp only [stinespringOp, Fin.isValue, Matrix.mul_apply, conjTranspose_apply, star_def] R:Type u_1inst✝:RCLike Rm:ℕr:ℕK:Fin r → Matrix (Fin m) (Fin m) Rρ:Matrix (Fin m) (Fin m) Ri:Fin mj:Fin m⊢ ∑ x,
∑ x_1,
(∑ j, (∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) (i, x) (j, 0) * ρ j x_1) *
(starRingEnd R) ((∑ i, kroneckerMap (fun x1 x2 => x1 * x2) (K i) (single i 0 1)) (j, x) (x_1, 0)) =
(∑ i, K i * ρ * (K i)ᴴ) i j
simp [Matrix.mul_apply, Finset.sum_mul, Matrix.sum_apply, kroneckerMap_apply,
Matrix.single] All goals completed! 🐙