; Check conformity with . (define (G f) (apply (lambda (conj sg zer zer? one + - * inv) (list (lambda (x) (cons (conj (car x)) (- zer (cdr x)))) (lambda () (cons (sg) (sg))) (cons zer zer) (lambda (a) (and (zer? (car a)) (zer? (cdr a)))) (cons one zer) (lambda (a b) (cons (+ (car a)(car b))(+ (cdr a)(cdr b)))) (lambda (a b) (cons (- (car a)(car b))(- (cdr a)(cdr b)))) (lambda (a b) (cons (- (* (car a)(car b))(* (cdr b)(conj (cdr a)))) (+ (* (car b)(cdr a))(* (conj (car a))(cdr b))))) (lambda (x) (let ((d (inv (+ (* (car x)(conj (car x))) (* (cdr x)(conj (cdr x))))))) (cons (* d (conj (car x)))(- zer (* d (cdr x)))))))) f)) (define reals (list (lambda (x) x) (lambda () 2) 0 zero? 1 + - * (lambda (x) (/ x)))) (define P (G (G (G reals)))) (define a0 '((1 . 0) . (0 . 0))) (define a1 '((0 . 1) . (0 . 0))) (define a2 '((0 . 0) . (1 . 0))) (define a3 '((0 . 0) . (0 . 1))) (define z '((0 . 0) . (0 . 0))) (define e0 (cons a0 z)) (define e1 (cons a1 z)) (define e2 (cons a2 z)) (define e3 (cons a3 z)) (define e4 (cons z a0)) (define e5 (cons z a1)) (define e6 (cons z a2)) (define e7 (cons z a3)) (define m (cadddr (cddddr P))) ; multiply (define sb (caddr (cddddr P))) ; subtract (list (sb (m e3 e4) e6) (sb (m e1 e2) e4)) => ((((0 . 0) 0 . 0) (0 . 0) -1 . -1) (((0 . 0) 0 . -1) (-1 . 0) 0 . 0)) no go! My definitions of ei may be wrong.