aboutsummaryrefslogtreecommitdiff
path: root/src/Data/Array/Mixed
diff options
context:
space:
mode:
authorMikolaj Konarski <mikolaj.konarski@funktory.com>2025-05-17 00:20:47 +0200
committerMikolaj Konarski <mikolaj.konarski@funktory.com>2025-05-17 00:26:59 +0200
commit713d76559c42129afb24843af4386d18f1827727 (patch)
tree476c00426dd778f1adaba50f069cd949a2992c34 /src/Data/Array/Mixed
parent0d6f77762d1697ea41b190e550f94e459079e3d1 (diff)
Merge both Lemmas modules
Diffstat (limited to 'src/Data/Array/Mixed')
-rw-r--r--src/Data/Array/Mixed/Lemmas.hs118
1 files changed, 0 insertions, 118 deletions
diff --git a/src/Data/Array/Mixed/Lemmas.hs b/src/Data/Array/Mixed/Lemmas.hs
deleted file mode 100644
index e6d970c..0000000
--- a/src/Data/Array/Mixed/Lemmas.hs
+++ /dev/null
@@ -1,118 +0,0 @@
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE GADTs #-}
-{-# LANGUAGE PolyKinds #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE TypeApplications #-}
-{-# LANGUAGE TypeOperators #-}
-{-# OPTIONS_GHC -fplugin GHC.TypeLits.Normalise #-}
-{-# OPTIONS_GHC -fplugin GHC.TypeLits.KnownNat.Solver #-}
-module Data.Array.Mixed.Lemmas where
-
-import Data.Proxy
-import Data.Type.Equality
-import GHC.TypeLits
-
-import Data.Array.Nested.Mixed.Shape
-import Data.Array.Nested.Permutation
-import Data.Array.Nested.Types
-
-
--- * Lemmas
-
--- ** Nat
-
-lemLeqSuccSucc :: k + 1 <= n => Proxy k -> Proxy n -> (k <=? n - 1) :~: True
-lemLeqSuccSucc _ _ = unsafeCoerceRefl
-
-lemLeqPlus :: n <= m => Proxy n -> Proxy m -> Proxy k -> (n <=? (m + k)) :~: 'True
-lemLeqPlus _ _ _ = Refl
-
-
--- ** Append
-
-lemAppNil :: l ++ '[] :~: l
-lemAppNil = unsafeCoerceRefl
-
-lemAppAssoc :: Proxy a -> Proxy b -> Proxy c -> (a ++ b) ++ c :~: a ++ (b ++ c)
-lemAppAssoc _ _ _ = unsafeCoerceRefl
-
-lemAppLeft :: Proxy l -> a :~: b -> a ++ l :~: b ++ l
-lemAppLeft _ Refl = Refl
-
-
--- ** Rank
-
-lemRankApp :: forall sh1 sh2.
- StaticShX sh1 -> StaticShX sh2
- -> Rank (sh1 ++ sh2) :~: Rank sh1 + Rank sh2
-lemRankApp ZKX _ = Refl
-lemRankApp (_ :!% (ssh1 :: StaticShX sh1T)) ssh2
- = lem (Proxy @(Rank sh1T)) Proxy Proxy $
- sym (lemRankApp ssh1 ssh2)
- where
- lem :: proxy a -> proxy b -> proxy c
- -> (a + b :~: c)
- -> c + 1 :~: (a + 1 + b)
- lem _ _ _ Refl = Refl
-
-lemRankAppComm :: proxy sh1 -> proxy sh2
- -> Rank (sh1 ++ sh2) :~: Rank (sh2 ++ sh1)
-lemRankAppComm _ _ = unsafeCoerceRefl
-
-lemRankReplicate :: proxy n -> Rank (Replicate n (Nothing @Nat)) :~: n
-lemRankReplicate _ = unsafeCoerceRefl
-
-
--- ** Various type families
-
-lemReplicatePlusApp :: forall n m a. SNat n -> Proxy m -> Proxy a
- -> Replicate (n + m) a :~: Replicate n a ++ Replicate m a
-lemReplicatePlusApp sn _ _ = go sn
- where
- go :: SNat n' -> Replicate (n' + m) a :~: Replicate n' a ++ Replicate m a
- go SZ = Refl
- go (SS (n :: SNat n'm1))
- | Refl <- lemReplicateSucc @a @n'm1
- , Refl <- go n
- = sym (lemReplicateSucc @a @(n'm1 + m))
-
-lemDropLenApp :: Rank l1 <= Rank l2
- => Proxy l1 -> Proxy l2 -> Proxy rest
- -> DropLen l1 l2 ++ rest :~: DropLen l1 (l2 ++ rest)
-lemDropLenApp _ _ _ = unsafeCoerceRefl
-
-lemTakeLenApp :: Rank l1 <= Rank l2
- => Proxy l1 -> Proxy l2 -> Proxy rest
- -> TakeLen l1 l2 :~: TakeLen l1 (l2 ++ rest)
-lemTakeLenApp _ _ _ = unsafeCoerceRefl
-
-lemInitApp :: Proxy l -> Proxy x -> Init (l ++ '[x]) :~: l
-lemInitApp _ _ = unsafeCoerceRefl
-
-lemLastApp :: Proxy l -> Proxy x -> Last (l ++ '[x]) :~: x
-lemLastApp _ _ = unsafeCoerceRefl
-
-
--- ** KnownNat
-
-lemKnownNatSucc :: KnownNat n => Dict KnownNat (n + 1)
-lemKnownNatSucc = Dict
-
-lemKnownNatRank :: ShX sh i -> Dict KnownNat (Rank sh)
-lemKnownNatRank ZSX = Dict
-lemKnownNatRank (_ :$% sh) | Dict <- lemKnownNatRank sh = Dict
-
-lemKnownNatRankSSX :: StaticShX sh -> Dict KnownNat (Rank sh)
-lemKnownNatRankSSX ZKX = Dict
-lemKnownNatRankSSX (_ :!% ssh) | Dict <- lemKnownNatRankSSX ssh = Dict
-
-
--- ** Known shapes
-
-lemKnownReplicate :: SNat n -> Dict KnownShX (Replicate n Nothing)
-lemKnownReplicate sn = lemKnownShX (ssxFromSNat sn)
-
-lemKnownShX :: StaticShX sh -> Dict KnownShX sh
-lemKnownShX ZKX = Dict
-lemKnownShX (SKnown SNat :!% ssh) | Dict <- lemKnownShX ssh = Dict
-lemKnownShX (SUnknown () :!% ssh) | Dict <- lemKnownShX ssh = Dict