anchor.diff:  
   let CART_EQ = 
       prove((parse_term "!x:A^B y.
  -    (x = y) <=> !i. 1 <= i /\ i <= dimindex(:B) ==> (x$i = y$i)"),
  -    REPEAT GEN_TAC
  +    (x = y) <=> !i. 1 <= i /\ i <= dimindex(:B) ==> (x$i = y$i)"), REPEAT GEN_TAC
       |> THEN <| REWRITE_TAC [finite_index
                               GSYM FORALL_FINITE_INDEX]
       |> THEN <| REWRITE_TAC [GSYM FUN_EQ_THM
  
positive.code:          <| REWRITE_TAC [FORALL_IN_PCROSS; FSTCART_PASTECART; SNDCART_PASTECART])
  
  let FINITE_PCROSS = prove((parse_term "!(s:A^M->bool) (t:A^N->bool).
          FINITE s /\ FINITE t ==> FINITE(s PCROSS t)"),
          MESON_TAC [REWRITE_RULE [HAS_SIZE] HAS_SIZE_PCROSS])
  
  let FINITE_PCROSS_EQ = 
      prove((parse_term "!(s:A^M->bool) (t:A^N->bool).
  
negative.code:         ((parse_term "(!s. s PCROSS {} = {}) /\ (!t. {} PCROSS t = {})"), 
           REWRITE_TAC [PCROSS_EQ_EMPTY])
  let SUBSET_PCROSS = prove((parse_term "!s t s' t'. s PCROSS t SUBSET s' PCROSS t' <=>
                  s = {} \/ t = {} \/ s SUBSET s' /\ t SUBSET t'"), SIMP_TAC [PCROSS; EXTENSION; IN_ELIM_PASTECART_THM; SUBSET; 
                       FORALL_PASTECART; PASTECART_IN_PCROSS; NOT_IN_EMPTY]
                  |> THEN <| MESON_TAC [])
  let PCROSS_MONO = 
  