Start interface with sage and homotopy

This commit is contained in:
Miguel Marco 2019-05-02 16:40:55 +02:00
parent 5d80fe983b
commit a80dd83a67
Signed by: mmarco
GPG Key ID: DD0114EDB7410592
7 changed files with 2387 additions and 3 deletions

View File

@ -56,11 +56,16 @@
(:file "cl-space-efhm")
(:file "whitehead")
(:file "smith")
#|
(:file "sage-interface")
(:module "anromero"
:components
((:file "bicomplexes")
(:file "filtered-complexes")
(:file "spectral-sequences")))
|#
(:file "spectral-sequences")
(:file "resolutions")
(:file "cylinders")
(:file "fundamental-classes")
(:file "homotopy")))
))))

View File

@ -4,6 +4,10 @@
(:use #:cl)
(:export #:KENZO-VERSION
;; sage-interface.lisp
#:ITOA
;; kenzo.lisp
#:*BC*
@ -600,4 +604,133 @@
#:Z2-WHITEHEAD
#:Z2-WHITEHEAD-SINTR
;; anromero
;; cylinders.lisp
#:DISPATCH-CYLN-CMBN
#:CYLN-CMBN-CMBNA1
#:CYLN-CMBN-CMBNB
#:CYLN-CMBN-CMBNA2
#:MAKE-CYLN-CMBN
#:CYLNX-CMPR
#:CYLINDER-CMPR
#:CYLINDER-BASIS
#:CYLINDER-INTR-DFFR
#:CYLINDER
#:CYLINDER-RRDCT
#:CYLINDER-LRDCT
#:CYLNX
#:ICYLN
#:CYLNA1
#:CYLNB
#:CYLNA2
#:WITH-CYLN
;; resolutions.lisp
#:ZGGNRT-P
#:ZGTERM-P
#:IZGCMBN-P
#:ZGCMBN-P
#:GROUP
#:AB-GROUP
#:GROUP-MRPH
#:ZGCC
#:ZGMRPH
#:BUILD-GROUP
#:BUILD-GRMR
#:ZGGNRT-CMPR
#:ZGCHCM-BASIS
#:ZGMRPH-GNRT-GNRT
#:ZGMRPH-GNRT-ZGGNRT
#:ZGMRPH-GNRT-ZGCMBN
#:ZGMRPH-ZGGNRT-ZGGNRT
#:ZGMRPH-ZGGNRT-ZGCMBN
#:ZGMRPH-GNRT-?
#:ZGMRPH-ZGGNRT-?
#:ZGMRPH-ZGCMBN-?
#:IZGMRPH-IMRPH
#:INTR-ZGCHCM-MRPH
#:BUILD-ZGCHCM
#:BUILD-ZGMRPH
#:ZGCMBN-TWI
#:ZGMRPH-TWI-INTR
#:ZGMRPH-TWI
#:CHCM-TWI
#:CYCLICGROUP
#:Z-GROUP
#:CYCLICGROUP-ZGCHCM
#:CYCLICGROUP-RSLTN
#:BAR-ZGCMPR
#:BAR-ZGBASIS
#:BAR-BNDR-I
#:BAR-BNDR-INTR
#:BAR-ZGCHCM
#:BAR-CNTRHMTP-INTR
#:BAR-F-INTR
#:BAR-G-INTR
#:BAR-RSLTN
#:K-G-1-CMPR
#:K-G-1-BASIS
#:K-G-1-FACE
#:G-ABSM-BAR
#:G-BAR-ABSM
#:K-G-1-GRML
#:K-G-1-GRIN
#:K-G-0-BASIS
#:K-G-0-FACE
#:K-G-0-GRML
#:K-G-0-GRIN
#:K-ZP-1
#:K-ZP
#:UNIV-FBRT-INTR
#:UNIV-FBRT-TW
#:RSLTN-ZGCHCM
#:RSLTN-CNTRHMTP
#:2RSLTN-ZGMRPH-INTR
#:2RSLTN-ZGMRPH
#:2RSLTN-HMTPOP-INTR
#:2RSLTN-HMTPOP
#:K-CM-N
#:ZGGNRT
#:ZGGNRT1
#:ZGGNRT2
#:WITH-ZGGNRT
#:ZGTERM
#:WITH-ZGTERM
#:BUILD-AB-GROUP
;; homotopy.lisp
#:CHCM-HOMOLOGY-FORMAT
#:HOMOLOGY-FORMAT
#:FIRST-NON-NULL-HOMOLOGY-GROUP-AUX
#:FIRST-NON-NULL-HOMOLOGY-GROUP
#:COMPUTE-HOMOTOPY-Z-XSLT
#:COMPUTE-HOMOTOPY-Z2-XSLT
#:COMPUTE-HOMOTOPY-ZP-XSLT
#:SPLIT-COMPONENTS
#:CONSTRUCT-SPACE-ITERATIVE
#:COMPUTE-HOMOTOPY-SEVERAL-XSLT
#:COMPUTE-HOMOTOPY2-XSLT
#:COMPUTE-HOMOTOPY
#:HOMOTOPY
#:HOMOTOPY-LIST
;; fundamental-classes.lisp
#:ZP-FUNDAMENTAL-GMSM
#:ZP-COCYCLE-GBAR
#:ZP-COCYCLE-GBAR-HEAD
#:ZP-WHITEHEAD-SINTR
#:ZP-WHITEHEAD
))

