/- Copyright 2026 The Formal Conjectures Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -/ import FormalConjecturesUtil

Open Quantum Problem 23: SIC-POVMs

Mathematical problem

The OQP page presents three increasingly strong formulations of this problem. In this file we formalize the first one, closest to the physics terminology: existence of a symmetric informationally complete POVM in every finite dimension.

A SIC-POVM in dimension $d$ can be represented by a family of $d^2$ normalized vectors in $\mathbb{C}^d$ whose pairwise squared overlaps are all equal to $(d + 1)^{-1}$. We encode such a family as a map Fin (d ^ 2) → StateVector d.

Background

SIC-POVMs are a basic structure in finite-dimensional quantum information. They are closely related to equiangular lines, tight frames, quantum state reconstruction, and finite-dimensional measurement theory. The open problem asks whether such families exist in every dimension.

What this file formalizes

This file formalizes the existence problem for symmetric informationally complete POVMs through the predicate HasSICPOVM d.

More precisely, it contains the following layers.

Core API

The main definitions formalized in this file are:

    StateVector d: a state vector in ℂ^d;

    mkStateVector: constructor from coordinates in the computational basis;

    IsNormalized ψ: normalization predicate for a state vector;

    overlapSq φ ψ: squared magnitude of the inner-product overlap;

    HasConstantOverlapSq c Φ: constant pairwise squared-overlap condition;

    sicOverlapSq d: the SIC overlap value (d + 1)⁻¹;

    IsSICFamily d Φ: the predicate that a family of d^2 vectors in ℂ^d is a SIC family;

    HasSICPOVM d: existence of a SIC family in dimension d.

In addition, the file includes explicit witness families and convenient constructors used in the low-dimensional benchmark cases:

    vec2, vec3;

    qubitSICFamily;

    hesseFamily;

    bb84Family.

Complete open conjecture

The main open theorem is:

    sicPOVMs, expressing the conjecture that for every d ≥ 1, there exists a SIC-POVM in dimension d.

Special cases

The file also isolates several special cases:

    solved low-dimensional benchmark cases: hasSICPOVM_zero, hasSICPOVM_one, hasSICPOVM_two, hasSICPOVM_three;

    a negative benchmark result: bb84Family_not_isSICFamily, showing that the BB84 family in dimension 2 does not form a SIC family;

    selected open benchmark dimensions: hasSICPOVM_56, hasSICPOVM_58, hasSICPOVM_59, hasSICPOVM_60, hasSICPOVM_64, hasSICPOVM_68, hasSICPOVM_69, hasSICPOVM_70, hasSICPOVM_71, hasSICPOVM_72, hasSICPOVM_75.

Test lemmas

The file includes the following test lemmas and benchmark-support statements:

    hasConstantOverlapSq_singleton;

    sicOverlapSq_one, sicOverlapSq_two, sicOverlapSq_three, sicOverlapSq_pos;

    isSICFamily_singleton_iff, isSICFamily_one_of_normalized;

    qubitSICFamily_normalized, qubitSICFamily_pairwise;

    hesseFamily_normalized, hesseFamily_pairwise;

    bb84Family_normalized.

At present, these @[category test, AMS 15 47 81] results are included with placeholder proofs by sorry; they are intended to be proved in the next PR.

References

Primary source list entry:

    IQOQI Vienna Open Quantum Problems, problem 23: https://oqp.iqoqi.oeaw.ac.at/sic-povms-and-zauners-conjecture

    Formal Conjectures issue #1823: https://github.com/google-deepmind/formal-conjectures/issues/1823

Foundational references

    J. M. Renes, R. Blume-Kohout, A. J. Scott, and M. C. Caves, Symmetric informationally complete quantum measurements, J. Math. Phys. 45, 2171-2180 (2004), arXiv:quant-ph/0310075.

    G. Zauner, Quantum Designs: Foundations of a Noncommutative Design Theory, PhD thesis, University of Vienna (1999).

noncomputable sectionnamespace OpenQuantumProblem23

