This example is the left part of Fig.2 in our ATVA'16 paper titled "Spot 2.0 — a framework for LTL and ω-automata manipulation", slightly updated to the current version of Spot.
import spot
spot.setup(show_default='.b')
f = spot.formula('GFa <-> GFb'); f
f.translate()
def implies(f, g):
f = spot.formula(f)
g = spot.formula.Not(g)
return spot.product(f.translate(), g.translate()).is_empty()
def equiv(f, g):
return implies(f, g) and implies(g, f)
equiv('a U (b U a)', 'b U a')
equiv('!(a U b)', '!a U !b')