Simply wrap the type you want to generate (assuming it satisfies all the necessary constraints) to refine the terms generated:
{-# LANGUAGE DataKinds #-}
import Data.Set (Set)
import Test.QuickCheck
import Test.QuickCheck.Instances
import GHC.TypeLits
instance Arbitrary LinearEquation where
arbitrary = do
vars <- arbitrary :: Gen (AtLeast 3 Set String)
-- ...