Branching programs and binary decision diagrams : theory and applications