A state vector in the $d$-dimensional complex Hilbert space $\mathbb{C}^d$.

abbrev StateVector (d : ) := EuclideanSpace (Fin d)

Build a state vector from its coordinates in the computational basis.

abbrev mkStateVector {d : } (ψ : Fin d ) : StateVector d := WithLp.toLp 2 ψ

Coercion from a state vector to its coordinate function.

instance {d : } : CoeFun (StateVector d) (fun _ => Fin d ) where coe ψ := ψ.ofLp

A state vector is normalized if it has $L^2$ norm $1$.

def IsNormalized {d : } (ψ : StateVector d) : Prop := ψ = 1

The squared magnitude of the overlap between two state vectors.

def overlapSq {d : } (φ ψ : StateVector d) : := Complex.normSq ( i : Fin d, star (φ i) * ψ i)

A family has constant pairwise squared overlap $c$ if every two distinct members have squared overlap $c$.

def HasConstantOverlapSq {d N : } (c : ) (Φ : Fin N StateVector d) : Prop := Pairwise fun i j => overlapSq (Φ i) (Φ j) = c

The squared overlap value of a SIC family in dimension $d$.

def sicOverlapSq (d : ) : := (d + 1 : )⁻¹

A SIC family in dimension $d$ consists of $d^2$ normalized vectors in $\mathbb{C}^d$ with pairwise squared overlap $(d + 1)^{-1}$.

def IsSICFamily (d : ) (Φ : Fin (d ^ 2) StateVector d) : Prop := ( i, IsNormalized (Φ i)) HasConstantOverlapSq (sicOverlapSq d) Φ

There exists a SIC-POVM in dimension $d$.

def HasSICPOVM (d : ) : Prop := Φ : Fin (d ^ 2) StateVector d, IsSICFamily d Φ

Any singleton family has constant pairwise squared overlap, vacuously.

@[category test, AMS 15 47 81] lemma hasConstantOverlapSq_singleton {d : } (c : ) (ψ : StateVector d) : HasConstantOverlapSq c (fun _ : Fin 1 => ψ) := d:c:ψ:StateVector dHasConstantOverlapSq c fun x => ψ intro i d:c:ψ:StateVector di:Fin 1j:Fin 1i j (fun i j => overlapSq ((fun x => ψ) i) ((fun x => ψ) j) = c) i j d:c:ψ:StateVector di:Fin 1j:Fin 1hij:i joverlapSq ((fun x => ψ) i) ((fun x => ψ) j) = c All goals completed! 🐙

The SIC overlap value in dimension $1$ is $1/2$.

@[category test, AMS 15 47 81] lemma sicOverlapSq_one : sicOverlapSq 1 = (1 / 2 : ) := sicOverlapSq 1 = 1 / 2 1 + 1 = 2; All goals completed! 🐙

The SIC overlap value is positive in every dimension.

@[category test, AMS 15 47 81] lemma sicOverlapSq_pos (d : ) : 0 < sicOverlapSq d := d:0 < sicOverlapSq d d:0 < d + 1; All goals completed! 🐙

In dimension $1$, a singleton family is SIC exactly when its vector is normalized.

@[category test, AMS 15 47 81] lemma isSICFamily_singleton_iff {ψ : StateVector 1} : IsSICFamily 1 (fun _ : Fin 1 => ψ) IsNormalized ψ := ψ:StateVector 1(IsSICFamily 1 fun x => ψ) IsNormalized ψ ψ:StateVector 1(IsSICFamily 1 fun x => ψ) IsNormalized ψψ:StateVector 1IsNormalized ψ IsSICFamily 1 fun x => ψ ψ:StateVector 1(IsSICFamily 1 fun x => ψ) IsNormalized ψ ψ:StateVector 1h: (i : Fin (1 ^ 2)), IsNormalized ((fun x => ψ) i)right✝:HasConstantOverlapSq (sicOverlapSq 1) fun x => ψIsNormalized ψ; All goals completed! 🐙 ψ:StateVector 1IsNormalized ψ IsSICFamily 1 fun x => ψ ψ:StateVector 1h:IsNormalized ψIsSICFamily 1 fun x => ψ; All goals completed! 🐙

