importLCS.Basic
-- define type mat4 as 4x4 matrices over ℂ
abbrevmat4:=Matrix(Fin4)(Fin4)ℂ-- ANCHOR_END: import
defmagic_square_layout:LCSLayout:={r:=6s:=9V:=funi=>matchiwith|0=>{0,1,2}|1=>{3,4,5}|2=>{6,7,8}|3=>{0,3,6}|4=>{1,4,7}|5=>{2,5,8}}{3, 4, 5}#evalmagic_square_layout.V(1:Fin6)openMatrixopenKroneckeropenscopedBigOperators
-- Base Pauli Matrices
defI2:Matrix(Fin2)(Fin2)ℂ:=!![1,0;0,1]defX:Matrix(Fin2)(Fin2)ℂ:=!![0,1;1,0]defY:Matrix(Fin2)(Fin2)ℂ:=!![0,-Complex.I;Complex.I,0]defZ:Matrix(Fin2)(Fin2)ℂ:=!![1,0;0,-1]deftoFin4{R:Type*}(M:Matrix(Fin2×Fin2)(Fin2×Fin2)R):Matrix(Fin4)(Fin4)R:=Matrix.reindexfinProdFinEquivfinProdFinEquivM
-- The Mermin-Peres Grid
defMP_observables:Fin9→mat4|0=>toFin4(X⊗ₖI2)|1=>toFin4(I2⊗ₖX)|2=>toFin4(X⊗ₖX)|3=>toFin4(Y⊗ₖI2)|4=>toFin4(I2⊗ₖY)|5=>toFin4(Y⊗ₖY)|6=>toFin4(X⊗ₖY)|7=>toFin4(Y⊗ₖX)|8=>toFin4(Z⊗ₖZ)noncomputabledefObservableToProjector{R:Type*}[RingR][AlgebraℂR](O:R)(a:Fin2):R:=letsign:ℂ:=ifa=0then1else-1(1/2:ℂ)•(1+sign•O)noncomputabledefdeclaration uses `sorry`declaration uses `sorry`declaration uses `sorry`declaration uses `sorry`declaration uses `sorry`declaration uses `sorry`Strat_merinPeres:LCSStrategymat4magic_square_layout:={F:=funjoutcome=>ObservableToProjector(MP_observablesj)outcomeE:=funiassignement=>letV_i:Finset(Fin9):=magic_square_layout.ViV_i.attach.noncommProd(funj_idx=>letobs:=MP_observablesj_idxletval:=assignementj_idxObservableToProjectorobsval)(i:Finmagic_square_layout.rassignement:Assignmentmagic_square_layoutiV_i:Finset(Fin9):=magic_square_layout.Vi⊢ (↑V_i.attach).Pairwise(Function.onFunCommutefunj_idx=>letobs:=MP_observables↑j_idx;letval:=assignementj_idx;ObservableToProjectorobsval)All goals completed! 🐙)alice_ms:=sorry-- To be proven
bob_ms:=sorry -- To be proven
commute:=sorry -- To be proven
}
/- #eval Strat_merinPeres.F (0: Fin 9) (0: Fin 2) -/