; Subspace Intersection stress test
(lambda (sg zer? zer one fa fm / fsub) (let* (
  ; (ex (lambda (m v)(write (list m v))(newline) v))
  (J ((fileVal "gIntersect") zer zer? one fa fsub fm /))
  (I (J 'inter))
  (rref (J 'rref))
  (DoL ((fileVal "Do") 'DoL)))
 
(ylppa ((fileVal "Matrix") sg zer zer? one fa fsub fm /)
     (lambda (rmg mm inv ip tr det i? v= m=) (let* (
   (im (lambda (n) (let z () (let* ((m (rmg n)))
     (if (zer? (det m)) (z) m)))))
   (scr (lambda (s) (mm (im (length s)) s)))
  ;  (scr (lambda (s) s))
   (fdist (lambda (a b c) ; test false distributive law for subspaces
; a, b and c should each be a row of rows of field elements.
; (write (list "fjpoe" z a b c))(newline)
     (let ((a (scr a)) (b (scr b))(c (scr c)))
     (let ((in (I a (append b c))))
      (m= (rref (append a (I b c))) (I (append a b) (append a c)))))))
   (dist (lambda (a b c n) (m= (rref (append a (I b c)))
          (I (append a b) (append a c))))))
  (lambda (n a b c) (let* (
  (nv (lambda (j) (DoL n (lambda(k) (if (= j k) one zer)))))
  (vg (lambda () (DoL n (lambda (k) (sg)))))
  (vsg (lambda (n) (DoL n (lambda (k) (vg))))))
  (list
  
  (not (fdist '((1 1)) '((1 0)) '((0 1))))
  (not (dist '((1 1)) '((1 0)) '((0 1)) 0))
  (dist (vsg a) (vsg b) (vsg c) 1)
  (dist (DoL a (lambda (j) (nv j)))
         (DoL b (lambda (j) (nv j)))
         (DoL c (lambda (j) (nv j))) 2)
   (dist (list (nv a))(list (nv b))(list (nv c)) 3)
    ))))))))

(define za ((fileVal "testInter")
  (let ((w ((fileVal "RC4") 'nb "vip3w"))) (lambda () (modulo (w 1) 5)))
  zero? 0 1 + * / -))
(za 4 1 2 2) ; => (#t #t #t #t #t)
