anchor.diff:        mk
   
     member z.Pos (_: Elem<'r, And<'r, 'rs>, 'p>,
  -                down: Z<'w, 'r>,
  -                PI left : PIZ<                'ls  , And<'l, And<'r, 'rs>>, 'w, 'p>,
  -                PI right: PIZ<And<'r, And<'l, 'ls>>,                 'rs  , 'w, 'p>)
  -                        : PIZ<        And<'l, 'ls> ,         And<'r, 'rs> , 'w, 'p> =
  +                down: Down<'w, 'r>,
  +                PI left : ProductDownI<                'ls  , And<'l, And<'r, 'rs>>, 'w, 'p>,
  +                PI right: ProductDownI<And<'r, And<'l, 'ls>>,                 'rs  , 'w, 'p>)
  +                        : ProductDownI<        And<'l, 'ls> ,         And<'r, 'rs> , 'w, 'p> =
       PI <| fun wllsrrsC ->
         let wlslrrsC (And (ls, (And (l, And (r, rs))))) =
           And (And (l, ls), And (r, rs)) |> wllsrrsC
  
positive.code: 
    member z.Union (m: Union<'u>,
                    _: AsChoice<'c, 'u>,
                    U u: UZ<'c, 'c, 'w, 'u>) : Z<'w, 'u> =
      let cs = Array.ofList u
      fun wuC u -> cs.[m.Tag u] wuC u
  
  
negative.code:       mk
  
    member z.Pos (_: Elem<'r, And<'r, 'rs>, 'p>,
                  down: Down<'w, 'r>,
                  P0 left : ProductDown0<             And<'l, And<'r, 'rs>>, 'w, 'p>,
                  PI right: ProductDownI<And<'r, 'l>,                 'rs  , 'w, 'p>)
                          : ProductDownI<        'l ,         And<'r, 'rs> , 'w, 'p> =
      PI <| fun wlrrsC ->
        let wrlrsC (And (And (r, l), rs)) = And (l, And (r, rs)) |> wlrrsC
        let rec mk (And (l, And (r, rs))) =
  