--- title: "Function `signature()` in the `clifford` package" author: "Robin K. S. Hankin" output: html_vignette bibliography: clifford.bib vignette: > %\VignetteEngine{knitr::rmarkdown} %\VignetteIndexEntry{signature} %\usepackage[utf8]{inputenc} --- ```{r setup, include=FALSE} set.seed(0) library("clifford") options(rmarkdown.html_vignette.check_title = FALSE) knitr::opts_chunk$set(echo = TRUE) knit_print.function <- function(x, ...){dput(x)} registerS3method( "knit_print", "function", knit_print.function, envir = asNamespace("knitr") ) ``` ```{r out.width='15%', out.extra='style="float:right; padding:10px"',echo=FALSE} knitr::include_graphics(system.file("help/figures/clifford.png", package = "clifford")) knitr::include_graphics(system.file("help/figures/lorentz.png", package = "lorentz")) ``` ```{r showsigdef} signature ``` To cite the `clifford` package in publications please use @hankin2022_clifford. This short document discusses `signature()` in the `clifford` R package. As an example we might wish to work in $\operatorname{Cl}(1,2)$: ```{r label=sig34} signature(1,2) ``` Thus $e_1^2=+1$, and $e_2^2=e_3^2=-1$: ```{r showp} c(drop(e(1)^2),drop(e(2)^2),drop(e(3)^2)) ``` We might ask what $e_4$ would evaluate to, and this is assumed to be zero as is $e_i^2$ for $i\geqslant 4$: ```{r showg4} c(drop(e(4)^2),drop(e(100)^2)) ``` If we wish to set paranoid-level safety measures, we would set option `maxdim` to prevent accidentally working with too-large values of $i$: ```{r usemaxdim} options(maxdim = 4) ``` Now we work with a four-dimensional vector space in which $e_1^2=+1,e_2^2=e_3^2=-1,e_4^2=0$, but now $e_5$ is undefined: ```{r showerror, error=TRUE} c(drop(e(1)^2),drop(e(2)^2),drop(e(3)^2),drop(e(4)^2)) e(5) ``` The operation of `signature()` is modelled on the `sol()` function in the `lorentz` package [@hankin2022_lorentz]. Thus, if given no arguments we return the signature: ```{r showsig} signature() ``` However, the default value is to use an infinite signature which corresponds to $e_i^2=1\forall i$: ```{r showinfinitesig} options(maxdim=NULL) signature(Inf) signature() ``` Function `signature()` returns an object of (trivial) class `sigobj` which has a bespoke print method, `print.sigobj()`. For technical reasons an infinite signature is not allowed but is represented internally by a near-infinite integer, specifically `.Machine$integer.max`: ```{r dputinfinitesig} dput(signature()) ``` # References