Imports
/- Copyright (c) 2025 Joseph Tooby-Smith. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Joseph Tooby-Smith -/ module public import Physlib.SpaceAndTime.Space.Module

Slices of space

i. Overview

In this module we will define the equivalence between Space d.succ and ℝ × Space d which extracts the ith coordinate on Space d.succ.

ii. Key results

    slice : The continuous linear equivalence between Space d.succ and ℝ × Space d extracting the ith coordinate.

iii. Table of contents

    A. Slicing spaces

      A.1. Basic applications of the slicing map

      A.2. Slice as a measurable embedding

      A.3. The norm of the slice map

      A.4. Derivative of the slice map

      A.5. Basis in terms of slices

iv. References

    https://leanprover.zulipchat.com/#narrow/channel/479953-Physlib/topic/API.20around.20.60Space.20.28d1.20.2B.20d2.29.60.20to.20.60Space.20d1.20x.20Space.20d2.60/with/556754634

@[expose] public section

A. Slicing spaces

The linear equivalence between Space d.succ and ℝ × Space d extracting the ith coordinate.

def slice {d} (i : Fin d.succ) : Space d.succ ≃L[] × Space d where toFun x := x i, fun j => x (Fin.succAbove i j) invFun p := fun j => Fin.insertNthEquiv (fun _ => ) i (p.fst, p.snd) j map_add' x y := 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succx:Space d.succy:Space d.succ((x + y).val i, { val := fun j => (x + y).val (i.succAbove j) }) = (x.val i, { val := fun j => x.val (i.succAbove j) }) + (y.val i, { val := fun j => y.val (i.succAbove j) }) 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succx:Space d.succy:Space d.succ(x + y).val i = x.val i + y.val i { val := fun j => (x + y).val (i.succAbove j) } = { val := fun j => x.val (i.succAbove j) } + { val := fun j => y.val (i.succAbove j) } 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succx:Space d.succy:Space d.succ(x + y).val i = x.val i + y.val i𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succx:Space d.succy:Space d.succ{ val := fun j => (x + y).val (i.succAbove j) } = { val := fun j => x.val (i.succAbove j) } + { val := fun j => y.val (i.succAbove j) } 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succx:Space d.succy:Space d.succ(x + y).val i = x.val i + y.val i All goals completed! 🐙 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succx:Space d.succy:Space d.succ{ val := fun j => (x + y).val (i.succAbove j) } = { val := fun j => x.val (i.succAbove j) } + { val := fun j => y.val (i.succAbove j) } 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succx:Space d.succy:Space d.succj:Fin d{ val := fun j => (x + y).val (i.succAbove j) }.val j = ({ val := fun j => x.val (i.succAbove j) } + { val := fun j => y.val (i.succAbove j) }).val j All goals completed! 🐙 map_smul' c x := 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succc:x:Space d.succ((c x).val i, { val := fun j => (c x).val (i.succAbove j) }) = (RingHom.id ) c (x.val i, { val := fun j => x.val (i.succAbove j) }) 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succc:x:Space d.succ(c x).val i = c * x.val i { val := fun j => (c x).val (i.succAbove j) } = c { val := fun j => x.val (i.succAbove j) } 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succc:x:Space d.succ(c x).val i = c * x.val i𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succc:x:Space d.succ{ val := fun j => (c x).val (i.succAbove j) } = c { val := fun j => x.val (i.succAbove j) } 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succc:x:Space d.succ(c x).val i = c * x.val i All goals completed! 🐙 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succc:x:Space d.succ{ val := fun j => (c x).val (i.succAbove j) } = c { val := fun j => x.val (i.succAbove j) } 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succc:x:Space d.succj:Fin d{ val := fun j => (c x).val (i.succAbove j) }.val j = (c { val := fun j => x.val (i.succAbove j) }).val j All goals completed! 🐙 left_inv p := 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succp:Space d.succ(fun p => { val := fun j => (Fin.insertNthEquiv (fun x => ) i) (p.1, p.2.val) j }) ((fun x => (x.val i, { val := fun j => x.val (i.succAbove j) })) p) = p 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succp:Space d.succ{ val := fun j => i.insertNth (p.val i) (fun j => p.val (i.succAbove j)) j } = p 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succp:Space d.succj:Fin (d + 1){ val := fun j => i.insertNth (p.val i) (fun j => p.val (i.succAbove j)) j }.val j = p.val j 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:p:Space d.succj:Fin (d + 1){ val := fun j_1 => j.insertNth (p.val j) (fun j_2 => p.val (j.succAbove j_2)) j_1 }.val j = p.val j𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succp:Space d.succk:Fin d{ val := fun j => i.insertNth (p.val i) (fun j => p.val (i.succAbove j)) j }.val (i.succAbove k) = p.val (i.succAbove k) 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:p:Space d.succj:Fin (d + 1){ val := fun j_1 => j.insertNth (p.val j) (fun j_2 => p.val (j.succAbove j_2)) j_1 }.val j = p.val j All goals completed! 🐙 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succp:Space d.succk:Fin d{ val := fun j => i.insertNth (p.val i) (fun j => p.val (i.succAbove j)) j }.val (i.succAbove k) = p.val (i.succAbove k) All goals completed! 🐙 right_inv p := 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succp: × Space d(fun x => (x.val i, { val := fun j => x.val (i.succAbove j) })) ((fun p => { val := fun j => (Fin.insertNthEquiv (fun x => ) i) (p.1, p.2.val) j }) p) = p match p with 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succp: × Space dp1:p2:Space d(fun x => (x.val i, { val := fun j => x.val (i.succAbove j) })) ((fun p => { val := fun j => (Fin.insertNthEquiv (fun x => ) i) (p.1, p.2.val) j }) (p1, p2)) = (p1, p2) All goals completed! 🐙 continuous_toFun := 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succContinuous fun x => (x.val i, { val := fun j => x.val (i.succAbove j) }) All goals completed! 🐙 continuous_invFun := 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succContinuous fun p => { val := fun j => (Fin.insertNthEquiv (fun x => ) i) (p.1, p.2.val) j } 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succContinuous mk𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succContinuous fun p j => (Fin.insertNthEquiv (fun x => ) i) (p.1, p.2.val) j 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succContinuous mk All goals completed! 🐙 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succ (i_1 : Fin d.succ), Continuous fun a => (Fin.insertNthEquiv (fun x => ) i) (a.1, a.2.val) i_1 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succj:Fin d.succContinuous fun a => (Fin.insertNthEquiv (fun x => ) i) (a.1, a.2.val) j 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:j:Fin d.succContinuous fun a => (Fin.insertNthEquiv (fun x => ) j) (a.1, a.2.val) j𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succk:Fin dContinuous fun a => (Fin.insertNthEquiv (fun x => ) i) (a.1, a.2.val) (i.succAbove k) 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:j:Fin d.succContinuous fun a => (Fin.insertNthEquiv (fun x => ) j) (a.1, a.2.val) j 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:j:Fin d.succContinuous fun a => a.1 All goals completed! 🐙 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succk:Fin dContinuous fun a => (Fin.insertNthEquiv (fun x => ) i) (a.1, a.2.val) (i.succAbove k) 𝕜:TypeE:TypeF:TypeF':Typeinst✝⁵:RCLike 𝕜inst✝⁴:NormedAddCommGroup Einst✝³:NormedAddCommGroup Finst✝²:NormedAddCommGroup F'inst✝¹:NormedSpace Einst✝:NormedSpace Fd:i:Fin d.succk:Fin dContinuous fun a => a.2.val k All goals completed! 🐙

