Zulip Chat Archive

Stream: Is there code for X?

Topic: fin n combinatorics


Kevin Buzzard (Dec 21 2021 at 01:46):

I find fin n combinatorics much easier if I do maps from fin i to fin j assuming h : j = i + 1 rather than going to fin (i+1) directly. Here is a definition and some lemmas about a function called "delta^p" in Riehl-Verity. I can use it to define group cohomology. Do we have it already in mathlib? If not, where does it go?

import data.fin -- yes all 1800 lines of it
import tactic

namespace fin

/-- The function dsending enoted `δᵖ` by Riehl-Verity, sending`t` to `t` if `t<p` and
  `t.succ` otherwise.`-/
def delta {i j : } (hj : j = i + 1) (p : ) (t : fin i) : fin j :=
-- fin.succ_above expects p : fin i.succ for some reason
if (t : ) < p then t else (t : ).succ, begin
  subst hj,
  cases t with t ht,
  split_ifs,
  { exact ht.trans (nat.lt_succ_self _) },
  { exact nat.succ_lt_succ ht },
end

lemma delta_eval {i j : } (hj : j = i + 1) (p : ) (t : fin i) :
  (delta hj p t : ) = if (t : ) < p then t else (t : ).succ := rfl

theorem delta_comm_apply  {i j k : } (hj : j = i.succ) (hk : k = j.succ) {p q : }
  (hpq : p  q) (t : fin i) : delta hk q.succ (delta hj p t) = delta hk p (delta hj q t) :=
begin
  subst hk,
  subst hj,
  ext,
  cases t with t ht,
  simp only [delta_eval],
  dsimp,
  split_ifs;
  try {rw nat.succ_eq_add_one at *};
  try {push_neg at *};
  try {rw nat.succ_eq_add_one at *};
  try {linarith},
end

theorem delta_comm_apply.symm {i j k : } (hj : j = i.succ) (hk : k = j.succ) {p q_succ : }
  (hpq : q_succ  p) (t : fin i) :
  delta hk p.succ (delta hj q_succ t) = delta hk q_succ (delta hj p t) :=
delta_comm_apply hj hk hpq t

end fin

Adam Topaz (Dec 21 2021 at 02:01):

We have the simplicial identities in src#algebraic_topology.simplex_category

Adam Topaz (Dec 21 2021 at 02:04):

Ok I don't know how to use the file linkifier

Adam Topaz (Dec 21 2021 at 02:04):

Anyway, your first def looks like docs#fin.succ_above maybe?

Adam Topaz (Dec 21 2021 at 02:05):

Except that uses fin (n+1) which seems like you don't like.

Reid Barton (Dec 21 2021 at 02:38):

so, it's that combined with docs#fin.cast

Kevin Buzzard (Dec 21 2021 at 09:24):

The simplex category work is not general enough because it ignores the case n=0!

Kevin Buzzard (Dec 21 2021 at 09:26):

Is this evidence I'm doing something wrong? The abstract delta-ism and sigma-ism works fine for it

Johan Commelin (Dec 21 2021 at 09:37):

Are you doing augmented simplicial objects?

Kevin Buzzard (Dec 21 2021 at 10:15):

I'm just copying the definition of group cohomology from Cassels-Froehlich

Kevin Buzzard (Dec 21 2021 at 10:17):

It's on the group-cohomology branch. Right now i am not at all sure if I want to use the simplex category at all -- why obfuscate?

Reid Barton (Dec 21 2021 at 15:01):

Kevin Buzzard said:

Is this evidence I'm doing something wrong? The abstract delta-ism and sigma-ism works fine for it

Yes I think so

Reid Barton (Dec 21 2021 at 15:06):

Well actually no because as far as I can see you don't actually use the case n=0

Reid Barton (Dec 21 2021 at 15:07):

def std_resn_complex : chain_complex (Module (group_ring G))  :=
chain_complex.of (λ n, Module.of (group_ring G) (group_ring (fin (n + 1)  G)))
(λ n, d G rfl) (λ n, by ext1; exact d_squared _ _ _ _)

Kevin Buzzard (Dec 21 2021 at 15:26):

Somehow I thought it would be useful. The concrete model for group cohomology H^n is cocycles over coboundaries. When n=0 you want it to be 0-cocycles over 0-coboundaries, but to have 0-coboundaries you need 1-1-cochains

Reid Barton (Dec 21 2021 at 15:35):

Your chain complex is indexed by though right? so you don't have (-1)-anything

Adam Topaz (Dec 21 2021 at 15:35):

@Kevin Buzzard you can use a Nat-indexed complex,

Adam Topaz (Dec 21 2021 at 15:39):

Besides, if you define something like this at 1-1, you will probably get annoyed later on if and when you go to work with Tate cohomology (which can be defined using a specific Z\mathbb{Z}-indexed complex)


Last updated: Dec 20 2023 at 11:08 UTC