The empty family witnesses the degenerate dimension-$0$ case.

@[category test, AMS 15 47 81] theorem hasSICPOVM_zero : HasSICPOVM 0 := HasSICPOVM 0 All goals completed! 🐙

Any normalized state in dimension $1$ yields a SIC family.

@[category test, AMS 15 47 81] lemma isSICFamily_one_of_normalized {ψ : StateVector 1} ( : IsNormalized ψ) : IsSICFamily 1 (fun _ : Fin 1 => ψ) := isSICFamily_singleton_iff.mpr

Dimension $1$ admits a SIC-POVM.

@[category test, AMS 15 47 81] theorem hasSICPOVM_one : HasSICPOVM 1 := HasSICPOVM 1 IsNormalized (EuclideanSpace.single 0 1) All goals completed! 🐙

The standard algebraic primitive cube root of unity.

def ω : := ((-(1 : ) / 2 : ) : ) + ((Real.sqrt 3 / 2 : ) : ) * Complex.I

The first real amplitude used in the tetrahedral qubit SIC.

def tetraA : := Real.sqrt (1 / 3)

The second real amplitude used in the tetrahedral qubit SIC.

def tetraB : := Real.sqrt (2 / 3)

The common scale used in the Hesse qutrit SIC.

def hesseS : := Real.sqrt (1 / 2)

A convenient constructor for qubit state vectors.

def vec2 (z₀ z₁ : ) : StateVector 2 := mkStateVector ![z₀, z₁]

A convenient constructor for qutrit state vectors.

def vec3 (z₀ z₁ z₂ : ) : StateVector 3 := mkStateVector ![z₀, z₁, z₂]

The tetrahedral qubit SIC family.

def qubitSICFamily : Fin 4 StateVector 2 | 0 => vec2 1 0 | 1 => vec2 (tetraA : ) (tetraB : ) | 2 => vec2 (tetraA : ) ((tetraB : ) * ω) | _ => vec2 (tetraA : ) ((tetraB : ) * (ω ^ 2))

The Hesse qutrit SIC family.

def hesseFamily : Fin 9 StateVector 3 | 0 => vec3 0 (hesseS : ) (-(hesseS : )) | 1 => vec3 0 (hesseS : ) (-((hesseS : ) * ω)) | 2 => vec3 0 (hesseS : ) (-((hesseS : ) * (ω ^ 2))) | 3 => vec3 (-(hesseS : )) 0 (hesseS : ) | 4 => vec3 (-((hesseS : ) * ω)) 0 (hesseS : ) | 5 => vec3 (-((hesseS : ) * (ω ^ 2))) 0 (hesseS : ) | 6 => vec3 (hesseS : ) (-(hesseS : )) 0 | 7 => vec3 (hesseS : ) (-((hesseS : ) * ω)) 0 | _ => vec3 (hesseS : ) (-((hesseS : ) * (ω ^ 2))) 0

The BB84 family of four qubit states.

def bb84Family : Fin 4 StateVector 2 | 0 => vec2 1 0 | 1 => vec2 0 1 | 2 => vec2 (hesseS : ) (hesseS : ) | _ => vec2 (hesseS : ) (-(hesseS : ))

The SIC overlap value in dimension $2$ is $1/3$.

@[category test, AMS 15 47 81] lemma sicOverlapSq_two : sicOverlapSq 2 = (1 / 3 : ) := sicOverlapSq 2 = 1 / 3 2 + 1 = 3; All goals completed! 🐙

The SIC overlap value in dimension $3$ is $1/4$.

@[category test, AMS 15 47 81] lemma sicOverlapSq_three : sicOverlapSq 3 = (1 / 4 : ) := sicOverlapSq 3 = 1 / 4 3 + 1 = 4; All goals completed! 🐙

The unit complex number ω (primitive cube root) has norm 1.

