| |
| |
| |
|
|
| module Core.QuantumState where |
|
|
| open import Data.Nat using (ℕ; _≤_; _<_; zero; suc) |
| open import Data.Integer using (ℤ; _+_) |
| open import Data.Real using (ℝ; _≤_; _<_; _+_; _*_) |
| open import Relation.Binary.PropositionalEquality using (_≡_; refl) |
|
|
| |
| record Dimension : Set where |
| field |
| num_qubits : ℕ |
| dim : ℕ |
|
|
| |
| |
| record QuantumState : Set where |
| field |
| dim : Dimension |
| is_valid : Bool |
| is_normalized : Bool |
| amplitude_count : ℕ |
|
|
| |
| isValidDim : QuantumState → Set |
| isValidDim state = |
| QuantumState.amplitude_count state ≡ Dimension.dim (QuantumState.dim state) |
|
|
| |
| isNormalized : QuantumState → Set |
| isNormalized state = |
| QuantumState.is_normalized state ≡ true |
|
|
| |
| canApplyGate : QuantumState → Set |
| canApplyGate state = |
| (QuantumState.is_valid state ≡ true) ∧ isValidDim state |
|
|
| |
| gateMarksUnnormalized : (s s' : QuantumState) → Set |
| gateMarksUnnormalized s s' = |
| (QuantumState.is_valid s ≡ true) → |
| (QuantumState.is_normalized s' ≡ false) |
|
|
| -- Predicate: normalization preserves dimension |
| normalizationPreserveDim : (s s' : QuantumState) → Set |
| normalizationPreserveDim s s' = |
| Dimension.dim (QuantumState.dim s) ≡ Dimension.dim (QuantumState.dim s') |
|
|