A.1. Basic applications of the slicing map

lemma slice_symm_apply {d : } (i : Fin d.succ) (r : ) (x : Space d) : (slice i).symm (r, x) = fun j => Fin.insertNthEquiv (fun _ => ) i (r, x) j := d:i:Fin d.succr:x:Space d((slice i).symm (r, x)).val = fun j => (Fin.insertNthEquiv (fun x => ) i) (r, x.val) j All goals completed! 🐙@[simp] lemma slice_symm_apply_self {d : } (i : Fin d.succ) (r : ) (x : Space d) : (slice i).symm (r, x) i = r := d:i:Fin d.succr:x:Space d((slice i).symm (r, x)).val i = r All goals completed! 🐙@[simp] lemma slice_symm_apply_succAbove {d : } (i : Fin d.succ) (r : ) (x : Space d) (j : Fin d) : (slice i).symm (r, x) (Fin.succAbove i j) = x j := d:i:Fin d.succr:x:Space dj:Fin d((slice i).symm (r, x)).val (i.succAbove j) = x.val j All goals completed! 🐙

A.2. Slice as a measurable embedding

lemma slice_symm_measurableEmbedding {d : } (i : Fin d.succ) : MeasurableEmbedding (slice i).symm := d:i:Fin d.succMeasurableEmbedding (slice i).symm d:i:Fin d.succMeasurableEmbedding fun p => (equivPi d.succ).symm ((MeasurableEquiv.piFinSuccAbove (fun x => ) i).symm (p.1, p.2.val)) d:i:Fin d.succMeasurableEmbedding (equivPi d.succ).symmd:i:Fin d.succMeasurableEmbedding fun p => (MeasurableEquiv.piFinSuccAbove (fun x => ) i).symm (p.1, p.2.val) d:i:Fin d.succMeasurableEmbedding (equivPi d.succ).symm d:i:Fin d.succMeasurable (equivPi d.succ).symmd:i:Fin d.succFunction.Injective (equivPi d.succ).symm d:i:Fin d.succMeasurable (equivPi d.succ).symm All goals completed! 🐙 d:i:Fin d.succFunction.Injective (equivPi d.succ).symm All goals completed! 🐙 d:i:Fin d.succMeasurableEmbedding (MeasurableEquiv.piFinSuccAbove (fun x => ) i).symmd:i:Fin d.succMeasurableEmbedding fun p => (p.1, p.2.val) d:i:Fin d.succMeasurableEmbedding (MeasurableEquiv.piFinSuccAbove (fun x => ) i).symm All goals completed! 🐙 d:i:Fin d.succMeasurableEmbedding fun p => (p.1, p.2.val) d:i:Fin d.succMeasurable fun p => (p.1, p.2.val)d:i:Fin d.succFunction.Injective fun p => (p.1, p.2.val) d:i:Fin d.succMeasurable fun p => (p.1, p.2.val) All goals completed! 🐙 d:i:Fin d.succFunction.Injective fun p => (p.1, p.2.val) d:i:Fin d.succa: × Space db: × Space dh:(fun p => (p.1, p.2.val)) a = (fun p => (p.1, p.2.val)) ba = b match a, b with d:i:Fin d.succa: × Space db: × Space dr1:x1:Space dr2:x2:Space dh:(fun p => (p.1, p.2.val)) (r1, x1) = (fun p => (p.1, p.2.val)) (r2, x2)(r1, x1) = (r2, x2) All goals completed! 🐙