@[category API, AMS 15 47 81] private lemma omega_norm : ω = 1 := ω = 1 (Complex.normSq ((-1 / 2) + (3 / 2) * Complex.I)) = 1 -1 / 2 * (-1 / 2) + 3 / 2 * (3 / 2) = 1 have : Real.sqrt 3 * Real.sqrt 3 = 3 := Real.mul_self_sqrt (0 3 All goals completed! 🐙) All goals completed! 🐙

Every vector in the tetrahedral qubit SIC family is normalized.

@[category test, AMS 15 47 81] lemma qubitSICFamily_normalized (i : Fin 4) : IsNormalized (qubitSICFamily i) := i:Fin 4IsNormalized (qubitSICFamily i) have h2 : Real.sqrt 2 ^ 2 = 2 := Real.sq_sqrt (i:Fin 40 2 All goals completed! 🐙) have h3 : Real.sqrt 3 ^ 2 = 3 := Real.sq_sqrt (i:Fin 4h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))0 3 All goals completed! 🐙) have sqrt2_pos : (0:) < Real.sqrt 2 := Real.sqrt_pos.mpr (i:Fin 4h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))h3:3 ^ 2 = 3 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Eq.refl true))0 < 2 All goals completed! 🐙) have sqrt3_pos : (0:) < Real.sqrt 3 := Real.sqrt_pos.mpr (i:Fin 4h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))h3:3 ^ 2 = 3 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))0 < 3 All goals completed! 🐙) have omega2_norm : ω ^ 2 = 1 := i:Fin 4IsNormalized (qubitSICFamily i) i:Fin 4h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))h3:3 ^ 2 = 3 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))sqrt3_pos:0 < 3 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Eq.refl false))1 ^ 2 = 1; All goals completed! 🐙 h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))h3:3 ^ 2 = 3 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))sqrt3_pos:0 < 3 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (qubitSICFamily ((fun i => i) 0, ))h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))h3:3 ^ 2 = 3 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))sqrt3_pos:0 < 3 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (qubitSICFamily ((fun i => i) 1, ))h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))h3:3 ^ 2 = 3 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))sqrt3_pos:0 < 3 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (qubitSICFamily ((fun i => i) 2, ))h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))h3:3 ^ 2 = 3 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))sqrt3_pos:0 < 3 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (qubitSICFamily ((fun i => i) 3, )) h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))h3:3 ^ 2 = 3 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))sqrt3_pos:0 < 3 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (qubitSICFamily ((fun i => i) 0, ))h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))h3:3 ^ 2 = 3 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))sqrt3_pos:0 < 3 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (qubitSICFamily ((fun i => i) 1, ))h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))h3:3 ^ 2 = 3 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))sqrt3_pos:0 < 3 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (qubitSICFamily ((fun i => i) 2, ))h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))h3:3 ^ 2 = 3 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))sqrt3_pos:0 < 3 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (qubitSICFamily ((fun i => i) 3, )) h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))h3:3 ^ 2 = 3 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))sqrt3_pos:0 < 3 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))3⁻¹ + (2 / 3) ^ 2 = 1 all_goals (try (h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))h3:3 ^ 2 = 3 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))sqrt3_pos:0 < 3 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))3 ^ 2 + 3 * 2 ^ 2 = 3 * 3 ^ 2; All goals completed! 🐙))

The tetrahedral qubit SIC family has the correct constant pairwise overlap.

@[category test, AMS 15 47 81] lemma declaration uses 'sorry'qubitSICFamily_pairwise : HasConstantOverlapSq (sicOverlapSq 2) qubitSICFamily := HasConstantOverlapSq (sicOverlapSq 2) qubitSICFamily All goals completed! 🐙

Dimension $2$ admits a SIC-POVM, witnessed by the tetrahedral qubit SIC.

@[category test, AMS 15 47 81] theorem declaration uses 'sorry'hasSICPOVM_two : HasSICPOVM 2 := HasSICPOVM 2 All goals completed! 🐙

Every vector in the Hesse qutrit SIC family is normalized.

