anchor.diff:          ((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; 
  +                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 = 
  
positive.code: 
  let LAMBDA_UNIQUE = prove((parse_term "!f:A^B g.
          (!i. 1 <= i /\ i <= dimindex(:B) ==> (f$i = g i)) <=>
          ((lambda) g = f)"),
          SIMP_TAC [CART_EQ; LAMBDA_BETA]
          |> THEN <| MESON_TAC [])
  let LAMBDA_ETA = 
      prove
  
negative.code:              "s PCROSS t = {pastecart (x:A^M) (y:A^N) | x IN s /\ y IN t}")
  
  let FORALL_IN_PCROSS = prove((parse_term "(!z. z IN s PCROSS t ==> P z) <=>
     (!x y. x IN s /\ y IN t ==> P(pastecart x y))"), REWRITE_TAC [PCROSS; FORALL_IN_GSPEC])
  let EXISTS_IN_PCROSS = prove((parse_term "(?z. z IN s PCROSS t /\ P z) <=>
     (?x y. x IN s /\ y IN t /\ P(pastecart x y))"), REWRITE_TAC [PCROSS; EXISTS_IN_GSPEC; CONJ_ASSOC])
  let PASTECART_IN_PCROSS = 
      prove
          ((parse_term 
  