module Language.Nominal.UnifySpec
    ( spec
    ) where

import Test.Hspec
import Test.QuickCheck

import Language.Nominal.Properties.SpecUtilities ()

import Language.Nominal.Properties.UnifySpec

spec :: Spec
spec = do
    it "l is not always unifiable with l', e.g. l = [] and l' nonempty" $ property prop_l_l'
    it "res ns' (res ns x)  unifiable with  res ns (res ns' x)" $ property prop_res_res
    it "x' -> ns x -> res ns x  unifies with x'" $ property prop_res_unres
    it "Unifiers correctly calculated" $ property prop_unify_ren
    it "idRen == idRen [a -> a] (equality is on nub)" $ property prop_renId
    it "Permutations and freshening renamings coincide (lists of lists of atoms)" $ property prop_fresh_ren_atmlistlist
    it "Permutations and freshening renamings coincide (abstractions of lists of atoms)" $ property prop_fresh_ren_absatmlist