@[category test, AMS 15 47 81] lemma hesseFamily_normalized (i : Fin 9) : IsNormalized (hesseFamily i) := i:Fin 9IsNormalized (hesseFamily i) have h2 : Real.sqrt 2 ^ 2 = 2 := Real.sq_sqrt (i:Fin 90 2 All goals completed! 🐙) have sqrt2_pos : (0:) < Real.sqrt 2 := Real.sqrt_pos.mpr (i:Fin 9h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))0 < 2 All goals completed! 🐙) have omega2_norm : ω ^ 2 = 1 := i:Fin 9IsNormalized (hesseFamily i) i:Fin 9h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))1 ^ 2 = 1; All goals completed! 🐙 h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (hesseFamily ((fun i => i) 0, ))h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (hesseFamily ((fun i => i) 1, ))h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (hesseFamily ((fun i => i) 2, ))h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (hesseFamily ((fun i => i) 3, ))h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (hesseFamily ((fun i => i) 4, ))h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (hesseFamily ((fun i => i) 5, ))h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (hesseFamily ((fun i => i) 6, ))h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (hesseFamily ((fun i => i) 7, ))h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (hesseFamily ((fun i => i) 8, )) h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (hesseFamily ((fun i => i) 0, ))h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (hesseFamily ((fun i => i) 1, ))h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (hesseFamily ((fun i => i) 2, ))h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (hesseFamily ((fun i => i) 3, ))h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (hesseFamily ((fun i => i) 4, ))h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (hesseFamily ((fun i => i) 5, ))h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (hesseFamily ((fun i => i) 6, ))h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (hesseFamily ((fun i => i) 7, ))h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))IsNormalized (hesseFamily ((fun i => i) 8, )) h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))2⁻¹ + 2⁻¹ = 1 all_goals (try (h2:2 ^ 2 = 2 := Real.sq_sqrt (Mathlib.Meta.NormNum.isNat_le_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl true))sqrt2_pos:0 < 2 := Real.sqrt_pos.mpr (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_zero) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false))omega2_norm:ω ^ 2 = 1 := Eq.mpr (id (congrArg (fun _a => _a = 1) (norm_pow ω 2))) (Eq.mpr (id (congrArg (fun _a => _a ^ 2 = 1) omega_norm)) (Mathlib.Tactic.Ring.of_eq (Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one)) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2))) (Mathlib.Tactic.Ring.pow_add (Mathlib.Tactic.Ring.single_pow (Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))) (Mathlib.Tactic.Ring.pow_zero (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)) (Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))) (Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 1 + 0))))) (Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat Nat.cast_one))))1 + 1 = 2; All goals completed! 🐙))

The Hesse qutrit SIC family has the correct constant pairwise overlap.

@[category test, AMS 15 47 81] lemma declaration uses 'sorry'hesseFamily_pairwise : HasConstantOverlapSq (sicOverlapSq 3) hesseFamily := HasConstantOverlapSq (sicOverlapSq 3) hesseFamily All goals completed! 🐙

Dimension $3$ admits a SIC-POVM, witnessed by the Hesse qutrit SIC.

@[category test, AMS 15 47 81] theorem declaration uses 'sorry'hasSICPOVM_three : HasSICPOVM 3 := HasSICPOVM 3 All goals completed! 🐙

Every vector in the BB84 family is normalized.

@[category test, AMS 15 47 81] lemma bb84Family_normalized (i : Fin 4) : IsNormalized (bb84Family i) := i:Fin 4IsNormalized (bb84Family i) IsNormalized (bb84Family ((fun i => i) 0, ))IsNormalized (bb84Family ((fun i => i) 1, ))IsNormalized (bb84Family ((fun i => i) 2, ))IsNormalized (bb84Family ((fun i => i) 3, )) IsNormalized (bb84Family ((fun i => i) 0, ))IsNormalized (bb84Family ((fun i => i) 1, ))IsNormalized (bb84Family ((fun i => i) 2, ))IsNormalized (bb84Family ((fun i => i) 3, )) 2⁻¹ + 2⁻¹ = 1 2⁻¹ + 2⁻¹ = 12⁻¹ + 2⁻¹ = 1 All goals completed! 🐙