A.3. The norm of the slice map

d:i:Fin d.succr:x:Space d((slice i).symm (r, x)).val i ^ 2 + i_1, ((slice i).symm (r, x)).val (i.succAbove i_1) ^ 2 = r ^ 2 + (∑ i, x.val i ^ 2) ^ 2 d:i:Fin d.succr:x:Space d x_1, x.val x_1 ^ 2 = (∑ x_1, x.val x_1 ^ 2) ^ 2 d:i:Fin d.succr:x:Space d0 x_1, x.val x_1 ^ 2 All goals completed! 🐙d:i:Fin d.succr:x:Space d|r| (r ^ 2 + x ^ 2) refine (le_sqrt (d:i:Fin d.succr:x:Space d0 |r| All goals completed! 🐙) (d:i:Fin d.succr:x:Space d0 r ^ 2 + x ^ 2 All goals completed! 🐙)).mpr ?_ All goals completed! 🐙d:i:Fin d.succr:x:Space dx (r ^ 2 + x ^ 2) refine (le_sqrt (d:i:Fin d.succr:x:Space d0 x All goals completed! 🐙) (d:i:Fin d.succr:x:Space d0 r ^ 2 + x ^ 2 All goals completed! 🐙)).mpr ?_ d:i:Fin d.succr:x:Space d0 r ^ 2 All goals completed! 🐙

A.4. Derivative of the slice map

