How to create Arbitrary instance for dependent types?

You probably don’t need the SNat itself. You should be able to access all its functionality through KnownNat. For example, to pattern match you use

natVal :: forall n proxy. KnownNat n => proxy n -> Integer

https://hackage.haskell.org/package/base-4.18.0.0/docs/GHC-TypeLits.html#v:natVal