parameters {0 a, b, c : Container}
  distribAllSeq : (a * b)  c =%> (a  c) * (b  c)
  distribAllSeq = exProduct <!
                  (\(MkEx xx yy) => \case (+> zz) => +> zz.π1 ## zz.π2
                                          (<+ zz) => <+ zz.π1 ## zz.π2)
 
  distribAnySeq : (a * b)  c =%> (a  c)  (b  c)
  distribAnySeq = exProduct <!
                  (\(MkEx xx yy), (x1 && x2) =>
                      \case (+> zz) => x2 zz
                            (<+ zz) => x1 zz)
 
  distribPlusAllSeq : (a + b)  c =%> (a  c) + (b  c)
  distribPlusAllSeq = exCoprod <!
                      (\case (MkEx (+> x1) x2) => \y, z => y z
                             (MkEx (<+ x1) x2) => \y, z => y z)
 
  distribPlusAnySeq : (a + b)  c =%> (a  c) + (b  c)
  distribPlusAnySeq = exCoprod <!
                      (\case (MkEx (+> x1) x2) => id
                             (MkEx (<+ x1) x2) => id)