Spectral sequence associated to a bicomplex added.

Spectral sequence associated to a list of morphisms added.
This commit is contained in:
Ana Romero Ibáñez 2019-09-13 11:20:50 +02:00
parent 658803c996
commit 676b634a8a
2 changed files with 422 additions and 156 deletions

View File

@ -24,9 +24,9 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; TYPES FOR BICOMPLEXES ;;; ;;; TYPES FOR BICOMPLEXES ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; TYPE BcGnrt (a generator in a Bicomplex) ;; TYPE BcGnrt (a generator in a Bicomplex)
(DEFUN BcGnrt-p (object) (DEFUN BcGnrt-p (object)
@ -50,7 +50,7 @@
;; TYPE BcBasis (basis of a Bicomplex, function of the variables p and q or ;; TYPE BcBasis (basis of a Bicomplex, function of the variables p and q or
;; ":locally-effective") ;; ":locally-effective")
(DEFTYPE BcBASIS () '(or function (eql :locally-effective))) (DEFTYPE BcBASIS () '(or function (eql :locally-effective)))
;; (function (degr degr) (list gnrt)) ;; (function (degr degr) (list gnrt))
;; TYPE Bicomplex ;; TYPE Bicomplex
@ -63,9 +63,9 @@
(DEFTYPE Bicomplex () '(satisfies OrgnBiCmpl-p)) (DEFTYPE Bicomplex () '(satisfies OrgnBiCmpl-p))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; FUCTIONS FOR THE REPRESENTATION OF (GENERAL) BICOMPLEXES ;;; ;;; FUCTIONS FOR THE REPRESENTATION OF (GENERAL) BICOMPLEXES ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Function that builds a generator of a Bicomplex from two degrees and ;; Function that builds a generator of a Bicomplex from two degrees and
@ -260,10 +260,187 @@
(? bc 2 (build-BcGnrt 2 0 'd)) (? bc 2 (build-BcGnrt 2 0 'd))
(? bc 2 '(:BcGnrt (1 . 1) c)) (? bc 2 '(:BcGnrt (1 . 1) c))
(? bc (cmbn 2 3 '(:BcGnrt (1 . 1) c))) (? bc (cmbn 2 3 '(:BcGnrt (1 . 1) c)))
(? bc 1 (build-bicm 0 1 'a)) (? bc 1 (build-BcGnrt 0 1 'a))
|# |#
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;; BICOMPLEX FROM A LIST OF MORPHISMS OF CHAIN COMPLEXES ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; EACH CHAIN COMPLEX IS A COLUMN OF THE BICOMPLEX
;; VERTICAL DIFFERENTIAL MAPS ARE THE DIFFERENTIAL MAPS OF THE CHAIN COMPLEXES
;; HORIZONTAL DIFFERENTIAL MAPS ARE THE MAPS INDUCED BY THE MORPHISMS
;; Function that builds the bicomplex basis from a list of morphisms of chain complexes.
(DEFUN LIST-OF-MRPH-BCBASIS (l)
(declare (type list l))
(when (eq (basis (sorc (first l))) :locally-effective)
(return-from list-of-mrph-bcbasis :locally-effective))
(dotimes (i (length l))
(declare (type fixnum i))
(when (eq (basis (trgt (nth i l))) :locally-effective)
(return-from list-of-mrph-bcbasis :locally-effective)))
(flet ((bcbasis (degr1 degr2)
(declare (type fixnum degr1 degr2))
(if (< degr1 (length l))
(basis (trgt (nth degr1 l)) degr2)
(if (= degr1 (length l))
(basis (sorc (nth (1- (length l)) l)) degr2)
nil
))))
(the bcbasis #'bcbasis)))
;; Function that builds the bicomplex horizontal internal differential
;; from a list of morphisms of chain complexes.
(DEFUN LIST-OF-MRPH-DFFR1 (l)
(declare (type list l))
(flet ((dffr1 (degr1 degr2 gnrt)
(declare (type fixnum degr1 degr2)
(type gnrt gnrt))
(if (and (> degr1 0) (<= degr1 (length l)))
(let ((mrph (nth (1- degr1) l)))
(declare (type morphism mrph))
(cmbn-list (? mrph degr2 gnrt)))
nil)))
(the function #'dffr1)))
;; Function that builds the bicomplex vertical internal differential
;; from a list of morphisms of chain complexes.
(DEFUN LIST-OF-MRPH-DFFR2 (l)
(declare (type list l))
(flet ((dffr2 (degr1 degr2 gnrt)
(declare (type fixnum degr1 degr2)
(type gnrt gnrt))
(if (and (> degr1 0) (<= degr1 (length l)))
(let ((mrph (nth (1- degr1) l)))
(cmbn-list (? (sorc mrph) degr2 gnrt)))
(if (= degr1 0)
(cmbn-list (? (trgt (first l)) degr2 gnrt))
nil))))
(the function #'dffr2)))
;; Function that constructs the comparison function of a bicomplex
;; from a list of morphisms of chain complexes.
(DEFUN LIST-OF-MRPH-BC-CMPR (l)
(declare (type list l))
(flet ((comp (bc1 bc2)
(declare (type BcGnrt bc1 bc2))
(let ((degr11 (BcGnrt-Degr1 bc1))
(degr21 (BcGnrt-Degr2 bc1))
(degr12 (BcGnrt-Degr1 bc2))
(degr22 (BcGnrt-Degr2 bc2))
(gnrt1 (BcGnrt-Gnrt bc1))
(gnrt2 (BcGnrt-Gnrt bc2)))
(declare
(type fixnum degr11 degr21 degr12 degr22)
(type any gnrt1 gnrt2))
(lexico
(f-cmpr degr11 degr12)
(f-cmpr degr21 degr22)
(if (and (> degr11 0) (<= degr11 (length l)))
(let ((chcm (sorc (nth (1- degr11) l))))
(funcall (cmpr chcm) gnrt1 gnrt2))
(if (= degr11 0)
(let ((chcm (trgt (nth 0 l))))
(funcall (cmpr chcm) gnrt1 gnrt2))
:equal))
))))
(the cmprf #'comp)))
;; Function that builds a bicomplex from a list of morphisms of chain complexes.
(DEFUN LIST-OF-MRPH-BUILD-BICM (l)
(declare (type list l))
(dotimes (i (1- (length l)))
(declare (fixnum i))
(let* ((mrphi (nth i l))
(mrphi+1 (nth (1+ i) l))
(sorci (sorc mrphi))
(trgti+1 (trgt mrphi+1)))
(unless (eq (grmd sorci) (grmd trgti+1))
(error "In LIST-OF-MRPH-BUILD-BICM, the morphisms ~A and ~A may not be composed (cf source and target)."
mrphi mrphi+1))))
(the chain-complex
(let ((chcm
(build-chcm
:cmpr (list-of-mrph-BC-CMPR l)
:basis (BC-BASIS (list-of-mrph-bcbasis l))
:intr-dffr (BC-INTR-DFFR (list-of-mrph-dffr1 l) (list-of-mrph-dffr2 l))
:strt :gnrt
:orgn `(list-of-mrph-bicomplex from ,l))))
(declare (type chain-complex chcm))
(slot-makunbound chcm 'bsgn)
chcm)))
#|
;; Example of bicomplex from a list of morphisms of two chain complexes
;; First we build the three chain complexes
(cat-init)
(defun chcm1-basis (degr)
(if (= degr 1)
(return-from chcm1-basis (list 'a1 'a2))
(return-from chcm1-basis nil)))
(defun chcm2-basis (degr)
(if (= degr 0) (return-from chcm2-basis (list 'b))
(if (= degr 1) (return-from chcm2-basis (list 'c1 'c2))
(return-from chcm2-basis nil))))
(defun chcm3-basis (degr)
(if (= degr 0)
(return-from chcm3-basis (list 'd1 'd2))
(return-from chcm3-basis nil)))
(defun chcm1-intr-dffr (degr gnrt)
(return-from chcm1-intr-dffr (cmbn (1- degr))))
(defun chcm2-intr-dffr (degr gnrt)
(if (and (= degr 1) (eql gnrt 'c1))
(return-from chcm2-intr-dffr (cmbn 0 1 'b))
(return-from chcm2-intr-dffr (cmbn (1- degr)))))
(defun chcm3-intr-dffr (degr gnrt)
(return-from chcm3-intr-dffr (cmbn (1- degr))))
(setf chcm1 (build-chcm :cmpr #'s-cmpr :basis #'chcm1-basis :intr-dffr #'chcm1-intr-dffr :strt :gnrt :orgn `(chcm1)))
(setf chcm2 (build-chcm :cmpr #'s-cmpr :basis #'chcm2-basis :intr-dffr #'chcm2-intr-dffr :strt :gnrt :orgn `(chcm2)))
(setf chcm3 (build-chcm :cmpr #'s-cmpr :basis #'chcm3-basis :intr-dffr #'chcm3-intr-dffr :strt :gnrt :orgn `(chcm3)))
;; Then we build the two morphisms
(defun mrph1-intr (degr gnrt)
(if (and (= degr 1) (eql gnrt 'c1))
(return-from mrph1-intr (cmbn 1 2 'a1))
(if (and (= degr 1) (eql gnrt 'c2))
(return-from mrph1-intr (cmbn 1 2 'a2))
(return-from mrph1-intr (cmbn degr)))))
(defun mrph2-intr (degr gnrt)
(if (and (= degr 0) (eql gnrt 'd1))
(return-from mrph2-intr (cmbn 0 2 'b))
(return-from mrph2-intr (cmbn degr))))
(setf mrph1 (build-mrph :sorc chcm2 :trgt chcm1 :intr #'mrph1-intr :strt :gnrt :orgn `(mrph1)))
(setf mrph2 (build-mrph :sorc chcm3 :trgt chcm2 :intr #'mrph2-intr :strt :gnrt :orgn `(mrph2)))
;; Finally we build the list and the bicomplex and we change it into a filtered chain complex
(setf l (list mrph1 mrph2))
(setf bic (list-of-mrph-build-bicm l))
(change-bicm-to-flcc bic)
;; We compute the groups of the associated spectral sequence
(dotimes (r 5)
(dotimes (n 3)
(dotimes (p (1+ n))
(let ((q (- n p)))
(spsq-group bic r p q)
))))
|#

View File

@ -1455,6 +1455,8 @@
(orgn :type list :initarg :orgn :reader orgn))) (orgn :type list :initarg :orgn :reader orgn)))
(DEFVAR *ss-list* (DEFVAR *ss-list*
"The variable *SS-LIST* is bound to a list of user created spectral sequences") "The variable *SS-LIST* is bound to a list of user created spectral sequences")
(SETF *ss-list* +empty-list+) (SETF *ss-list* +empty-list+)
@ -1664,6 +1666,19 @@
(build-ss ecc `(Eilenberg-Moore-Spectral-Sequence ,x)))))) (build-ss ecc `(Eilenberg-Moore-Spectral-Sequence ,x))))))
;; Function that constructs the spectral sequence associated to the bicomplex
;; constructed from a list of morphisms of chain complexes
;; Returns an object of the class Spectral-sequence
(DEFUN BICOMPLEX-SPECTRAL-SEQUENCE (l)
(declare (type list l))
(let* ((bic (list-of-mrph-build-bicm l)))
(declare
(type chain-complex bic))
(progn
(change-bicm-to-flcc bic)
(the spectral-sequence
(build-ss bic `(Bicomplex-Spectral-Sequence ,bic))))))
@ -1704,6 +1719,8 @@
;; (let ((q (+ n p))) ;; (let ((q (+ n p)))
;; (print-spsq-group ss2 1 (- p) q)))) ;; (print-spsq-group ss2 1 (- p) q))))
(print-spsq-group ss2 0 -3 6)
(spectral-sequence-differential-matrix ss2 1 -2 8) (spectral-sequence-differential-matrix ss2 1 -2 8)
(spectral-sequence-differential-of-one-element ss2 1 -2 8 '(1 0 0)) (spectral-sequence-differential-of-one-element ss2 1 -2 8 '(1 0 0))
(spectral-sequence-differential-of-one-element ss2 1 -2 8 '(0 1 0)) (spectral-sequence-differential-of-one-element ss2 1 -2 8 '(0 1 0))
@ -1750,8 +1767,80 @@
(terpri)))) (terpri))))
;; Example of bicomplex spectral sequence (same example in file "bicomplexes.lisp")
;; First we build the three chain complexes
(cat-init)
(defun chcm1-basis (degr)
(if (= degr 1)
(return-from chcm1-basis (list 'a1 'a2))
(return-from chcm1-basis nil)))
(defun chcm2-basis (degr)
(if (= degr 0) (return-from chcm2-basis (list 'b))
(if (= degr 1) (return-from chcm2-basis (list 'c1 'c2))
(return-from chcm2-basis nil))))
(defun chcm3-basis (degr)
(if (= degr 0)
(return-from chcm3-basis (list 'd1 'd2))
(return-from chcm3-basis nil)))
(defun chcm1-intr-dffr (degr gnrt)
(return-from chcm1-intr-dffr (cmbn (1- degr))))
(defun chcm2-intr-dffr (degr gnrt)
(if (and (= degr 1) (eql gnrt 'c1))
(return-from chcm2-intr-dffr (cmbn 0 1 'b))
(return-from chcm2-intr-dffr (cmbn (1- degr)))))
(defun chcm3-intr-dffr (degr gnrt)
(return-from chcm3-intr-dffr (cmbn (1- degr))))
(setf chcm1 (build-chcm :cmpr #'s-cmpr :basis #'chcm1-basis :intr-dffr #'chcm1-intr-dffr :strt :gnrt :orgn `(chcm1)))
(setf chcm2 (build-chcm :cmpr #'s-cmpr :basis #'chcm2-basis :intr-dffr #'chcm2-intr-dffr :strt :gnrt :orgn `(chcm2)))
(setf chcm3 (build-chcm :cmpr #'s-cmpr :basis #'chcm3-basis :intr-dffr #'chcm3-intr-dffr :strt :gnrt :orgn `(chcm3)))
;; Then we build the two morphisms
(defun mrph1-intr (degr gnrt)
(if (and (= degr 1) (eql gnrt 'c1))
(return-from mrph1-intr (cmbn 1 2 'a1))
(if (and (= degr 1) (eql gnrt 'c2))
(return-from mrph1-intr (cmbn 1 2 'a2))
(return-from mrph1-intr (cmbn degr)))))
(defun mrph2-intr (degr gnrt)
(if (and (= degr 0) (eql gnrt 'd1))
(return-from mrph2-intr (cmbn 0 2 'b))
(return-from mrph2-intr (cmbn degr))))
(setf mrph1 (build-mrph :sorc chcm2 :trgt chcm1 :intr #'mrph1-intr :strt :gnrt :orgn `(mrph1)))
(setf mrph2 (build-mrph :sorc chcm3 :trgt chcm2 :intr #'mrph2-intr :strt :gnrt :orgn `(mrph2)))
;; Finally we build the list and the associated spectral sequence
(setf l (list mrph1 mrph2))
(setf bss (bicomplex-spectral-sequence l))
;; We compute the groups of the associated spectral sequence
(dotimes (r 5)
(dotimes (n 3)
(dotimes (p (1+ n))
(let ((q (- n p)))
(format t "Spectral sequence E^~D_{~D,~D}" r p q)
(print (spectral-sequence-group bss r p q))
(terpri)
))))
(spectral-sequence-differential-matrix bss 1 1 1)
(spectral-sequence-differential-matrix bss 2 2 0)
|# |#