368
src/anromero/cylinders.lisp Normal file
View File

@ -0,0 +1,368 @@
;;; CYLINDERS CYLINDERS CYLINDERS CYLINDERS CYLINDERS CYLINDERS CYLINDERS
;;; CYLINDERS CYLINDERS CYLINDERS CYLINDERS CYLINDERS CYLINDERS CYLINDERS
;;; CYLINDERS CYLINDERS CYLINDERS CYLINDERS CYLINDERS CYLINDERS CYLINDERS
(IN-PACKAGE #:cat)
(provide "cyclinders")
;; MACROS
(DEFMACRO CYLNX (cyln)
`(car ,CYLN))
(DEFMACRO ICYLN (cyln)
`(cdr ,cyln))
(DEFMACRO CYLNA1 (gnrt)
`(cons :CYLNA1 ,gnrt))
(DEFMACRO CYLNB (gnrt)
`(cons :CYLNB ,gnrt))
(DEFMACRO CYLNA2 (gnrt)
`(cons :CYLNA2 ,gnrt))
(DEFMACRO WITH-CYLN ((cylnx icyln) cyln . body)
`(let ((,cylnx (cylnx ,cyln))
(,icyln (icyln ,cyln)))
(declare
(type (member :CYLNA1 :CYLNB :CYLNA2) ,cylnx)
(type gnrt ,icyln))
,@body))
(DEFUN DISPATCH-CYLN-CMBN (cmbn)
(declare (type cmbn cmbn))
(the (values cmbn cmbn cmbn)
(with-cmbn (degr list) cmbn
(let ((lista1 +empty-list+)
(listb +empty-list+)
(lista2 +empty-list+))
(declare (list lista1 listb lista2))
(dolist (term list)
(declare (type term term))
(with-term (cffc cyln) term
(with-cyln (cylnx icyln) cyln
(ecase cylnx
(:cylna1 (push (term cffc icyln) lista1))
(:cylnb (push (term cffc icyln) listb))
(:cylna2 (push (term cffc icyln) lista2))))))
(values
(make-cmbn :degr (1- degr) :list (nreverse lista1))
(make-cmbn :degr degr :list (nreverse listb))
(make-cmbn :degr degr :list (nreverse lista2)))))))
(DEFUN CYLN-CMBN-CMBNA1 (cmbn)
(declare (type cmbn cmbn))
(the cmbn
(with-cmbn (degr list) cmbn
(make-cmbn :degr (1- degr)
:list (do ((rslt +empty-list+)
(mark list (cdr mark)))
((endp mark) (nreverse rslt))
(declare (list rslt mark))
(with--term (cffc cyln) mark
(with-cyln (cylnx gnrta1) cyln
(if (eq cylnx :cylna1)
(push (term cffc gnrta1) rslt)
(return (nreverse rslt))))))))))
(DEFUN CYLN-CMBN-CMBNB (cmbn)
(declare (type cmbn cmbn))
(the cmbn
(with-cmbn (degr list) cmbn
(make-cmbn :degr degr
:list (do ((rslt +empty-list+)
(mark (member :cylnb list :key #'cadr) (cdr mark)))
((endp mark) (nreverse rslt))
(declare (list rslt mark))
(with--term (cffc cyln) mark
(with-cyln (cylnx gnrtb) cyln
(if (eq cylnx :cylnb)
(push (term cffc gnrtb) rslt)
(return (nreverse rslt))))))))))
(DEFUN CYLN-CMBN-CMBNA2 (cmbn)
(declare (type cmbn cmbn))
(the cmbn
(with-cmbn (degr list) cmbn
(make-cmbn :degr degr
:list (mapcar
#'(lambda (term)
(declare (type term term))
(with-term (cffc cyln) term
(term cffc (icyln cyln))))
(member :cylna2 list :key #'cadr))))))
(DEFUN MAKE-CYLN-CMBN (cmbna1 cmbnb cmbna2)
(declare (type cmbn cmbna1 cmbnb cmbna2))
(the cmbn
(with-cmbn (degra1 lista1) cmbna1
(with-cmbn (degrb listb) cmbnb
(with-cmbn (degra2 lista2) cmbna2
(unless (= (1+ degra1) degrb degra2)
(error "In Make-cyln-cmbn, the degrees are not coherent."))
(make-cmbn :degr degrb
:list (nconc
(mapcar #'(lambda (terma1)
(declare (type term terma1))
(with-term (cffc gnrta1) terma1
(term cffc (cylna1 gnrta1))))
lista1)
(mapcar #'(lambda (termb)
(declare (type term termb))
(with-term (cffc gnrtb) termb
(term cffc (cylnb gnrtb))))
listb)
(mapcar #'(lambda (terma2)
(declare (type term terma2))
(with-term (cffc gnrta2) terma2
(term cffc (cylna2 gnrta2))))
lista2))))))))
(DEFMETHOD PRINT-KEYCONS ((car (eql :CYLNA1)) cdr stream)
(declare
(type gnrt cdr)
(stream stream))
(the (eql t)
(progn
(format stream "<CylnA1 ~A>" cdr)
t)))
(DEFMETHOD PRINT-KEYCONS ((car (eql :CYLNB)) cdr stream)
(declare
(type gnrt cdr)
(stream stream))
(the (eql t)
(progn
(format stream "<CylnB ~A>" cdr)
t)))
(DEFMETHOD PRINT-KEYCONS ((car (eql :CYLNA2)) cdr stream)
(declare
(type gnrt cdr)
(stream stream))
(the (eql t)
(progn
(format stream "<CylnA2 ~A>" cdr)
t)))
(DEFUN CYLNX-CMPR (s1 s2)
(declare (symbol s1 s2))
(the cmpr
(if (string= s1 s2) :equal
(if (string= s1 :cylnA1) :less
(if (string= s2 :cylnA1) :greater
(if (string= s1 :cylnB) :less
:greater))))))
(DEFUN CYLINDER-CMPR (cmpra cmprb)
(declare (type cmprf cmpra cmprb))
(flet ((rslt (cyln1 cyln2)
(let ((cylnx1 (cylnx cyln1)))
(declare (type (member :cylna1 :cylnb :cylna2) cylnx1))
(lexico
(cylnx-cmpr cylnx1 (cylnx cyln2))
(case cylnx1
(:cylna1 (funcall cmpra (icyln cyln1) (icyln cyln2)))
(:cylnb (funcall cmprb (icyln cyln1) (icyln cyln2)))
(:cylna2 (funcall cmpra (icyln cyln1) (icyln cyln2))))))))
(the cmprf #'rslt)))
(DEFUN CYLINDER-BASIS (basisa basisb)
(declare (type basis basisa basisb))
(the basis
(if (or (eq :locally-effective basisa)
(eq :locally-effective basisb)
)
:locally-effective
(flet ((rslt (degr)
(declare (fixnum degr))
(append
(mapcar #'(lambda (item)
(declare (type gnrt item))
(cylna1 item))
(funcall basisa (1- degr)))
(mapcar #'(lambda (item)
(declare (type gnrt item))
(cylnb item))
(funcall basisb degr))
(mapcar #'(lambda (item)
(declare (type gnrt item))
(cylna2 item))
(funcall basisa degr)))))
(the basis #'rslt)))))
(DEFUN CYLINDER-INTR-DFFR (cmpra cmprb dffra dffrb f)
(declare
(type cmprf cmpra cmprb)
(type morphism dffra dffrb f))
(flet ((rslt (cmbn)
(declare (type cmbn cmbn))
(the cmbn
(multiple-value-bind (cmbna1 cmbnb cmbna2) (dispatch-cyln-cmbn cmbn)
(declare (type cmbn cmbna1 cmbnb cmbna2))
(let ((dffra1-cmbn (cmbn-? dffra cmbna1))
(dffrb-cmbn (cmbn-? dffrb cmbnb))
(dffra2-cmbn (cmbn-? dffra cmbna2))
(f-cmbn (cmbn-? f cmbna1))
)
(declare (type cmbn dffra1-cmbn dffrb-cmbn dffra2-cmbn f-cmbn))
(let ((cmbnb (2cmbn-add cmprb f-cmbn dffrb-cmbn))
(cmbna2 (2cmbn-sbtr cmpra dffra2-cmbn cmbna1)))
(declare (type cmbn cmbnb cmbna2))
(make-cyln-cmbn (cmbn-opps dffra1-cmbn) cmbnb cmbna2)))))))
(the intr-mrph #'rslt)))
(DEFUN CYLINDER (f)
(declare (type morphism f))
(the chain-complex
(with-slots (sorc trgt) f
(declare
(type chain-complex sorc trgt ))
(let ((rslt (build-chcm
:cmpr (cylinder-cmpr (cmpr sorc) (cmpr trgt))
:basis (cylinder-basis (basis sorc) (basis trgt))
:bsgn :undefined
:intr-dffr (cylinder-intr-dffr (cmpr sorc) (cmpr trgt)
(dffr sorc) (dffr trgt) f)
:strt :cmbn
:orgn `(cylinder ,f))))
(declare (type chain-complex rslt))
(slot-makunbound rslt 'bsgn)
rslt))))
(DEFUN CYLINDER-RRDCT (f)
(declare (type morphism f))
(the reduction
(with-slots (sorc (bcc trgt)) f
(with-slots ((cmprb cmpr)) bcc
(let ((cylinder (cylinder f)))
(let ((rf (build-mrph
:sorc cylinder :trgt bcc :degr 0
:intr #'(lambda (cmbn)
(declare (type cmbn cmbn))
(2cmbn-add cmprb (cyln-cmbn-cmbnb cmbn) (cmbn-? f (cyln-cmbn-cmbna2 cmbn))))
:strt :cmbn
:orgn `(cylinder ,f rf)))
(rg (build-mrph
:sorc bcc :trgt cylinder :degr 0
:intr #'(lambda (cmbn)
(declare (type cmbn cmbn))
(let* ((cmbna1 (zero-cmbn (1- (cmbn-degr cmbn))))
(cmbna2 (zero-cmbn (cmbn-degr cmbn))))
(declare (type cmbn cmbna1 cmbna2))
(make-cyln-cmbn cmbna1 cmbn cmbna2)))
:strt :cmbn
:orgn `(cylinder ,f rg)))
(rh (build-mrph
:sorc cylinder :trgt cylinder :degr +1
:intr #'(lambda (cmbn)
(declare (type cmbn cmbn))
(let* ((cmbna1 (cmbn-opps (cyln-cmbn-cmbna2 cmbn)))
(cmbnb (zero-cmbn (1+ (cmbn-degr cmbn))))
(cmbna2 (zero-cmbn (1+ (cmbn-degr cmbn)))))
(declare (type cmbn cmbna1 cmbnb cmbna2))
(make-cyln-cmbn cmbna1 cmbnb cmbna2)))
:strt :cmbn
:orgn `(cylinder ,f rh))))
(declare
(type chain-complex cylinder)
(type morphism rf rg rh))
(build-rdct :f rf :g rg :h rh :orgn `(Cylinder right reduction ,f))))))))
(DEFUN CYLINDER-LRDCT (f g h k)
(declare (type morphism f g h k))
(the reduction
(with-slots ((acc sorc) (bcc trgt)) f
(with-slots ((cmpra cmpr)) acc
(with-slots ((cmprb cmpr)) bcc
(let ((cylinder (cylinder f)))
(let ((lf (build-mrph
:sorc cylinder :trgt acc :degr 0
:intr #'(lambda (cmbn)
(declare (type cmbn cmbn))
(2cmbn-sbtr cmpra
(2cmbn-add cmpra (cyln-cmbn-cmbna2 cmbn) (cmbn-? g (cyln-cmbn-cmbnb cmbn)))
(cmbn-? h (cyln-cmbn-cmbna1 cmbn))))
:strt :cmbn
:orgn `(cylinder hmtpeq ,f lf)))
(lg (build-mrph
:sorc acc :trgt cylinder :degr 0
:intr #'(lambda (cmbn)
(declare (type cmbn cmbn))
(let* ((cmbna1 (zero-cmbn (1- (cmbn-degr cmbn))))
(cmbnb (zero-cmbn (cmbn-degr cmbn)))
)
(declare (type cmbn cmbna1 cmbnb ))
(make-cyln-cmbn cmbna1 cmbnb cmbn)))
:strt :cmbn
:orgn `(cylinder hmtpeq ,f lg)))
(lh (build-mrph
:sorc cylinder :trgt cylinder :degr +1
:intr #'(lambda (cmbn)
(declare (type cmbn cmbn))
(multiple-value-bind (cmbna1 cmbnb cmbna2)
(dispatch-cyln-cmbn cmbn)
(let* ((cmbna11 (cmbn-opps (cmbn-? h cmbna1)))
(cmbna12 (cmbn-opps (cmbn-? g (cmbn-? k (cmbn-? f cmbna1)))))
(cmbna13 (cmbn-? g (cmbn-? f (cmbn-? h cmbna1))))
(cmbna14 (cmbn-? g cmbnb))
(cmbnb1 (cmbn-opps (cmbn-? k (cmbn-? k (cmbn-? f cmbna1)))))
(cmbnb2 (cmbn-? k (cmbn-? f (cmbn-? h cmbna1))))
(cmbnb3 (cmbn-? k cmbnb))
(cmbna21 (cmbn-opps (cmbn-? h (cmbn-? h cmbna1))))
(cmbna22 (cmbn-opps (cmbn-? h (cmbn-? g (cmbn-? k (cmbn-? f cmbna1))))))
(cmbna23 (cmbn-? h (cmbn-? g (cmbn-? f (cmbn-? h cmbna1)))))
(cmbna24 (cmbn-? g (cmbn-? k (cmbn-? k (cmbn-? f cmbna1)))))
(cmbna25 (cmbn-opps (cmbn-? g (cmbn-? k (cmbn-? f (cmbn-? h cmbna1))))))
(cmbna26 (cmbn-? h (cmbn-? g cmbnb)))
(cmbna27 (cmbn-opps (cmbn-? g (cmbn-? k cmbnb)))))
(declare (type cmbn cmbna11 cmbna12 cmbna13 cmbna14
cmbnb1 cmbnb2 cmbnb3
cmbna21 cmbna22 cmbna23 cmbna24 cmbna25 cmbna26 cmbna27)
(ignore cmbna2))
(make-cyln-cmbn (ncmbn-add cmpra cmbna11 cmbna12 cmbna13 cmbna14)
(ncmbn-add cmprb cmbnb1 cmbnb2 cmbnb3)
(ncmbn-add cmpra cmbna21 cmbna22 cmbna23 cmbna24 cmbna25 cmbna26 cmbna27)))))
:strt :cmbn
:orgn `(cylinder hmtpeq ,f lh))))
(declare
(type chain-complex cylinder)
(type morphism lf lg lh))
(build-rdct :f lf :g lg :h lh :orgn `(Cylinder left reduction ,f)))))))))
;; Redefined in file "effective-homotopy"
(DEFMETHOD SEARCH-EFHM (smst (orgn (eql 'k-g-1)))
(declare (type simplicial-group smst))
(let* ((group (second (orgn smst)))
(rsltn1 (bar-rsltn group))
(rsltn2 (resolution group))
(f (zgmrph-twi (2rsltn-zgmrph rsltn1 rsltn2)))
(g (zgmrph-twi (2rsltn-zgmrph rsltn2 rsltn1)))
(h (zgmrph-twi (2rsltn-hmtpop rsltn1 rsltn2)))
(k (zgmrph-twi (2rsltn-hmtpop rsltn2 rsltn1)))
(rrdct (cylinder-rrdct f))
(lrdct (cylinder-lrdct f g h k)))
(the homotopy-equivalence
(build-hmeq :lrdct lrdct :rrdct rrdct :orgn `(efhm of ,smst)))))

View File

@ -0,0 +1,168 @@
;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*
;; FUNDAMENTAL-CLASSES FUNDAMENTAL-CLASSES FUNDAMENTAL-CLASSES FUNDAMENTAL-CLASSES FUNDAMENTAL-CLASSES FUNDAMENTAL-CLASSES
;; FUNDAMENTAL-CLASSES FUNDAMENTAL-CLASSES FUNDAMENTAL-CLASSES FUNDAMENTAL-CLASSES FUNDAMENTAL-CLASSES FUNDAMENTAL-CLASSES
;; FUNDAMENTAL-CLASSES FUNDAMENTAL-CLASSES FUNDAMENTAL-CLASSES FUNDAMENTAL-CLASSES FUNDAMENTAL-CLASSES FUNDAMENTAL-CLASSES
(IN-PACKAGE #:cat)
(provide "fundamental-classes")
(DEFUN ZP-FUNDAMENTAL-GMSM (p dmns pi-elm) ;; pi-elm not "equal" to 0
(declare (fixnum dmns pi-elm))
(the gmsm
(if (= 1 dmns)
(list pi-elm)
(let ((bspn (if (= 2 dmns) nil +null-gbar+)))
(declare (type gmsm bspn))
(make-gbar :dmns dmns
:list (cons (absm 0 (Zp-fundamental-gmsm p (1- dmns) pi-elm))
(mapcar
#'(lambda (k)
(declare (fixnum k))
(absm (mask k) bspn))
(nreverse (<a-b> 0 (- dmns 2))))))))))
(DEFUN ZP-COCYCLE-GBAR (p n dmns cocycle)
;; cocycle \in Z^n(\Delta^{dmns}, \pi) with \pi = Z/pZ
(declare
(fixnum p n dmns)
(list cocycle))
(the absm
(progn
(mapc
#'(lambda (cons)
(declare (cons cons))
(setf (cdr cons)
(mod (cdr cons) p)))
cocycle)
(cond ((= n 1)
(g-bar-absm (cyclicgroup p) (nreverse (mapcar #'cdr cocycle))))
((= n dmns)
(let ((value (cdr (first cocycle))))
(declare (fixnum value))
(if (zerop value)
(absm (mask dmns) +null-gbar+)
(absm 0 (zp-fundamental-gmsm p dmns value)))))
(t
(let ((cocycle1 +empty-list+)
(cocycle2 +empty-list+))
(declare (list cocycle1 cocycle2))
(dolist (cons cocycle)
(declare (cons cons))
(if (evenp (car cons))
(push (cons (ash (car cons) -1) (cdr cons))
cocycle1)
(push (cons (ash (car cons) -1) (cdr cons))
cocycle2)))
(setf cocycle1 (nreverse cocycle1)
cocycle2 (nreverse cocycle2))
(mapc
#'(lambda (cons)
(declare (cons cons))
(when (evenp (car cons))
(setf (cdr cons)
(mod (- (cdr cons)
(cdr (assoc (1+ (car cons)) cocycle1)))
p))))
cocycle2)
(let ((head-absm (zp-cocycle-gbar p (1- n) (1- dmns) cocycle2))
(tail-absm (zp-cocycle-gbar p n (1- dmns) cocycle1)))
(declare (type absm head-absm tail-absm))
(normalize-gbar
(cons dmns
(cons head-absm
(rest (unnormalize-gbar tail-absm
(if (= n 2) () +null-gbar+)))))))))))))
(DEFUN ZP-COCYCLE-GBAR-HEAD (p n dmns cocycle)
;; cocycle \in Z^n(\Delta^{dmns}, \pi) with \pi = Z/pZ
(declare
(fixnum n dmns)
(list cocycle))
(the absm
(progn
(mapc
#'(lambda (cons)
(declare (cons cons))
(setf (cdr cons)
(mod (cdr cons) p)))
cocycle)
(cond ((= n 1)
(error "In Zp-COCYCLE-GBAR-HEAD, this point should not have been reached."))
; (zp-bar-absm (nreverse (mapcar #'cdr cocycle))))
((= n dmns)
(let ((value (cdr (first cocycle))))
(declare (fixnum value))
(if (zerop value)
(if (= n 2)
(absm 1 +empty-list+)
(absm (mask (1- dmns)) +null-gbar+))
(absm 0 (zp-fundamental-gmsm p (1- dmns) value)))))
(t
(let ((cocycle1 +empty-list+)
(cocycle2 +empty-list+))
(declare (list cocycle1 cocycle2))
(dolist (cons cocycle)
(declare (cons cons))
(if (evenp (car cons))
(push (cons (ash (car cons) -1) (cdr cons))
cocycle1)
(push (cons (ash (car cons) -1) (cdr cons))
cocycle2)))
(setf cocycle1 (nreverse cocycle1)
cocycle2 (nreverse cocycle2))
(mapc
#'(lambda (cons)
(declare (cons cons))
(when (evenp (car cons))
(setf (cdr cons)
(mod (- (cdr cons)
(cdr (assoc (1+ (car cons)) cocycle1)))
p))))
cocycle2)
(zp-cocycle-gbar p (1- n) (1- dmns) cocycle2)))))))
(DEFUN ZP-WHITEHEAD-SINTR (p smst n chml-clss
&aux (face (face smst))
(k-zp-n-1 (k-zp p (1- n)))
(idnt (bspn k-zp-n-1))
(efhm (efhm smst)))
(declare
(type simplicial-set smst)
(fixnum n)
(type morphism chml-clss)
(type face face)
(type ab-simplicial-group k-zp-n-1)
(type gmsm idnt)
(type homotopy-equivalence efhm))
(setf chml-clss
(i-cmps chml-clss (rf efhm) (lg efhm)))
(flet ((rslt (dmns gmsm)
(declare
(fixnum dmns)
(type gmsm gmsm))
(if (< dmns n)
(absm (mask (1- dmns)) idnt)
(zp-cocycle-gbar-head p n dmns
(gmsm-cocycle face n dmns gmsm chml-clss)))))
(the sintr #'rslt)))
(DEFUN ZP-WHITEHEAD (p smst chml-clss &aux (n (- (degr chml-clss))))
(declare
(type simplicial-set smst)
(fixnum p n)
(type morphism chml-clss))
(the fibration
(build-smmr
:sorc smst :trgt (k-zp p (1- n)) :degr -1
:sintr (zp-whitehead-sintr p smst n chml-clss)
:orgn `(zp-whitehead ,p ,smst))))

193
src/anromero/homotopy.lisp Normal file
View File

@ -0,0 +1,193 @@
;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*
;;; HOMOTOPY HOMOTOPY HOMOTOPY HOMOTOPY HOMOTOPY HOMOTOPY HOMOTOPY
;;; HOMOTOPY HOMOTOPY HOMOTOPY HOMOTOPY HOMOTOPY HOMOTOPY HOMOTOPY
;;; HOMOTOPY HOMOTOPY HOMOTOPY HOMOTOPY HOMOTOPY HOMOTOPY HOMOTOPY
;;; Authors: Jonathan Heras and Ana Romero
(IN-PACKAGE #:cat)
(provide "homotopy")
(DEFUN CHCM-HOMOLOGY-FORMAT (cc n)
(declare (type chain-complex cc) (type fixnum n))
(let ((rsl (homologie (chcm-mat cc n) (chcm-mat cc (1+ n))))
(str nil))
(declare (type list rsl))
(dolist (item rsl)
(declare (type list item))
(setf str (concatenate 'string str (format nil "Z")))
(unless (zerop (first item))
(setf str (concatenate 'string str (format nil "/~DZ" (first item)))))
(setf str (concatenate 'string str " ")))
str))
(DEFUN HOMOLOGY-FORMAT (chcm degr1 &optional (degr2 (1+ degr1)))
(declare (fixnum degr1 degr2))
(let ((result_hom nil))
(do ((degr degr1 (1+ degr)))
((>= degr degr2))
(declare (fixnum degr))
(setf result_hom (chcm-homology-format (echcm chcm) degr))
(terpri) (clock) (terpri))
result_hom))
(DEFUN FIRST-NON-NULL-HOMOLOGY-GROUP-AUX (chcm n limit)
(if (> n limit)
nil
(let ((hf (homology-format chcm n)))
(if hf
(1- n)
(first-non-null-homology-group-aux chcm (1+ n) limit)))))
(DEFUN FIRST-NON-NULL-HOMOLOGY-GROUP (chcm limit)
(first-non-null-homology-group-aux chcm 1 limit))
(DEFUN COMPUTE-HOMOTOPY-Z-XSLT (n-hom obj indx)
(let* ((ch (chml-clss (eval obj) indx))
(fib (z-whitehead (eval obj) (eval ch)))
(ft (fibration-total (eval fib)))
(result (homology-format (eval ft) (1+ indx))))
(if (= (1+ indx) n-hom)
(homology-format (eval ft) n-hom)
(if (string= "Z " result)
(compute-homotopy-z-xslt n-hom ft (1+ indx))
(if (string= "Z/2Z " result)
(compute-homotopy-z2-xslt n-hom ft (1+ indx))
(if (and (string= (subseq result 0 2) "Z/") (string= (subseq result (search "Z" result :start2 2)) "Z"))
(compute-homotopy-zp-xslt n-hom ft (1+ indx) (read-from-string (subseq result 2 (search "Z" result :start2 2))))
(compute-homotopy-several-xslt n-hom ft (1+ indx) result)))))))
(DEFUN COMPUTE-HOMOTOPY-Z2-XSLT (n-hom obj indx)
(let* ((ch (chml-clss (eval obj) indx))
(fib (z2-whitehead (eval obj) (eval ch)))
(ft (fibration-total (eval fib)))
(result (homology-format (eval ft) (1+ indx))))
(if (= (1+ indx) n-hom)
(homology-format (eval ft) n-hom)
(if (string= "Z " result)
(compute-homotopy-z-xslt n-hom ft (1+ indx))
(if (string= "Z/2Z " result)
(compute-homotopy-z2-xslt n-hom ft (1+ indx))
(if (and (string= (subseq result 0 2) "Z/") (string= (subseq result (search "Z" result :start2 2)) "Z"))
(compute-homotopy-zp-xslt n-hom ft (1+ indx) (read-from-string (subseq result 2 (search "Z" result :start2 2))))
(compute-homotopy-several-xslt n-hom ft (1+ indx) result)))))))
(DEFUN COMPUTE-HOMOTOPY-ZP-XSLT (n-hom obj indx n)
(let* ((ch (chml-clss (eval obj) indx))
(fib (zp-whitehead n (eval obj) (eval ch)))
(ft (fibration-total (eval fib)))
(result (homology-format (eval ft) (1+ indx))))
(if (= (1+ indx) n-hom)
(homology-format (eval ft) n-hom)
(if (string= "Z " result)
(compute-homotopy-z-xslt n-hom ft (1+ indx))
(if (string= "Z/2Z " result)
(compute-homotopy-z2-xslt n-hom ft (1+ indx))
(if (and (string= (subseq result 0 2) "Z/") (string= (subseq result (search "Z" result :start2 2)) "Z"))
(compute-homotopy-zp-xslt n-hom ft (1+ indx) (read-from-string (subseq result 2 (search "Z" result :start2 2))))
(compute-homotopy-several-xslt n-hom ft (1+ indx) result)))))))
(DEFUN SPLIT-COMPONENTS (string)
(let ((term (if (string= string "") "" (subseq string 0 2))))
(if (string= term "Z ")
(cons 1 (split-components (subseq string 2)))
(if (string= term "Z/")
(cons (read-from-string (subseq string 2 (search "Z" string :start2 2)))
(split-components (subseq string (+ 2 (search "Z" string :start2 2)))))
nil))))
(DEFUN CONSTRUCT-SPACE-ITERATIVE (chcm list indx)
(if (endp list)
chcm
(cond ((equal (car list) 1) (let* ((ch (chml-clss chcm indx))
(fib (z-whitehead chcm ch))
(ft (fibration-total fib)))
(construct-space-iterative ft (cdr list) indx)))
((equal (car list) 2) (let* ((ch (chml-clss chcm indx))
(fib (z2-whitehead chcm ch))
(ft (fibration-total fib)))
(construct-space-iterative ft (cdr list) indx)))
(t (let* ((ch (chml-clss chcm indx))
(fib (zp-whitehead (car list) chcm ch))
(ft (fibration-total fib)))
(construct-space-iterative ft (cdr list) indx)))
)))
(DEFUN COMPUTE-HOMOTOPY-SEVERAL-XSLT (n-hom obj indx hom)
(let* ((ft (construct-space-iterative obj (split-components hom) indx))
(result (homology-format ft (1+ indx))))
(if (= (1+ indx) n-hom)
(homology-format (eval ft) n-hom)
(if (string= "Z " result)
(compute-homotopy-z-xslt n-hom ft (1+ indx))
(if (string= "Z/2Z " result)
(compute-homotopy-z2-xslt n-hom ft (1+ indx))
(if (and (string= (subseq result 0 2) "Z/") (string= (subseq result (search "Z" result :start2 2)) "Z"))
(compute-homotopy-zp-xslt n-hom ft (1+ indx) (read-from-string (subseq result 2 (search "Z" result :start2 2))))
(compute-homotopy-several-xslt n-hom ft (1+ indx) result)))))))
(DEFUN COMPUTE-HOMOTOPY2-XSLT (n-hom obj degree hom)
(cond
((= n-hom 0)
(format nil "Z")
)
((< n-hom (1+ degree) )
(format nil ""))
((= n-hom (1+ degree))
(homology-format (eval obj) n-hom))
((string= hom "Z ")
(compute-homotopy-z-xslt n-hom obj (1+ degree)))
((string= hom "Z/2Z ")
(compute-homotopy-z2-xslt n-hom obj (1+ degree)))
((and (string= (subseq hom 0 2) "Z/") (string= (subseq hom (search "Z" hom :start2 2)) "Z"))
(compute-homotopy-zp-xslt n-hom obj (1+ degree) (read-from-string (subseq hom 2 (search "Z" hom :start2 2)))))
(t
(compute-homotopy-several-xslt n-hom obj (1+ degree) hom))))
(DEFUN COMPUTE-HOMOTOPY (smst n-hom degree)
(let ((hom (homology-format smst (1+ degree))))
(compute-homotopy2-xslt n-hom smst degree hom)))
(DEFUN HOMOTOPY (smst degr)
(let (;; we obtain the first non null homology group
(first-non-null (first-non-null-homology-group smst degr)))
(if first-non-null
(progn
(let ((result (split-components (compute-homotopy smst degr first-non-null))))
(format t "~3%Homotopy in dimension ~D :~%" degr)
(dolist (item result)
(format t "~2%Component Z")
(unless (equal item 1)
(format t "/~DZ" item)))
(terpri) (terpri)))
(progn
(format t "~3%Homotopy in dimension ~D :~2%" degr)
(terpri) (terpri)))))
(DEFUN HOMOTOPY-LIST (smst degr)
(let (;; we obtain the first non null homology group
(first-non-null (first-non-null-homology-group smst degr)))
(if first-non-null
(split-components (compute-homotopy smst degr first-non-null))
nil)))

File diff suppressed because it is too large Load Diff

170
src/sage-interface.lisp Normal file
View File

@ -0,0 +1,170 @@
;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10 -*
(IN-PACKAGE #:cat)
(PROVIDE "sage-interface")
(DEFVAR *ASCII-NUM-START* 48)
(DEFVAR *ASCII-NUM-END* 57)
(DEFUN ITOA (value)
(if (not (integerp value)) (error "Wrong type"))
(if (zerop value)
(return-from itoa "0"))
(let ((negative? nil))
(if (< value 0)
(progn
(setf negative? t)
(setf value (abs value))))
(loop
for num = value then (floor num 10)
for reminder = (mod num 10)
while (> num 0)
collect
(code-char (+ reminder *ASCII-NUM-START*)) into result
finally
(if negative? (push #\- (cdr (last result))))
(return (format nil "~{~a~}" (nreverse result))))))
(DEFUN STRCAT (&rest strings) (apply 'concatenate 'string strings))
(DEFMACRO GEN (num1 num2)
`(read-from-string (strcat "G" (itoa ,num1) "G" (itoa ,num2))))
(DEFUN KBASIS (schcm)
(flet ((rslt (dim)
(let ((pair (assoc dim schcm)))
(if (null pair)
NIL
(loop for k from 0 to (1- (array-dimension (cdr pair) 1))
collect (gen dim k))))))
(the basis #'rslt)))
(DEFUN KDFFR (schcm)
(flet ((frslt (dim gnr)
(let* ((sep (1+ (position #\G (subseq (write-to-string gnr) 1))))
(dim_gnr (read-from-string (subseq (write-to-string gnr) 1 sep)))
(num_gnr (read-from-string (subseq (write-to-string gnr) (1+ sep)))))
(declare (fixnum dim_gnr num_gnr))
(unless (equal dim dim_gnr) ;It's not working
(error "WRONG DIMENSION!!!"))
(let ((pair (assoc dim schcm))
(rslt (cmbn (1- dim))))
(if (null pair)
rslt
(let ((dif (cdr pair)))
(unless (< -1 num_gnr (array-dimension dif 1))
(error "WRONG GENERATOR!!!"))
(setf (cmbn-list rslt) (loop for i from 0 to (1- (array-dimension dif 0))
unless (eq (aref dif i num_gnr) 0)
collect (term (aref dif i num_gnr) (gen (1- dim) i))))
rslt))))))
#'frslt))
(DEFUN G-CMPR (GnGm1 GnGm2)
(let* ((sep (1+ (position #\G (subseq (write-to-string GnGm1) 1))))
(m1 (read-from-string (subseq (write-to-string GnGm1) (1+ sep))))
(m2 (read-from-string (subseq (write-to-string GnGm2) (1+ sep)))))
(declare (fixnum m1 m2))
(the cmpr
(if (< m1 m2)
:less
(if (= m1 m2)
:equal
:greater)))))
(DEFUN CONVERTMATRICE (matrice)
(let* ((numfil (nlig matrice))
(numcol (ncol matrice))
(rslt (make-array (list numfil numcol) :initial-element 0)))
(dotimes (i numfil)
(dotimes (j numcol)
(let ((Mij (entry matrice (1+ i) (1+ j))))
(unless (zerop Mij)
(setf (aref rslt i j) Mij)))))
rslt))
(DEFUN ENTRY (mat i j)
(let ((p (left (chercher-hor (baselig mat i) j))))
(if (= j (icol p))
(val p)
0)))
(DEFUN CHCM-MAT2 (chcm n)
(declare
(type chain-complex chcm)
(type fixnum n))
(let ((sorc (basis chcm n))
(trgt (basis chcm (1- n)))
(cmpr (cmpr chcm)))
(declare
(list sorc trgt)
(type cmprf cmpr))
(let ((sorcl (length sorc))
(mat (creer-matrice (length trgt) (length sorc)))
(test #'(lambda (gnrt1 gnrt2)
(eq (funcall cmpr gnrt1 gnrt2) :equal))))
(declare
(type fixnum sorcl)
(type matrice mat)
(function test))
(do ((i 1 (1+ i))
(mark sorc (cdr mark)))
((endp mark))
(declare
(type fixnum i)
(list mark))
(maj-colonne mat i
(mapcar #'(lambda (term)
(declare (type term term))
(list
(1+ (position (gnrt term) trgt :test test))
(cffc term)))
(cmbn-list (? chcm n (car mark))))))
mat)))
(DEFUN BUILD-FINITE-SS2 (list)
(declare (list list))
(let ((bspn (first list))
(table (finite-ss-table list))
(ind-smst (gensym)))
(declare
(symbol bspn ind-smst)
(simple-vector table))
;; (vector (vector gmsm-faces-info))
(let ((rslt (build-smst
:cmpr #'s-cmpr
:basis (finite-ss-basis table)
:bspn bspn
:face (finite-ss-face ind-smst table)
:intr-bndr (finite-ss-intr-bndr ind-smst table)
:bndr-strt :gnrt
:orgn `(build-finite-ss ,list))))
(setf (symbol-value ind-smst) rslt)
rslt)))
(DEFUN MAKE-ARRAY-FROM-LISTS (list)
(make-array (list (length list) (length (first list))) :initial-contents list))