The BB84 family has the right cardinality for a qubit SIC but fails the constant-overlap condition.

@[category test, AMS 15 47 81] theorem bb84Family_not_isSICFamily : ¬ IsSICFamily 2 bb84Family := ¬IsSICFamily 2 bb84Family h:IsSICFamily 2 bb84FamilyFalse have h_overlap := h.2 (show 0 1 ¬IsSICFamily 2 bb84Family All goals completed! 🐙) All goals completed! 🐙

Benchmark open subproblem: existence of a SIC-POVM in dimension $56$.

@[category research open, AMS 15 47 81] theorem declaration uses 'sorry'hasSICPOVM_56 : answer(sorry) HasSICPOVM 56 := True HasSICPOVM 56 All goals completed! 🐙

Benchmark open subproblem: existence of a SIC-POVM in dimension $58$.

@[category research open, AMS 15 47 81] theorem declaration uses 'sorry'hasSICPOVM_58 : answer(sorry) HasSICPOVM 58 := True HasSICPOVM 58 All goals completed! 🐙

Benchmark open subproblem: existence of a SIC-POVM in dimension $59$.

@[category research open, AMS 15 47 81] theorem declaration uses 'sorry'hasSICPOVM_59 : answer(sorry) HasSICPOVM 59 := True HasSICPOVM 59 All goals completed! 🐙

Benchmark open subproblem: existence of a SIC-POVM in dimension $60$.

@[category research open, AMS 15 47 81] theorem declaration uses 'sorry'hasSICPOVM_60 : answer(sorry) HasSICPOVM 60 := True HasSICPOVM 60 All goals completed! 🐙

Benchmark open subproblem: existence of a SIC-POVM in dimension $64$.

@[category research open, AMS 15 47 81] theorem declaration uses 'sorry'hasSICPOVM_64 : answer(sorry) HasSICPOVM 64 := True HasSICPOVM 64 All goals completed! 🐙

Benchmark open subproblem: existence of a SIC-POVM in dimension $68$.

@[category research open, AMS 15 47 81] theorem declaration uses 'sorry'hasSICPOVM_68 : answer(sorry) HasSICPOVM 68 := True HasSICPOVM 68 All goals completed! 🐙

Benchmark open subproblem: existence of a SIC-POVM in dimension $69$.

@[category research open, AMS 15 47 81] theorem declaration uses 'sorry'hasSICPOVM_69 : answer(sorry) HasSICPOVM 69 := True HasSICPOVM 69 All goals completed! 🐙

Benchmark open subproblem: existence of a SIC-POVM in dimension $70$.

@[category research open, AMS 15 47 81] theorem declaration uses 'sorry'hasSICPOVM_70 : answer(sorry) HasSICPOVM 70 := True HasSICPOVM 70 All goals completed! 🐙

Benchmark open subproblem: existence of a SIC-POVM in dimension $71$.

@[category research open, AMS 15 47 81] theorem declaration uses 'sorry'hasSICPOVM_71 : answer(sorry) HasSICPOVM 71 := True HasSICPOVM 71 All goals completed! 🐙

Benchmark open subproblem: existence of a SIC-POVM in dimension $72$.

@[category research open, AMS 15 47 81] theorem declaration uses 'sorry'hasSICPOVM_72 : answer(sorry) HasSICPOVM 72 := True HasSICPOVM 72 All goals completed! 🐙

Benchmark open subproblem: existence of a SIC-POVM in dimension $75$.

@[category research open, AMS 15 47 81] theorem declaration uses 'sorry'hasSICPOVM_75 : answer(sorry) HasSICPOVM 75 := True HasSICPOVM 75 All goals completed! 🐙

Do SIC-POVMs exist in every finite dimension?

@[category research open, AMS 15 47 81] theorem declaration uses 'sorry'sicPOVMs : answer(sorry) d : , 1 d HasSICPOVM d := True (d : ), 1 d HasSICPOVM d All goals completed! 🐙 end OpenQuantumProblem23