All goals completed! 🐙d:i:Fin d.succx:Space dr1:r2:(fderiv (slice i).symm (r1, x) ∘SL (fderiv (fun r => r) r1).prod (fderiv (fun r => x) r1)) r2 = (slice i).symm (r2, 0)d:i:Fin d.succx:Space dr1:r2:DifferentiableAt (fun r => x) r1d:i:Fin d.succx:Space dr1:r2:DifferentiableAt (slice i).symm (r1, x)d:i:Fin d.succx:Space dr1:r2:DifferentiableAt (fun r => (r, x)) r1 d:i:Fin d.succx:Space dr1:r2:DifferentiableAt (fun r => x) r1d:i:Fin d.succx:Space dr1:r2:DifferentiableAt (slice i).symm (r1, x)d:i:Fin d.succx:Space dr1:r2:DifferentiableAt (fun r => (r, x)) r1 repeat' All goals completed! 🐙d:i:Fin d.succr:x1:Space dx2:Space d(fderiv (slice i).symm (r, x1) ∘SL (fderiv (fun x => r) x1).prod (fderiv (fun x => x) x1)) x2 = (slice i).symm (0, x2)d:i:Fin d.succr:x1:Space dx2:Space dDifferentiableAt (fun x => x) x1d:i:Fin d.succr:x1:Space dx2:Space dDifferentiableAt (slice i).symm (r, x1)d:i:Fin d.succr:x1:Space dx2:Space dDifferentiableAt (Prod.mk r) x1 d:i:Fin d.succr:x1:Space dx2:Space dDifferentiableAt (fun x => x) x1d:i:Fin d.succr:x1:Space dx2:Space dDifferentiableAt (slice i).symm (r, x1)d:i:Fin d.succr:x1:Space dx2:Space dDifferentiableAt (Prod.mk r) x1 repeat' All goals completed! 🐙F:Typeinst✝¹:NormedAddCommGroup Finst✝:NormedSpace Fd:i:Fin d.succr:x1:Space dx2:Space df:Space d.succ Fhf:DifferentiableAt f ((slice i).symm (r, x1))(fderiv f ((slice i).symm (r, x1)) ∘SL fderiv (fun x => (slice i).symm (r, x)) x1) x2 = (fderiv f ((slice i).symm (r, x1))) ((slice i).symm (0, x2))F:Typeinst✝¹:NormedAddCommGroup Finst✝:NormedSpace Fd:i:Fin d.succr:x1:Space dx2:Space df:Space d.succ Fhf:DifferentiableAt f ((slice i).symm (r, x1))DifferentiableAt f ((slice i).symm (r, x1)) F:Typeinst✝¹:NormedAddCommGroup Finst✝:NormedSpace Fd:i:Fin d.succr:x1:Space dx2:Space df:Space d.succ Fhf:DifferentiableAt f ((slice i).symm (r, x1))DifferentiableAt f ((slice i).symm (r, x1)) All goals completed! 🐙F:Typeinst✝¹:NormedAddCommGroup Finst✝:NormedSpace Fd:i:Fin d.succr1:r2:x:Space df:Space d.succ Fhf:DifferentiableAt f ((slice i).symm (r1, x))(fderiv f ((slice i).symm (r1, x)) ∘SL fderiv (fun r => (slice i).symm (r, x)) r1) r2 = (fderiv f ((slice i).symm (r1, x))) ((slice i).symm (r2, 0))F:Typeinst✝¹:NormedAddCommGroup Finst✝:NormedSpace Fd:i:Fin d.succr1:r2:x:Space df:Space d.succ Fhf:DifferentiableAt f ((slice i).symm (r1, x))DifferentiableAt f ((slice i).symm (r1, x)) F:Typeinst✝¹:NormedAddCommGroup Finst✝:NormedSpace Fd:i:Fin d.succr1:r2:x:Space df:Space d.succ Fhf:DifferentiableAt f ((slice i).symm (r1, x))DifferentiableAt f ((slice i).symm (r1, x)) All goals completed! 🐙

A.5. Basis in terms of slices

lemma basis_self_eq_slice {d : } (i : Fin d.succ) : basis i = (slice i).symm (1, 0) := d:i:Fin d.succbasis i = (slice i).symm (1, 0) d:i:Fin d.succj:Fin d.succ(basis i).val j = ((slice i).symm (1, 0)).val j d:j:Fin d.succ(basis j).val j = ((slice j).symm (1, 0)).val jd:i:Fin d.succk:Fin d(basis i).val (i.succAbove k) = ((slice i).symm (1, 0)).val (i.succAbove k) d:j:Fin d.succ(basis j).val j = ((slice j).symm (1, 0)).val j All goals completed! 🐙 d:i:Fin d.succk:Fin d(basis i).val (i.succAbove k) = ((slice i).symm (1, 0)).val (i.succAbove k) All goals completed! 🐙lemma basis_succAbove_eq_slice {d : } (i : Fin d.succ) (j : Fin d) : basis (Fin.succAbove i j) = (slice i).symm (0, basis j) := d:i:Fin d.succj:Fin dbasis (i.succAbove j) = (slice i).symm (0, basis j) d:i:Fin d.succj:Fin dk:Fin (d + 1)(basis (i.succAbove j)).val k = ((slice i).symm (0, basis j)).val k d:j:Fin dk:Fin (d + 1)(basis (k.succAbove j)).val k = ((slice k).symm (0, basis j)).val kd:i:Fin d.succj:Fin dl:Fin d(basis (i.succAbove j)).val (i.succAbove l) = ((slice i).symm (0, basis j)).val (i.succAbove l) d:j:Fin dk:Fin (d + 1)(basis (k.succAbove j)).val k = ((slice k).symm (0, basis j)).val k All goals completed! 🐙 d:i:Fin d.succj:Fin dl:Fin d(basis (i.succAbove j)).val (i.succAbove l) = ((slice i).symm (0, basis j)).val (i.succAbove l) All goals completed! 🐙