reducing the terms is gonna be more complicated than i thought
it'll be easier to handle each term as objects