{-# LANGUAGE NoImplicitPrelude #-}

{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleInstances, FlexibleContexts #-}
{-# LANGUAGE DataKinds #-}

-- |

-- Module      : OAlg.AbelianGroup.KernelsAndCokernels

-- Description : kernels and cokernels.

-- Copyright   : (c) Erich Gut

-- License     : BSD3

-- Maintainer  : zerich.gut@gmail.com

--

-- 'Kernels' and 'Cokernels' for homomorphisms between finitely generated abelian groups.

module OAlg.AbelianGroup.KernelsAndCokernels
  (
    -- * Kernels

    abhKernels, abhKernelsFreeFromG, abhKernelsFreeFromG'
  , abhKernelsSomeFreeFreeTip

    -- * Cokernels

  , abhCokernels, abhCokernelsLftFreeG
  , abhCokernelsLiftableSomeFree
  
    -- * Smith Normal

  , isoSmithNormal

    -- * Adjunction

  , abhSliceFreeAdjunction

  )
  where

import Control.Monad

import Data.Typeable
import Data.List (map,(++),repeat,zip)

import OAlg.Prelude hiding ((//))

import OAlg.Data.Canonical
import OAlg.Data.FinitelyPresentable

import OAlg.Structure.Oriented
import OAlg.Structure.Multiplicative as M
import OAlg.Structure.Additive
import OAlg.Structure.Distributive
import OAlg.Structure.Exponential
import OAlg.Structure.Operational
import OAlg.Structure.Number

import OAlg.Adjunction

import OAlg.Limes.Cone
import OAlg.Limes.Definition
import OAlg.Limes.Limits
import OAlg.Limes.KernelsAndCokernels
import OAlg.Limes.PullbacksAndPushouts

import OAlg.Entity.Natural hiding ((++))
import OAlg.Entity.FinList as F hiding ((++),repeat,zip)
import OAlg.Entity.Diagram
import OAlg.Entity.Sequence
import OAlg.Entity.Matrix as M
import OAlg.Entity.Slice
import OAlg.Entity.Slice.Liftable
import OAlg.Entity.Product (fromWord)

import OAlg.AbelianGroup.Definition
import OAlg.AbelianGroup.ZMod
import OAlg.AbelianGroup.Euclid
import OAlg.AbelianGroup.Free

--------------------------------------------------------------------------------

-- abhCokernelFreeDgmLftFreeG -


-- | liftable cokernel of a free diagram.

abhCokernelFreeDgmLftFreeG
  :: CokernelDiagrammatic DiagramFree N1 AbHom -> CokernelG ConeLiftable DiagramFree N1 AbHom
abhCokernelFreeDgmLftFreeG :: DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> CokernelG ConeLiftable DiagramFree N1 AbHom
abhCokernelFreeDgmLftFreeG d :: DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
d@(DiagramFree FinList N2 (SomeFree AbHom)
_ (DiagramParallelRL Point AbHom
_ Point AbHom
_ (AbHom
h:|FinList n1 AbHom
Nil)))
  = ConeLiftable
  Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> (Cone
      Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
    -> AbHom)
-> CokernelG ConeLiftable DiagramFree N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
c s 'Injective d t n m x
-> (Cone s 'Injective d t n m x -> x)
-> LimesG c s 'Injective d t n m x
LimesInjective (Cone
  Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> LiftableFree 'Injective AbHom
-> ConeLiftable
     Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
forall (d :: DiagramType -> N' -> N' -> * -> *) x.
CokernelConic Cone d N1 x
-> LiftableFree 'Injective x
-> ConeLiftable Dst 'Injective d ('Parallel 'RightToLeft) N2 N1 x
ConeCokernelLiftable (DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
-> Cone
     Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'RightToLeft) N2 m a
-> a -> Cone Dst 'Injective d ('Parallel 'RightToLeft) N2 m a
ConeCokernel DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
d AbHom
coker) ((forall (k :: N'). Any k -> Liftable 'Injective (Free k) AbHom)
-> LiftableFree 'Injective AbHom
forall (p :: Perspective) x.
(forall (k :: N'). Any k -> Liftable p (Free k) x)
-> LiftableFree p x
LiftableFree Any k -> Liftable 'Injective (Free k) AbHom
forall (k :: N'). Any k -> Liftable 'Injective (Free k) AbHom
lftAny)) Cone
  Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
univ where

  --------------------

  -- cokernel -


  m :: Matrix Z
m = AbHom -> Matrix Z
abhz AbHom
h
  SmithNormalForm N
o [Z]
ds (RowTrafo GLT Z
ra) ColTrafo Z
_ = Matrix Z -> SmithNormalForm Z
smithNormalForm Matrix Z
m
  Inv Matrix Z
a Matrix Z
aInv = GLApp (GLT Z) (Inv (Matrix Z)) -> GLT Z -> Inv (Matrix Z)
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
amap GLApp (GLT Z) (Inv (Matrix Z))
forall x1. Distributive x1 => GLApp (GLT x1) (Inv (Matrix x1))
GLTGL GLT Z
ra
  AbHom Matrix ZModHom
aInv' = Matrix Z -> AbHom
zabh Matrix Z
aInv
  p :: N
p = [Z] -> N
forall x. LengthN x => x -> N
lengthN [Z]
ds
  q :: N
q = Dim Z () -> N
forall x. LengthN x => x -> N
lengthN (Matrix Z -> Dim' Z
forall x. Matrix x -> Dim' x
rows Matrix Z
m) N -> N -> N
>- (N
o N -> N -> N
forall a. Additive a => a -> a -> a
+ N
p)

  d0 :: Dim ZModHom ZMod
d0 = ZMod -> Dim ZModHom ZMod
forall p x. (Entity p, p ~ Point x) => p -> Dim x p
dim (N -> ZMod
ZMod N
0)
  gp :: Dim ZModHom ZMod
gp = CSequence (Point ZModHom) -> Dim ZModHom (Point ZModHom)
ProductSymbol ZMod -> Dim ZModHom ZMod
forall x. CSequence (Point x) -> Dim x (Point x)
Dim (ProductSymbol ZMod -> Dim ZModHom ZMod)
-> ProductSymbol ZMod -> Dim ZModHom ZMod
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ [ZMod] -> ProductSymbol ZMod
forall x. Entity x => [x] -> ProductSymbol x
productSymbol ([ZMod] -> ProductSymbol ZMod) -> [ZMod] -> ProductSymbol ZMod
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ (Z -> ZMod) -> [Z] -> [ZMod]
forall (h :: * -> * -> *) (f :: * -> *) x y.
Applicative1 h f =>
h x y -> f x -> f y
amap1 (N -> ZMod
ZMod (N -> ZMod) -> (Z -> N) -> Z -> ZMod
forall y z x. (y -> z) -> (x -> y) -> x -> z
forall (c :: * -> * -> *) y z x.
Category c =>
c y z -> c x y -> c x z
. Z -> N
forall a b. Projectible a b => b -> a
prj) [Z]
ds
  gq :: Dim ZModHom ZMod
gq = Dim ZModHom ZMod
d0 Dim ZModHom ZMod -> Exponent (Dim ZModHom ZMod) -> Dim ZModHom ZMod
forall f. Exponential f => f -> Exponent f -> f
^ N
Exponent (Dim ZModHom ZMod)
q
  gpq :: Dim ZModHom ZMod
gpq = Dim ZModHom ZMod
gp Dim ZModHom ZMod -> Dim ZModHom ZMod -> Dim ZModHom ZMod
forall c. Multiplicative c => c -> c -> c
* Dim ZModHom ZMod
gq
  
  coker :: AbHom
coker = ( Matrix ZModHom -> AbHom
AbHom (Matrix ZModHom -> AbHom) -> Matrix ZModHom -> AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Matrix (Matrix ZModHom) -> Matrix ZModHom
forall x. Oriented x => Matrix (Matrix x) -> Matrix x
mtxJoin
          (Matrix (Matrix ZModHom) -> Matrix ZModHom)
-> Matrix (Matrix ZModHom) -> Matrix ZModHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ [Dim ZModHom (Point ZModHom)]
-> [Dim ZModHom (Point ZModHom)]
-> [(Matrix ZModHom, N, N)]
-> Matrix (Matrix ZModHom)
forall x.
(Additive x, FibredOriented x) =>
[Dim' x] -> [Dim' x] -> [(Matrix x, N, N)] -> Matrix (Matrix x)
matrixBlc [Dim ZModHom (Point ZModHom)
Dim ZModHom ZMod
gp,Dim ZModHom (Point ZModHom)
Dim ZModHom ZMod
gq] [Dim ZModHom ZMod
d0Dim ZModHom ZMod -> Exponent (Dim ZModHom ZMod) -> Dim ZModHom ZMod
forall f. Exponential f => f -> Exponent f -> f
^N
Exponent (Dim ZModHom ZMod)
o,Dim ZModHom ZMod
d0Dim ZModHom ZMod -> Exponent (Dim ZModHom ZMod) -> Dim ZModHom ZMod
forall f. Exponential f => f -> Exponent f -> f
^N
Exponent (Dim ZModHom ZMod)
p,Dim ZModHom (Point ZModHom)
Dim ZModHom ZMod
gq] [(Dim ZModHom ZMod
-> Dim ZModHom ZMod -> [(ZModHom, N, N)] -> Matrix ZModHom
forall x p.
(Additive x, p ~ Point x) =>
Dim x p -> Dim x p -> [(x, N, N)] -> Matrix x
matrix Dim ZModHom ZMod
gp (Dim ZModHom ZMod
d0Dim ZModHom ZMod -> Exponent (Dim ZModHom ZMod) -> Dim ZModHom ZMod
forall f. Exponential f => f -> Exponent f -> f
^N
Exponent (Dim ZModHom ZMod)
p) [(ZModHom, N, N)]
ps,N
0,N
1),(Point (Matrix ZModHom) -> Matrix ZModHom
forall c. Multiplicative c => Point c -> c
one Point (Matrix ZModHom)
Dim ZModHom ZMod
gq,N
1,N
2)]
          )
        AbHom -> AbHom -> AbHom
forall c. Multiplicative c => c -> c -> c
* Matrix Z -> AbHom
zabh Matrix Z
a where
    ps :: [(ZModHom, N, N)]
ps = [(Orientation ZMod -> Z -> ZModHom
zmh (N -> ZMod
ZMod N
0 ZMod -> ZMod -> Orientation ZMod
forall p. p -> p -> Orientation p
:> N -> ZMod
ZMod (Z -> N
forall a b. Projectible a b => b -> a
prj Z
d)) Z
1,N
i,N
i)| (Z
d,N
i) <- [Z]
ds [Z] -> [N] -> [(Z, N)]
forall a b. [a] -> [b] -> [(a, b)]
`zip` [N
0..]]
    -- @0 < d@ for all d in ds as ds is the diagonal of the smith normal form


  univ :: CokernelConic Cone DiagramFree N1 AbHom -> AbHom
  univ :: Cone
  Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
univ (ConeCokernel DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
_ (AbHom Matrix ZModHom
x))
    = Matrix ZModHom -> AbHom
AbHom
    (Matrix ZModHom -> AbHom) -> Matrix ZModHom -> AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Dim ZModHom (Point ZModHom)
-> Dim ZModHom (Point ZModHom)
-> Entries N N ZModHom
-> Matrix ZModHom
forall x. Dim' x -> Dim' x -> Entries N N x -> Matrix x
Matrix (Matrix ZModHom -> Dim ZModHom (Point ZModHom)
forall x. Matrix x -> Dim' x
rows Matrix ZModHom
x) Dim ZModHom (Point ZModHom)
Dim ZModHom ZMod
gpq
    (Entries N N ZModHom -> Matrix ZModHom)
-> Entries N N ZModHom -> Matrix ZModHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Row N (Col N ZModHom) -> Entries N N ZModHom
forall i j x. (Ord i, Ord j) => Row j (Col i x) -> Entries i j x
rcets (Row N (Col N ZModHom) -> Entries N N ZModHom)
-> Row N (Col N ZModHom) -> Entries N N ZModHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ PSequence N (Col N ZModHom) -> Row N (Col N ZModHom)
forall j x. PSequence j x -> Row j x
Row (PSequence N (Col N ZModHom) -> Row N (Col N ZModHom))
-> PSequence N (Col N ZModHom) -> Row N (Col N ZModHom)
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ [(Col N ZModHom, N)] -> PSequence N (Col N ZModHom)
forall i x. [(x, i)] -> PSequence i x
PSequence
    ([(Col N ZModHom, N)] -> PSequence N (Col N ZModHom))
-> [(Col N ZModHom, N)] -> PSequence N (Col N ZModHom)
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ ((Col N ZModHom, N) -> (Col N ZModHom, N))
-> [(Col N ZModHom, N)] -> [(Col N ZModHom, N)]
forall a b. (a -> b) -> [a] -> [b]
map (\(Col N ZModHom
cl,N
j) -> (Col N ZModHom
cl,N
jN -> N -> N
>-N
o))
    ([(Col N ZModHom, N)] -> [(Col N ZModHom, N)])
-> [(Col N ZModHom, N)] -> [(Col N ZModHom, N)]
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ N -> [ZMod] -> [(Col N ZModHom, N)] -> [(Col N ZModHom, N)]
forall j i.
(Enum j, Ord j) =>
j -> [ZMod] -> [(Col i ZModHom, j)] -> [(Col i ZModHom, j)]
fcts N
o (((ZMod, N) -> ZMod) -> [(ZMod, N)] -> [ZMod]
forall a b. (a -> b) -> [a] -> [b]
map (ZMod, N) -> ZMod
forall a b. (a, b) -> a
fst ([(ZMod, N)] -> [ZMod]) -> [(ZMod, N)] -> [ZMod]
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Dim ZModHom ZMod -> [(ZMod, N)]
forall (s :: * -> *) x. Sequence s N x => s x -> [(x, N)]
listN Dim ZModHom ZMod
gp)
    ([(Col N ZModHom, N)] -> [(Col N ZModHom, N)])
-> [(Col N ZModHom, N)] -> [(Col N ZModHom, N)]
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Row N (Col N ZModHom) -> [(Col N ZModHom, N)]
forall (s :: * -> *) x. Sequence s N x => s x -> [(x, N)]
listN (Row N (Col N ZModHom) -> [(Col N ZModHom, N)])
-> Row N (Col N ZModHom) -> [(Col N ZModHom, N)]
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Entries N N ZModHom -> Row N (Col N ZModHom)
forall i j x. (Ord i, Ord j) => Entries i j x -> Row j (Col i x)
etsrc (Entries N N ZModHom -> Row N (Col N ZModHom))
-> Entries N N ZModHom -> Row N (Col N ZModHom)
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Matrix ZModHom -> Entries N N ZModHom
forall x. Matrix x -> Entries N N x
mtxxs (Matrix ZModHom
xMatrix ZModHom -> Matrix ZModHom -> Matrix ZModHom
forall c. Multiplicative c => c -> c -> c
*Matrix ZModHom
aInv')
    where
      
      fcts :: (Enum j, Ord j) => j -> [ZMod] -> [(Col i ZModHom,j)] -> [(Col i ZModHom,j)] 
      fcts :: forall j i.
(Enum j, Ord j) =>
j -> [ZMod] -> [(Col i ZModHom, j)] -> [(Col i ZModHom, j)]
fcts j
_ [] [(Col i ZModHom, j)]
cls = [(Col i ZModHom, j)]
cls
      fcts j
_ [ZMod]
_ []   = []
      fcts j
j (ZMod
z:[ZMod]
zs) cls :: [(Col i ZModHom, j)]
cls@((Col i ZModHom
cl,j
j'):[(Col i ZModHom, j)]
cls') = if j
j j -> j -> Bool
forall a. Ord a => a -> a -> Bool
< j
j'
        then j -> [ZMod] -> [(Col i ZModHom, j)] -> [(Col i ZModHom, j)]
forall j i.
(Enum j, Ord j) =>
j -> [ZMod] -> [(Col i ZModHom, j)] -> [(Col i ZModHom, j)]
fcts (j -> j
forall a. Enum a => a -> a
succ j
j) [ZMod]
zs [(Col i ZModHom, j)]
cls
        else (((ZModHom -> ZModHom) -> Col i ZModHom -> Col i ZModHom
forall (h :: * -> * -> *) (f :: * -> *) x y.
Applicative1 h f =>
h x y -> f x -> f y
amap1 (ZMod -> ZModHom -> ZModHom
fct ZMod
z) Col i ZModHom
cl,j
j')(Col i ZModHom, j) -> [(Col i ZModHom, j)] -> [(Col i ZModHom, j)]
forall a. a -> [a] -> [a]
:j -> [ZMod] -> [(Col i ZModHom, j)] -> [(Col i ZModHom, j)]
forall j i.
(Enum j, Ord j) =>
j -> [ZMod] -> [(Col i ZModHom, j)] -> [(Col i ZModHom, j)]
fcts (j -> j
forall a. Enum a => a -> a
succ j
j) [ZMod]
zs [(Col i ZModHom, j)]
cls')

      fct :: ZMod -> ZModHom -> ZModHom
      fct :: ZMod -> ZModHom -> ZModHom
fct ZMod
z ZModHom
h = Orientation ZMod -> Z -> ZModHom
zmh (ZMod
zZMod -> ZMod -> Orientation ZMod
forall p. p -> p -> Orientation p
:>ZModHom -> Point ZModHom
forall q. Oriented q => q -> Point q
end ZModHom
h) (ZModHom -> Z
toZ ZModHom
h)

  --------------------

  -- liftable -

  lftAny :: Any k -> Liftable Injective (Free k) AbHom
  lftAny :: forall (k :: N'). Any k -> Liftable 'Injective (Free k) AbHom
lftAny Any k
k = case Any k -> Ats k
forall (n :: N'). Any n -> Ats n
ats Any k
k of Ats k
Ats -> AbHom
-> (Slice 'From (Free k) AbHom -> Slice 'From (Free k) AbHom)
-> Liftable 'Injective (Free k) AbHom
forall (i :: * -> *) x.
Sliced i x =>
x
-> (Slice 'From i x -> Slice 'From i x) -> Liftable 'Injective i x
LiftableInjective AbHom
coker (AbHom -> Slice 'From (Free k) AbHom -> Slice 'From (Free k) AbHom
forall (k :: N').
Attestable k =>
AbHom -> Slice 'From (Free k) AbHom -> Slice 'From (Free k) AbHom
lft AbHom
coker)

  lft :: Attestable k => AbHom -> Slice From (Free k) AbHom -> Slice From (Free k) AbHom
  lft :: forall (k :: N').
Attestable k =>
AbHom -> Slice 'From (Free k) AbHom -> Slice 'From (Free k) AbHom
lft AbHom
c s :: Slice 'From (Free k) AbHom
s@(SliceFrom Free k AbHom
i AbHom
f)
    | Free k AbHom -> Point AbHom
forall (i :: * -> *) c. Sliced i c => i c -> Point c
slicePoint Free k AbHom
i AbGroup -> AbGroup -> Bool
forall a. Eq a => a -> a -> Bool
/= AbHom -> Point AbHom
forall q. Oriented q => q -> Point q
start AbHom
f = AlgebraicException -> Slice 'From (Free k) AbHom
forall a e. Exception e => e -> a
throw (AlgebraicException -> Slice 'From (Free k) AbHom)
-> AlgebraicException -> Slice 'From (Free k) AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ String -> AlgebraicException
InvalidData (String -> AlgebraicException) -> String -> AlgebraicException
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Slice 'From (Free k) AbHom -> String
forall a. Show a => a -> String
show Slice 'From (Free k) AbHom
s
    | AbHom -> Point AbHom
forall q. Oriented q => q -> Point q
end AbHom
c AbGroup -> AbGroup -> Bool
forall a. Eq a => a -> a -> Bool
/= AbHom -> Point AbHom
forall q. Oriented q => q -> Point q
end AbHom
f          = LiftableException -> Slice 'From (Free k) AbHom
forall a e. Exception e => e -> a
throw LiftableException
NotLiftable
    | Bool
otherwise               = Free k AbHom -> AbHom -> Slice 'From (Free k) AbHom
forall (i :: * -> *) x. i x -> x -> Slice 'From i x
SliceFrom Free k AbHom
i AbHom
f' where
        f' :: AbHom
f'  = Matrix Z -> AbHom
zabh (Matrix Z
aInv Matrix Z -> Matrix Z -> Matrix Z
forall c. Multiplicative c => c -> c -> c
* Matrix Z
zf')

        zf :: Matrix Z
zf  = AbHom -> Matrix Z
abhz AbHom
f
        zf' :: Matrix Z
zf' = Matrix (Matrix Z) -> Matrix Z
forall x. Oriented x => Matrix (Matrix x) -> Matrix x
mtxJoin (Matrix (Matrix Z) -> Matrix Z) -> Matrix (Matrix Z) -> Matrix Z
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ [Dim' Z] -> [Dim' Z] -> [(Matrix Z, N, N)] -> Matrix (Matrix Z)
forall x.
(Additive x, FibredOriented x) =>
[Dim' x] -> [Dim' x] -> [(Matrix x, N, N)] -> Matrix (Matrix x)
matrixBlc [() -> Dim Z ()
forall p x. (Entity p, p ~ Point x) => p -> Dim x p
dim () Dim Z () -> Exponent (Dim Z ()) -> Dim Z ()
forall f. Exponential f => f -> Exponent f -> f
^ N
Exponent (Dim Z ())
r,Matrix Z -> Dim' Z
forall x. Matrix x -> Dim' x
rows Matrix Z
zf] [Matrix Z -> Dim' Z
forall x. Matrix x -> Dim' x
cols Matrix Z
zf] [(Matrix Z
zf,N
1,N
0)]
        r :: N
r   = Dim Z () -> N
forall x. LengthN x => x -> N
lengthN (Matrix Z -> Point (Matrix Z)
forall q. Oriented q => q -> Point q
start Matrix Z
aInv) N -> N -> N
>- Dim Z () -> N
forall x. LengthN x => x -> N
lengthN (Matrix Z -> Dim' Z
forall x. Matrix x -> Dim' x
rows Matrix Z
zf)

--------------------------------------------------------------------------------

-- abhCokernelsFreeDgmLftFreeG -


-- | liftable cokernels of free diagrams.

abhCokernelsFreeDgmLftFreeG :: CokernelsG ConeLiftable DiagramFree N1 AbHom
abhCokernelsFreeDgmLftFreeG :: CokernelsG ConeLiftable DiagramFree N1 AbHom
abhCokernelsFreeDgmLftFreeG = (DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
 -> CokernelG ConeLiftable DiagramFree N1 AbHom)
-> CokernelsG ConeLiftable DiagramFree N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
(d t n m x -> LimesG c s p d t n m x) -> LimitsG c s p d t n m x
LimitsG DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> CokernelG ConeLiftable DiagramFree N1 AbHom
abhCokernelFreeDgmLftFreeG

--------------------------------------------------------------------------------

-- xCokernelDiagramFree -


-- | random variable for cokernel diagrams of 'DiagramFree'.

xCokernelDiagramFree :: X (Matrix Z) -> X (CokernelDiagrammatic DiagramFree N1 AbHom)
xCokernelDiagramFree :: X (Matrix Z)
-> X (DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom)
xCokernelDiagramFree X (Matrix Z)
xm = do
  Matrix Z
m <- X (Matrix Z)
xm
  let r :: N
r = Dim Z () -> N
forall x. LengthN x => x -> N
lengthN (Dim Z () -> N) -> Dim Z () -> N
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Matrix Z -> Dim' Z
forall x. Matrix x -> Dim' x
rows Matrix Z
m
      c :: N
c = Dim Z () -> N
forall x. LengthN x => x -> N
lengthN (Dim Z () -> N) -> Dim Z () -> N
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Matrix Z -> Dim' Z
forall x. Matrix x -> Dim' x
cols Matrix Z
m
      a :: AbHom
a = Matrix Z -> AbHom
zabh Matrix Z
m
   in case (N -> SomeNatural
someNatural N
r, N -> SomeNatural
someNatural N
c) of
        (SomeNatural W n
r',SomeNatural W n
c')
          -> DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> X (DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom)
forall a. a -> X a
forall (m :: * -> *) a. Monad m => a -> m a
return (FinList N2 (SomeFree AbHom)
-> Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
forall (t :: DiagramType) (n :: N') (m :: N') a.
FinList n (SomeFree a) -> Diagram t n m a -> DiagramFree t n m a
DiagramFree
                       (Free n AbHom -> SomeFree AbHom
forall (k :: N') c.
(Attestable k, Sliced (Free k) c) =>
Free k c -> SomeFree c
SomeFree (W n -> Free n AbHom
forall (k :: N') c. Any k -> Free k c
Free W n
r')SomeFree AbHom
-> FinList N1 (SomeFree AbHom) -> FinList (N1 + 1) (SomeFree AbHom)
forall a (n1 :: N'). a -> FinList n1 a -> FinList (n1 + 1) a
:|Free n AbHom -> SomeFree AbHom
forall (k :: N') c.
(Attestable k, Sliced (Free k) c) =>
Free k c -> SomeFree c
SomeFree (W n -> Free n AbHom
forall (k :: N') c. Any k -> Free k c
Free W n
c')SomeFree AbHom
-> FinList N0 (SomeFree AbHom) -> FinList (N0 + 1) (SomeFree AbHom)
forall a (n1 :: N'). a -> FinList n1 a -> FinList (n1 + 1) a
:|FinList N0 (SomeFree AbHom)
forall a. FinList N0 a
Nil)
                       (Point AbHom
-> Point AbHom
-> FinList N1 AbHom
-> Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall a (m :: N').
Point a
-> Point a
-> FinList m a
-> Diagram ('Parallel 'RightToLeft) N2 m a
DiagramParallelRL (AbHom -> Point AbHom
forall q. Oriented q => q -> Point q
end AbHom
a) (AbHom -> Point AbHom
forall q. Oriented q => q -> Point q
start AbHom
a) (AbHom
aAbHom -> FinList N0 AbHom -> FinList (N0 + 1) AbHom
forall a (n1 :: N'). a -> FinList n1 a -> FinList (n1 + 1) a
:|FinList N0 AbHom
forall a. FinList N0 a
Nil))
                    )

--------------------------------------------------------------------------------

-- xZeroFactor -


-- | @'xZeroFactor' xTo h@ gives a factor @f@ with

-- @f v'*' 'zabh' h@ is 'zero'.

xZeroFactor :: XOrtSite From (Matrix Z) -> Matrix Z -> X AbHom
xZeroFactor :: XOrtSite 'From (Matrix Z) -> Matrix Z -> X AbHom
xZeroFactor XOrtSite 'From (Matrix Z)
xFrom Matrix Z
h = do
  Matrix Z
f <- XOrtSite 'From (Matrix Z) -> Point (Matrix Z) -> X (Matrix Z)
forall q. XOrtSite 'From q -> Point q -> X q
xosStart XOrtSite 'From (Matrix Z)
xFrom (Matrix Z -> Point (Matrix Z)
forall q. Oriented q => q -> Point q
end Matrix Z
h)
  AbHom -> X AbHom
forall a. a -> X a
forall (m :: * -> *) a. Monad m => a -> m a
return (Matrix Z -> AbHom
prjZero (Matrix Z
f Matrix Z -> Matrix Z -> Matrix Z
forall c. Multiplicative c => c -> c -> c
* Matrix Z
h) AbHom -> AbHom -> AbHom
forall c. Multiplicative c => c -> c -> c
* Matrix Z -> AbHom
zabh Matrix Z
f)

  where
    prjZero :: Matrix Z -> AbHom
    prjZero :: Matrix Z -> AbHom
prjZero Matrix Z
f = Orientation AbGroup -> [(Z, N, N)] -> AbHom
abh' ((N -> AbGroup
abg N
0 AbGroup -> Exponent AbGroup -> AbGroup
forall f. Exponential f => f -> Exponent f -> f
^ N
Exponent AbGroup
d) AbGroup -> AbGroup -> Orientation AbGroup
forall p. p -> p -> Orientation p
:> N -> N -> [(Row N Z, N)] -> AbGroup
gcdRows N
d N
0 (Col N (Row N Z) -> [(Row N Z, N)]
forall i x. Col i x -> [(x, i)]
colxs (Col N (Row N Z) -> [(Row N Z, N)])
-> Col N (Row N Z) -> [(Row N Z, N)]
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Matrix Z -> Col N (Row N Z)
forall x. Matrix x -> Col N (Row N x)
mtxColRow Matrix Z
f)) (N -> [(Z, N, N)]
forall {c} {a}. (Enum c, Num c, Num a) => c -> [(a, c, c)]
one N
d) where
      d :: N
d     = Dim Z () -> N
forall x. LengthN x => x -> N
lengthN (Dim Z () -> N) -> Dim Z () -> N
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Matrix Z -> Dim' Z
forall x. Matrix x -> Dim' x
rows Matrix Z
f
      one :: c -> [(a, c, c)]
one c
d = [let i :: c
i = c -> c
forall a. Enum a => a -> a
pred c
i' in (a
1,c
i,c
i) | c
i' <- [c
1..c
d]] 
      
    gcdRows :: N -> N -> [(Row N Z,N)] -> AbGroup
    gcdRows :: N -> N -> [(Row N Z, N)] -> AbGroup
gcdRows N
0 N
_ [(Row N Z, N)]
_           = Point AbGroup -> AbGroup
forall c. Multiplicative c => Point c -> c
one ()
    gcdRows N
d N
i []          = N -> AbGroup
abg N
0          AbGroup -> AbGroup -> AbGroup
forall c. Multiplicative c => c -> c -> c
* N -> N -> [(Row N Z, N)] -> AbGroup
gcdRows (N -> N
forall a. Enum a => a -> a
pred N
d) (N -> N
forall a. Enum a => a -> a
succ N
i) []
    gcdRows N
d N
i ((Row N Z
c,N
i'):[(Row N Z, N)]
cs) = case N -> N -> Ordering
forall a. Ord a => a -> a -> Ordering
compare N
i N
i' of
      Ordering
LT                   -> N -> AbGroup
abg N
0          AbGroup -> AbGroup -> AbGroup
forall c. Multiplicative c => c -> c -> c
* N -> N -> [(Row N Z, N)] -> AbGroup
gcdRows (N -> N
forall a. Enum a => a -> a
pred N
d) (N -> N
forall a. Enum a => a -> a
succ N
i) ((Row N Z
c,N
i')(Row N Z, N) -> [(Row N Z, N)] -> [(Row N Z, N)]
forall a. a -> [a] -> [a]
:[(Row N Z, N)]
cs)
      Ordering
EQ                   -> N -> AbGroup
abg (Row N Z -> N
forall j. Row j Z -> N
gcdRow Row N Z
c) AbGroup -> AbGroup -> AbGroup
forall c. Multiplicative c => c -> c -> c
* N -> N -> [(Row N Z, N)] -> AbGroup
gcdRows (N -> N
forall a. Enum a => a -> a
pred N
d) (N -> N
forall a. Enum a => a -> a
succ N
i) [(Row N Z, N)]
cs
      Ordering
_                    -> AlgebraicException -> AbGroup
forall a e. Exception e => e -> a
throw (AlgebraicException -> AbGroup) -> AlgebraicException -> AbGroup
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ String -> AlgebraicException
ImplementationError String
""


    gcdRow :: Row j Z -> N
    gcdRow :: forall j. Row j Z -> N
gcdRow = [N] -> N
gcds ([N] -> N) -> (Row j Z -> [N]) -> Row j Z -> N
forall y z x. (y -> z) -> (x -> y) -> x -> z
forall (c :: * -> * -> *) y z x.
Category c =>
c y z -> c x y -> c x z
. ((Z, j) -> N) -> [(Z, j)] -> [N]
forall (h :: * -> * -> *) (f :: * -> *) x y.
Applicative1 h f =>
h x y -> f x -> f y
amap1 (Z -> N
forall a b. Projectible a b => b -> a
prj (Z -> N) -> ((Z, j) -> Z) -> (Z, j) -> N
forall y z x. (y -> z) -> (x -> y) -> x -> z
forall (c :: * -> * -> *) y z x.
Category c =>
c y z -> c x y -> c x z
. (Z, j) -> Z
forall a b. (a, b) -> a
fst) ([(Z, j)] -> [N]) -> (Row j Z -> [(Z, j)]) -> Row j Z -> [N]
forall y z x. (y -> z) -> (x -> y) -> x -> z
forall (c :: * -> * -> *) y z x.
Category c =>
c y z -> c x y -> c x z
. Row j Z -> [(Z, j)]
forall j x. Row j x -> [(x, j)]
rowxs 

vldXZeroFactor :: Statement
vldXZeroFactor :: Statement
vldXZeroFactor = X (Matrix Z) -> (Matrix Z -> Statement) -> Statement
forall x. X x -> (x -> Statement) -> Statement
Forall X (Matrix Z)
xm (\Matrix Z
h   -> X AbHom -> (AbHom -> Statement) -> Statement
forall x. X x -> (x -> Statement) -> Statement
Forall (XOrtSite 'From (Matrix Z) -> Matrix Z -> X AbHom
xZeroFactor XOrtSite 'From (Matrix Z)
forall (s :: Site) a. XStandardOrtSite s a => XOrtSite s a
xStandardOrtSite Matrix Z
h)
                             (\AbHom
f -> AbHom -> Bool
forall a. Additive a => a -> Bool
isZero (AbHom
f AbHom -> AbHom -> AbHom
forall c. Multiplicative c => c -> c -> c
* Matrix Z -> AbHom
zabh Matrix Z
h) Bool -> Message -> Statement
:?> [Parameter] -> Message
Params [String
"h"String -> String -> Parameter
:=Matrix Z -> String
forall a. Show a => a -> String
show Matrix Z
h,String
"f"String -> String -> Parameter
:=AbHom -> String
forall a. Show a => a -> String
show AbHom
f
                                                                   ,String
"fh"String -> String -> Parameter
:=AbHom -> String
forall a. Show a => a -> String
show (AbHom
fAbHom -> AbHom -> AbHom
forall c. Multiplicative c => c -> c -> c
*Matrix Z -> AbHom
zabh Matrix Z
h)
                                                                   ]
                             )
                           )
  where xm :: X (Matrix Z)
xm = XOrtOrientation (Matrix Z)
-> Orientation (Point (Matrix Z)) -> X (Matrix Z)
forall q. XOrtOrientation q -> Orientation (Point q) -> X q
xoArrow XOrtOrientation (Matrix Z)
xodZ (() -> Dim Z ()
forall p x. (Entity p, p ~ Point x) => p -> Dim x p
dim () Dim Z () -> Exponent (Dim Z ()) -> Dim Z ()
forall f. Exponential f => f -> Exponent f -> f
^ N
Exponent (Dim Z ())
10 Dim Z () -> Dim Z () -> Orientation (Dim Z ())
forall p. p -> p -> Orientation p
:> () -> Dim Z ()
forall p x. (Entity p, p ~ Point x) => p -> Dim x p
dim () Dim Z () -> Exponent (Dim Z ()) -> Dim Z ()
forall f. Exponential f => f -> Exponent f -> f
^ N
Exponent (Dim Z ())
8)

--------------------------------------------------------------------------------

-- prpAbhCokernelsFreeDgmLftFreeG -


-- | random variable for cokernel cones with the given diagram as its 'diagrammaticObject'. 

xecCokernelDiagramFreeAbHom
  :: XOrtSite From (Matrix Z)
  -> CokernelDiagrammatic DiagramFree N1 AbHom
  -> X (CokernelConic Cone DiagramFree N1 AbHom)
xecCokernelDiagramFreeAbHom :: XOrtSite 'From (Matrix Z)
-> DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> X (Cone
        Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom)
xecCokernelDiagramFreeAbHom XOrtSite 'From (Matrix Z)
xFrom DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
d = XOrtSite 'From (Matrix Z) -> Matrix Z -> X AbHom
xZeroFactor XOrtSite 'From (Matrix Z)
xFrom Matrix Z
hz X AbHom
-> (AbHom
    -> X (Cone
            Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom))
-> X (Cone
        Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom)
forall a b. X a -> (a -> X b) -> X b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Cone
  Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> X (Cone
        Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom)
forall a. a -> X a
forall (m :: * -> *) a. Monad m => a -> m a
return (Cone
   Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
 -> X (Cone
         Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom))
-> (AbHom
    -> Cone
         Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom)
-> AbHom
-> X (Cone
        Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom)
forall y z x. (y -> z) -> (x -> y) -> x -> z
forall (c :: * -> * -> *) y z x.
Category c =>
c y z -> c x y -> c x z
. DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
-> Cone
     Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'RightToLeft) N2 m a
-> a -> Cone Dst 'Injective d ('Parallel 'RightToLeft) N2 m a
ConeCokernel DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
d where
  DiagramParallelRL Point AbHom
_ Point AbHom
_ (AbHom
h:|FinList n1 AbHom
Nil) = DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall (t :: DiagramType) (n :: N') (m :: N') x.
DiagramFree t n m x -> Diagram t n m x
forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
Diagrammatic d =>
d t n m x -> Diagram t n m x
diagram DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
d
  hz :: Matrix Z
hz = AbHom -> Matrix Z
abhz AbHom
h  -- as d is DiagramFree holds: h == zabh (abhz h) and as such xZeroFactor gets a

               -- eligibel AbHom.


-- | random variable for eligible cones.

xecAbhCokernelsFreeDgmLftFreeG :: XEligibleConeG
  ConeLiftable Dst Injective DiagramFree (Parallel RightToLeft) N2 N1 AbHom
xecAbhCokernelsFreeDgmLftFreeG :: XEligibleConeG
  ConeLiftable
  Dst
  'Injective
  DiagramFree
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
xecAbhCokernelsFreeDgmLftFreeG
  = (CokernelG ConeLiftable DiagramFree N1 AbHom
 -> X (Cone
         Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom))
-> XEligibleConeG
     ConeLiftable
     Dst
     'Injective
     DiagramFree
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
(LimesG c s p d t n m x -> X (Cone s p d t n m x))
-> XEligibleConeG c s p d t n m x
XEligibleConeG (XOrtSite 'From (Matrix Z)
-> DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> X (Cone
        Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom)
xecCokernelDiagramFreeAbHom XOrtSite 'From (Matrix Z)
forall (s :: Site) a. XStandardOrtSite s a => XOrtSite s a
xStandardOrtSite (DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
 -> X (Cone
         Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom))
-> (CokernelG ConeLiftable DiagramFree N1 AbHom
    -> DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom)
-> CokernelG ConeLiftable DiagramFree N1 AbHom
-> X (Cone
        Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom)
forall y z x. (y -> z) -> (x -> y) -> x -> z
forall (c :: * -> * -> *) y z x.
Category c =>
c y z -> c x y -> c x z
. CokernelG ConeLiftable DiagramFree N1 AbHom
-> DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
Conic c =>
LimesG c s p d t n m x -> d t n m x
universalDiagram)

-- | random variable for eligible cone factors.

xecfAbhCokernelsFreeDgmLftFreeG :: XEligibleConeFactorG
  ConeLiftable Dst Injective DiagramFree (Parallel RightToLeft) N2 N1 AbHom
xecfAbhCokernelsFreeDgmLftFreeG :: XEligibleConeFactorG
  ConeLiftable
  Dst
  'Injective
  DiagramFree
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
xecfAbhCokernelsFreeDgmLftFreeG = XOrtSite 'From AbHom
-> XEligibleConeFactorG
     ConeLiftable
     Dst
     (ToPerspective 'From)
     DiagramFree
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       (r :: Site) x s (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N').
Conic c =>
XOrtSite r x
-> XEligibleConeFactorG c s (ToPerspective r) d t n m x
xecfOrtSite (XOrtSite 'From AbHom
forall (s :: Site) a. XStandardOrtSite s a => XOrtSite s a
xStandardOrtSite :: XOrtSite From AbHom)

-- | random variable for diagrams.

xdgAbhCokernelsFreeDgmLftFreeG :: X (DiagramFree (Parallel RightToLeft) N2 N1 AbHom)
xdgAbhCokernelsFreeDgmLftFreeG :: X (DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom)
xdgAbhCokernelsFreeDgmLftFreeG = X (Matrix Z)
-> X (DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom)
xCokernelDiagramFree X (Matrix Z)
forall x. XStandard x => X x
xStandard

-- | validation for 'abhCokernelsFreeDgmLftFreeG'.

prpAbhCokernelsFreeDgmLftFreeG :: Statement
prpAbhCokernelsFreeDgmLftFreeG :: Statement
prpAbhCokernelsFreeDgmLftFreeG
  = XEligibleConeG
  ConeLiftable
  Dst
  'Injective
  DiagramFree
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
-> XEligibleConeFactorG
     ConeLiftable
     Dst
     'Injective
     DiagramFree
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
-> X (DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom)
-> CokernelsG ConeLiftable DiagramFree N1 AbHom
-> Statement
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       (d :: DiagramType -> N' -> N' -> * -> *) s (p :: Perspective)
       (t :: DiagramType) (n :: N') (m :: N') x.
(Conic c, Diagrammatic d, Show (c s p d t n m x),
 Validable (c s p d t n m x), Entity (d t n m x), Entity x) =>
XEligibleConeG c s p d t n m x
-> XEligibleConeFactorG c s p d t n m x
-> X (d t n m x)
-> LimitsG c s p d t n m x
-> Statement
prpLimitsG
      XEligibleConeG
  ConeLiftable
  Dst
  'Injective
  DiagramFree
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
xecAbhCokernelsFreeDgmLftFreeG
      XEligibleConeFactorG
  ConeLiftable
  Dst
  'Injective
  DiagramFree
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
xecfAbhCokernelsFreeDgmLftFreeG
      X (DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom)
xdgAbhCokernelsFreeDgmLftFreeG
      CokernelsG ConeLiftable DiagramFree N1 AbHom
abhCokernelsFreeDgmLftFreeG


-- | is 'True' iff the givne abelian group is free.

abgIsFree :: AbGroup -> Bool
abgIsFree :: AbGroup -> Bool
abgIsFree AbGroup
g = case N -> SomeNatural
someNatural (N -> SomeNatural) -> N -> SomeNatural
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ AbGroup -> N
forall x. LengthN x => x -> N
lengthN AbGroup
g of SomeNatural W n
k -> Free n AbHom -> AbGroup -> Bool
forall (k :: N'). Attestable k => Free k AbHom -> AbGroup -> Bool
isFree' (W n -> Free n AbHom
forall (k :: N') c. Any k -> Free k c
Free W n
k) AbGroup
g
  where
    isFree' :: Attestable k => Free k AbHom -> AbGroup -> Bool
    isFree' :: forall (k :: N'). Attestable k => Free k AbHom -> AbGroup -> Bool
isFree' = Free k AbHom -> Point AbHom -> Bool
Free k AbHom -> AbGroup -> Bool
forall (k :: N') c.
Sliced (Free k) c =>
Free k c -> Point c -> Bool
isFree

-- | distribution of 'xecfAbhCokernelsFreeDgmLftFreeG'.

dstCokerDgmFrLft :: Int -> IO ()
dstCokerDgmFrLft :: Int -> IO ()
dstCokerDgmFrLft Int
n = ((Cone
    Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom,
  AbHom)
 -> [String])
-> Int
-> X (Cone
        Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom,
      AbHom)
-> IO ()
forall x. (x -> [String]) -> Int -> X x -> IO ()
putDstr (Cone
   Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom,
 AbHom)
-> [String]
forall {a} {a}
       {c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *}
       {d :: DiagramType -> N' -> N' -> * -> *} {n :: N'}.
(Point a ~ AbGroup, Point a ~ AbGroup, Conic c, Oriented a,
 Oriented a, Additive a, Additive a) =>
(CokernelConic c d n a, a) -> [String]
asp Int
n (X (Cone
      Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom,
    AbHom)
 -> IO ())
-> X (Cone
        Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom,
      AbHom)
-> IO ()
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ X (X (Cone
        Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom,
      AbHom))
-> X (Cone
        Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom,
      AbHom)
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (X (X (Cone
         Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom,
       AbHom))
 -> X (Cone
         Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom,
       AbHom))
-> X (X (Cone
           Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom,
         AbHom))
-> X (Cone
        Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom,
      AbHom)
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ ((DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
 -> X (Cone
         Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom,
       AbHom))
-> X (DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom)
-> X (X (Cone
           Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom,
         AbHom))
forall (h :: * -> * -> *) (f :: * -> *) x y.
Applicative1 h f =>
h x y -> f x -> f y
amap1 (XEligibleConeFactorG
  ConeLiftable
  Dst
  'Injective
  DiagramFree
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
-> CokernelG ConeLiftable DiagramFree N1 AbHom
-> X (Cone
        Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom,
      AbHom)
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
XEligibleConeFactorG c s p d t n m x
-> LimesG c s p d t n m x -> X (Cone s p d t n m x, x)
xecf XEligibleConeFactorG
  ConeLiftable
  Dst
  'Injective
  DiagramFree
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
xe (CokernelG ConeLiftable DiagramFree N1 AbHom
 -> X (Cone
         Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom,
       AbHom))
-> (DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
    -> CokernelG ConeLiftable DiagramFree N1 AbHom)
-> DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> X (Cone
        Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom,
      AbHom)
forall y z x. (y -> z) -> (x -> y) -> x -> z
forall (c :: * -> * -> *) y z x.
Category c =>
c y z -> c x y -> c x z
. CokernelsG ConeLiftable DiagramFree N1 AbHom
-> DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> CokernelG ConeLiftable DiagramFree N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimitsG c s p d t n m x -> d t n m x -> LimesG c s p d t n m x
limes CokernelsG ConeLiftable DiagramFree N1 AbHom
abhCokernelsFreeDgmLftFreeG) X (DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom)
xdg)
  where
    asp :: (CokernelConic c d n a, a) -> [String]
asp (CokernelConic c d n a
c,a
x) = [ AbGroup -> String
sf (a -> Point a
forall q. Oriented q => q -> Point q
start a
x), a -> String
forall {a}. Additive a => a -> String
sz a
x
                , AbGroup -> String
sf (a -> Point a
forall q. Oriented q => q -> Point q
end a
f), a -> String
forall {a}. Additive a => a -> String
sz a
f
                ]
      where f :: a
f = CokernelConic c d n a -> a
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       (d :: DiagramType -> N' -> N' -> * -> *) (n :: N') x.
Conic c =>
CokernelConic c d n x -> x
cokernelFactor CokernelConic c d n a
c

            sf :: AbGroup -> String
sf AbGroup
g = if AbGroup -> Bool
abgIsFree AbGroup
g then String
"free" else String
"cycl"
            sz :: a -> String
sz a
f = if a -> Bool
forall a. Additive a => a -> Bool
isZero a
f then String
"0" else String
"f"

    xdg :: X (DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom)
xdg = X (DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom)
xdgAbhCokernelsFreeDgmLftFreeG

    xe :: XEligibleConeFactorG
  ConeLiftable
  Dst
  'Injective
  DiagramFree
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
xe  = XEligibleConeFactorG
  ConeLiftable
  Dst
  'Injective
  DiagramFree
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
xecfAbhCokernelsFreeDgmLftFreeG

--------------------------------------------------------------------------------

-- abhCokernelFreeTo'G -


-- | liftable cokernel for free sliced 'To' diagrams.

abhCokernelFreeTo'G :: Attestable k
  => SliceDiagram (Free k) (Parallel RightToLeft) N2 N1 AbHom
  -> CokernelG ConeLiftable (SliceDiagram (Free k)) N1 AbHom
abhCokernelFreeTo'G :: forall (k :: N').
Attestable k =>
SliceDiagram (Free k) ('Parallel 'RightToLeft) N2 N1 AbHom
-> CokernelG ConeLiftable (SliceDiagram (Free k)) N1 AbHom
abhCokernelFreeTo'G hDgm :: SliceDiagram (Free k) ('Parallel 'RightToLeft) N2 N1 AbHom
hDgm@(SliceDiagramCokernel (SliceTo Free k AbHom
k AbHom
h)) = ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
-> (Cone
      Dst
      'Injective
      (SliceDiagram (Free k))
      ('Parallel 'RightToLeft)
      N2
      N1
      AbHom
    -> AbHom)
-> LimesG
     ConeLiftable
     Dst
     'Injective
     (SliceDiagram (Free k))
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
c s 'Injective d t n m x
-> (Cone s 'Injective d t n m x -> x)
-> LimesG c s 'Injective d t n m x
LimesInjective ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
hCoker Cone
  Dst
  'Injective
  (SliceDiagram (Free k))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
-> AbHom
hUniv where
  
  h' :: AbHom
h' = AbHomFree (Matrix Z) AbHom -> Matrix Z -> AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
amap AbHomFree (Matrix Z) AbHom
FreeAbHom (AbHomFree AbHom (Matrix Z) -> AbHom -> Matrix Z
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
amap AbHomFree AbHom (Matrix Z)
AbHomFree AbHom
h)
  -- h' has free start and end

  -- as end h is free it follows that, end h == end h' and

  -- unitRight abhFreeAdjunction (end h) == one (end h) and hence

  -- h == h' * unitRight abhFreeAdjunction (start h)


  h'Dgm :: DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
h'Dgm = case N -> SomeNatural
someNatural (AbGroup -> N
forall x. LengthN x => x -> N
lengthN (AbGroup -> N) -> AbGroup -> N
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ AbHom -> Point AbHom
forall q. Oriented q => q -> Point q
start AbHom
h') of
    SomeNatural W n
k' -> FinList N2 (SomeFree AbHom)
-> Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
forall (t :: DiagramType) (n :: N') (m :: N') a.
FinList n (SomeFree a) -> Diagram t n m a -> DiagramFree t n m a
DiagramFree FinList (N1 + 1) (SomeFree AbHom)
FinList N2 (SomeFree AbHom)
ks (AbHom -> Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall x. Oriented x => x -> CokernelDiagram N1 x
cokernelDiagram AbHom
h') where
      ks :: FinList (N1 + 1) (SomeFree AbHom)
ks = Free k AbHom -> SomeFree AbHom
forall (k :: N') c.
(Attestable k, Sliced (Free k) c) =>
Free k c -> SomeFree c
SomeFree Free k AbHom
kSomeFree AbHom
-> FinList N1 (SomeFree AbHom) -> FinList (N1 + 1) (SomeFree AbHom)
forall a (n1 :: N'). a -> FinList n1 a -> FinList (n1 + 1) a
:|Free n AbHom -> SomeFree AbHom
forall (k :: N') c.
(Attestable k, Sliced (Free k) c) =>
Free k c -> SomeFree c
SomeFree (W n -> Free n AbHom
forall (k :: N') c. Any k -> Free k c
Free W n
k')SomeFree AbHom
-> FinList N0 (SomeFree AbHom) -> FinList (N0 + 1) (SomeFree AbHom)
forall a (n1 :: N'). a -> FinList n1 a -> FinList (n1 + 1) a
:|FinList N0 (SomeFree AbHom)
forall a. FinList N0 a
Nil

  LimesInjective ConeLiftable
  Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
h'Coker Cone
  Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
h'Univ     = CokernelsG ConeLiftable DiagramFree N1 AbHom
-> DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> CokernelG ConeLiftable DiagramFree N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimitsG c s p d t n m x -> d t n m x -> LimesG c s p d t n m x
limes CokernelsG ConeLiftable DiagramFree N1 AbHom
abhCokernelsFreeDgmLftFreeG DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
h'Dgm
  ConeCokernelLiftable Cone
  Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
h'Cone LiftableFree 'Injective AbHom
h'lft = ConeLiftable
  Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
h'Coker

  -- as unitRight abhFreeAdjunction (start h) is an epimorphism it follows

  -- that h and h' have the same cokernelFactor!

  hCoker :: ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
hCoker = Cone
  Dst
  'Injective
  (SliceDiagram (Free k))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
-> LiftableFree 'Injective AbHom
-> ConeLiftable
     Dst
     'Injective
     (SliceDiagram (Free k))
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
forall (d :: DiagramType -> N' -> N' -> * -> *) x.
CokernelConic Cone d N1 x
-> LiftableFree 'Injective x
-> ConeLiftable Dst 'Injective d ('Parallel 'RightToLeft) N2 N1 x
ConeCokernelLiftable (SliceDiagram (Free k) ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
-> Cone
     Dst
     'Injective
     (SliceDiagram (Free k))
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'RightToLeft) N2 m a
-> a -> Cone Dst 'Injective d ('Parallel 'RightToLeft) N2 m a
ConeCokernel SliceDiagram (Free k) ('Parallel 'RightToLeft) N2 N1 AbHom
hDgm (Cone
  Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       (d :: DiagramType -> N' -> N' -> * -> *) (n :: N') x.
Conic c =>
CokernelConic c d n x -> x
cokernelFactor Cone
  Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
h'Cone)) LiftableFree 'Injective AbHom
h'lft
  
  hUniv :: Cone
  Dst
  'Injective
  (SliceDiagram (Free k))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
-> AbHom
hUniv (ConeCokernel SliceDiagram (Free k) ('Parallel 'RightToLeft) N2 N1 AbHom
_ AbHom
x) = Cone
  Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
h'Univ (DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
-> Cone
     Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'RightToLeft) N2 m a
-> a -> Cone Dst 'Injective d ('Parallel 'RightToLeft) N2 m a
ConeCokernel DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
h'Dgm AbHom
x)

--------------------------------------------------------------------------------

-- abhCokernelsFreeTo'G -


-- | generalized liftable cokernels for free sliced 'To' diagrams.

abhCokernelsFreeTo'G :: Attestable k => CokernelsG ConeLiftable (SliceDiagram (Free k)) N1 AbHom
abhCokernelsFreeTo'G :: forall (k :: N').
Attestable k =>
CokernelsG ConeLiftable (SliceDiagram (Free k)) N1 AbHom
abhCokernelsFreeTo'G = (SliceDiagram (Free k) ('Parallel 'RightToLeft) N2 N1 AbHom
 -> LimesG
      ConeLiftable
      Dst
      'Injective
      (SliceDiagram (Free k))
      ('Parallel 'RightToLeft)
      N2
      N1
      AbHom)
-> LimitsG
     ConeLiftable
     Dst
     'Injective
     (SliceDiagram (Free k))
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
(d t n m x -> LimesG c s p d t n m x) -> LimitsG c s p d t n m x
LimitsG SliceDiagram (Free k) ('Parallel 'RightToLeft) N2 N1 AbHom
-> LimesG
     ConeLiftable
     Dst
     'Injective
     (SliceDiagram (Free k))
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
forall (k :: N').
Attestable k =>
SliceDiagram (Free k) ('Parallel 'RightToLeft) N2 N1 AbHom
-> CokernelG ConeLiftable (SliceDiagram (Free k)) N1 AbHom
abhCokernelFreeTo'G

-- | generalized liftable cokernels for free sliced 'To' diagrams given by a proxy type.

abhCokernelsFreeTo'G' :: Attestable k
  => q k -> CokernelsG ConeLiftable (SliceDiagram (Free k)) N1 AbHom
abhCokernelsFreeTo'G' :: forall (k :: N') (q :: N' -> *).
Attestable k =>
q k -> CokernelsG ConeLiftable (SliceDiagram (Free k)) N1 AbHom
abhCokernelsFreeTo'G' q k
_ = CokernelsG ConeLiftable (SliceDiagram (Free k)) N1 AbHom
forall (k :: N').
Attestable k =>
CokernelsG ConeLiftable (SliceDiagram (Free k)) N1 AbHom
abhCokernelsFreeTo'G

--------------------------------------------------------------------------------

-- prpAbhCokernelsFreeTo'G -


-- | random variable for diagrams.

xdgAbhCokernelsFreeTo'G :: Attestable k => X (SliceDiagram (Free k) (Parallel RightToLeft) N2 N1 AbHom)
xdgAbhCokernelsFreeTo'G :: forall (k :: N').
Attestable k =>
X (SliceDiagram (Free k) ('Parallel 'RightToLeft) N2 N1 AbHom)
xdgAbhCokernelsFreeTo'G = (Slice 'To (Free k) AbHom
 -> SliceDiagram (Free k) ('Parallel 'RightToLeft) N2 N1 AbHom)
-> X (Slice 'To (Free k) AbHom)
-> X (SliceDiagram (Free k) ('Parallel 'RightToLeft) N2 N1 AbHom)
forall (h :: * -> * -> *) (f :: * -> *) x y.
Applicative1 h f =>
h x y -> f x -> f y
amap1 Slice 'To (Free k) AbHom
-> SliceDiagram (Free k) ('Parallel 'RightToLeft) N2 N1 AbHom
forall (i :: * -> *) x.
Sliced i x =>
Slice 'To i x -> SliceDiagram i ('Parallel 'RightToLeft) N2 N1 x
SliceDiagramCokernel X (Slice 'To (Free k) AbHom)
forall x. XStandard x => X x
xStandard

-- | random variable for cokernel cones with the given diagram as its 'diagrammaticObject'. 

xecCokernelSliceDiagramAbHom :: XOrtSite From (Matrix Z)
  -> CokernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
  -> X (CokernelConic Cone (SliceDiagram (Free k)) N1 AbHom)
xecCokernelSliceDiagramAbHom :: forall (k :: N').
XOrtSite 'From (Matrix Z)
-> CokernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> X (CokernelConic Cone (SliceDiagram (Free k)) N1 AbHom)
xecCokernelSliceDiagramAbHom XOrtSite 'From (Matrix Z)
xFrom CokernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
d = XOrtSite 'From (Matrix Z) -> Matrix Z -> X AbHom
xZeroFactor XOrtSite 'From (Matrix Z)
xFrom Matrix Z
hz X AbHom
-> (AbHom
    -> X (CokernelConic Cone (SliceDiagram (Free k)) N1 AbHom))
-> X (CokernelConic Cone (SliceDiagram (Free k)) N1 AbHom)
forall a b. X a -> (a -> X b) -> X b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= CokernelConic Cone (SliceDiagram (Free k)) N1 AbHom
-> X (CokernelConic Cone (SliceDiagram (Free k)) N1 AbHom)
forall a. a -> X a
forall (m :: * -> *) a. Monad m => a -> m a
return (CokernelConic Cone (SliceDiagram (Free k)) N1 AbHom
 -> X (CokernelConic Cone (SliceDiagram (Free k)) N1 AbHom))
-> (AbHom -> CokernelConic Cone (SliceDiagram (Free k)) N1 AbHom)
-> AbHom
-> X (CokernelConic Cone (SliceDiagram (Free k)) N1 AbHom)
forall y z x. (y -> z) -> (x -> y) -> x -> z
forall (c :: * -> * -> *) y z x.
Category c =>
c y z -> c x y -> c x z
. CokernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> AbHom -> CokernelConic Cone (SliceDiagram (Free k)) N1 AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'RightToLeft) N2 m a
-> a -> Cone Dst 'Injective d ('Parallel 'RightToLeft) N2 m a
ConeCokernel CokernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
d where
  SliceDiagramCokernel (SliceTo Free k AbHom
_ AbHom
h) = CokernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
d
  hz :: Matrix Z
hz = AbHomFree AbHom (Matrix Z) -> AbHom -> Matrix Z
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
amap AbHomFree AbHom (Matrix Z)
AbHomFree AbHom
h

-- | validation for 'xecCokernelSliceDiagramAbHom'.

vldXecCokernelSliceDiagramAbHom :: N -> Statement
vldXecCokernelSliceDiagramAbHom :: N -> Statement
vldXecCokernelSliceDiagramAbHom N
k = case N -> SomeNatural
someNatural N
k of
  SomeNatural W n
k' -> X (SliceDiagram (Free n) ('Parallel 'RightToLeft) N2 N1 AbHom)
-> (SliceDiagram (Free n) ('Parallel 'RightToLeft) N2 N1 AbHom
    -> Statement)
-> Statement
forall x. X x -> (x -> Statement) -> Statement
Forall (W n
-> X (SliceDiagram (Free n) ('Parallel 'RightToLeft) N2 N1 AbHom)
forall (k :: N') (q :: N' -> *).
Attestable k =>
q k
-> X (SliceDiagram (Free k) ('Parallel 'RightToLeft) N2 N1 AbHom)
xsdg W n
k')
                      (\SliceDiagram (Free n) ('Parallel 'RightToLeft) N2 N1 AbHom
d -> X (CokernelConic Cone (SliceDiagram (Free n)) N1 AbHom)
-> (CokernelConic Cone (SliceDiagram (Free n)) N1 AbHom
    -> Statement)
-> Statement
forall x. X x -> (x -> Statement) -> Statement
Forall (XOrtSite 'From (Matrix Z)
-> SliceDiagram (Free n) ('Parallel 'RightToLeft) N2 N1 AbHom
-> X (CokernelConic Cone (SliceDiagram (Free n)) N1 AbHom)
forall (k :: N').
XOrtSite 'From (Matrix Z)
-> CokernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> X (CokernelConic Cone (SliceDiagram (Free k)) N1 AbHom)
xecCokernelSliceDiagramAbHom XOrtSite 'From (Matrix Z)
forall (s :: Site) a. XStandardOrtSite s a => XOrtSite s a
xStandardOrtSite SliceDiagram (Free n) ('Parallel 'RightToLeft) N2 N1 AbHom
d) CokernelConic Cone (SliceDiagram (Free n)) N1 AbHom -> Statement
forall a. Validable a => a -> Statement
valid
                      )

  where
    xsdg :: Attestable k => q k -> X (SliceDiagram (Free k) (Parallel RightToLeft) N2 N1 AbHom)
    xsdg :: forall (k :: N') (q :: N' -> *).
Attestable k =>
q k
-> X (SliceDiagram (Free k) ('Parallel 'RightToLeft) N2 N1 AbHom)
xsdg q k
_ = X (SliceDiagram (Free k) ('Parallel 'RightToLeft) N2 N1 AbHom)
forall (k :: N').
Attestable k =>
X (SliceDiagram (Free k) ('Parallel 'RightToLeft) N2 N1 AbHom)
xdgAbhCokernelsFreeTo'G

-- | random variable for eligible cones.

xecAbhCokernelsFreeTo'G :: XEligibleConeG
  ConeLiftable Dst Injective (SliceDiagram (Free k)) (Parallel RightToLeft) N2 N1 AbHom
xecAbhCokernelsFreeTo'G :: forall (k :: N').
XEligibleConeG
  ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
xecAbhCokernelsFreeTo'G
  = (LimesG
   ConeLiftable
   Dst
   'Injective
   (SliceDiagram (Free k))
   ('Parallel 'RightToLeft)
   N2
   N1
   AbHom
 -> X (Cone
         Dst
         'Injective
         (SliceDiagram (Free k))
         ('Parallel 'RightToLeft)
         N2
         N1
         AbHom))
-> XEligibleConeG
     ConeLiftable
     Dst
     'Injective
     (SliceDiagram (Free k))
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
(LimesG c s p d t n m x -> X (Cone s p d t n m x))
-> XEligibleConeG c s p d t n m x
XEligibleConeG (XOrtSite 'From (Matrix Z)
-> CokernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> X (Cone
        Dst
        'Injective
        (SliceDiagram (Free k))
        ('Parallel 'RightToLeft)
        N2
        N1
        AbHom)
forall (k :: N').
XOrtSite 'From (Matrix Z)
-> CokernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> X (CokernelConic Cone (SliceDiagram (Free k)) N1 AbHom)
xecCokernelSliceDiagramAbHom XOrtSite 'From (Matrix Z)
forall (s :: Site) a. XStandardOrtSite s a => XOrtSite s a
xStandardOrtSite (CokernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
 -> X (Cone
         Dst
         'Injective
         (SliceDiagram (Free k))
         ('Parallel 'RightToLeft)
         N2
         N1
         AbHom))
-> (LimesG
      ConeLiftable
      Dst
      'Injective
      (SliceDiagram (Free k))
      ('Parallel 'RightToLeft)
      N2
      N1
      AbHom
    -> CokernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom)
-> LimesG
     ConeLiftable
     Dst
     'Injective
     (SliceDiagram (Free k))
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
-> X (Cone
        Dst
        'Injective
        (SliceDiagram (Free k))
        ('Parallel 'RightToLeft)
        N2
        N1
        AbHom)
forall y z x. (y -> z) -> (x -> y) -> x -> z
forall (c :: * -> * -> *) y z x.
Category c =>
c y z -> c x y -> c x z
. LimesG
  ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
-> CokernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
Conic c =>
LimesG c s p d t n m x -> d t n m x
universalDiagram)

-- | random variable for eligible cone factors.

xecfAbhCokernelsFreeTo'G :: XEligibleConeFactorG
  ConeLiftable Dst Injective (SliceDiagram (Free k)) (Parallel RightToLeft) N2 N1 AbHom
xecfAbhCokernelsFreeTo'G :: forall (k :: N').
XEligibleConeFactorG
  ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
xecfAbhCokernelsFreeTo'G = XOrtSite 'From AbHom
-> XEligibleConeFactorG
     ConeLiftable
     Dst
     (ToPerspective 'From)
     (SliceDiagram (Free k))
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       (r :: Site) x s (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N').
Conic c =>
XOrtSite r x
-> XEligibleConeFactorG c s (ToPerspective r) d t n m x
xecfOrtSite (XOrtSite 'From AbHom
forall (s :: Site) a. XStandardOrtSite s a => XOrtSite s a
xStandardOrtSite :: XOrtSite From AbHom)

-- | validity of 'abhCokernelsFreeTo'G' for the given dimension. 

prpAbhCokernelsFreeTo'G :: N -> Statement
prpAbhCokernelsFreeTo'G :: N -> Statement
prpAbhCokernelsFreeTo'G N
k = case N -> SomeNatural
someNatural N
k of
  SomeNatural W n
k' -> XEligibleConeG
  ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free n))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
-> XEligibleConeFactorG
     ConeLiftable
     Dst
     'Injective
     (SliceDiagram (Free n))
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
-> X (SliceDiagram (Free n) ('Parallel 'RightToLeft) N2 N1 AbHom)
-> LimitsG
     ConeLiftable
     Dst
     'Injective
     (SliceDiagram (Free n))
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
-> Statement
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       (d :: DiagramType -> N' -> N' -> * -> *) s (p :: Perspective)
       (t :: DiagramType) (n :: N') (m :: N') x.
(Conic c, Diagrammatic d, Show (c s p d t n m x),
 Validable (c s p d t n m x), Entity (d t n m x), Entity x) =>
XEligibleConeG c s p d t n m x
-> XEligibleConeFactorG c s p d t n m x
-> X (d t n m x)
-> LimitsG c s p d t n m x
-> Statement
prpLimitsG
                      XEligibleConeG
  ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free n))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
forall (k :: N').
XEligibleConeG
  ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
xecAbhCokernelsFreeTo'G
                      XEligibleConeFactorG
  ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free n))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
forall (k :: N').
XEligibleConeFactorG
  ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
xecfAbhCokernelsFreeTo'G
                      X (SliceDiagram (Free n) ('Parallel 'RightToLeft) N2 N1 AbHom)
forall (k :: N').
Attestable k =>
X (SliceDiagram (Free k) ('Parallel 'RightToLeft) N2 N1 AbHom)
xdgAbhCokernelsFreeTo'G
                      (W n
-> LimitsG
     ConeLiftable
     Dst
     'Injective
     (SliceDiagram (Free n))
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
forall (k :: N') (q :: N' -> *).
Attestable k =>
q k -> CokernelsG ConeLiftable (SliceDiagram (Free k)) N1 AbHom
abhCokernelsFreeTo'G' W n
k')


--------------------------------------------------------------------------------

-- abhCokernelsLiftableSomeFree -


-- | liftable cokernel for free sliced 'To' diagram.

abhCokernelLiftableSomeFree :: CokernelDiagrammatic SomeFreeSliceDiagram N1 AbHom
  -> CokernelG ConeLiftable SomeFreeSliceDiagram N1 AbHom
abhCokernelLiftableSomeFree :: CokernelDiagrammatic SomeFreeSliceDiagram N1 AbHom
-> CokernelG ConeLiftable SomeFreeSliceDiagram N1 AbHom
abhCokernelLiftableSomeFree d :: CokernelDiagrammatic SomeFreeSliceDiagram N1 AbHom
d@(SomeFreeSliceCokernel Slice 'To (Free k) AbHom
to) = ConeLiftable
  Dst
  'Injective
  SomeFreeSliceDiagram
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
-> (Cone
      Dst
      'Injective
      SomeFreeSliceDiagram
      ('Parallel 'RightToLeft)
      N2
      N1
      AbHom
    -> AbHom)
-> CokernelG ConeLiftable SomeFreeSliceDiagram N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
c s 'Injective d t n m x
-> (Cone s 'Injective d t n m x -> x)
-> LimesG c s 'Injective d t n m x
LimesInjective ConeLiftable
  Dst
  'Injective
  SomeFreeSliceDiagram
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
cnLft Cone
  Dst
  'Injective
  SomeFreeSliceDiagram
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
-> AbHom
univLft where
  d' :: SliceDiagram (Free k) ('Parallel 'RightToLeft) N2 N1 AbHom
d' = Slice 'To (Free k) AbHom
-> SliceDiagram (Free k) ('Parallel 'RightToLeft) N2 N1 AbHom
forall (i :: * -> *) x.
Sliced i x =>
Slice 'To i x -> SliceDiagram i ('Parallel 'RightToLeft) N2 N1 x
SliceDiagramCokernel Slice 'To (Free k) AbHom
to
  LimesInjective ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
cnLft' Cone
  Dst
  'Injective
  (SliceDiagram (Free k))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
-> AbHom
univLft' = LimitsG
  ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
-> SliceDiagram (Free k) ('Parallel 'RightToLeft) N2 N1 AbHom
-> LimesG
     ConeLiftable
     Dst
     'Injective
     (SliceDiagram (Free k))
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimitsG c s p d t n m x -> d t n m x -> LimesG c s p d t n m x
limes LimitsG
  ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
forall (k :: N').
Attestable k =>
CokernelsG ConeLiftable (SliceDiagram (Free k)) N1 AbHom
abhCokernelsFreeTo'G SliceDiagram (Free k) ('Parallel 'RightToLeft) N2 N1 AbHom
d'
  
  cnLft :: ConeLiftable
  Dst
  'Injective
  SomeFreeSliceDiagram
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
cnLft = Cone
  Dst
  'Injective
  SomeFreeSliceDiagram
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
-> LiftableFree 'Injective AbHom
-> ConeLiftable
     Dst
     'Injective
     SomeFreeSliceDiagram
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
forall (d :: DiagramType -> N' -> N' -> * -> *) x.
CokernelConic Cone d N1 x
-> LiftableFree 'Injective x
-> ConeLiftable Dst 'Injective d ('Parallel 'RightToLeft) N2 N1 x
ConeCokernelLiftable Cone
  Dst
  'Injective
  SomeFreeSliceDiagram
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
cn LiftableFree 'Injective AbHom
lft where
    cn :: Cone
  Dst
  'Injective
  SomeFreeSliceDiagram
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
cn  = CokernelDiagrammatic SomeFreeSliceDiagram N1 AbHom
-> AbHom
-> Cone
     Dst
     'Injective
     SomeFreeSliceDiagram
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'RightToLeft) N2 m a
-> a -> Cone Dst 'Injective d ('Parallel 'RightToLeft) N2 m a
ConeCokernel CokernelDiagrammatic SomeFreeSliceDiagram N1 AbHom
d (ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
-> AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       (d :: DiagramType -> N' -> N' -> * -> *) (n :: N') x.
Conic c =>
CokernelConic c d n x -> x
cokernelFactor (ConeLiftable
   Dst
   'Injective
   (SliceDiagram (Free k))
   ('Parallel 'RightToLeft)
   N2
   N1
   AbHom
 -> AbHom)
-> ConeLiftable
     Dst
     'Injective
     (SliceDiagram (Free k))
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
-> AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
cnLft')
    lft :: LiftableFree 'Injective AbHom
lft = ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
-> LiftableFree 'Injective AbHom
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
ConeLiftable s p d t n m x -> LiftableFree p x
cnLiftable ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
cnLft'
    
  univLft :: Cone
  Dst
  'Injective
  SomeFreeSliceDiagram
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
-> AbHom
univLft (ConeCokernel CokernelDiagrammatic SomeFreeSliceDiagram N1 AbHom
_ AbHom
x) = Cone
  Dst
  'Injective
  (SliceDiagram (Free k))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
-> AbHom
univLft' (SliceDiagram (Free k) ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
-> Cone
     Dst
     'Injective
     (SliceDiagram (Free k))
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'RightToLeft) N2 m a
-> a -> Cone Dst 'Injective d ('Parallel 'RightToLeft) N2 m a
ConeCokernel SliceDiagram (Free k) ('Parallel 'RightToLeft) N2 N1 AbHom
d' AbHom
x)

--------------------------------------------------------------------------------

-- abhCokernelsLiftableSomeFree -


-- | liftable cokernels for free sliced 'To' diagrams.

abhCokernelsLiftableSomeFree :: CokernelsG ConeLiftable SomeFreeSliceDiagram N1 AbHom
abhCokernelsLiftableSomeFree :: CokernelsG ConeLiftable SomeFreeSliceDiagram N1 AbHom
abhCokernelsLiftableSomeFree = (CokernelDiagrammatic SomeFreeSliceDiagram N1 AbHom
 -> CokernelG ConeLiftable SomeFreeSliceDiagram N1 AbHom)
-> CokernelsG ConeLiftable SomeFreeSliceDiagram N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
(d t n m x -> LimesG c s p d t n m x) -> LimitsG c s p d t n m x
LimitsG CokernelDiagrammatic SomeFreeSliceDiagram N1 AbHom
-> CokernelG ConeLiftable SomeFreeSliceDiagram N1 AbHom
abhCokernelLiftableSomeFree

--------------------------------------------------------------------------------

-- abhPullbackFreeG -


-- | pullback of a free diagram having a free 'tip'.

abhPullbackFreeG :: PullbackDiagrammatic DiagramFree n AbHom
  -> PullbackG (ConicFreeTip Cone) DiagramFree n AbHom
abhPullbackFreeG :: forall (n :: N').
PullbackDiagrammatic DiagramFree n AbHom
-> PullbackG (ConicFreeTip Cone) DiagramFree n AbHom
abhPullbackFreeG d :: PullbackDiagrammatic DiagramFree n AbHom
d@(DiagramFree FinList (n + 1) (SomeFree AbHom)
_ Diagram ('Star 'To) (n + 1) n AbHom
d') = ConicFreeTip
  Cone Mlt 'Projective DiagramFree ('Star 'To) ('S n) n AbHom
-> (Cone Mlt 'Projective DiagramFree ('Star 'To) ('S n) n AbHom
    -> AbHom)
-> LimesG
     (ConicFreeTip Cone)
     Mlt
     'Projective
     DiagramFree
     ('Star 'To)
     ('S n)
     n
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
c s 'Projective d t n m x
-> (Cone s 'Projective d t n m x -> x)
-> LimesG c s 'Projective d t n m x
LimesProjective ConicFreeTip
  Cone Mlt 'Projective DiagramFree ('Star 'To) ('S n) n AbHom
pCn Cone Mlt 'Projective DiagramFree ('Star 'To) ('S n) n AbHom
-> AbHom
pUniv where
  -- if d = DiagramFree _ d' is valid, then r (l d') == d' for the right

  -- and left adjoint of abhFreeAdjunction. Furthermore the tip of p is free!

  freeTip :: PullbackCone n AbHom -> SomeFree AbHom
  freeTip :: forall (n :: N'). PullbackCone n AbHom -> SomeFree AbHom
freeTip PullbackCone n AbHom
p = case N -> SomeNatural
someNatural N
n of
    SomeNatural W n
n' -> Free n AbHom -> SomeFree AbHom
forall (k :: N') c.
(Attestable k, Sliced (Free k) c) =>
Free k c -> SomeFree c
SomeFree (W n -> Free n AbHom
forall (k :: N') c. Any k -> Free k c
Free W n
n')
    where n :: N
n = Point AbHom -> N
forall x. LengthN x => x -> N
lengthN (Point AbHom -> N) -> Point AbHom -> N
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Cone Mlt 'Projective Diagram ('Star 'To) ('S n) n AbHom
-> Point AbHom
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') a.
Cone s p d t n m a -> Point a
tip (Cone Mlt 'Projective Diagram ('Star 'To) ('S n) n AbHom
 -> Point AbHom)
-> Cone Mlt 'Projective Diagram ('Star 'To) ('S n) n AbHom
-> Point AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ PullbackCone n AbHom
Cone Mlt 'Projective Diagram ('Star 'To) ('S n) n AbHom
p

  LimesProjective Cone Mlt 'Projective Diagram ('Star 'To) ('S n) n AbHom
pCn' Cone Mlt 'Projective Diagram ('Star 'To) ('S n) n AbHom -> AbHom
pUniv' = Adjunction AbHomFree (Matrix Z) AbHom
-> Limes Mlt 'Projective ('Star 'To) ('S n) n (Matrix Z)
-> LimesG Cone Mlt 'Projective Diagram ('Star 'To) ('S n) n AbHom
forall (h :: * -> * -> *) d c (t :: DiagramType) (n :: N')
       (m :: N').
HomMultiplicative h =>
Adjunction h d c
-> Limes Mlt 'Projective t n m d -> Limes Mlt 'Projective t n m c
lmPrjMap Adjunction AbHomFree (Matrix Z) AbHom
adj (Limes Mlt 'Projective ('Star 'To) ('S n) n (Matrix Z)
 -> LimesG Cone Mlt 'Projective Diagram ('Star 'To) ('S n) n AbHom)
-> Limes Mlt 'Projective ('Star 'To) ('S n) n (Matrix Z)
-> LimesG Cone Mlt 'Projective Diagram ('Star 'To) ('S n) n AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ LimitsG
  Cone Mlt 'Projective Diagram ('Star 'To) ('S n) n (Matrix Z)
-> Diagram ('Star 'To) ('S n) n (Matrix Z)
-> Limes Mlt 'Projective ('Star 'To) ('S n) n (Matrix Z)
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimitsG c s p d t n m x -> d t n m x -> LimesG c s p d t n m x
limes Pullbacks n (Matrix Z)
LimitsG
  Cone Mlt 'Projective Diagram ('Star 'To) ('S n) n (Matrix Z)
forall (n :: N'). Pullbacks n (Matrix Z)
zmxPullbacks (Diagram ('Star 'To) ('S n) n (Matrix Z)
 -> Limes Mlt 'Projective ('Star 'To) ('S n) n (Matrix Z))
-> Diagram ('Star 'To) ('S n) n (Matrix Z)
-> Limes Mlt 'Projective ('Star 'To) ('S n) n (Matrix Z)
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ AbHomFree AbHom (Matrix Z)
-> Diagram ('Star 'To) ('S n) n AbHom
-> Diagram ('Star 'To) ('S n) n (Matrix Z)
forall (h :: * -> * -> *) x y (t :: DiagramType) (n :: N')
       (m :: N').
HomOriented h =>
h x y -> Diagram t n m x -> Diagram t n m y
dgMap AbHomFree AbHom (Matrix Z)
l Diagram ('Star 'To) (n + 1) n AbHom
Diagram ('Star 'To) ('S n) n AbHom
d' where
    adj :: Adjunction AbHomFree (Matrix Z) AbHom
adj = Adjunction AbHomFree (Matrix Z) AbHom
abhFreeAdjunction
    Adjunction AbHomFree AbHom (Matrix Z)
l AbHomFree (Matrix Z) AbHom
_ Point AbHom -> AbHom
_ Point (Matrix Z) -> Matrix Z
_ = Adjunction AbHomFree (Matrix Z) AbHom
adj


  pCn :: ConicFreeTip
  Cone Mlt 'Projective DiagramFree ('Star 'To) ('S n) n AbHom
pCn = case PullbackCone n AbHom -> SomeFree AbHom
forall (n :: N'). PullbackCone n AbHom -> SomeFree AbHom
freeTip PullbackCone n AbHom
Cone Mlt 'Projective Diagram ('Star 'To) ('S n) n AbHom
pCn' of
    SomeFree Free k AbHom
k -> Free k AbHom
-> Cone Mlt 'Projective DiagramFree ('Star 'To) ('S n) n AbHom
-> ConicFreeTip
     Cone Mlt 'Projective DiagramFree ('Star 'To) ('S n) n AbHom
forall (k :: N') x
       (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N').
(Attestable k, Sliced (Free k) x) =>
Free k x -> c s p d t n m x -> ConicFreeTip c s p d t n m x
ConicFreeTip Free k AbHom
k (DiagramFree ('Star 'To) ('S n) n AbHom
-> Point AbHom
-> FinList ('S n) AbHom
-> Cone Mlt 'Projective DiagramFree ('Star 'To) ('S n) n AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N').
Multiplicative a =>
d t n m a
-> Point a -> FinList n a -> Cone Mlt 'Projective d t n m a
ConeProjective PullbackDiagrammatic DiagramFree n AbHom
DiagramFree ('Star 'To) ('S n) n AbHom
d (Cone Mlt 'Projective Diagram ('Star 'To) ('S n) n AbHom
-> Point AbHom
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') a.
Cone s p d t n m a -> Point a
tip Cone Mlt 'Projective Diagram ('Star 'To) ('S n) n AbHom
pCn') (Cone Mlt 'Projective Diagram ('Star 'To) ('S n) n AbHom
-> FinList ('S n) AbHom
forall (d :: DiagramType -> N' -> N' -> * -> *) s
       (p :: Perspective) (t :: DiagramType) (n :: N') (m :: N') a.
Diagrammatic d =>
Cone s p d t n m a -> FinList n a
shell Cone Mlt 'Projective Diagram ('Star 'To) ('S n) n AbHom
pCn'))
    
  pUniv :: Cone Mlt 'Projective DiagramFree ('Star 'To) ('S n) n AbHom
-> AbHom
pUniv (ConeProjective DiagramFree ('Star 'To) ('S n) n AbHom
d Point AbHom
t FinList ('S n) AbHom
x) = Cone Mlt 'Projective Diagram ('Star 'To) ('S n) n AbHom -> AbHom
pUniv' (Diagram ('Star 'To) ('S n) n AbHom
-> Point AbHom
-> FinList ('S n) AbHom
-> Cone Mlt 'Projective Diagram ('Star 'To) ('S n) n AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N').
Multiplicative a =>
d t n m a
-> Point a -> FinList n a -> Cone Mlt 'Projective d t n m a
ConeProjective (DiagramFree ('Star 'To) ('S n) n AbHom
-> Diagram ('Star 'To) ('S n) n AbHom
forall (t :: DiagramType) (n :: N') (m :: N') x.
DiagramFree t n m x -> Diagram t n m x
forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
Diagrammatic d =>
d t n m x -> Diagram t n m x
diagram DiagramFree ('Star 'To) ('S n) n AbHom
d) Point AbHom
t FinList ('S n) AbHom
x)


--------------------------------------------------------------------------------

-- abhPullbacksFreeG -


-- | pullbacks of free diagrams having free 'tip's.

abhPullbacksFreeG :: PullbacksG (ConicFreeTip Cone) DiagramFree n AbHom
abhPullbacksFreeG :: forall (n :: N').
PullbacksG (ConicFreeTip Cone) DiagramFree n AbHom
abhPullbacksFreeG = (DiagramFree ('Star 'To) ('S n) n AbHom
 -> LimesG
      (ConicFreeTip Cone)
      Mlt
      'Projective
      DiagramFree
      ('Star 'To)
      ('S n)
      n
      AbHom)
-> LimitsG
     (ConicFreeTip Cone)
     Mlt
     'Projective
     DiagramFree
     ('Star 'To)
     ('S n)
     n
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
(d t n m x -> LimesG c s p d t n m x) -> LimitsG c s p d t n m x
LimitsG PullbackDiagrammatic DiagramFree n AbHom
-> PullbackG (ConicFreeTip Cone) DiagramFree n AbHom
DiagramFree ('Star 'To) ('S n) n AbHom
-> LimesG
     (ConicFreeTip Cone)
     Mlt
     'Projective
     DiagramFree
     ('Star 'To)
     ('S n)
     n
     AbHom
forall (n :: N').
PullbackDiagrammatic DiagramFree n AbHom
-> PullbackG (ConicFreeTip Cone) DiagramFree n AbHom
abhPullbackFreeG

-- | pullbacks of free diagrams according to the given proxy type.

abhPullbacksFreeG' :: q n -> PullbacksG (ConicFreeTip Cone) DiagramFree n AbHom
abhPullbacksFreeG' :: forall (q :: N' -> *) (n :: N').
q n -> PullbacksG (ConicFreeTip Cone) DiagramFree n AbHom
abhPullbacksFreeG' q n
_ = PullbacksG (ConicFreeTip Cone) DiagramFree n AbHom
forall (n :: N').
PullbacksG (ConicFreeTip Cone) DiagramFree n AbHom
abhPullbacksFreeG

--------------------------------------------------------------------------------

-- prpPullbacksFreeG -


-- | random variable for eligible cone factors.

xecfAbhPullbacksFreeG :: XEligibleConeFactorG
           (ConicFreeTip Cone) Mlt Projective DiagramFree (Star To) (S n) n AbHom
xecfAbhPullbacksFreeG :: forall (n :: N').
XEligibleConeFactorG
  (ConicFreeTip Cone)
  Mlt
  'Projective
  DiagramFree
  ('Star 'To)
  ('S n)
  n
  AbHom
xecfAbhPullbacksFreeG = XOrtSite 'To AbHom
-> XEligibleConeFactorG
     (ConicFreeTip Cone)
     Mlt
     (ToPerspective 'To)
     DiagramFree
     ('Star 'To)
     ('S n)
     n
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       (r :: Site) x s (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N').
Conic c =>
XOrtSite r x
-> XEligibleConeFactorG c s (ToPerspective r) d t n m x
xecfOrtSite (XOrtSite 'To AbHom
forall (s :: Site) a. XStandardOrtSite s a => XOrtSite s a
xStandardOrtSite :: XOrtSite To AbHom)

-- | random variable for eligible cones.

xecAbhPullbacksFreeG :: XEligibleConeG
           (ConicFreeTip Cone) Mlt Projective DiagramFree (Star To) (S n) n AbHom
xecAbhPullbacksFreeG :: forall (n :: N').
XEligibleConeG
  (ConicFreeTip Cone)
  Mlt
  'Projective
  DiagramFree
  ('Star 'To)
  ('S n)
  n
  AbHom
xecAbhPullbacksFreeG = XEligibleConeFactorG
  (ConicFreeTip Cone)
  Mlt
  'Projective
  DiagramFree
  ('Star 'To)
  ('S n)
  n
  AbHom
-> XEligibleConeG
     (ConicFreeTip Cone)
     Mlt
     'Projective
     DiagramFree
     ('Star 'To)
     ('S n)
     n
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
XEligibleConeFactorG c s p d t n m x
-> XEligibleConeG c s p d t n m x
xecfEligibleCone XEligibleConeFactorG
  (ConicFreeTip Cone)
  Mlt
  'Projective
  DiagramFree
  ('Star 'To)
  ('S n)
  n
  AbHom
forall (n :: N').
XEligibleConeFactorG
  (ConicFreeTip Cone)
  Mlt
  'Projective
  DiagramFree
  ('Star 'To)
  ('S n)
  n
  AbHom
xecfAbhPullbacksFreeG

-- | random variable for free pullback diagrams.

xdgAbhPullbacksFreeG :: Any n -> X (DiagramFree (Star To) (n+1) n AbHom)
xdgAbhPullbacksFreeG :: forall (n :: N').
Any n -> X (DiagramFree ('Star 'To) (n + 1) n AbHom)
xdgAbhPullbacksFreeG Any n
n
  = (Diagram ('Star 'To) ('S n) n (Matrix Z)
 -> DiagramFree ('Star 'To) ('S n) n AbHom)
-> X (Diagram ('Star 'To) ('S n) n (Matrix Z))
-> X (DiagramFree ('Star 'To) ('S n) n AbHom)
forall (h :: * -> * -> *) (f :: * -> *) x y.
Applicative1 h f =>
h x y -> f x -> f y
amap1 Diagram ('Star 'To) (n + 1) n (Matrix Z)
-> DiagramFree ('Star 'To) (n + 1) n AbHom
Diagram ('Star 'To) ('S n) n (Matrix Z)
-> DiagramFree ('Star 'To) ('S n) n AbHom
forall (n :: N').
Diagram ('Star 'To) (n + 1) n (Matrix Z)
-> DiagramFree ('Star 'To) (n + 1) n AbHom
toDiagramFree (X (Diagram ('Star 'To) ('S n) n (Matrix Z))
 -> X (DiagramFree ('Star 'To) ('S n) n AbHom))
-> X (Diagram ('Star 'To) ('S n) n (Matrix Z))
-> X (DiagramFree ('Star 'To) ('S n) n AbHom)
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ (Dual (Dual ('Star 'To)) :~: 'Star 'To)
-> XDiagram ('Star 'To) ('S n) n (Matrix Z)
-> X (Diagram ('Star 'To) ('S n) n (Matrix Z))
forall a (t :: DiagramType) (n :: N') (m :: N').
Oriented a =>
(Dual (Dual t) :~: t) -> XDiagram t n m a -> X (Diagram t n m a)
xDiagram Dual (Dual ('Star 'To)) :~: 'Star 'To
'Star 'To :~: 'Star 'To
forall {k} (a :: k). a :~: a
Refl (Any n
-> XOrtSite 'To (Matrix Z)
-> XDiagram ('Star 'To) (n + 1) n (Matrix Z)
forall (m :: N') a.
Any m -> XOrtSite 'To a -> XDiagram ('Star 'To) (m + 1) m a
XDiagramSink Any n
n (XOrtSite 'To (Matrix Z)
forall (s :: Site) a. XStandardOrtSite s a => XOrtSite s a
xStandardOrtSite :: XOrtSite To (Matrix Z)))
  where
    toDiagramFree :: Diagram (Star To) (n+1) n (Matrix Z) -> DiagramFree (Star To) (n+1) n AbHom
    toDiagramFree :: forall (n :: N').
Diagram ('Star 'To) (n + 1) n (Matrix Z)
-> DiagramFree ('Star 'To) (n + 1) n AbHom
toDiagramFree Diagram ('Star 'To) (n + 1) n (Matrix Z)
zDgm = FinList ('S n) (SomeFree AbHom)
-> Diagram ('Star 'To) ('S n) n AbHom
-> DiagramFree ('Star 'To) ('S n) n AbHom
forall (t :: DiagramType) (n :: N') (m :: N') a.
FinList n (SomeFree a) -> Diagram t n m a -> DiagramFree t n m a
DiagramFree ((Dim Z () -> SomeFree AbHom)
-> FinList ('S n) (Dim Z ()) -> FinList ('S n) (SomeFree AbHom)
forall (h :: * -> * -> *) (f :: * -> *) x y.
Applicative1 h f =>
h x y -> f x -> f y
amap1 Dim Z () -> SomeFree AbHom
sfrAbg (FinList ('S n) (Dim Z ()) -> FinList ('S n) (SomeFree AbHom))
-> FinList ('S n) (Dim Z ()) -> FinList ('S n) (SomeFree AbHom)
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Diagram ('Star 'To) ('S n) n (Matrix Z)
-> FinList ('S n) (Point (Matrix Z))
forall a (t :: DiagramType) (n :: N') (m :: N').
Oriented a =>
Diagram t n m a -> FinList n (Point a)
dgPoints Diagram ('Star 'To) (n + 1) n (Matrix Z)
Diagram ('Star 'To) ('S n) n (Matrix Z)
zDgm) (AbHomFree (Matrix Z) AbHom
-> Diagram ('Star 'To) ('S n) n (Matrix Z)
-> Diagram ('Star 'To) ('S n) n AbHom
forall (h :: * -> * -> *) x y (t :: DiagramType) (n :: N')
       (m :: N').
HomOriented h =>
h x y -> Diagram t n m x -> Diagram t n m y
dgMap AbHomFree (Matrix Z) AbHom
FreeAbHom Diagram ('Star 'To) (n + 1) n (Matrix Z)
Diagram ('Star 'To) ('S n) n (Matrix Z)
zDgm)

    sfrAbg :: Dim Z () -> SomeFree AbHom
    sfrAbg :: Dim Z () -> SomeFree AbHom
sfrAbg Dim Z ()
d = case N -> SomeNatural
someNatural (N -> SomeNatural) -> N -> SomeNatural
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Dim Z () -> N
forall x. LengthN x => x -> N
lengthN (Dim Z () -> N) -> Dim Z () -> N
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Dim Z ()
d of SomeNatural W n
d' -> Free n AbHom -> SomeFree AbHom
forall (k :: N') c.
(Attestable k, Sliced (Free k) c) =>
Free k c -> SomeFree c
SomeFree (W n -> Free n AbHom
forall (k :: N') c. Any k -> Free k c
Free W n
d')

-- | validity of 'abhPullbacksFreeG' for a pullback diagram with the given number of arrows.

prpAbhPullbacksFreeGN :: N -> Statement
prpAbhPullbacksFreeGN :: N -> Statement
prpAbhPullbacksFreeGN N
n = case N -> SomeNatural
someNatural N
n of
  SomeNatural W n
n' -> XEligibleConeG
  (ConicFreeTip Cone)
  Mlt
  'Projective
  DiagramFree
  ('Star 'To)
  ('S n)
  n
  AbHom
-> XEligibleConeFactorG
     (ConicFreeTip Cone)
     Mlt
     'Projective
     DiagramFree
     ('Star 'To)
     ('S n)
     n
     AbHom
-> X (DiagramFree ('Star 'To) ('S n) n AbHom)
-> LimitsG
     (ConicFreeTip Cone)
     Mlt
     'Projective
     DiagramFree
     ('Star 'To)
     ('S n)
     n
     AbHom
-> Statement
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       (d :: DiagramType -> N' -> N' -> * -> *) s (p :: Perspective)
       (t :: DiagramType) (n :: N') (m :: N') x.
(Conic c, Diagrammatic d, Show (c s p d t n m x),
 Validable (c s p d t n m x), Entity (d t n m x), Entity x) =>
XEligibleConeG c s p d t n m x
-> XEligibleConeFactorG c s p d t n m x
-> X (d t n m x)
-> LimitsG c s p d t n m x
-> Statement
prpLimitsG
    XEligibleConeG
  (ConicFreeTip Cone)
  Mlt
  'Projective
  DiagramFree
  ('Star 'To)
  ('S n)
  n
  AbHom
forall (n :: N').
XEligibleConeG
  (ConicFreeTip Cone)
  Mlt
  'Projective
  DiagramFree
  ('Star 'To)
  ('S n)
  n
  AbHom
xecAbhPullbacksFreeG
    XEligibleConeFactorG
  (ConicFreeTip Cone)
  Mlt
  'Projective
  DiagramFree
  ('Star 'To)
  ('S n)
  n
  AbHom
forall (n :: N').
XEligibleConeFactorG
  (ConicFreeTip Cone)
  Mlt
  'Projective
  DiagramFree
  ('Star 'To)
  ('S n)
  n
  AbHom
xecfAbhPullbacksFreeG
    (W n -> X (DiagramFree ('Star 'To) (n + 1) n AbHom)
forall (n :: N').
Any n -> X (DiagramFree ('Star 'To) (n + 1) n AbHom)
xdgAbhPullbacksFreeG W n
n')
    PullbacksG (ConicFreeTip Cone) DiagramFree n AbHom
LimitsG
  (ConicFreeTip Cone)
  Mlt
  'Projective
  DiagramFree
  ('Star 'To)
  ('S n)
  n
  AbHom
forall (n :: N').
PullbacksG (ConicFreeTip Cone) DiagramFree n AbHom
abhPullbacksFreeG
    
-- | validity of 'abhPullbacksFreeG'.

prpAbhPullbacksFreeG :: Statement
prpAbhPullbacksFreeG :: Statement
prpAbhPullbacksFreeG = X N -> (N -> Statement) -> Statement
forall x. X x -> (x -> Statement) -> Statement
Forall (N -> N -> X N
xNB N
0 N
10) N -> Statement
prpAbhPullbacksFreeGN

--------------------------------------------------------------------------------

-- abhSplitCy -


-- | splits an abelian homomorphism @h@ into a list @hs@ where each

-- @h'@ in @hs@ has as start point equal to the start point of @h@ and end point a

-- cyclic group to the power of some order such that all  @h'@ /cover/ @h@.

--

-- __Properties__ Let @h@ be in 'AbHom' and @hs = 'abhSplitCy', then holds:

--

-- (1) For all @h'@ in @hs@ holds: @'orientation' h' '==' 'start' h ':>' 'abg' n '^' r@

-- for some @n@, @r@ in 'N'.

--

-- (2) For all @x@ in 'AbHom' with @'end' x '==' 'start' h@ holds: @h v'*' x '==' 0@

-- if and only if @h' v'*' x '==' 0@ for all @h'@ in @hs@.

abhSplitCy :: AbHom -> [AbHom]
abhSplitCy :: AbHom -> [AbHom]
abhSplitCy (AbHom m :: Matrix ZModHom
m@(Matrix Dim ZModHom (Point ZModHom)
r Dim ZModHom (Point ZModHom)
_ Entries N N ZModHom
_))
  = ((Matrix ZModHom, N, N) -> AbHom)
-> [(Matrix ZModHom, N, N)] -> [AbHom]
forall (h :: * -> * -> *) (f :: * -> *) x y.
Applicative1 h f =>
h x y -> f x -> f y
amap1 (\(Matrix ZModHom
m',N
_,N
_) -> Matrix ZModHom -> AbHom
AbHom Matrix ZModHom
m')
  ([(Matrix ZModHom, N, N)] -> [AbHom])
-> [(Matrix ZModHom, N, N)] -> [AbHom]
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Entries N N (Matrix ZModHom) -> [(Matrix ZModHom, N, N)]
forall i j x. Entries i j x -> [(x, i, j)]
etsxs
  (Entries N N (Matrix ZModHom) -> [(Matrix ZModHom, N, N)])
-> Entries N N (Matrix ZModHom) -> [(Matrix ZModHom, N, N)]
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Matrix (Matrix ZModHom) -> Entries N N (Matrix ZModHom)
forall x. Matrix x -> Entries N N x
mtxxs
  (Matrix (Matrix ZModHom) -> Entries N N (Matrix ZModHom))
-> Matrix (Matrix ZModHom) -> Entries N N (Matrix ZModHom)
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Matrix ZModHom -> Matrix (Matrix ZModHom)
forall x. Distributive x => Matrix x -> Matrix (Matrix x)
mtxGroupRow
  (Matrix ZModHom -> Matrix (Matrix ZModHom))
-> Matrix ZModHom -> Matrix (Matrix ZModHom)
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ (GLT ZModHom -> RowTrafo ZModHom
forall x. GLT x -> RowTrafo x
RowTrafo (Dim ZModHom (Point ZModHom)
-> Dim ZModHom (Point ZModHom) -> Permutation N -> GLT ZModHom
forall x.
Distributive x =>
Dim' x -> Dim' x -> Permutation N -> GLT x
permute Dim ZModHom (Point ZModHom)
Dim ZModHom ZMod
r' Dim ZModHom (Point ZModHom)
r Permutation N
p) RowTrafo ZModHom -> Matrix ZModHom -> Matrix ZModHom
forall f x. Opl f x => f -> x -> x
*> Matrix ZModHom
m)
  where (Dim ZModHom ZMod
r',Permutation N
p) = Proxy N
-> (ZMod -> ZMod -> Ordering)
-> (ZMod -> ZMod)
-> Dim ZModHom ZMod
-> (Dim ZModHom ZMod, Permutation N)
forall (p :: * -> *) w.
p N
-> (w -> w -> Ordering)
-> (ZMod -> w)
-> Dim ZModHom ZMod
-> (Dim ZModHom ZMod, Permutation N)
forall (s :: * -> *) i x (p :: * -> *) w.
PermutableSequence s i x =>
p i
-> (w -> w -> Ordering) -> (x -> w) -> s x -> (s x, Permutation i)
permuteBy Proxy N
nProxy ZMod -> ZMod -> Ordering
forall a. Ord a => a -> a -> Ordering
compare ZMod -> ZMod
forall x. x -> x
id Dim ZModHom (Point ZModHom)
Dim ZModHom ZMod
r
  
--------------------------------------------------------------------------------

-- abhFreeFromSplitCy -


-- | splits an abelian homomorphism @h@ into some finite list @hs@ where each

--  @h'@ in @hs@ has as end point a cyclic group to the power of some order such that all

--  @h'@ /cover/ @h@.

--

-- __Properties__ Let @s = 'SliceDiagramKernel ('SliceFrom' _ h)@ be in

-- @'KernelDiagrammatic' ('SliceDiagram' ('Free' __k__)) 'AbHom'@

-- and @hs = 'abhFreeFromSplitCyG' s@, then holds:

--

-- (1) For all @'SliceDiagramKernel' ('SliceFrom' _ h')@ in @hs@ exists a @n@, @r@ in 'N' such that

-- @'end' h' '==' 'abg' n '^' r@.

--

-- (2) For all @x@ in 'AbHom' with @'end' x '==' 'start' h@ holds: @h v'*' x '==' 0@ if

-- and only if @h' v'*' x '==' 0@ for all @'SliceDiagramKernel' ('SliceFrom' _ h')@ in @hs@.

abhFreeFromSplitCyG
  :: KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
  -> SomeFinList (KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom)
abhFreeFromSplitCyG :: forall (k :: N').
KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> SomeFinList
     (KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom)
abhFreeFromSplitCyG (SliceDiagramKernel (SliceFrom Free k AbHom
k AbHom
h))
  = [SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom]
-> SomeFinList
     (SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom)
forall a. [a] -> SomeFinList a
someFinList ([SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom]
 -> SomeFinList
      (SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom))
-> [SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom]
-> SomeFinList
     (SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom)
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ (AbHom
 -> SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom)
-> [AbHom]
-> [SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom]
forall (h :: * -> * -> *) (f :: * -> *) x y.
Applicative1 h f =>
h x y -> f x -> f y
amap1 (Slice 'From (Free k) AbHom
-> SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom
forall (i :: * -> *) x.
Sliced i x =>
Slice 'From i x -> SliceDiagram i ('Parallel 'LeftToRight) N2 N1 x
SliceDiagramKernel (Slice 'From (Free k) AbHom
 -> SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom)
-> (AbHom -> Slice 'From (Free k) AbHom)
-> AbHom
-> SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom
forall y z x. (y -> z) -> (x -> y) -> x -> z
forall (c :: * -> * -> *) y z x.
Category c =>
c y z -> c x y -> c x z
. Free k AbHom -> AbHom -> Slice 'From (Free k) AbHom
forall (i :: * -> *) x. i x -> x -> Slice 'From i x
SliceFrom Free k AbHom
k) ([AbHom]
 -> [SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom])
-> [AbHom]
-> [SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom]
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ AbHom -> [AbHom]
abhSplitCy AbHom
h

--------------------------------------------------------------------------------

-- abhKernelFreeFromCy -


-- | kernel of free sliced 'From' diagram where the end point is equal to a product of a cyclic group.

--

-- __Property__ Let @s = 'SliceDiagramKernel ('SliceFrom' _ h)@ where

-- @'end' h '==' abg n '^' r@ for some @n@, @r@ in 'N', then 

-- @'abhKernelFreeFromCyG' s@ is 'valid'.

abhKernelFreeFromCyG :: Attestable k
  => KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
  -> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
abhKernelFreeFromCyG :: forall (k :: N').
Attestable k =>
KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
abhKernelFreeFromCyG s :: KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
s@(SliceDiagramKernel (SliceFrom Free k AbHom
k AbHom
h))
  = [(ZMod, N)]
-> LimesG
     (ConicFreeTip Cone)
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
hKer ([(ZMod, N)]
 -> LimesG
      (ConicFreeTip Cone)
      Dst
      'Projective
      (SliceDiagram (Free k))
      ('Parallel 'LeftToRight)
      N2
      N1
      AbHom)
-> [(ZMod, N)]
-> LimesG
     (ConicFreeTip Cone)
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Word N ZMod -> [(ZMod, N)]
forall r a. Word r a -> [(a, r)]
fromWord (Word N ZMod -> [(ZMod, N)]) -> Word N ZMod -> [(ZMod, N)]
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Dim ZModHom (Point ZModHom) -> Word N (Point ZModHom)
Dim ZModHom ZMod -> Word N ZMod
forall p x. (Entity p, p ~ Point x) => Dim x p -> Word N p
dimwrd (Dim ZModHom ZMod -> Word N ZMod)
-> Dim ZModHom ZMod -> Word N ZMod
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ AbGroup -> Dim ZModHom (Point ZModHom)
AbGroup -> Dim ZModHom ZMod
abgDim (AbGroup -> Dim ZModHom ZMod) -> AbGroup -> Dim ZModHom ZMod
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ AbHom -> Point AbHom
forall q. Oriented q => q -> Point q
end AbHom
h where

  freeTip :: KernelCone N1 AbHom -> SomeFree AbHom
  freeTip :: Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> SomeFree AbHom
freeTip Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
c = case N -> SomeNatural
someNatural (N -> SomeNatural) -> N -> SomeNatural
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ AbGroup -> N
forall x. LengthN x => x -> N
lengthN (AbGroup -> N) -> AbGroup -> N
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> Point AbHom
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') a.
Cone s p d t n m a -> Point a
tip Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
c of SomeNatural W n
k -> Free n AbHom -> SomeFree AbHom
forall (k :: N') c.
(Attestable k, Sliced (Free k) c) =>
Free k c -> SomeFree c
SomeFree (W n -> Free n AbHom
forall (k :: N') c. Any k -> Free k c
Free W n
k)
    
  -- h == 0

  hKer :: [(ZMod, N)]
-> LimesG
     (ConicFreeTip Cone)
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
hKer [] = ConicFreeTip
  Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> (Cone
      Dst
      'Projective
      (SliceDiagram (Free k))
      ('Parallel 'LeftToRight)
      N2
      N1
      AbHom
    -> AbHom)
-> LimesG
     (ConicFreeTip Cone)
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
c s 'Projective d t n m x
-> (Cone s 'Projective d t n m x -> x)
-> LimesG c s 'Projective d t n m x
LimesProjective (Free k AbHom
-> ConicFreeTip
     Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
cft Free k AbHom
k) Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> AbHom
cftUniv where
    LimesProjective Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
kCone Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> AbHom
kUniv = KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> Orientation (Point AbHom)
-> LimesG
     Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
forall x (p :: * -> *).
Distributive x =>
p x -> Orientation (Point x) -> Kernel N1 x
kernelZero KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
s (AbHom -> Orientation (Point AbHom)
forall q. Oriented q => q -> Orientation (Point q)
orientation AbHom
h)
    
    cft :: Free k AbHom
-> ConicFreeTip
     Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
cft Free k AbHom
k = Free k AbHom
-> Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
-> ConicFreeTip
     Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (k :: N') x
       (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N').
(Attestable k, Sliced (Free k) x) =>
Free k x -> c s p d t n m x -> ConicFreeTip c s p d t n m x
ConicFreeTip Free k AbHom
k (KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> AbHom
-> Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'LeftToRight) N2 m a
-> a -> Cone Dst 'Projective d ('Parallel 'LeftToRight) N2 m a
ConeKernel KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
s (Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       (d :: DiagramType -> N' -> N' -> * -> *) (n :: N') x.
Conic c =>
KernelConic c d n x -> x
kernelFactor Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
kCone))
    
    cftUniv :: Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> AbHom
cftUniv (ConeKernel KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
d AbHom
x) = Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> AbHom
kUniv (Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> AbHom
-> Cone
     Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'LeftToRight) N2 m a
-> a -> Cone Dst 'Projective d ('Parallel 'LeftToRight) N2 m a
ConeKernel (KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
forall (t :: DiagramType) (n :: N') (m :: N') x.
SliceDiagram (Free k) t n m x -> Diagram t n m x
forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
Diagrammatic d =>
d t n m x -> Diagram t n m x
diagram KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
d) AbHom
x)

  hKer [(ZMod N
0,N
_)] = case Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> SomeFree AbHom
freeTip Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
kCone of
    SomeFree Free k AbHom
k' -> ConicFreeTip
  Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> (Cone
      Dst
      'Projective
      (SliceDiagram (Free k))
      ('Parallel 'LeftToRight)
      N2
      N1
      AbHom
    -> AbHom)
-> LimesG
     (ConicFreeTip Cone)
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
c s 'Projective d t n m x
-> (Cone s 'Projective d t n m x -> x)
-> LimesG c s 'Projective d t n m x
LimesProjective (Free k AbHom
-> ConicFreeTip
     Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
cft Free k AbHom
k') Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> AbHom
cftUniv where
      cft :: Free k AbHom
-> ConicFreeTip
     Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
cft Free k AbHom
k = Free k AbHom
-> Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
-> ConicFreeTip
     Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (k :: N') x
       (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N').
(Attestable k, Sliced (Free k) x) =>
Free k x -> c s p d t n m x -> ConicFreeTip c s p d t n m x
ConicFreeTip Free k AbHom
k (KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> AbHom
-> Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'LeftToRight) N2 m a
-> a -> Cone Dst 'Projective d ('Parallel 'LeftToRight) N2 m a
ConeKernel KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
s (Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       (d :: DiagramType -> N' -> N' -> * -> *) (n :: N') x.
Conic c =>
KernelConic c d n x -> x
kernelFactor Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
kCone))
      cftUniv :: Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> AbHom
cftUniv (ConeKernel KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
s AbHom
x) = Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> AbHom
kUniv (Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> AbHom
-> Cone
     Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'LeftToRight) N2 m a
-> a -> Cone Dst 'Projective d ('Parallel 'LeftToRight) N2 m a
ConeKernel (KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
forall (t :: DiagramType) (n :: N') (m :: N') x.
SliceDiagram (Free k) t n m x -> Diagram t n m x
forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
Diagrammatic d =>
d t n m x -> Diagram t n m x
diagram KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
s) AbHom
x)
    where
      LimesProjective Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
kCone Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> AbHom
kUniv = Adjunction AbHomFree (Matrix Z) AbHom
-> Limes Dst 'Projective ('Parallel 'LeftToRight) N2 N1 (Matrix Z)
-> LimesG
     Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
forall (h :: * -> * -> *) d c (t :: DiagramType) (n :: N')
       (m :: N').
HomDistributive h =>
Adjunction h d c
-> Limes Dst 'Projective t n m d -> Limes Dst 'Projective t n m c
lmPrjMapDst Adjunction AbHomFree (Matrix Z) AbHom
adj (Limes Dst 'Projective ('Parallel 'LeftToRight) N2 N1 (Matrix Z)
 -> LimesG
      Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom)
-> Limes Dst 'Projective ('Parallel 'LeftToRight) N2 N1 (Matrix Z)
-> LimesG
     Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ LimitsG
  Cone
  Dst
  'Projective
  Diagram
  ('Parallel 'LeftToRight)
  N2
  N1
  (Matrix Z)
-> Diagram ('Parallel 'LeftToRight) N2 N1 (Matrix Z)
-> Limes Dst 'Projective ('Parallel 'LeftToRight) N2 N1 (Matrix Z)
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimitsG c s p d t n m x -> d t n m x -> LimesG c s p d t n m x
limes LimitsG
  Cone
  Dst
  'Projective
  Diagram
  ('Parallel 'LeftToRight)
  N2
  N1
  (Matrix Z)
forall (n :: N'). Kernels n (Matrix Z)
zmxKernels (Diagram ('Parallel 'LeftToRight) N2 N1 (Matrix Z)
 -> Limes Dst 'Projective ('Parallel 'LeftToRight) N2 N1 (Matrix Z))
-> Diagram ('Parallel 'LeftToRight) N2 N1 (Matrix Z)
-> Limes Dst 'Projective ('Parallel 'LeftToRight) N2 N1 (Matrix Z)
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ AbHomFree AbHom (Matrix Z)
-> Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> Diagram ('Parallel 'LeftToRight) N2 N1 (Matrix Z)
forall (h :: * -> * -> *) x y (t :: DiagramType) (n :: N')
       (m :: N').
HomOriented h =>
h x y -> Diagram t n m x -> Diagram t n m y
dgMap AbHomFree AbHom (Matrix Z)
l (KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
forall (t :: DiagramType) (n :: N') (m :: N') x.
SliceDiagram (Free k) t n m x -> Diagram t n m x
forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
Diagrammatic d =>
d t n m x -> Diagram t n m x
diagram KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
s) where
        adj :: Adjunction AbHomFree (Matrix Z) AbHom
adj = Adjunction AbHomFree (Matrix Z) AbHom
abhFreeAdjunction
        Adjunction AbHomFree AbHom (Matrix Z)
l AbHomFree (Matrix Z) AbHom
_ Point AbHom -> AbHom
_ Point (Matrix Z) -> Matrix Z
_ = Adjunction AbHomFree (Matrix Z) AbHom
adj

  hKer [(ZMod N
1,N
_)] = [(ZMod, N)]
-> LimesG
     (ConicFreeTip Cone)
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
hKer []

  hKer [(ZMod N
c,N
_)] = case Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> SomeFree AbHom
freeTip Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
kCone of
    SomeFree Free k AbHom
k' -> ConicFreeTip
  Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> (Cone
      Dst
      'Projective
      (SliceDiagram (Free k))
      ('Parallel 'LeftToRight)
      N2
      N1
      AbHom
    -> AbHom)
-> LimesG
     (ConicFreeTip Cone)
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
c s 'Projective d t n m x
-> (Cone s 'Projective d t n m x -> x)
-> LimesG c s 'Projective d t n m x
LimesProjective (Free k AbHom
-> ConicFreeTip
     Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
cft Free k AbHom
k') Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> AbHom
cftUniv where
      cft :: Free k AbHom
-> ConicFreeTip
     Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
cft Free k AbHom
k = Free k AbHom
-> Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
-> ConicFreeTip
     Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (k :: N') x
       (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N').
(Attestable k, Sliced (Free k) x) =>
Free k x -> c s p d t n m x -> ConicFreeTip c s p d t n m x
ConicFreeTip Free k AbHom
k (KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> AbHom
-> Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'LeftToRight) N2 m a
-> a -> Cone Dst 'Projective d ('Parallel 'LeftToRight) N2 m a
ConeKernel KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
s (Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       (d :: DiagramType -> N' -> N' -> * -> *) (n :: N') x.
Conic c =>
KernelConic c d n x -> x
kernelFactor Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
kCone)) 
      cftUniv :: Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> AbHom
cftUniv (ConeKernel KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
s AbHom
x) = Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> AbHom
kUniv (Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> AbHom
-> Cone
     Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'LeftToRight) N2 m a
-> a -> Cone Dst 'Projective d ('Parallel 'LeftToRight) N2 m a
ConeKernel (KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
forall (t :: DiagramType) (n :: N') (m :: N') x.
SliceDiagram (Free k) t n m x -> Diagram t n m x
forall (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
Diagrammatic d =>
d t n m x -> Diagram t n m x
diagram KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
s) AbHom
x)
      
    where
      DiagonalForm [Z]
d RowTrafo Z
_ (ColTrafo GLT Z
t) = Matrix Z -> DiagonalForm Z
zmxDiagonalForm (AbHom -> Matrix Z
abhz AbHom
h)
      -- d = (rt*>h)<*ct

    
      m :: N
m = AbGroup -> N
forall x. LengthN x => x -> N
lengthN (AbHom -> Point AbHom
forall q. Oriented q => q -> Point q
start AbHom
h)
      r :: N
r = N
m N -> N -> N
>- [Z] -> N
forall x. LengthN x => x -> N
lengthN [Z]
d

      Inv Matrix Z
b Matrix Z
bInv = GLApp (GLT Z) (Inv (Matrix Z)) -> GLT Z -> Inv (Matrix Z)
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
amap GLApp (GLT Z) (Inv (Matrix Z))
forall x1. Distributive x1 => GLApp (GLT x1) (Inv (Matrix x1))
GLTGL GLT Z
t

      dm :: Dim Z ()
dm = () -> Dim Z ()
forall p x. (Entity p, p ~ Point x) => p -> Dim x p
dim () Dim Z () -> Exponent (Dim Z ()) -> Dim Z ()
forall f. Exponential f => f -> Exponent f -> f
^ N
Exponent (Dim Z ())
m
      kDgm :: Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
kDgm = Point AbHom
-> Point AbHom
-> FinList N1 AbHom
-> Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
forall a (m :: N').
Point a
-> Point a
-> FinList m a
-> Diagram ('Parallel 'LeftToRight) N2 m a
DiagramParallelLR (AbHom -> Point AbHom
forall q. Oriented q => q -> Point q
start AbHom
h) (AbHom -> Point AbHom
forall q. Oriented q => q -> Point q
end AbHom
h) (AbHom
hAbHom -> FinList N0 AbHom -> FinList (N0 + 1) AbHom
forall a (n1 :: N'). a -> FinList n1 a -> FinList (n1 + 1) a
:|FinList N0 AbHom
forall a. FinList N0 a
Nil)
  
      k :: [Z]
k = (Z -> Z) -> [Z] -> [Z]
forall a b. (a -> b) -> [a] -> [b]
map Z -> Z
f [Z]
d [Z] -> [Z] -> [Z]
forall a. [a] -> [a] -> [a]
++ N -> [Z] -> [Z]
forall a. N -> [a] -> [a]
takeN N
r (Z -> [Z]
forall a. a -> [a]
repeat Z
1)
      -- 0 < d

      f :: Z -> Z
f Z
d = if N
d' N -> N -> Bool
forall a. Eq a => a -> a -> Bool
== N
0 then Z
1 else N -> Z
forall a b. Embeddable a b => a -> b
inj (N -> N -> N
lcm N
d' N
c) Z -> N -> Z
// N
d' where d' :: N
d' = Z -> N
forall a b. Projectible a b => b -> a
prj (Z -> N -> Z
mod0 Z
d N
c)

      kLim :: AbHom
kLim = Matrix Z -> AbHom
zabh (Matrix Z
bMatrix Z -> Matrix Z -> Matrix Z
forall c. Multiplicative c => c -> c -> c
*Dim' Z -> Dim' Z -> [Z] -> Matrix Z
forall x. Additive x => Dim' x -> Dim' x -> [x] -> Matrix x
diagonal Dim Z ()
Dim' Z
dm Dim Z ()
Dim' Z
dm [Z]
k)
      kCone :: Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
kCone = Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> AbHom
-> Cone
     Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'LeftToRight) N2 m a
-> a -> Cone Dst 'Projective d ('Parallel 'LeftToRight) N2 m a
ConeKernel Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
kDgm AbHom
kLim

      kUniv :: Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> AbHom
kUniv cn :: Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
cn@(ConeKernel Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
_ AbHom
x) = Matrix ZModHom -> AbHom
AbHom (Matrix ZModHom -> AbHom) -> Matrix ZModHom -> AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Dim ZModHom (Point ZModHom)
-> Dim ZModHom (Point ZModHom)
-> Entries N N ZModHom
-> Matrix ZModHom
forall x. Dim' x -> Dim' x -> Entries N N x -> Matrix x
Matrix (CSequence (Point ZModHom) -> Dim ZModHom (Point ZModHom)
forall x. CSequence (Point x) -> Dim x (Point x)
Dim CSequence (Point ZModHom)
ProductSymbol ZMod
e) (CSequence (Point ZModHom) -> Dim ZModHom (Point ZModHom)
forall x. CSequence (Point x) -> Dim x (Point x)
Dim CSequence (Point ZModHom)
ProductSymbol ZMod
sx) Entries N N ZModHom
xs'' where
        -- note: from x valid and eligible follows that

        -- for all non zero (z,i,j) in x holds: orientation z = cy 0 :> cy 0

        AbGroup ProductSymbol ZMod
e = AbHom -> Point AbHom
forall q. Oriented q => q -> Point q
end AbHom
kLim
        
        AbGroup ProductSymbol ZMod
sx = Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> Point AbHom
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') a.
Cone s p d t n m a -> Point a
tip Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
cn
        
        Matrix Dim' Z
_ Dim' Z
_ Entries N N Z
xs'  = Matrix Z
bInv Matrix Z -> Matrix Z -> Matrix Z
forall c. Multiplicative c => c -> c -> c
* AbHom -> Matrix Z
abhz AbHom
x
        xs'' :: Entries N N ZModHom
xs'' = Col N (Row N ZModHom) -> Entries N N ZModHom
forall i j x. Col i (Row j x) -> Entries i j x
crets (Col N (Row N ZModHom) -> Entries N N ZModHom)
-> Col N (Row N ZModHom) -> Entries N N ZModHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ PSequence N (Row N ZModHom) -> Col N (Row N ZModHom)
forall i x. PSequence i x -> Col i x
Col (PSequence N (Row N ZModHom) -> Col N (Row N ZModHom))
-> PSequence N (Row N ZModHom) -> Col N (Row N ZModHom)
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ [(Row N ZModHom, N)] -> PSequence N (Row N ZModHom)
forall i x. [(x, i)] -> PSequence i x
PSequence ([(Row N ZModHom, N)] -> PSequence N (Row N ZModHom))
-> [(Row N ZModHom, N)] -> PSequence N (Row N ZModHom)
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ [(Row N Z, N)] -> [(Z, N)] -> [(Row N ZModHom, N)]
forall i j.
Ord i =>
[(Row j Z, i)] -> [(Z, i)] -> [(Row j ZModHom, i)]
div' (Proxy N -> Col N (Row N Z) -> [(Row N Z, N)]
forall (p :: * -> *). p N -> Col N (Row N Z) -> [(Row N Z, N)]
forall (s :: * -> *) i x (p :: * -> *).
Sequence s i x =>
p i -> s x -> [(x, i)]
list Proxy N
nProxy (Col N (Row N Z) -> [(Row N Z, N)])
-> Col N (Row N Z) -> [(Row N Z, N)]
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Entries N N Z -> Col N (Row N Z)
forall i j x. Eq i => Entries i j x -> Col i (Row j x)
etscr Entries N N Z
xs') ([Z]
k [Z] -> [N] -> [(Z, N)]
forall a b. [a] -> [b] -> [(a, b)]
`zip` [N
0..])
  
        div' :: Ord i => [(Row j Z,i)] -> [(Z,i)] -> [(Row j ZModHom,i)]
        div' :: forall i j.
Ord i =>
[(Row j Z, i)] -> [(Z, i)] -> [(Row j ZModHom, i)]
div' [] [(Z, i)]
_             = []
        div' ((Row j Z
rw,i
i):[(Row j Z, i)]
rws') [] = ((Z -> ZModHom) -> Row j Z -> Row j ZModHom
forall (h :: * -> * -> *) (f :: * -> *) x y.
Applicative1 h f =>
h x y -> f x -> f y
amap1 Z -> ZModHom
fromZ Row j Z
rw,i
i)(Row j ZModHom, i) -> [(Row j ZModHom, i)] -> [(Row j ZModHom, i)]
forall a. a -> [a] -> [a]
:[(Row j Z, i)] -> [(Z, i)] -> [(Row j ZModHom, i)]
forall i j.
Ord i =>
[(Row j Z, i)] -> [(Z, i)] -> [(Row j ZModHom, i)]
div' [(Row j Z, i)]
rws' []
        div' rws :: [(Row j Z, i)]
rws@((Row j Z
rw,i
i):[(Row j Z, i)]
rws') ((Z
k,i
i'):[(Z, i)]
kis')
          | i
i' i -> i -> Bool
forall a. Ord a => a -> a -> Bool
< i
i    = [(Row j Z, i)] -> [(Z, i)] -> [(Row j ZModHom, i)]
forall i j.
Ord i =>
[(Row j Z, i)] -> [(Z, i)] -> [(Row j ZModHom, i)]
div' [(Row j Z, i)]
rws [(Z, i)]
kis'
          | Bool
otherwise = ((Z -> ZModHom) -> Row j Z -> Row j ZModHom
forall (h :: * -> * -> *) (f :: * -> *) x y.
Applicative1 h f =>
h x y -> f x -> f y
amap1 (Z -> ZModHom
fromZ (Z -> ZModHom) -> (Z -> Z) -> Z -> ZModHom
forall y z x. (y -> z) -> (x -> y) -> x -> z
forall (c :: * -> * -> *) y z x.
Category c =>
c y z -> c x y -> c x z
. \Z
z -> Z -> Z -> Z
forall a. Integral a => a -> a -> a
div Z
z Z
k) Row j Z
rw,i
i)(Row j ZModHom, i) -> [(Row j ZModHom, i)] -> [(Row j ZModHom, i)]
forall a. a -> [a] -> [a]
:[(Row j Z, i)] -> [(Z, i)] -> [(Row j ZModHom, i)]
forall i j.
Ord i =>
[(Row j Z, i)] -> [(Z, i)] -> [(Row j ZModHom, i)]
div' [(Row j Z, i)]
rws' [(Z, i)]
kis' 

  hKer [(ZMod, N)]
_ = AlgebraicException
-> LimesG
     (ConicFreeTip Cone)
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall a e. Exception e => e -> a
throw (AlgebraicException
 -> LimesG
      (ConicFreeTip Cone)
      Dst
      'Projective
      (SliceDiagram (Free k))
      ('Parallel 'LeftToRight)
      N2
      N1
      AbHom)
-> AlgebraicException
-> LimesG
     (ConicFreeTip Cone)
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ String -> AlgebraicException
ImplementationError String
"faild precondition"

--------------------------------------------------------------------------------

-- abhKernelsFreeFromCyG -


-- | kernels of free sliced 'From' diagrams with end point equal to a product of a cyclic group.

abhKernelsFreeFromCyG :: Attestable k => KernelsG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
abhKernelsFreeFromCyG :: forall (k :: N').
Attestable k =>
KernelsG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
abhKernelsFreeFromCyG = (SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom
 -> LimesG
      (ConicFreeTip Cone)
      Dst
      'Projective
      (SliceDiagram (Free k))
      ('Parallel 'LeftToRight)
      N2
      N1
      AbHom)
-> LimitsG
     (ConicFreeTip Cone)
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
(d t n m x -> LimesG c s p d t n m x) -> LimitsG c s p d t n m x
LimitsG SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom
-> LimesG
     (ConicFreeTip Cone)
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (k :: N').
Attestable k =>
KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
abhKernelFreeFromCyG

--------------------------------------------------------------------------------

-- prpAbhKernelsFreeFromCyG -


-- | random variable for eligible cone factors.

xecfAbhKernelsFreeFromCyG :: XEligibleConeFactorG
  (ConicFreeTip Cone) Dst Projective (SliceDiagram (Free k)) (Parallel LeftToRight) N2 N1 AbHom
xecfAbhKernelsFreeFromCyG :: forall (k :: N').
XEligibleConeFactorG
  (ConicFreeTip Cone)
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
xecfAbhKernelsFreeFromCyG = XOrtSite 'To AbHom
-> XEligibleConeFactorG
     (ConicFreeTip Cone)
     Dst
     (ToPerspective 'To)
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       (r :: Site) x s (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N').
Conic c =>
XOrtSite r x
-> XEligibleConeFactorG c s (ToPerspective r) d t n m x
xecfOrtSite (XOrtSite 'To AbHom
forall (s :: Site) a. XStandardOrtSite s a => XOrtSite s a
xStandardOrtSite :: XOrtSite To AbHom)

-- | random variable for eligible cones.

xecAbhKernelsFreeFromCyG :: XEligibleConeG
  (ConicFreeTip Cone) Dst Projective (SliceDiagram (Free k)) (Parallel LeftToRight) N2 N1 AbHom
xecAbhKernelsFreeFromCyG :: forall (k :: N').
XEligibleConeG
  (ConicFreeTip Cone)
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
xecAbhKernelsFreeFromCyG = XEligibleConeFactorG
  (ConicFreeTip Cone)
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> XEligibleConeG
     (ConicFreeTip Cone)
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
XEligibleConeFactorG c s p d t n m x
-> XEligibleConeG c s p d t n m x
xecfEligibleCone XEligibleConeFactorG
  (ConicFreeTip Cone)
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
forall (k :: N').
XEligibleConeFactorG
  (ConicFreeTip Cone)
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
xecfAbhKernelsFreeFromCyG

-- | random variable for free sliced kernel diagrams with end point equal to a product of a

-- cyclic group to some exponten.

xdgAbhKernelsFreeFromCyG :: Attestable k
  => Any k -> X (KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom)
xdgAbhKernelsFreeFromCyG :: forall (k :: N').
Attestable k =>
Any k -> X (KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom)
xdgAbhKernelsFreeFromCyG Any k
k = do
  N
n <- N -> N -> X N
xNB N
0 N
1000
  N
r <- N -> N -> X N
xNB N
0 N
10
  AbHom
h <- Q -> Orientation AbGroup -> X AbHom
xAbHom Q
0.3 (N -> AbGroup
abg N
0 AbGroup -> Exponent AbGroup -> AbGroup
forall f. Exponential f => f -> Exponent f -> f
^ Any k -> N
forall x. LengthN x => x -> N
lengthN Any k
k AbGroup -> AbGroup -> Orientation AbGroup
forall p. p -> p -> Orientation p
:> N -> AbGroup
abg N
n AbGroup -> Exponent AbGroup -> AbGroup
forall f. Exponential f => f -> Exponent f -> f
^ N
Exponent AbGroup
r)
  KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> X (KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom)
forall a. a -> X a
forall (m :: * -> *) a. Monad m => a -> m a
return (Slice 'From (Free k) AbHom
-> KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
forall (i :: * -> *) x.
Sliced i x =>
Slice 'From i x -> SliceDiagram i ('Parallel 'LeftToRight) N2 N1 x
SliceDiagramKernel (Free k AbHom -> AbHom -> Slice 'From (Free k) AbHom
forall (i :: * -> *) x. i x -> x -> Slice 'From i x
SliceFrom (Any k -> Free k AbHom
forall (k :: N') c. Any k -> Free k c
Free Any k
k) AbHom
h))

-- | validity of 'abhKernelsFreeFromCyG' for a kernel slice diagram with the given dimension for its

-- free slice.

prpAbhKernelsFreeFromCyGN :: N -> Statement
prpAbhKernelsFreeFromCyGN :: N -> Statement
prpAbhKernelsFreeFromCyGN N
k = case N -> SomeNatural
someNatural N
k of
  SomeNatural W n
k' -> XEligibleConeG
  (ConicFreeTip Cone)
  Dst
  'Projective
  (SliceDiagram (Free n))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> XEligibleConeFactorG
     (ConicFreeTip Cone)
     Dst
     'Projective
     (SliceDiagram (Free n))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
-> X (SliceDiagram (Free n) ('Parallel 'LeftToRight) N2 N1 AbHom)
-> LimitsG
     (ConicFreeTip Cone)
     Dst
     'Projective
     (SliceDiagram (Free n))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
-> Statement
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       (d :: DiagramType -> N' -> N' -> * -> *) s (p :: Perspective)
       (t :: DiagramType) (n :: N') (m :: N') x.
(Conic c, Diagrammatic d, Show (c s p d t n m x),
 Validable (c s p d t n m x), Entity (d t n m x), Entity x) =>
XEligibleConeG c s p d t n m x
-> XEligibleConeFactorG c s p d t n m x
-> X (d t n m x)
-> LimitsG c s p d t n m x
-> Statement
prpLimitsG
                      XEligibleConeG
  (ConicFreeTip Cone)
  Dst
  'Projective
  (SliceDiagram (Free n))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
forall (k :: N').
XEligibleConeG
  (ConicFreeTip Cone)
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
xecAbhKernelsFreeFromCyG
                      XEligibleConeFactorG
  (ConicFreeTip Cone)
  Dst
  'Projective
  (SliceDiagram (Free n))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
forall (k :: N').
XEligibleConeFactorG
  (ConicFreeTip Cone)
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
xecfAbhKernelsFreeFromCyG
                      (W n
-> X (SliceDiagram (Free n) ('Parallel 'LeftToRight) N2 N1 AbHom)
forall (k :: N').
Attestable k =>
Any k -> X (KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom)
xdgAbhKernelsFreeFromCyG W n
k')
                      LimitsG
  (ConicFreeTip Cone)
  Dst
  'Projective
  (SliceDiagram (Free n))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
forall (k :: N').
Attestable k =>
KernelsG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
abhKernelsFreeFromCyG
                      
-- | validity of 'abhKernelsFreeFromCyG'.

prpAbhKernelsFreeFromCyG :: Statement
prpAbhKernelsFreeFromCyG :: Statement
prpAbhKernelsFreeFromCyG = X N -> (N -> Statement) -> Statement
forall x. X x -> (x -> Statement) -> Statement
Forall (N -> N -> X N
xNB N
0 N
14) N -> Statement
prpAbhKernelsFreeFromCyGN


--------------------------------------------------------------------------------

-- abhKernelFreeFrom -


-- | the kernel of a @h@ with free 'start'.

--

-- @

--          h

--      a ------> b

--      

-- @ where @a@ is free of some order @k@.

abhKernelFreeFromG :: Attestable k
  => KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
  -> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
abhKernelFreeFromG :: forall (k :: N').
Attestable k =>
KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
abhKernelFreeFromG KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
s = KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> SomeFinList
     (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
-> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
forall (k :: N').
Attestable k =>
KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> SomeFinList
     (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
-> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
ker KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
s (SomeFinList
   (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
 -> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
-> SomeFinList
     (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
-> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ (KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
 -> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
-> SomeFinList
     (KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom)
-> SomeFinList
     (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
forall (h :: * -> * -> *) (f :: * -> *) x y.
Applicative1 h f =>
h x y -> f x -> f y
amap1 (LimitsG
  (ConicFreeTip Cone)
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimitsG c s p d t n m x -> d t n m x -> LimesG c s p d t n m x
limes LimitsG
  (ConicFreeTip Cone)
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
forall (k :: N').
Attestable k =>
KernelsG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
abhKernelsFreeFromCyG) (SomeFinList (KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom)
 -> SomeFinList
      (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom))
-> SomeFinList
     (KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom)
-> SomeFinList
     (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> SomeFinList
     (KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom)
forall (k :: N').
KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> SomeFinList
     (KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom)
abhFreeFromSplitCyG KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
s where

-- | liftable cokernel for some free slice cokernel diagram.

  tipSomeFree :: KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom -> SomeFree AbHom
  tipSomeFree :: forall (k :: N').
KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
-> SomeFree AbHom
tipSomeFree KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
ker = case KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
-> ConicFreeTip
     Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> c s p d t n m x
universalCone KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
ker of ConicFreeTip Free k AbHom
k Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
_ -> Free k AbHom -> SomeFree AbHom
forall (k :: N') c.
(Attestable k, Sliced (Free k) c) =>
Free k c -> SomeFree c
SomeFree Free k AbHom
k
  
  plbDgm :: Attestable k
    => KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
    -> FinList n (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
    -> PullbackDiagrammatic DiagramFree n AbHom
  plbDgm :: forall (k :: N') (n :: N').
Attestable k =>
KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> FinList
     n (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
-> PullbackDiagrammatic DiagramFree n AbHom
plbDgm (SliceDiagramKernel (SliceFrom Free k AbHom
k AbHom
_)) FinList
  n (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
kers = FinList ('S n) (SomeFree AbHom)
-> Diagram ('Star 'To) ('S n) n AbHom
-> DiagramFree ('Star 'To) ('S n) n AbHom
forall (t :: DiagramType) (n :: N') (m :: N') a.
FinList n (SomeFree a) -> Diagram t n m a -> DiagramFree t n m a
DiagramFree FinList (n + 1) (SomeFree AbHom)
FinList ('S n) (SomeFree AbHom)
ks Diagram ('Star 'To) ('S n) n AbHom
dgm where
    ks :: FinList (n + 1) (SomeFree AbHom)
ks  = Free k AbHom -> SomeFree AbHom
forall (k :: N') c.
(Attestable k, Sliced (Free k) c) =>
Free k c -> SomeFree c
SomeFree Free k AbHom
k SomeFree AbHom
-> FinList n (SomeFree AbHom) -> FinList (n + 1) (SomeFree AbHom)
forall a (n1 :: N'). a -> FinList n1 a -> FinList (n1 + 1) a
:| (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
 -> SomeFree AbHom)
-> FinList
     n (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
-> FinList n (SomeFree AbHom)
forall (h :: * -> * -> *) (f :: * -> *) x y.
Applicative1 h f =>
h x y -> f x -> f y
amap1 KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
-> SomeFree AbHom
forall (k :: N').
KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
-> SomeFree AbHom
tipSomeFree FinList
  n (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
kers
    dgm :: Diagram ('Star 'To) ('S n) n AbHom
dgm = Point AbHom
-> FinList n AbHom -> Diagram ('Star 'To) (n + 1) n AbHom
forall a (m :: N').
Point a -> FinList m a -> Diagram ('Star 'To) (m + 1) m a
DiagramSink (Free k AbHom -> Point AbHom
forall (i :: * -> *) c. Sliced i c => i c -> Point c
slicePoint Free k AbHom
k) (FinList n AbHom -> Diagram ('Star 'To) ('S n) n AbHom)
-> FinList n AbHom -> Diagram ('Star 'To) ('S n) n AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
 -> AbHom)
-> FinList
     n (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
-> FinList n AbHom
forall (h :: * -> * -> *) (f :: * -> *) x y.
Applicative1 h f =>
h x y -> f x -> f y
amap1 (KernelConic Cone (SliceDiagram (Free k)) N1 AbHom -> AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       (d :: DiagramType -> N' -> N' -> * -> *) (n :: N') x.
Conic c =>
KernelConic c d n x -> x
kernelFactor (KernelConic Cone (SliceDiagram (Free k)) N1 AbHom -> AbHom)
-> (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
    -> KernelConic Cone (SliceDiagram (Free k)) N1 AbHom)
-> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
-> AbHom
forall y z x. (y -> z) -> (x -> y) -> x -> z
forall (c :: * -> * -> *) y z x.
Category c =>
c y z -> c x y -> c x z
. ConicFreeTip
  Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> KernelConic Cone (SliceDiagram (Free k)) N1 AbHom
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
ConicFreeTip Cone s p d t n m x -> Cone s p d t n m x
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
Conic c =>
c s p d t n m x -> Cone s p d t n m x
cone (ConicFreeTip
   Cone
   Dst
   'Projective
   (SliceDiagram (Free k))
   ('Parallel 'LeftToRight)
   N2
   N1
   AbHom
 -> KernelConic Cone (SliceDiagram (Free k)) N1 AbHom)
-> (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
    -> ConicFreeTip
         Cone
         Dst
         'Projective
         (SliceDiagram (Free k))
         ('Parallel 'LeftToRight)
         N2
         N1
         AbHom)
-> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
-> KernelConic Cone (SliceDiagram (Free k)) N1 AbHom
forall y z x. (y -> z) -> (x -> y) -> x -> z
forall (c :: * -> * -> *) y z x.
Category c =>
c y z -> c x y -> c x z
. KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
-> ConicFreeTip
     Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> c s p d t n m x
universalCone) FinList
  n (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
kers
  
  ker :: Attestable k
    => KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
    -> SomeFinList (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
    -> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
  ker :: forall (k :: N').
Attestable k =>
KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> SomeFinList
     (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
-> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
ker KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
s (SomeFinList FinList
  n (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
kers) = KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> FinList
     n (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
-> PullbackG (ConicFreeTip Cone) DiagramFree n AbHom
-> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
forall (k :: N') (n :: N').
KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> FinList
     n (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
-> PullbackG (ConicFreeTip Cone) DiagramFree n AbHom
-> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
ker' KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
s FinList
  n (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
kers (LimitsG
  (ConicFreeTip Cone)
  Mlt
  'Projective
  DiagramFree
  ('Star 'To)
  ('S n)
  n
  AbHom
-> DiagramFree ('Star 'To) ('S n) n AbHom
-> LimesG
     (ConicFreeTip Cone)
     Mlt
     'Projective
     DiagramFree
     ('Star 'To)
     ('S n)
     n
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimitsG c s p d t n m x -> d t n m x -> LimesG c s p d t n m x
limes PullbacksG (ConicFreeTip Cone) DiagramFree n AbHom
LimitsG
  (ConicFreeTip Cone)
  Mlt
  'Projective
  DiagramFree
  ('Star 'To)
  ('S n)
  n
  AbHom
forall (n :: N').
PullbacksG (ConicFreeTip Cone) DiagramFree n AbHom
abhPullbacksFreeG (DiagramFree ('Star 'To) ('S n) n AbHom
 -> LimesG
      (ConicFreeTip Cone)
      Mlt
      'Projective
      DiagramFree
      ('Star 'To)
      ('S n)
      n
      AbHom)
-> DiagramFree ('Star 'To) ('S n) n AbHom
-> LimesG
     (ConicFreeTip Cone)
     Mlt
     'Projective
     DiagramFree
     ('Star 'To)
     ('S n)
     n
     AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> FinList
     n (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
-> PullbackDiagrammatic DiagramFree n AbHom
forall (k :: N') (n :: N').
Attestable k =>
KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> FinList
     n (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
-> PullbackDiagrammatic DiagramFree n AbHom
plbDgm KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
s FinList
  n (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
kers)

  ker' :: KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
       -> FinList n (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
       -> PullbackG (ConicFreeTip Cone) DiagramFree n AbHom
       -> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
  ker' :: forall (k :: N') (n :: N').
KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> FinList
     n (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
-> PullbackG (ConicFreeTip Cone) DiagramFree n AbHom
-> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
ker' KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
s FinList
  n (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
kers (LimesProjective (ConicFreeTip Free k AbHom
k Cone Mlt 'Projective DiagramFree ('Star 'To) (n + 1) n AbHom
pCn) Cone Mlt 'Projective DiagramFree ('Star 'To) (n + 1) n AbHom
-> AbHom
pUniv) = ConicFreeTip
  Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> (Cone
      Dst
      'Projective
      (SliceDiagram (Free k))
      ('Parallel 'LeftToRight)
      N2
      N1
      AbHom
    -> AbHom)
-> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
c s 'Projective d t n m x
-> (Cone s 'Projective d t n m x -> x)
-> LimesG c s 'Projective d t n m x
LimesProjective ConicFreeTip
  Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
kCn Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> AbHom
kUniv where
    kCn :: ConicFreeTip
  Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
kCn = Free k AbHom
-> Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
-> ConicFreeTip
     Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (k :: N') x
       (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N').
(Attestable k, Sliced (Free k) x) =>
Free k x -> c s p d t n m x -> ConicFreeTip c s p d t n m x
ConicFreeTip Free k AbHom
k (KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> AbHom
-> Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'LeftToRight) N2 m a
-> a -> Cone Dst 'Projective d ('Parallel 'LeftToRight) N2 m a
ConeKernel KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
s (FinList (n + 1) AbHom -> AbHom
FinList ('S n) AbHom -> AbHom
forall (n :: N') a. FinList (n + 1) a -> a
F.head (FinList ('S n) AbHom -> AbHom) -> FinList ('S n) AbHom -> AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Cone Mlt 'Projective DiagramFree ('Star 'To) ('S n) n AbHom
-> FinList ('S n) AbHom
forall (d :: DiagramType -> N' -> N' -> * -> *) s
       (p :: Perspective) (t :: DiagramType) (n :: N') (m :: N') a.
Diagrammatic d =>
Cone s p d t n m a -> FinList n a
shell (Cone Mlt 'Projective DiagramFree ('Star 'To) ('S n) n AbHom
 -> FinList ('S n) AbHom)
-> Cone Mlt 'Projective DiagramFree ('Star 'To) ('S n) n AbHom
-> FinList ('S n) AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Cone Mlt 'Projective DiagramFree ('Star 'To) ('S n) n AbHom
-> Cone Mlt 'Projective DiagramFree ('Star 'To) ('S n) n AbHom
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
Cone s p d t n m x -> Cone s p d t n m x
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
Conic c =>
c s p d t n m x -> Cone s p d t n m x
cone Cone Mlt 'Projective DiagramFree ('Star 'To) (n + 1) n AbHom
Cone Mlt 'Projective DiagramFree ('Star 'To) ('S n) n AbHom
pCn))
    kUniv :: Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> AbHom
kUniv (ConeKernel KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
_ AbHom
x) = Cone Mlt 'Projective DiagramFree ('Star 'To) (n + 1) n AbHom
-> AbHom
pUniv (DiagramFree ('Star 'To) ('S n) n AbHom
-> Point AbHom
-> FinList ('S n) AbHom
-> Cone Mlt 'Projective DiagramFree ('Star 'To) ('S n) n AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N').
Multiplicative a =>
d t n m a
-> Point a -> FinList n a -> Cone Mlt 'Projective d t n m a
ConeProjective DiagramFree ('Star 'To) ('S n) n AbHom
pDgm Point AbHom
pTip FinList (n + 1) AbHom
FinList ('S n) AbHom
pShell) where
      pDgm :: DiagramFree ('Star 'To) ('S n) n AbHom
pDgm   = Cone Mlt 'Projective DiagramFree ('Star 'To) ('S n) n AbHom
-> DiagramFree ('Star 'To) ('S n) n AbHom
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') a.
Cone s p d t n m a -> d t n m a
diagrammaticObject Cone Mlt 'Projective DiagramFree ('Star 'To) (n + 1) n AbHom
Cone Mlt 'Projective DiagramFree ('Star 'To) ('S n) n AbHom
pCn
      pTip :: Point AbHom
pTip   = AbHom -> Point AbHom
forall q. Oriented q => q -> Point q
start AbHom
x
      pShell :: FinList (n + 1) AbHom
pShell = AbHom
x AbHom -> FinList n AbHom -> FinList (n + 1) AbHom
forall a (n1 :: N'). a -> FinList n1 a -> FinList (n1 + 1) a
:| (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
 -> AbHom)
-> FinList
     n (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
-> FinList n AbHom
forall (h :: * -> * -> *) (f :: * -> *) x y.
Applicative1 h f =>
h x y -> f x -> f y
amap1 (AbHom
-> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
-> AbHom
forall (k :: N').
AbHom
-> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
-> AbHom
pLft AbHom
x) FinList
  n (KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom)
kers

      pLft :: AbHom
         -> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
         -> AbHom
      pLft :: forall (k :: N').
AbHom
-> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
-> AbHom
pLft AbHom
x KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
ker = KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
-> Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
-> AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> Cone s p d t n m x -> x
universalFactor KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
ker (SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom
-> AbHom
-> Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'LeftToRight) N2 m a
-> a -> Cone Dst 'Projective d ('Parallel 'LeftToRight) N2 m a
ConeKernel SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom
d AbHom
x) where
        -- the cone is eligible because of the property (2) of abhFreeFromSplitCy

        d :: SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom
d = Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') a.
Cone s p d t n m a -> d t n m a
diagrammaticObject (Cone
   Dst
   'Projective
   (SliceDiagram (Free k))
   ('Parallel 'LeftToRight)
   N2
   N1
   AbHom
 -> SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom)
-> Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
-> SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ ConicFreeTip
  Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
ConicFreeTip Cone s p d t n m x -> Cone s p d t n m x
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
Conic c =>
c s p d t n m x -> Cone s p d t n m x
cone (ConicFreeTip
   Cone
   Dst
   'Projective
   (SliceDiagram (Free k))
   ('Parallel 'LeftToRight)
   N2
   N1
   AbHom
 -> Cone
      Dst
      'Projective
      (SliceDiagram (Free k))
      ('Parallel 'LeftToRight)
      N2
      N1
      AbHom)
-> ConicFreeTip
     Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
-> Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
-> ConicFreeTip
     Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> c s p d t n m x
universalCone KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
ker

--------------------------------------------------------------------------------

-- abhKernelsFreeFromG -


-- | kernels with a free tip of free sliced diagrams.

abhKernelsFreeFromG :: Attestable k => KernelsG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
abhKernelsFreeFromG :: forall (k :: N').
Attestable k =>
KernelsG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
abhKernelsFreeFromG = (SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom
 -> LimesG
      (ConicFreeTip Cone)
      Dst
      'Projective
      (SliceDiagram (Free k))
      ('Parallel 'LeftToRight)
      N2
      N1
      AbHom)
-> LimitsG
     (ConicFreeTip Cone)
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
(d t n m x -> LimesG c s p d t n m x) -> LimitsG c s p d t n m x
LimitsG SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom
-> LimesG
     (ConicFreeTip Cone)
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (k :: N').
Attestable k =>
KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom
-> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
abhKernelFreeFromG

-- | kernels with a free tip of free sliced diagrams according to the given proxy type.

abhKernelsFreeFromG' :: Attestable k
  => q k -> KernelsG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
abhKernelsFreeFromG' :: forall (k :: N') (q :: N' -> *).
Attestable k =>
q k
-> KernelsG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
abhKernelsFreeFromG' q k
_ = KernelsG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
forall (k :: N').
Attestable k =>
KernelsG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
abhKernelsFreeFromG

--------------------------------------------------------------------------------

-- prpAbhKernelsFreeFromG -


-- | random variable for free slice 'From' diagrams.

xdgKernelsFreeFromG :: Attestable k
  =>  Any k -> X (SliceDiagram (Free k) (Parallel LeftToRight) N2 N1 AbHom)
xdgKernelsFreeFromG :: forall (k :: N').
Attestable k =>
Any k -> X (KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom)
xdgKernelsFreeFromG Any k
k = do
  AbHom
h <- AbGroup -> X AbHom
xh (N -> AbGroup
abg N
0 AbGroup -> Exponent AbGroup -> AbGroup
forall f. Exponential f => f -> Exponent f -> f
^ (Any k -> N
forall x. LengthN x => x -> N
lengthN Any k
k))
  SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom
-> X (SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom)
forall a. a -> X a
forall (m :: * -> *) a. Monad m => a -> m a
return (Slice 'From (Free k) AbHom
-> SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom
forall (i :: * -> *) x.
Sliced i x =>
Slice 'From i x -> SliceDiagram i ('Parallel 'LeftToRight) N2 N1 x
SliceDiagramKernel (Free k AbHom -> AbHom -> Slice 'From (Free k) AbHom
forall (i :: * -> *) x. i x -> x -> Slice 'From i x
SliceFrom (Any k -> Free k AbHom
forall (k :: N') c. Any k -> Free k c
Free Any k
k) AbHom
h))
  where XStart X (Point AbHom)
_ Point AbHom -> X AbHom
AbGroup -> X AbHom
xh = XOrtSite 'From AbHom
forall (s :: Site) a. XStandardOrtSite s a => XOrtSite s a
xStandardOrtSite :: XOrtSite From AbHom 

-- | validity of 'prpAbhKernelsFreeFromG' for the given dimenson of the free sliced kenrel diagrams.

prpAbhKernelsFreeFromGN :: N -> Statement
prpAbhKernelsFreeFromGN :: N -> Statement
prpAbhKernelsFreeFromGN N
k = case N -> SomeNatural
someNatural N
k of
  SomeNatural W n
k' -> XEligibleConeG
  (ConicFreeTip Cone)
  Dst
  'Projective
  (SliceDiagram (Free n))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> XEligibleConeFactorG
     (ConicFreeTip Cone)
     Dst
     'Projective
     (SliceDiagram (Free n))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
-> X (SliceDiagram (Free n) ('Parallel 'LeftToRight) N2 N1 AbHom)
-> LimitsG
     (ConicFreeTip Cone)
     Dst
     'Projective
     (SliceDiagram (Free n))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
-> Statement
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       (d :: DiagramType -> N' -> N' -> * -> *) s (p :: Perspective)
       (t :: DiagramType) (n :: N') (m :: N') x.
(Conic c, Diagrammatic d, Show (c s p d t n m x),
 Validable (c s p d t n m x), Entity (d t n m x), Entity x) =>
XEligibleConeG c s p d t n m x
-> XEligibleConeFactorG c s p d t n m x
-> X (d t n m x)
-> LimitsG c s p d t n m x
-> Statement
prpLimitsG
                      XEligibleConeG
  (ConicFreeTip Cone)
  Dst
  'Projective
  (SliceDiagram (Free n))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
forall (k :: N').
XEligibleConeG
  (ConicFreeTip Cone)
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
xecAbhKernelsFreeFromCyG
                      XEligibleConeFactorG
  (ConicFreeTip Cone)
  Dst
  'Projective
  (SliceDiagram (Free n))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
forall (k :: N').
XEligibleConeFactorG
  (ConicFreeTip Cone)
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
xecfAbhKernelsFreeFromCyG
                      (W n
-> X (SliceDiagram (Free n) ('Parallel 'LeftToRight) N2 N1 AbHom)
forall (k :: N').
Attestable k =>
Any k -> X (KernelDiagrammatic (SliceDiagram (Free k)) N1 AbHom)
xdgKernelsFreeFromG W n
k')
                      LimitsG
  (ConicFreeTip Cone)
  Dst
  'Projective
  (SliceDiagram (Free n))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
forall (k :: N').
Attestable k =>
KernelsG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
abhKernelsFreeFromG

-- | validity of 'prpAbhKernelsFreeFromG'.

prpAbhKernelsFreeFromG :: Statement
prpAbhKernelsFreeFromG :: Statement
prpAbhKernelsFreeFromG = X N -> (N -> Statement) -> Statement
forall x. X x -> (x -> Statement) -> Statement
Forall (N -> N -> X N
xNB N
0 N
15) N -> Statement
prpAbhKernelsFreeFromGN

--------------------------------------------------------------------------------

-- abhKernelSomeFreeFreeTip -


-- | kernel with a free tip for a free sliced 'From' diagram.

abhKernelSomeFreeFreeTip :: KernelDiagrammatic SomeFreeSliceDiagram N1 AbHom
  -> KernelSomeFreeFreeTip AbHom
abhKernelSomeFreeFreeTip :: KernelDiagrammatic SomeFreeSliceDiagram N1 AbHom
-> KernelSomeFreeFreeTip AbHom
abhKernelSomeFreeFreeTip d :: KernelDiagrammatic SomeFreeSliceDiagram N1 AbHom
d@(SomeFreeSliceKernel Slice 'From (Free k) AbHom
frm) = ConicFreeTip
  Cone
  Dst
  'Projective
  SomeFreeSliceDiagram
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> (Cone
      Dst
      'Projective
      SomeFreeSliceDiagram
      ('Parallel 'LeftToRight)
      N2
      N1
      AbHom
    -> AbHom)
-> KernelSomeFreeFreeTip AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
c s 'Projective d t n m x
-> (Cone s 'Projective d t n m x -> x)
-> LimesG c s 'Projective d t n m x
LimesProjective ConicFreeTip
  Cone
  Dst
  'Projective
  SomeFreeSliceDiagram
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
cnFrT Cone
  Dst
  'Projective
  SomeFreeSliceDiagram
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> AbHom
univFrT where
  d' :: SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom
d' = Slice 'From (Free k) AbHom
-> SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom
forall (i :: * -> *) x.
Sliced i x =>
Slice 'From i x -> SliceDiagram i ('Parallel 'LeftToRight) N2 N1 x
SliceDiagramKernel Slice 'From (Free k) AbHom
frm
  LimesProjective ConicFreeTip
  Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
cnFrT' Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> AbHom
univFrT' = LimitsG
  (ConicFreeTip Cone)
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom
-> LimesG
     (ConicFreeTip Cone)
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimitsG c s p d t n m x -> d t n m x -> LimesG c s p d t n m x
limes LimitsG
  (ConicFreeTip Cone)
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
forall (k :: N').
Attestable k =>
KernelsG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
abhKernelsFreeFromG SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom
d'
  
  cnFrT :: ConicFreeTip
  Cone
  Dst
  'Projective
  SomeFreeSliceDiagram
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
cnFrT = case ConicFreeTip
  Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
cnFrT' of
    ConicFreeTip Free k AbHom
k Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
cn' -> Free k AbHom
-> Cone
     Dst
     'Projective
     SomeFreeSliceDiagram
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
-> ConicFreeTip
     Cone
     Dst
     'Projective
     SomeFreeSliceDiagram
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (k :: N') x
       (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N').
(Attestable k, Sliced (Free k) x) =>
Free k x -> c s p d t n m x -> ConicFreeTip c s p d t n m x
ConicFreeTip Free k AbHom
k Cone
  Dst
  'Projective
  SomeFreeSliceDiagram
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
cn where
      cn :: Cone
  Dst
  'Projective
  SomeFreeSliceDiagram
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
cn = KernelDiagrammatic SomeFreeSliceDiagram N1 AbHom
-> AbHom
-> Cone
     Dst
     'Projective
     SomeFreeSliceDiagram
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'LeftToRight) N2 m a
-> a -> Cone Dst 'Projective d ('Parallel 'LeftToRight) N2 m a
ConeKernel KernelDiagrammatic SomeFreeSliceDiagram N1 AbHom
d (Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       (d :: DiagramType -> N' -> N' -> * -> *) (n :: N') x.
Conic c =>
KernelConic c d n x -> x
kernelFactor Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
cn')
    
  univFrT :: Cone
  Dst
  'Projective
  SomeFreeSliceDiagram
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> AbHom
univFrT (ConeKernel KernelDiagrammatic SomeFreeSliceDiagram N1 AbHom
_ AbHom
x) = Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> AbHom
univFrT' (SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom
-> AbHom
-> Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'LeftToRight) N2 m a
-> a -> Cone Dst 'Projective d ('Parallel 'LeftToRight) N2 m a
ConeKernel SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom
d' AbHom
x)

--------------------------------------------------------------------------------

-- abhKernelsSomeFreeFreeTip -


-- | kernels with a free tip for free sliced 'From' diagrams.

abhKernelsSomeFreeFreeTip :: KernelsSomeFreeFreeTip AbHom
abhKernelsSomeFreeFreeTip :: KernelsSomeFreeFreeTip AbHom
abhKernelsSomeFreeFreeTip = (KernelDiagrammatic SomeFreeSliceDiagram N1 AbHom
 -> KernelSomeFreeFreeTip AbHom)
-> KernelsSomeFreeFreeTip AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
(d t n m x -> LimesG c s p d t n m x) -> LimitsG c s p d t n m x
LimitsG KernelDiagrammatic SomeFreeSliceDiagram N1 AbHom
-> KernelSomeFreeFreeTip AbHom
abhKernelSomeFreeFreeTip

--------------------------------------------------------------------------------

-- abhKernel -


-- | kernel for a given additive homomorphism.

--

-- __Properties__ Let @d@ be in @'KernelDiagram' 'N1' 'AbHom'@ and

-- @ker = 'abhKernel' d@, then holds:

--

-- (1) @'diagram' ker '==' d@.

--

-- (2) @'tip' ('universalCone' ker)@ is smith normal.

--

-- The construction follows the diagram below by using 'abgFinPres':

--

-- @

--         k''         

--    r'' ------> s'' 

--     |           | 

--  q' |        p' | 

--     |           | 

--     v    k'     v

--    r' --------> s'

--     |           |

--  q  |         p | 

--     |           | 

--     v   hKer    v     h 

--     r --------> s -------> e

-- @

abhKernel :: KernelDiagram N1 AbHom -> Kernel N1 AbHom
abhKernel :: Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> LimesG
     Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
abhKernel Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
d = Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> FinitePresentation 'To Free AbHom
-> LimesG
     Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
hKer Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
d (FinitelyPresentable 'To Free AbHom
-> Point AbHom -> FinitePresentation 'To Free AbHom
forall (s :: Site) (i :: N' -> * -> *) a.
FinitelyPresentable s i a -> Point a -> FinitePresentation s i a
finitePresentation FinitelyPresentable 'To Free AbHom
abgFinPres (AbGroup -> FinitePresentation 'To Free AbHom)
-> AbGroup -> FinitePresentation 'To Free AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ AbHom -> Point AbHom
forall q. Oriented q => q -> Point q
start AbHom
h) where

  DiagramParallelLR Point AbHom
_ Point AbHom
_ (AbHom
h:|FinList n1 AbHom
Nil) = Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
d
  
  hKer :: KernelDiagram N1 AbHom -> FinitePresentation To Free AbHom -> Kernel N1 AbHom
  hKer :: Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> FinitePresentation 'To Free AbHom
-> LimesG
     Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
hKer
    d :: Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
d@(DiagramParallelLR Point AbHom
_ Point AbHom
_ (AbHom
h:|FinList n1 AbHom
Nil))
    g :: FinitePresentation 'To Free AbHom
g@(GeneratorTo (DiagramChainTo Point AbHom
_ (AbHom
p:|AbHom
_:|FinList n1 AbHom
Nil)) Free k' AbHom
ns' Free k'' AbHom
_ Cokernel N1 AbHom
_ LimesG
  Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
_ forall (k :: N').
Slice 'From (Free k) AbHom -> Slice 'From (Free k) AbHom
_)
    = Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> FinitePresentation 'To Free AbHom
-> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k')) N1 AbHom
-> LimesG
     Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
forall (k :: N').
Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> FinitePresentation 'To Free AbHom
-> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
-> LimesG
     Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
hKer' Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
d FinitePresentation 'To Free AbHom
g (LimitsG
  (ConicFreeTip Cone)
  Dst
  'Projective
  (SliceDiagram (Free k'))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> SliceDiagram (Free k') ('Parallel 'LeftToRight) N2 N1 AbHom
-> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k')) N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimitsG c s p d t n m x -> d t n m x -> LimesG c s p d t n m x
limes LimitsG
  (ConicFreeTip Cone)
  Dst
  'Projective
  (SliceDiagram (Free k'))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
forall (k :: N').
Attestable k =>
KernelsG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
abhKernelsFreeFromG (Slice 'From (Free k') AbHom
-> SliceDiagram (Free k') ('Parallel 'LeftToRight) N2 N1 AbHom
forall (i :: * -> *) x.
Sliced i x =>
Slice 'From i x -> SliceDiagram i ('Parallel 'LeftToRight) N2 N1 x
SliceDiagramKernel (Free k' AbHom -> AbHom -> Slice 'From (Free k') AbHom
forall (i :: * -> *) x. i x -> x -> Slice 'From i x
SliceFrom Free k' AbHom
ns' (AbHom
hAbHom -> AbHom -> AbHom
forall c. Multiplicative c => c -> c -> c
*AbHom
p))))

  hKer'
    :: KernelDiagram N1 AbHom
    -> FinitePresentation To Free AbHom
    -> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
    -> Kernel N1 AbHom
  hKer' :: forall (k :: N').
Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> FinitePresentation 'To Free AbHom
-> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
-> LimesG
     Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
hKer'
    Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
d
    g :: FinitePresentation 'To Free AbHom
g@(GeneratorTo (DiagramChainTo Point AbHom
_ (AbHom
_:|AbHom
p':|FinList n1 AbHom
Nil)) Free k' AbHom
ns' Free k'' AbHom
ns'' Cokernel N1 AbHom
_ LimesG
  Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
_ forall (k :: N').
Slice 'From (Free k) AbHom -> Slice 'From (Free k) AbHom
_)
    hpKerFree :: KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
hpKerFree@(LimesProjective (ConicFreeTip Free k AbHom
nr' Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
_) Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> AbHom
_)

    = Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> FinitePresentation 'To Free AbHom
-> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
-> PullbackG (ConicFreeTip Cone) DiagramFree N2 AbHom
-> LimesG
     Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
forall (k :: N').
Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> FinitePresentation 'To Free AbHom
-> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
-> PullbackG (ConicFreeTip Cone) DiagramFree N2 AbHom
-> LimesG
     Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
hKer'' Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
d FinitePresentation 'To Free AbHom
g KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
hpKerFree PullbackG (ConicFreeTip Cone) DiagramFree N2 AbHom
LimesG
  (ConicFreeTip Cone)
  Mlt
  'Projective
  DiagramFree
  ('Star 'To)
  N3
  N2
  AbHom
k'p'Plb where

    k'p'Plb :: LimesG
  (ConicFreeTip Cone)
  Mlt
  'Projective
  DiagramFree
  ('Star 'To)
  N3
  N2
  AbHom
k'p'Plb = LimitsG
  (ConicFreeTip Cone)
  Mlt
  'Projective
  DiagramFree
  ('Star 'To)
  N3
  N2
  AbHom
-> DiagramFree ('Star 'To) N3 N2 AbHom
-> LimesG
     (ConicFreeTip Cone)
     Mlt
     'Projective
     DiagramFree
     ('Star 'To)
     N3
     N2
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimitsG c s p d t n m x -> d t n m x -> LimesG c s p d t n m x
limes PullbacksG (ConicFreeTip Cone) DiagramFree N2 AbHom
LimitsG
  (ConicFreeTip Cone)
  Mlt
  'Projective
  DiagramFree
  ('Star 'To)
  N3
  N2
  AbHom
forall (n :: N').
PullbacksG (ConicFreeTip Cone) DiagramFree n AbHom
abhPullbacksFreeG
      (FinList N3 (SomeFree AbHom)
-> Diagram ('Star 'To) N3 N2 AbHom
-> DiagramFree ('Star 'To) N3 N2 AbHom
forall (t :: DiagramType) (n :: N') (m :: N') a.
FinList n (SomeFree a) -> Diagram t n m a -> DiagramFree t n m a
DiagramFree (Free k' AbHom -> SomeFree AbHom
forall (k :: N') c.
(Attestable k, Sliced (Free k) c) =>
Free k c -> SomeFree c
SomeFree Free k' AbHom
ns'SomeFree AbHom
-> FinList N2 (SomeFree AbHom) -> FinList (N2 + 1) (SomeFree AbHom)
forall a (n1 :: N'). a -> FinList n1 a -> FinList (n1 + 1) a
:|Free k AbHom -> SomeFree AbHom
forall (k :: N') c.
(Attestable k, Sliced (Free k) c) =>
Free k c -> SomeFree c
SomeFree Free k AbHom
nr'SomeFree AbHom
-> FinList N1 (SomeFree AbHom) -> FinList (N1 + 1) (SomeFree AbHom)
forall a (n1 :: N'). a -> FinList n1 a -> FinList (n1 + 1) a
:|Free k'' AbHom -> SomeFree AbHom
forall (k :: N') c.
(Attestable k, Sliced (Free k) c) =>
Free k c -> SomeFree c
SomeFree Free k'' AbHom
ns''SomeFree AbHom
-> FinList N0 (SomeFree AbHom) -> FinList (N0 + 1) (SomeFree AbHom)
forall a (n1 :: N'). a -> FinList n1 a -> FinList (n1 + 1) a
:|FinList N0 (SomeFree AbHom)
forall a. FinList N0 a
Nil) Diagram ('Star 'To) (N2 + 1) N2 AbHom
Diagram ('Star 'To) N3 N2 AbHom
k'p'PlbDgm)
    k'p'PlbDgm :: Diagram ('Star 'To) (N2 + 1) N2 AbHom
k'p'PlbDgm = Point AbHom
-> FinList N2 AbHom -> Diagram ('Star 'To) (N2 + 1) N2 AbHom
forall a (m :: N').
Point a -> FinList m a -> Diagram ('Star 'To) (m + 1) m a
DiagramSink (AbHom -> Point AbHom
forall q. Oriented q => q -> Point q
end AbHom
k') (AbHom
k'AbHom -> FinList N1 AbHom -> FinList (N1 + 1) AbHom
forall a (n1 :: N'). a -> FinList n1 a -> FinList (n1 + 1) a
:|AbHom
p'AbHom -> FinList N0 AbHom -> FinList (N0 + 1) AbHom
forall a (n1 :: N'). a -> FinList n1 a -> FinList (n1 + 1) a
:|FinList N0 AbHom
forall a. FinList N0 a
Nil)

    k' :: AbHom
k' = ConicFreeTip
  Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       (d :: DiagramType -> N' -> N' -> * -> *) (n :: N') x.
Conic c =>
KernelConic c d n x -> x
kernelFactor (ConicFreeTip
   Cone
   Dst
   'Projective
   (SliceDiagram (Free k))
   ('Parallel 'LeftToRight)
   N2
   N1
   AbHom
 -> AbHom)
-> ConicFreeTip
     Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
-> AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
-> ConicFreeTip
     Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> c s p d t n m x
universalCone KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
hpKerFree
    
  hKer''
    :: KernelDiagram N1 AbHom
    -> FinitePresentation To Free AbHom
    -> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom -- KernelFree N1 AbHom

    -> PullbackG (ConicFreeTip Cone) DiagramFree N2 AbHom -- PullbackFree N2 AbHom

    -> Kernel N1 AbHom
  hKer'' :: forall (k :: N').
Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> FinitePresentation 'To Free AbHom
-> KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
-> PullbackG (ConicFreeTip Cone) DiagramFree N2 AbHom
-> LimesG
     Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
hKer''
    Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
d
    (GeneratorTo (DiagramChainTo Point AbHom
_ (AbHom
p:|AbHom
_:|FinList n1 AbHom
Nil)) Free k' AbHom
_ Free k'' AbHom
_ Cokernel N1 AbHom
_ LimesG
  Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
_ forall (k :: N').
Slice 'From (Free k) AbHom -> Slice 'From (Free k) AbHom
lp)
    hpKer :: KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
hpKer@(LimesProjective (ConicFreeTip Free k AbHom
nr' Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
_) Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> AbHom
_)     -- (LimesFree nr' hpKer)

    k'p'Plb :: PullbackG (ConicFreeTip Cone) DiagramFree N2 AbHom
k'p'Plb@(LimesProjective (ConicFreeTip Free k AbHom
nr'' Cone Mlt 'Projective DiagramFree ('Star 'To) (N2 + 1) N2 AbHom
_) Cone Mlt 'Projective DiagramFree ('Star 'To) (N2 + 1) N2 AbHom
-> AbHom
_)  -- (LimesFree nr'' k'p'Plb)

    = Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> (Cone
      Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
    -> AbHom)
-> LimesG
     Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
c s 'Projective d t n m x
-> (Cone s 'Projective d t n m x -> x)
-> LimesG c s 'Projective d t n m x
LimesProjective Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
hKer Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> AbHom
hUniv where

    AbHom
_:|AbHom
q':|FinList n1 AbHom
_   = Cone Mlt 'Projective DiagramFree ('Star 'To) N3 N2 AbHom
-> FinList N3 AbHom
forall (d :: DiagramType -> N' -> N' -> * -> *) s
       (p :: Perspective) (t :: DiagramType) (n :: N') (m :: N') a.
Diagrammatic d =>
Cone s p d t n m a -> FinList n a
shell (Cone Mlt 'Projective DiagramFree ('Star 'To) N3 N2 AbHom
 -> FinList N3 AbHom)
-> Cone Mlt 'Projective DiagramFree ('Star 'To) N3 N2 AbHom
-> FinList N3 AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ ConicFreeTip
  Cone Mlt 'Projective DiagramFree ('Star 'To) N3 N2 AbHom
-> Cone Mlt 'Projective DiagramFree ('Star 'To) N3 N2 AbHom
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
ConicFreeTip Cone s p d t n m x -> Cone s p d t n m x
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
Conic c =>
c s p d t n m x -> Cone s p d t n m x
cone (ConicFreeTip
   Cone Mlt 'Projective DiagramFree ('Star 'To) N3 N2 AbHom
 -> Cone Mlt 'Projective DiagramFree ('Star 'To) N3 N2 AbHom)
-> ConicFreeTip
     Cone Mlt 'Projective DiagramFree ('Star 'To) N3 N2 AbHom
-> Cone Mlt 'Projective DiagramFree ('Star 'To) N3 N2 AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ LimesG
  (ConicFreeTip Cone)
  Mlt
  'Projective
  DiagramFree
  ('Star 'To)
  N3
  N2
  AbHom
-> ConicFreeTip
     Cone Mlt 'Projective DiagramFree ('Star 'To) N3 N2 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> c s p d t n m x
universalCone PullbackG (ConicFreeTip Cone) DiagramFree N2 AbHom
LimesG
  (ConicFreeTip Cone)
  Mlt
  'Projective
  DiagramFree
  ('Star 'To)
  N3
  N2
  AbHom
k'p'Plb
    q'CokerDgm :: Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
q'CokerDgm = AbHom -> Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall x. Oriented x => x -> CokernelDiagram N1 x
cokernelDiagram AbHom
q' 
    q'Coker :: CokernelG ConeLiftable DiagramFree N1 AbHom
q'Coker    = CokernelsG ConeLiftable DiagramFree N1 AbHom
-> DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> CokernelG ConeLiftable DiagramFree N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimitsG c s p d t n m x -> d t n m x -> LimesG c s p d t n m x
limes CokernelsG ConeLiftable DiagramFree N1 AbHom
abhCokernelsFreeDgmLftFreeG
      ( FinList N2 (SomeFree AbHom)
-> Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
forall (t :: DiagramType) (n :: N') (m :: N') a.
FinList n (SomeFree a) -> Diagram t n m a -> DiagramFree t n m a
DiagramFree
         (Free k AbHom -> SomeFree AbHom
forall (k :: N') c.
(Attestable k, Sliced (Free k) c) =>
Free k c -> SomeFree c
SomeFree Free k AbHom
nr'SomeFree AbHom
-> FinList N1 (SomeFree AbHom) -> FinList (N1 + 1) (SomeFree AbHom)
forall a (n1 :: N'). a -> FinList n1 a -> FinList (n1 + 1) a
:|Free k AbHom -> SomeFree AbHom
forall (k :: N') c.
(Attestable k, Sliced (Free k) c) =>
Free k c -> SomeFree c
SomeFree Free k AbHom
nr''SomeFree AbHom
-> FinList N0 (SomeFree AbHom) -> FinList (N0 + 1) (SomeFree AbHom)
forall a (n1 :: N'). a -> FinList n1 a -> FinList (n1 + 1) a
:|FinList N0 (SomeFree AbHom)
forall a. FinList N0 a
Nil)
         Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
q'CokerDgm
      )
      
    hKer :: Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
hKer = Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> AbHom
-> Cone
     Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'LeftToRight) N2 m a
-> a -> Cone Dst 'Projective d ('Parallel 'LeftToRight) N2 m a
ConeKernel Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
d AbHom
hKerFactor where
      hKerFactor :: AbHom
hKerFactor = CokernelG ConeLiftable DiagramFree N1 AbHom
-> Cone
     Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> Cone s p d t n m x -> x
universalFactor CokernelG ConeLiftable DiagramFree N1 AbHom
q'Coker (DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
-> Cone
     Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'RightToLeft) N2 m a
-> a -> Cone Dst 'Injective d ('Parallel 'RightToLeft) N2 m a
ConeCokernel DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
q'CokerDgmFree (AbHom
pAbHom -> AbHom -> AbHom
forall c. Multiplicative c => c -> c -> c
*AbHom
k'))
      k' :: AbHom
k' = ConicFreeTip
  Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       (d :: DiagramType -> N' -> N' -> * -> *) (n :: N') x.
Conic c =>
KernelConic c d n x -> x
kernelFactor (ConicFreeTip
   Cone
   Dst
   'Projective
   (SliceDiagram (Free k))
   ('Parallel 'LeftToRight)
   N2
   N1
   AbHom
 -> AbHom)
-> ConicFreeTip
     Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
-> AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
-> ConicFreeTip
     Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> c s p d t n m x
universalCone KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
hpKer
      q'CokerDgmFree :: DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
q'CokerDgmFree = Cone
  Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') a.
Cone s p d t n m a -> d t n m a
diagrammaticObject (Cone
   Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
 -> DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom)
-> Cone
     Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ ConeLiftable
  Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> Cone
     Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
ConeLiftable s p d t n m x -> Cone s p d t n m x
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
Conic c =>
c s p d t n m x -> Cone s p d t n m x
cone (ConeLiftable
   Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
 -> Cone
      Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom)
-> ConeLiftable
     Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> Cone
     Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ CokernelG ConeLiftable DiagramFree N1 AbHom
-> ConeLiftable
     Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> c s p d t n m x
universalCone CokernelG ConeLiftable DiagramFree N1 AbHom
q'Coker
      
    hUniv :: Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> AbHom
hUniv (ConeKernel Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
d' AbHom
x) = case FinitelyPresentable 'To Free AbHom
-> Point AbHom -> FinitePresentation 'To Free AbHom
forall (s :: Site) (i :: N' -> * -> *) a.
FinitelyPresentable s i a -> Point a -> FinitePresentation s i a
finitePresentation FinitelyPresentable 'To Free AbHom
abgFinPres (AbGroup -> FinitePresentation 'To Free AbHom)
-> AbGroup -> FinitePresentation 'To Free AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ AbHom -> Point AbHom
forall q. Oriented q => q -> Point q
start AbHom
x of
      GeneratorTo (DiagramChainTo Point AbHom
_ (AbHom
t:|FinList n1 AbHom
_)) Free k' AbHom
nv' Free k'' AbHom
_ Cokernel N1 AbHom
t'Coker LimesG
  Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
_ forall (k :: N').
Slice 'From (Free k) AbHom -> Slice 'From (Free k) AbHom
_
        | Bool -> Bool
forall b. Boolean b => b -> b
not (Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
d Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> Diagram ('Parallel 'LeftToRight) N2 N1 AbHom -> Bool
forall a. Eq a => a -> a -> Bool
== Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
d') -> String -> AbHom
forall a. HasCallStack => String -> a
error String
"cone not eligible" -- throw $ ConeNotEligible $ show cn

        | Bool
otherwise     -> Cokernel N1 AbHom
-> Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> Cone s p d t n m x -> x
universalFactor Cokernel N1 AbHom
t'Coker Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
t'Cone where
                
        t'Cone :: Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
t'Cone = Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
-> Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'RightToLeft) N2 m a
-> a -> Cone Dst 'Injective d ('Parallel 'RightToLeft) N2 m a
ConeCokernel (Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') a.
Cone s p d t n m a -> d t n m a
diagrammaticObject (Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
 -> Diagram ('Parallel 'RightToLeft) N2 N1 AbHom)
-> Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
Cone s p d t n m x -> Cone s p d t n m x
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
Conic c =>
c s p d t n m x -> Cone s p d t n m x
cone (Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
 -> Cone
      Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom)
-> Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Cokernel N1 AbHom
-> Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> c s p d t n m x
universalCone Cokernel N1 AbHom
t'Coker) (AbHom
qAbHom -> AbHom -> AbHom
forall c. Multiplicative c => c -> c -> c
*AbHom
u')
        q :: AbHom
q  = ConeLiftable
  Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       (d :: DiagramType -> N' -> N' -> * -> *) (n :: N') x.
Conic c =>
CokernelConic c d n x -> x
cokernelFactor (ConeLiftable
   Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
 -> AbHom)
-> ConeLiftable
     Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ CokernelG ConeLiftable DiagramFree N1 AbHom
-> ConeLiftable
     Dst 'Injective DiagramFree ('Parallel 'RightToLeft) N2 N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> c s p d t n m x
universalCone CokernelG ConeLiftable DiagramFree N1 AbHom
q'Coker
        u' :: AbHom
u' = KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
-> Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
-> AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> Cone s p d t n m x -> x
universalFactor KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
hpKer Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
x'Cone

        x'Cone :: Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
x'Cone = SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom
-> AbHom
-> Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'LeftToRight) N2 m a
-> a -> Cone Dst 'Projective d ('Parallel 'LeftToRight) N2 m a
ConeKernel (Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') a.
Cone s p d t n m a -> d t n m a
diagrammaticObject (Cone
   Dst
   'Projective
   (SliceDiagram (Free k))
   ('Parallel 'LeftToRight)
   N2
   N1
   AbHom
 -> SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom)
-> Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
-> SliceDiagram (Free k) ('Parallel 'LeftToRight) N2 N1 AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ ConicFreeTip
  Cone
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
ConicFreeTip Cone s p d t n m x -> Cone s p d t n m x
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
Conic c =>
c s p d t n m x -> Cone s p d t n m x
cone (ConicFreeTip
   Cone
   Dst
   'Projective
   (SliceDiagram (Free k))
   ('Parallel 'LeftToRight)
   N2
   N1
   AbHom
 -> Cone
      Dst
      'Projective
      (SliceDiagram (Free k))
      ('Parallel 'LeftToRight)
      N2
      N1
      AbHom)
-> ConicFreeTip
     Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
-> Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
-> ConicFreeTip
     Cone
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> c s p d t n m x
universalCone KernelG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
hpKer) AbHom
x'
        SliceFrom Free k' AbHom
_ AbHom
x' = Slice 'From (Free k') AbHom -> Slice 'From (Free k') AbHom
forall (k :: N').
Slice 'From (Free k) AbHom -> Slice 'From (Free k) AbHom
lp (Free k' AbHom -> AbHom -> Slice 'From (Free k') AbHom
forall (i :: * -> *) x. i x -> x -> Slice 'From i x
SliceFrom Free k' AbHom
nv' (AbHom
xAbHom -> AbHom -> AbHom
forall c. Multiplicative c => c -> c -> c
*AbHom
t))

--------------------------------------------------------------------------------

-- abhKernels -


-- | kernels for 'AbHom'. 

abhKernels :: Kernels N1 AbHom
abhKernels :: Kernels N1 AbHom
abhKernels = (Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
 -> LimesG
      Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom)
-> Kernels N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
(d t n m x -> LimesG c s p d t n m x) -> LimitsG c s p d t n m x
LimitsG Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
-> LimesG
     Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
abhKernel

--------------------------------------------------------------------------------

-- prpAbhKernels -


-- | validity for 'abhKernels'

prpAbhKernels :: Statement
prpAbhKernels :: Statement
prpAbhKernels = String -> Label
Prp String
"AbhKernels" Label -> Statement -> Statement
:<=>: Kernels N1 AbHom -> Statement
forall a. Validable a => a -> Statement
valid Kernels N1 AbHom
abhKernels

--------------------------------------------------------------------------------

-- abhSliceFreeAdjunction -


-- | the cokernel-kernel adjunction for a given @'Free' __k__@. 

abhSliceFreeAdjunction :: Attestable k
  => Any k
  -> Adjunction (SliceAdjunction (Free k) Cone AbHom)
       (SliceFactor From (Free k) AbHom)
       (SliceFactor To (Free k) AbHom)
abhSliceFreeAdjunction :: forall (k :: N').
Attestable k =>
Any k
-> Adjunction
     (SliceAdjunction (Free k) Cone AbHom)
     (SliceFactor 'From (Free k) AbHom)
     (SliceFactor 'To (Free k) AbHom)
abhSliceFreeAdjunction Any k
k = SliceCokernels (Free k) Cone AbHom
-> SliceKernels (Free k) Cone AbHom
-> Free k AbHom
-> Adjunction
     (SliceAdjunction (Free k) Cone AbHom)
     (SliceFactor 'From (Free k) AbHom)
     (SliceFactor 'To (Free k) AbHom)
forall d (i :: * -> *)
       (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *).
(Distributive d, Sliced i d, Conic c) =>
SliceCokernels i c d
-> SliceKernels i c d
-> i d
-> Adjunction
     (SliceAdjunction i c d)
     (SliceFactor 'From i d)
     (SliceFactor 'To i d)
slcAdjunction SliceCokernels (Free k) Cone AbHom
slcCoker SliceKernels (Free k) Cone AbHom
slcKer (Any k -> Free k AbHom
forall (k :: N') c. Any k -> Free k c
Free Any k
k) where
  slcCoker :: SliceCokernels (Free k) Cone AbHom
slcCoker = LimitsG
  ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
-> SliceCokernels (Free k) Cone AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
Conic c =>
LimitsG c s p d t n m x -> LimitsG Cone s p d t n m x
limitsCone (LimitsG
   ConeLiftable
   Dst
   'Injective
   (SliceDiagram (Free k))
   ('Parallel 'RightToLeft)
   N2
   N1
   AbHom
 -> SliceCokernels (Free k) Cone AbHom)
-> LimitsG
     ConeLiftable
     Dst
     'Injective
     (SliceDiagram (Free k))
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
-> SliceCokernels (Free k) Cone AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Any k
-> LimitsG
     ConeLiftable
     Dst
     'Injective
     (SliceDiagram (Free k))
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
forall (k :: N') (q :: N' -> *).
Attestable k =>
q k -> CokernelsG ConeLiftable (SliceDiagram (Free k)) N1 AbHom
abhCokernelsFreeTo'G' Any k
k
  slcKer :: SliceKernels (Free k) Cone AbHom
slcKer   = LimitsG
  (ConicFreeTip Cone)
  Dst
  'Projective
  (SliceDiagram (Free k))
  ('Parallel 'LeftToRight)
  N2
  N1
  AbHom
-> SliceKernels (Free k) Cone AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
Conic c =>
LimitsG c s p d t n m x -> LimitsG Cone s p d t n m x
limitsCone (LimitsG
   (ConicFreeTip Cone)
   Dst
   'Projective
   (SliceDiagram (Free k))
   ('Parallel 'LeftToRight)
   N2
   N1
   AbHom
 -> SliceKernels (Free k) Cone AbHom)
-> LimitsG
     (ConicFreeTip Cone)
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
-> SliceKernels (Free k) Cone AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Any k
-> LimitsG
     (ConicFreeTip Cone)
     Dst
     'Projective
     (SliceDiagram (Free k))
     ('Parallel 'LeftToRight)
     N2
     N1
     AbHom
forall (k :: N') (q :: N' -> *).
Attestable k =>
q k
-> KernelsG (ConicFreeTip Cone) (SliceDiagram (Free k)) N1 AbHom
abhKernelsFreeFromG' Any k
k

--------------------------------------------------------------------------------

-- abhCokernelLftFree -



-- | liftable cokernel for a homomomorphism @h@.

--

-- @

--           w          

--     c <------- e'' 

--     ^           | 

--   u |        q' | 

--     |           | 

--     |    h'     v    

--    s' --------> e' -----> h'L

--     |           |          |

--  p  |         q |          | u'

--     |           |          |

--     v     h     v    w'    v

--     s --------> e -------> c' = liftable cokernel

-- @

abhCokernelLftFreeG :: CokernelDiagram N1 AbHom
  -> CokernelG ConeLiftable Diagram N1 AbHom
abhCokernelLftFreeG :: Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> CokernelG ConeLiftable Diagram N1 AbHom
abhCokernelLftFreeG d :: Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
d@(DiagramParallelRL Point AbHom
_ Point AbHom
_ (AbHom
h:|FinList n1 AbHom
Nil))
  = let fp :: Point AbHom -> FinitePresentation 'To Free AbHom
fp = FinitelyPresentable 'To Free AbHom
-> Point AbHom -> FinitePresentation 'To Free AbHom
forall (s :: Site) (i :: N' -> * -> *) a.
FinitelyPresentable s i a -> Point a -> FinitePresentation s i a
finitePresentation FinitelyPresentable 'To Free AbHom
abgFinPres in case (AbGroup -> FinitePresentation 'To Free AbHom
fp (AbGroup -> FinitePresentation 'To Free AbHom)
-> AbGroup -> FinitePresentation 'To Free AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ AbHom -> Point AbHom
forall q. Oriented q => q -> Point q
start AbHom
h,AbGroup -> FinitePresentation 'To Free AbHom
fp (AbGroup -> FinitePresentation 'To Free AbHom)
-> AbGroup -> FinitePresentation 'To Free AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ AbHom -> Point AbHom
forall q. Oriented q => q -> Point q
end AbHom
h) of
  (   GeneratorTo (DiagramChainTo Point AbHom
_ (AbHom
p:|FinList n1 AbHom
_)) Free k' AbHom
ns' Free k'' AbHom
_ Cokernel N1 AbHom
_ LimesG
  Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
_ forall (k :: N').
Slice 'From (Free k) AbHom -> Slice 'From (Free k) AbHom
_
    , GeneratorTo (DiagramChainTo Point AbHom
_ (AbHom
q:|AbHom
q':|FinList n1 AbHom
Nil)) Free k' AbHom
ne' Free k'' AbHom
_ Cokernel N1 AbHom
q'Coker LimesG
  Cone Dst 'Projective Diagram ('Parallel 'LeftToRight) N2 N1 AbHom
_ forall (k :: N').
Slice 'From (Free k) AbHom -> Slice 'From (Free k) AbHom
lq
    ) -> ConeLiftable
  Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> (Cone
      Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
    -> AbHom)
-> CokernelG ConeLiftable Diagram N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
c s 'Injective d t n m x
-> (Cone s 'Injective d t n m x -> x)
-> LimesG c s 'Injective d t n m x
LimesInjective ConeLiftable
  Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
w'CnLft Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
w'Univ where

    ----------------------------------------

    -- liftable cokernel cone of w' -

    w'CnLft :: ConeLiftable
  Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
w'CnLft = Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> LiftableFree 'Injective AbHom
-> ConeLiftable
     Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall (d :: DiagramType -> N' -> N' -> * -> *) x.
CokernelConic Cone d N1 x
-> LiftableFree 'Injective x
-> ConeLiftable Dst 'Injective d ('Parallel 'RightToLeft) N2 N1 x
ConeCokernelLiftable Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
w'Cn ((forall (k :: N'). Any k -> Liftable 'Injective (Free k) AbHom)
-> LiftableFree 'Injective AbHom
forall (p :: Perspective) x.
(forall (k :: N'). Any k -> Liftable p (Free k) x)
-> LiftableFree p x
LiftableFree Any k -> Liftable 'Injective (Free k) AbHom
forall (k :: N'). Any k -> Liftable 'Injective (Free k) AbHom
w'Lft)

    ----------------------------------------

    -- constructing c -

    SliceFrom Free k' AbHom
_ AbHom
h' = Slice 'From (Free k') AbHom -> Slice 'From (Free k') AbHom
forall (k :: N').
Slice 'From (Free k) AbHom -> Slice 'From (Free k) AbHom
lq (Free k' AbHom -> AbHom -> Slice 'From (Free k') AbHom
forall (i :: * -> *) x. i x -> x -> Slice 'From i x
SliceFrom Free k' AbHom
ns' (AbHom
hAbHom -> AbHom -> AbHom
forall c. Multiplicative c => c -> c -> c
*AbHom
p))
    h'SliceTo :: Slice 'To (Free k') AbHom
h'SliceTo      = Free k' AbHom -> AbHom -> Slice 'To (Free k') AbHom
forall (i :: * -> *) x. i x -> x -> Slice 'To i x
SliceTo Free k' AbHom
ne' AbHom
h'
    q'SliceTo :: Slice 'To (Free k') AbHom
q'SliceTo      = Free k' AbHom -> AbHom -> Slice 'To (Free k') AbHom
forall (i :: * -> *) x. i x -> x -> Slice 'To i x
SliceTo Free k' AbHom
ne' AbHom
q'

    cSum :: LimesG
  Cone
  Mlt
  'Injective
  Diagram
  'Discrete
  N2
  N0
  (SliceFactor 'To (Free k') AbHom)
cSum       = LimitsG
  Cone
  Mlt
  'Injective
  Diagram
  'Discrete
  N2
  N0
  (SliceFactor 'To (Free k') AbHom)
-> Diagram 'Discrete N2 N0 (SliceFactor 'To (Free k') AbHom)
-> LimesG
     Cone
     Mlt
     'Injective
     Diagram
     'Discrete
     N2
     N0
     (SliceFactor 'To (Free k') AbHom)
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimitsG c s p d t n m x -> d t n m x -> LimesG c s p d t n m x
limes (Limits Mlt 'Injective 'Discrete N2 N0 AbHom
-> LimitsG
     Cone
     Mlt
     'Injective
     Diagram
     'Discrete
     N2
     N0
     (SliceFactor 'To (Free k') AbHom)
forall x (i :: * -> *) (t :: DiagramType) (n :: N') (m :: N').
(Multiplicative x, Sliced i x) =>
Limits Mlt 'Injective t n m x
-> Limits Mlt 'Injective t n m (SliceFactor 'To i x)
slfLimitsInjective Limits Mlt 'Injective 'Discrete N2 N0 AbHom
forall (n :: N'). Sums n AbHom
abhSums)
                   (FinList N2 (Point (SliceFactor 'To (Free k') AbHom))
-> Diagram 'Discrete N2 N0 (SliceFactor 'To (Free k') AbHom)
forall (n :: N') a. FinList n (Point a) -> Diagram 'Discrete n N0 a
DiagramDiscrete (Slice 'To (Free k') AbHom
h'SliceToSlice 'To (Free k') AbHom
-> FinList N1 (Slice 'To (Free k') AbHom)
-> FinList (N1 + 1) (Slice 'To (Free k') AbHom)
forall a (n1 :: N'). a -> FinList n1 a -> FinList (n1 + 1) a
:|Slice 'To (Free k') AbHom
q'SliceToSlice 'To (Free k') AbHom
-> FinList N0 (Slice 'To (Free k') AbHom)
-> FinList (N0 + 1) (Slice 'To (Free k') AbHom)
forall a (n1 :: N'). a -> FinList n1 a -> FinList (n1 + 1) a
:|FinList N0 (Slice 'To (Free k') AbHom)
forall a. FinList N0 a
Nil))
    cSliceTo :: Slice 'To (Free k') AbHom
cSliceTo   = Cone
  Mlt
  'Injective
  Diagram
  'Discrete
  N2
  N0
  (SliceFactor 'To (Free k') AbHom)
-> Point (SliceFactor 'To (Free k') AbHom)
Cone
  Mlt
  'Injective
  Diagram
  'Discrete
  N2
  N0
  (SliceFactor 'To (Free k') AbHom)
-> Slice 'To (Free k') AbHom
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') a.
Cone s p d t n m a -> Point a
tip (Cone
   Mlt
   'Injective
   Diagram
   'Discrete
   N2
   N0
   (SliceFactor 'To (Free k') AbHom)
 -> Slice 'To (Free k') AbHom)
-> Cone
     Mlt
     'Injective
     Diagram
     'Discrete
     N2
     N0
     (SliceFactor 'To (Free k') AbHom)
-> Slice 'To (Free k') AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Cone
  Mlt
  'Injective
  Diagram
  'Discrete
  N2
  N0
  (SliceFactor 'To (Free k') AbHom)
-> Cone
     Mlt
     'Injective
     Diagram
     'Discrete
     N2
     N0
     (SliceFactor 'To (Free k') AbHom)
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
Cone s p d t n m x -> Cone s p d t n m x
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
Conic c =>
c s p d t n m x -> Cone s p d t n m x
cone (Cone
   Mlt
   'Injective
   Diagram
   'Discrete
   N2
   N0
   (SliceFactor 'To (Free k') AbHom)
 -> Cone
      Mlt
      'Injective
      Diagram
      'Discrete
      N2
      N0
      (SliceFactor 'To (Free k') AbHom))
-> Cone
     Mlt
     'Injective
     Diagram
     'Discrete
     N2
     N0
     (SliceFactor 'To (Free k') AbHom)
-> Cone
     Mlt
     'Injective
     Diagram
     'Discrete
     N2
     N0
     (SliceFactor 'To (Free k') AbHom)
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ LimesG
  Cone
  Mlt
  'Injective
  Diagram
  'Discrete
  N2
  N0
  (SliceFactor 'To (Free k') AbHom)
-> Cone
     Mlt
     'Injective
     Diagram
     'Discrete
     N2
     N0
     (SliceFactor 'To (Free k') AbHom)
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> c s p d t n m x
universalCone LimesG
  Cone
  Mlt
  'Injective
  Diagram
  'Discrete
  N2
  N0
  (SliceFactor 'To (Free k') AbHom)
cSum

    ----------------------------------------

    -- evaluating c' -

    cCokerLft :: LimesG
  ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k'))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
cCokerLft = LimitsG
  ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k'))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
-> SliceDiagram (Free k') ('Parallel 'RightToLeft) N2 N1 AbHom
-> LimesG
     ConeLiftable
     Dst
     'Injective
     (SliceDiagram (Free k'))
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimitsG c s p d t n m x -> d t n m x -> LimesG c s p d t n m x
limes LimitsG
  ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k'))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
forall (k :: N').
Attestable k =>
CokernelsG ConeLiftable (SliceDiagram (Free k)) N1 AbHom
abhCokernelsFreeTo'G (Slice 'To (Free k') AbHom
-> SliceDiagram (Free k') ('Parallel 'RightToLeft) N2 N1 AbHom
forall (i :: * -> *) x.
Sliced i x =>
Slice 'To i x -> SliceDiagram i ('Parallel 'RightToLeft) N2 N1 x
SliceDiagramCokernel Slice 'To (Free k') AbHom
cSliceTo)
    c' :: AbHom
c'        = CokernelConic ConeLiftable (SliceDiagram (Free k')) N1 AbHom
-> AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       (d :: DiagramType -> N' -> N' -> * -> *) (n :: N') x.
Conic c =>
CokernelConic c d n x -> x
cokernelFactor (CokernelConic ConeLiftable (SliceDiagram (Free k')) N1 AbHom
 -> AbHom)
-> CokernelConic ConeLiftable (SliceDiagram (Free k')) N1 AbHom
-> AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ LimesG
  ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k'))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
-> CokernelConic ConeLiftable (SliceDiagram (Free k')) N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> c s p d t n m x
universalCone LimesG
  ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k'))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
cCokerLft

    ----------------------------------------

    -- evaluating w' -

    w' :: AbHom
w' = Cokernel N1 AbHom
-> Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> Cone s p d t n m x -> x
universalFactor Cokernel N1 AbHom
q'Coker (Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
-> Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'RightToLeft) N2 m a
-> a -> Cone Dst 'Injective d ('Parallel 'RightToLeft) N2 m a
ConeCokernel (Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') a.
Cone s p d t n m a -> d t n m a
diagrammaticObject (Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
 -> Diagram ('Parallel 'RightToLeft) N2 N1 AbHom)
-> Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
Cone s p d t n m x -> Cone s p d t n m x
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
Conic c =>
c s p d t n m x -> Cone s p d t n m x
cone (Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
 -> Cone
      Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom)
-> Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Cokernel N1 AbHom
-> Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> c s p d t n m x
universalCone Cokernel N1 AbHom
q'Coker) AbHom
c')
    w'Cn :: Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
w'Cn = Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
-> Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'RightToLeft) N2 m a
-> a -> Cone Dst 'Injective d ('Parallel 'RightToLeft) N2 m a
ConeCokernel Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
d AbHom
w'

    w'Lft :: Any k -> Liftable Injective (Free k) AbHom
    w'Lft :: forall (k :: N'). Any k -> Liftable 'Injective (Free k) AbHom
w'Lft Any k
k = case Any k -> Ats k
forall (n :: N'). Any n -> Ats n
ats Any k
k of
      Ats k
Ats -> AbHom
-> (Slice 'From (Free k) AbHom -> Slice 'From (Free k) AbHom)
-> Liftable 'Injective (Free k) AbHom
forall (i :: * -> *) x.
Sliced i x =>
x
-> (Slice 'From i x -> Slice 'From i x) -> Liftable 'Injective i x
LiftableInjective AbHom
w' Slice 'From (Free k) AbHom -> Slice 'From (Free k) AbHom
w'SlcFromLft where
        w'SlcFromLft :: Slice 'From (Free k) AbHom -> Slice 'From (Free k) AbHom
w'SlcFromLft Slice 'From (Free k) AbHom
f = Free k AbHom -> AbHom -> Slice 'From (Free k) AbHom
forall (i :: * -> *) x. i x -> x -> Slice 'From i x
SliceFrom Free k AbHom
nk (AbHom
qAbHom -> AbHom -> AbHom
forall c. Multiplicative c => c -> c -> c
*AbHom
f') where
          SliceFrom Free k AbHom
nk AbHom
f' = Liftable 'Injective (Free k) AbHom
-> Slice (ToSite 'Injective) (Free k) AbHom
-> Slice (ToSite 'Injective) (Free k) AbHom
forall (p :: Perspective) (i :: * -> *) x.
Liftable p i x -> Slice (ToSite p) i x -> Slice (ToSite p) i x
lift (LiftableFree 'Injective AbHom
-> Any k -> Liftable 'Injective (Free k) AbHom
forall (p :: Perspective) x (k :: N').
LiftableFree p x -> Any k -> Liftable p (Free k) x
liftFree (CokernelConic ConeLiftable (SliceDiagram (Free k')) N1 AbHom
-> LiftableFree 'Injective AbHom
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
ConeLiftable s p d t n m x -> LiftableFree p x
cnLiftable (CokernelConic ConeLiftable (SliceDiagram (Free k')) N1 AbHom
 -> LiftableFree 'Injective AbHom)
-> CokernelConic ConeLiftable (SliceDiagram (Free k')) N1 AbHom
-> LiftableFree 'Injective AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ LimesG
  ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k'))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
-> CokernelConic ConeLiftable (SliceDiagram (Free k')) N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> c s p d t n m x
universalCone LimesG
  ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k'))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
cCokerLft) Any k
k) Slice (ToSite 'Injective) (Free k) AbHom
Slice 'From (Free k) AbHom
f

    ----------------------------------------

    -- universal property w' -

    w'Univ :: Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
w'Univ (ConeCokernel Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
_ AbHom
x) = LimesG
  ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k'))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
-> Cone
     Dst
     'Injective
     (SliceDiagram (Free k'))
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
-> AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> Cone s p d t n m x -> x
universalFactor LimesG
  ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k'))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
cCokerLft Cone
  Dst
  'Injective
  (SliceDiagram (Free k'))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
cCone where
      cCone :: Cone
  Dst
  'Injective
  (SliceDiagram (Free k'))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
cCone = SliceDiagram (Free k') ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
-> Cone
     Dst
     'Injective
     (SliceDiagram (Free k'))
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'RightToLeft) N2 m a
-> a -> Cone Dst 'Injective d ('Parallel 'RightToLeft) N2 m a
ConeCokernel (Cone
  Dst
  'Injective
  (SliceDiagram (Free k'))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
-> SliceDiagram (Free k') ('Parallel 'RightToLeft) N2 N1 AbHom
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') a.
Cone s p d t n m a -> d t n m a
diagrammaticObject (Cone
   Dst
   'Injective
   (SliceDiagram (Free k'))
   ('Parallel 'RightToLeft)
   N2
   N1
   AbHom
 -> SliceDiagram (Free k') ('Parallel 'RightToLeft) N2 N1 AbHom)
-> Cone
     Dst
     'Injective
     (SliceDiagram (Free k'))
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
-> SliceDiagram (Free k') ('Parallel 'RightToLeft) N2 N1 AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ CokernelConic ConeLiftable (SliceDiagram (Free k')) N1 AbHom
-> Cone
     Dst
     'Injective
     (SliceDiagram (Free k'))
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
ConeLiftable s p d t n m x -> Cone s p d t n m x
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
Conic c =>
c s p d t n m x -> Cone s p d t n m x
cone (CokernelConic ConeLiftable (SliceDiagram (Free k')) N1 AbHom
 -> Cone
      Dst
      'Injective
      (SliceDiagram (Free k'))
      ('Parallel 'RightToLeft)
      N2
      N1
      AbHom)
-> CokernelConic ConeLiftable (SliceDiagram (Free k')) N1 AbHom
-> Cone
     Dst
     'Injective
     (SliceDiagram (Free k'))
     ('Parallel 'RightToLeft)
     N2
     N1
     AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ LimesG
  ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k'))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
-> CokernelConic ConeLiftable (SliceDiagram (Free k')) N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> c s p d t n m x
universalCone LimesG
  ConeLiftable
  Dst
  'Injective
  (SliceDiagram (Free k'))
  ('Parallel 'RightToLeft)
  N2
  N1
  AbHom
cCokerLft) (AbHom
xAbHom -> AbHom -> AbHom
forall c. Multiplicative c => c -> c -> c
*AbHom
q)


--------------------------------------------------------------------------------

-- abhCokersLftFree -


-- | liftable cokernels.

abhCokernelsLftFreeG :: CokernelsG ConeLiftable Diagram N1 AbHom
abhCokernelsLftFreeG :: CokernelsG ConeLiftable Diagram N1 AbHom
abhCokernelsLftFreeG = (Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
 -> CokernelG ConeLiftable Diagram N1 AbHom)
-> CokernelsG ConeLiftable Diagram N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
(d t n m x -> LimesG c s p d t n m x) -> LimitsG c s p d t n m x
LimitsG Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> CokernelG ConeLiftable Diagram N1 AbHom
abhCokernelLftFreeG

--------------------------------------------------------------------------------

-- prpAbhCokernelsLftFreeG -


-- | validity of 'abhCokernelsLftFreeG'.

prpAbhCokernelsLftFreeG :: Statement
prpAbhCokernelsLftFreeG :: Statement
prpAbhCokernelsLftFreeG = String -> Label
Prp String
"AbhCokernelsLftFreeG" Label -> Statement -> Statement
:<=>: CokernelsG ConeLiftable Diagram N1 AbHom -> Statement
forall a. Validable a => a -> Statement
valid CokernelsG ConeLiftable Diagram N1 AbHom
abhCokernelsLftFreeG

--------------------------------------------------------------------------------

-- abhCokernel -


-- | cokernel.

abhCokernel :: CokernelDiagram N1 AbHom -> Cokernel N1 AbHom
abhCokernel :: Diagram ('Parallel 'RightToLeft) N2 N1 AbHom -> Cokernel N1 AbHom
abhCokernel = CokernelsG ConeLiftable Diagram N1 AbHom
-> Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> Cokernel N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
Conic c =>
LimitsG c s p d t n m x -> d t n m x -> LimesG Cone s p d t n m x
limesCone CokernelsG ConeLiftable Diagram N1 AbHom
abhCokernelsLftFreeG

--------------------------------------------------------------------------------

-- abhCokernels -


-- | cokernels.

abhCokernels :: Cokernels N1 AbHom
abhCokernels :: Cokernels N1 AbHom
abhCokernels = CokernelsG ConeLiftable Diagram N1 AbHom -> Cokernels N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
Conic c =>
LimitsG c s p d t n m x -> LimitsG Cone s p d t n m x
limitsCone CokernelsG ConeLiftable Diagram N1 AbHom
abhCokernelsLftFreeG

--------------------------------------------------------------------------------

-- isoSmithNormal -


-- | isomorphism to its smith normal group.

--

-- __Properties__ Let @g@ be in 'AbGroup', then holds:

--

-- (1) @'start' ('isoSmithNormal' g) '==' g@.

--

-- (2) @'end' ('isoSmithNormal' g)@ is smith normal (see definition t'AbGroup').

isoSmithNormal :: AbGroup -> Inv AbHom
isoSmithNormal :: AbGroup -> Inv AbHom
isoSmithNormal AbGroup
g = AbHom -> AbHom -> Inv AbHom
forall c. c -> c -> Inv c
Inv AbHom
h AbHom
h' where
  c :: Cokernel N1 AbHom
c  = Cokernels N1 AbHom
-> Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> Cokernel N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimitsG c s p d t n m x -> d t n m x -> LimesG c s p d t n m x
limes Cokernels N1 AbHom
abhCokernels (AbHom -> Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall x. Oriented x => x -> CokernelDiagram N1 x
cokernelDiagram (Root AbHom -> AbHom
forall a. Additive a => Root a -> a
zero (Point AbGroup -> AbGroup
forall c. Multiplicative c => Point c -> c
one ()AbGroup -> AbGroup -> Orientation AbGroup
forall p. p -> p -> Orientation p
:>AbGroup
g)))
  h :: AbHom
h  = Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       (d :: DiagramType -> N' -> N' -> * -> *) (n :: N') x.
Conic c =>
CokernelConic c d n x -> x
cokernelFactor (Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
 -> AbHom)
-> Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Cokernel N1 AbHom
-> Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> c s p d t n m x
universalCone Cokernel N1 AbHom
c
  h' :: AbHom
h' = Cokernel N1 AbHom
-> Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> Cone s p d t n m x -> x
universalFactor Cokernel N1 AbHom
c (Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> AbHom
-> Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall a (d :: DiagramType -> N' -> N' -> * -> *) (m :: N').
Distributive a =>
d ('Parallel 'RightToLeft) N2 m a
-> a -> Cone Dst 'Injective d ('Parallel 'RightToLeft) N2 m a
ConeCokernel (Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') a.
Cone s p d t n m a -> d t n m a
diagrammaticObject (Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
 -> Diagram ('Parallel 'RightToLeft) N2 N1 AbHom)
-> Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall s (p :: Perspective)
       (d :: DiagramType -> N' -> N' -> * -> *) (t :: DiagramType)
       (n :: N') (m :: N') x.
Cone s p d t n m x -> Cone s p d t n m x
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
Conic c =>
c s p d t n m x -> Cone s p d t n m x
cone (Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
 -> Cone
      Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom)
-> Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
-> Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall (h :: * -> * -> *) x y. Applicative h => h x y -> x -> y
$ Cokernel N1 AbHom
-> Cone Dst 'Injective Diagram ('Parallel 'RightToLeft) N2 N1 AbHom
forall (c :: *
             -> Perspective
             -> (DiagramType -> N' -> N' -> * -> *)
             -> DiagramType
             -> N'
             -> N'
             -> *
             -> *)
       s (p :: Perspective) (d :: DiagramType -> N' -> N' -> * -> *)
       (t :: DiagramType) (n :: N') (m :: N') x.
LimesG c s p d t n m x -> c s p d t n m x
universalCone Cokernel N1 AbHom
c) (Point AbHom -> AbHom
forall c. Multiplicative c => Point c -> c
one Point AbHom
AbGroup
g))