def test_second_case(self):
     self.assertEqual(biconditional_elimination('p&q<>p&r'),
                      '(p&q>>p&r)&(p&r>>p&q)')
 def test_ninth_case(self):
     self.assertEqual(biconditional_elimination('p<>(r<>q)'),
                      '(p>>(r>>q)&(q>>r))&((r>>q)&(q>>r)>>p)')
 def test_first_case(self):
     self.assertEqual(biconditional_elimination('p<>q'), '(p>>q)&(q>>p)')
 def test_eight_case(self):
     self.assertEqual(biconditional_elimination('(p<>q)<>r'),
                      '((p>>q)&(q>>p)>>r)&(r>>(p>>q)&(q>>p))')
 def test_seventh_case(self):
     self.assertEqual(
         biconditional_elimination('(p&q>>r)<>(p>>r)|(q>>r)'),
         '((p&q>>r)>>(p>>r)|(q>>r))&((p>>r)|(q>>r)>>(p&q>>r))')
 def test_fifth_case(self):
     self.assertEqual(
         biconditional_elimination('(p>>q&r)<>(p>>q)&(p>>r)'),
         '((p>>q&r)>>(p>>q)&(p>>r))&((p>>q)&(p>>r)>>(p>>q&r))')
 def test_fourth_case(self):
     self.assertEqual(biconditional_elimination('(p>>q)<>p&~q'),
                      '((p>>q)>>p&~q)&(p&~q>>(p>>q))')
 def test_third_case(self):
     self.assertEqual(biconditional_elimination('(p<>q)>>p&q'),
                      '(p>>q)&(q>>p)>>p&q')