[GOAL]
h : IsField ℤ
a : ℤ
⊢ 2 * a = 1 → 1 = a + a
[PROOFSTEP]
rw [← two_mul]
[GOAL]
h : IsField ℤ
a : ℤ
⊢ 2 * a = 1 → 1 = 2 * a
[PROOFSTEP]
exact Eq.symm
[GOAL]
K✝ : Type u_1
L : Type u_2
inst✝² : Field K✝
inst✝¹ : Field L
nf : NumberField K✝
K : Type u_3
inst✝ : Field K
x : K
hx : x ∈ 𝓞 K
⊢ IsIntegral ℤ { val := x, property := hx }
[PROOFSTEP]
obtain ⟨P, hPm, hP⟩ := hx
[GOAL]
case intro.intro
K✝ : Type u_1
L : Type u_2
inst✝² : Field K✝
inst✝¹ : Field L
nf : NumberField K✝
K : Type u_3
inst✝ : Field K
x : K
P : Polynomial ℤ
hPm : Polynomial.Monic P
hP : Polynomial.eval₂ (algebraMap ℤ K) x P = 0
⊢ IsIntegral ℤ { val := x, property := (_ : ∃ p, Polynomial.Monic p ∧ Polynomial.eval₂ (algebraMap ℤ K) x p = 0) }
[PROOFSTEP]
refine' ⟨P, hPm, _⟩
[GOAL]
case intro.intro
K✝ : Type u_1
L : Type u_2
inst✝² : Field K✝
inst✝¹ : Field L
nf : NumberField K✝
K : Type u_3
inst✝ : Field K
x : K
P : Polynomial ℤ
hPm : Polynomial.Monic P
hP : Polynomial.eval₂ (algebraMap ℤ K) x P = 0
⊢ Polynomial.eval₂ (algebraMap ℤ { x // x ∈ 𝓞 K })
      { val := x, property := (_ : ∃ p, Polynomial.Monic p ∧ Polynomial.eval₂ (algebraMap ℤ K) x p = 0) } P =
    0
[PROOFSTEP]
rw [← Polynomial.aeval_def, ← Subalgebra.coe_eq_zero, Polynomial.aeval_subalgebra_coe, Polynomial.aeval_def,
  Subtype.coe_mk, hP]
[GOAL]
K : Type u_1
L : Type u_2
inst✝² : Field K
inst✝¹ : Field L
nf : NumberField K
inst✝ : Algebra K L
⊢ ↑((fun k => { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) }) 1) = ↑1
[PROOFSTEP]
simp only [Subtype.coe_mk, Subalgebra.coe_one, map_one]
[GOAL]
K : Type u_1
L : Type u_2
inst✝² : Field K
inst✝¹ : Field L
nf : NumberField K
inst✝ : Algebra K L
x y : { x // x ∈ 𝓞 K }
⊢ ↑(OneHom.toFun
        { toFun := fun k => { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) },
          map_one' :=
            (_ :
              (fun k => { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) }) 1 = 1) }
        (x * y)) =
    ↑(OneHom.toFun
          { toFun := fun k => { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) },
            map_one' :=
              (_ :
                (fun k => { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) }) 1 =
                  1) }
          x *
        OneHom.toFun
          { toFun := fun k => { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) },
            map_one' :=
              (_ :
                (fun k => { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) }) 1 =
                  1) }
          y)
[PROOFSTEP]
simp only [Subalgebra.coe_mul, map_mul, Subtype.coe_mk]
[GOAL]
K : Type u_1
L : Type u_2
inst✝² : Field K
inst✝¹ : Field L
nf : NumberField K
inst✝ : Algebra K L
⊢ ↑(OneHom.toFun
        (↑{
            toOneHom :=
              {
                toFun := fun k =>
                  { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) },
                map_one' :=
                  (_ :
                    (fun k => { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) })
                        1 =
                      1) },
            map_mul' :=
              (_ :
                ∀ (x y : { x // x ∈ 𝓞 K }),
                  OneHom.toFun
                      {
                        toFun := fun k =>
                          { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) },
                        map_one' :=
                          (_ :
                            (fun k =>
                                  { val := ↑(algebraMap K L) ↑k,
                                    property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) })
                                1 =
                              1) }
                      (x * y) =
                    OneHom.toFun
                        {
                          toFun := fun k =>
                            { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) },
                          map_one' :=
                            (_ :
                              (fun k =>
                                    { val := ↑(algebraMap K L) ↑k,
                                      property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) })
                                  1 =
                                1) }
                        x *
                      OneHom.toFun
                        {
                          toFun := fun k =>
                            { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) },
                          map_one' :=
                            (_ :
                              (fun k =>
                                    { val := ↑(algebraMap K L) ↑k,
                                      property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) })
                                  1 =
                                1) }
                        y) })
        0) =
    ↑0
[PROOFSTEP]
simp only [Subtype.coe_mk, Subalgebra.coe_zero, map_zero]
[GOAL]
K : Type u_1
L : Type u_2
inst✝² : Field K
inst✝¹ : Field L
nf : NumberField K
inst✝ : Algebra K L
x y : { x // x ∈ 𝓞 K }
⊢ ↑(OneHom.toFun
        (↑{
            toOneHom :=
              {
                toFun := fun k =>
                  { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) },
                map_one' :=
                  (_ :
                    (fun k => { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) })
                        1 =
                      1) },
            map_mul' :=
              (_ :
                ∀ (x y : { x // x ∈ 𝓞 K }),
                  OneHom.toFun
                      {
                        toFun := fun k =>
                          { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) },
                        map_one' :=
                          (_ :
                            (fun k =>
                                  { val := ↑(algebraMap K L) ↑k,
                                    property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) })
                                1 =
                              1) }
                      (x * y) =
                    OneHom.toFun
                        {
                          toFun := fun k =>
                            { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) },
                          map_one' :=
                            (_ :
                              (fun k =>
                                    { val := ↑(algebraMap K L) ↑k,
                                      property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) })
                                  1 =
                                1) }
                        x *
                      OneHom.toFun
                        {
                          toFun := fun k =>
                            { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) },
                          map_one' :=
                            (_ :
                              (fun k =>
                                    { val := ↑(algebraMap K L) ↑k,
                                      property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) })
                                  1 =
                                1) }
                        y) })
        (x + y)) =
    ↑(OneHom.toFun
          (↑{
              toOneHom :=
                {
                  toFun := fun k =>
                    { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) },
                  map_one' :=
                    (_ :
                      (fun k => { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) })
                          1 =
                        1) },
              map_mul' :=
                (_ :
                  ∀ (x y : { x // x ∈ 𝓞 K }),
                    OneHom.toFun
                        {
                          toFun := fun k =>
                            { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) },
                          map_one' :=
                            (_ :
                              (fun k =>
                                    { val := ↑(algebraMap K L) ↑k,
                                      property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) })
                                  1 =
                                1) }
                        (x * y) =
                      OneHom.toFun
                          {
                            toFun := fun k =>
                              { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) },
                            map_one' :=
                              (_ :
                                (fun k =>
                                      { val := ↑(algebraMap K L) ↑k,
                                        property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) })
                                    1 =
                                  1) }
                          x *
                        OneHom.toFun
                          {
                            toFun := fun k =>
                              { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) },
                            map_one' :=
                              (_ :
                                (fun k =>
                                      { val := ↑(algebraMap K L) ↑k,
                                        property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) })
                                    1 =
                                  1) }
                          y) })
          x +
        OneHom.toFun
          (↑{
              toOneHom :=
                {
                  toFun := fun k =>
                    { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) },
                  map_one' :=
                    (_ :
                      (fun k => { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) })
                          1 =
                        1) },
              map_mul' :=
                (_ :
                  ∀ (x y : { x // x ∈ 𝓞 K }),
                    OneHom.toFun
                        {
                          toFun := fun k =>
                            { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) },
                          map_one' :=
                            (_ :
                              (fun k =>
                                    { val := ↑(algebraMap K L) ↑k,
                                      property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) })
                                  1 =
                                1) }
                        (x * y) =
                      OneHom.toFun
                          {
                            toFun := fun k =>
                              { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) },
                            map_one' :=
                              (_ :
                                (fun k =>
                                      { val := ↑(algebraMap K L) ↑k,
                                        property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) })
                                    1 =
                                  1) }
                          x *
                        OneHom.toFun
                          {
                            toFun := fun k =>
                              { val := ↑(algebraMap K L) ↑k, property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) },
                            map_one' :=
                              (_ :
                                (fun k =>
                                      { val := ↑(algebraMap K L) ↑k,
                                        property := (_ : IsIntegral ℤ (↑(algebraMap K L) ↑k)) })
                                    1 =
                                  1) }
                          y) })
          y)
[PROOFSTEP]
simp only [map_add, Subalgebra.coe_add, Subtype.coe_mk]
[GOAL]
K : Type u_1
L : Type u_2
inst✝¹ : Field K
inst✝ : Field L
nf : NumberField K
⊢ ¬IsField { x // x ∈ 𝓞 K }
[PROOFSTEP]
have h_inj : Function.Injective (algebraMap ℤ (𝓞 K)) := RingHom.injective_int (algebraMap ℤ (𝓞 K))
[GOAL]
K : Type u_1
L : Type u_2
inst✝¹ : Field K
inst✝ : Field L
nf : NumberField K
h_inj : Injective ↑(algebraMap ℤ { x // x ∈ 𝓞 K })
⊢ ¬IsField { x // x ∈ 𝓞 K }
[PROOFSTEP]
intro hf
[GOAL]
K : Type u_1
L : Type u_2
inst✝¹ : Field K
inst✝ : Field L
nf : NumberField K
h_inj : Injective ↑(algebraMap ℤ { x // x ∈ 𝓞 K })
hf : IsField { x // x ∈ 𝓞 K }
⊢ False
[PROOFSTEP]
exact Int.not_isField (((IsIntegralClosure.isIntegral_algebra ℤ K).isField_iff_isField h_inj).mpr hf)
[GOAL]
K : Type u_1
L : Type u_2
inst✝¹ : Field K
inst✝ : Field L
nf : NumberField K
x : K
⊢ x ∈ Submodule.span ℤ (Set.range ↑(integralBasis K)) ↔ x ∈ 𝓞 K
[PROOFSTEP]
rw [integralBasis, Basis.localizationLocalization_span, Subalgebra.range_isScalarTower_toAlgHom,
  Subalgebra.mem_toSubmodule]
[GOAL]
⊢ FiniteDimensional ℚ ℚ
[PROOFSTEP]
convert (inferInstance : FiniteDimensional ℚ ℚ)
[GOAL]
f : Polynomial ℚ
hf : Fact (Irreducible f)
⊢ FiniteDimensional ℚ (AdjoinRoot f)
[PROOFSTEP]
convert (AdjoinRoot.powerBasis hf.out.ne_zero).finiteDimensional


[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
q n : ℕ
hqn : n ≤ q
⊢ HomologicalComplex.Hom.f (P (q + 1)) n = HomologicalComplex.Hom.f (P q) n
[PROOFSTEP]
rcases n with (_ | n)
[GOAL]
case zero
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
q : ℕ
hqn : Nat.zero ≤ q
⊢ HomologicalComplex.Hom.f (P (q + 1)) Nat.zero = HomologicalComplex.Hom.f (P q) Nat.zero
[PROOFSTEP]
simp only [Nat.zero_eq, P_f_0_eq]
[GOAL]
case succ
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
q n : ℕ
hqn : Nat.succ n ≤ q
⊢ HomologicalComplex.Hom.f (P (q + 1)) (Nat.succ n) = HomologicalComplex.Hom.f (P q) (Nat.succ n)
[PROOFSTEP]
simp only [P_succ, add_right_eq_self, comp_add, HomologicalComplex.comp_f, HomologicalComplex.add_f_apply, comp_id]
[GOAL]
case succ
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
q n : ℕ
hqn : Nat.succ n ≤ q
⊢ HomologicalComplex.Hom.f (P q) (Nat.succ n) ≫ HomologicalComplex.Hom.f (Hσ q) (Nat.succ n) = 0
[PROOFSTEP]
exact (HigherFacesVanish.of_P q n).comp_Hσ_eq_zero (Nat.succ_le_iff.mp hqn)
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
q n : ℕ
hqn : n ≤ q
⊢ HomologicalComplex.Hom.f (Q (q + 1)) n = HomologicalComplex.Hom.f (Q q) n
[PROOFSTEP]
simp only [Q, HomologicalComplex.sub_f_apply, P_is_eventually_constant hqn]
[GOAL]
C : Type u_1
inst✝¹ : Category.{?u.41303, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
⊢ (fun n => HomologicalComplex.Hom.f (P n) n) (n + 1) ≫ AlternatingFaceMapComplex.objD X n =
    AlternatingFaceMapComplex.objD X n ≫ (fun n => HomologicalComplex.Hom.f (P n) n) n
[PROOFSTEP]
simpa only [← P_is_eventually_constant (show n ≤ n by rfl), AlternatingFaceMapComplex.obj_d_eq] using
  (P (n + 1) : K[X] ⟶ _).comm (n + 1) n
[GOAL]
C : Type u_1
inst✝¹ : Category.{?u.41303, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
⊢ n ≤ n
[PROOFSTEP]
rfl
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
⊢ HomologicalComplex.Hom.f QInfty 0 = 0
[PROOFSTEP]
dsimp [QInfty]
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
⊢ 𝟙 (X.obj (op [0])) - 𝟙 (X.obj (op [0])) = 0
[PROOFSTEP]
simp only [sub_self]
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
⊢ HomologicalComplex.Hom.f PInfty n ≫ HomologicalComplex.Hom.f PInfty n = HomologicalComplex.Hom.f PInfty n
[PROOFSTEP]
simp only [PInfty_f, P_f_idem]
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
⊢ PInfty ≫ PInfty = PInfty
[PROOFSTEP]
ext n
[GOAL]
case h
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
⊢ HomologicalComplex.Hom.f (PInfty ≫ PInfty) n = HomologicalComplex.Hom.f PInfty n
[PROOFSTEP]
exact PInfty_f_idem n
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
⊢ QInfty ≫ QInfty = QInfty
[PROOFSTEP]
ext n
[GOAL]
case h
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
⊢ HomologicalComplex.Hom.f (QInfty ≫ QInfty) n = HomologicalComplex.Hom.f QInfty n
[PROOFSTEP]
exact QInfty_f_idem n
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
⊢ HomologicalComplex.Hom.f PInfty n ≫ HomologicalComplex.Hom.f QInfty n = 0
[PROOFSTEP]
dsimp only [QInfty]
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
⊢ HomologicalComplex.Hom.f PInfty n ≫ HomologicalComplex.Hom.f (𝟙 K[X] - PInfty) n = 0
[PROOFSTEP]
simp only [HomologicalComplex.sub_f_apply, HomologicalComplex.id_f, comp_sub, comp_id, PInfty_f_idem, sub_self]
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
⊢ PInfty ≫ QInfty = 0
[PROOFSTEP]
ext n
[GOAL]
case h
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
⊢ HomologicalComplex.Hom.f (PInfty ≫ QInfty) n = HomologicalComplex.Hom.f 0 n
[PROOFSTEP]
apply PInfty_f_comp_QInfty_f
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
⊢ HomologicalComplex.Hom.f QInfty n ≫ HomologicalComplex.Hom.f PInfty n = 0
[PROOFSTEP]
dsimp only [QInfty]
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
⊢ HomologicalComplex.Hom.f (𝟙 K[X] - PInfty) n ≫ HomologicalComplex.Hom.f PInfty n = 0
[PROOFSTEP]
simp only [HomologicalComplex.sub_f_apply, HomologicalComplex.id_f, sub_comp, id_comp, PInfty_f_idem, sub_self]
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
⊢ QInfty ≫ PInfty = 0
[PROOFSTEP]
ext n
[GOAL]
case h
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
n : ℕ
⊢ HomologicalComplex.Hom.f (QInfty ≫ PInfty) n = HomologicalComplex.Hom.f 0 n
[PROOFSTEP]
apply QInfty_f_comp_PInfty_f
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
⊢ PInfty + QInfty = 𝟙 K[X]
[PROOFSTEP]
dsimp only [QInfty]
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
⊢ PInfty + (𝟙 K[X] - PInfty) = 𝟙 K[X]
[PROOFSTEP]
simp only [add_sub_cancel'_right]
[GOAL]
C : Type u_1
inst✝¹ : Category.{?u.354986, u_1} C
inst✝ : Preadditive C
X✝ X Y : SimplicialObject C
f : X ⟶ Y
⊢ (alternatingFaceMapComplex C).map f ≫ (fun x => PInfty) Y = (fun x => PInfty) X ≫ (alternatingFaceMapComplex C).map f
[PROOFSTEP]
ext n
[GOAL]
case h
C : Type u_1
inst✝¹ : Category.{?u.354986, u_1} C
inst✝ : Preadditive C
X✝ X Y : SimplicialObject C
f : X ⟶ Y
n : ℕ
⊢ HomologicalComplex.Hom.f ((alternatingFaceMapComplex C).map f ≫ (fun x => PInfty) Y) n =
    HomologicalComplex.Hom.f ((fun x => PInfty) X ≫ (alternatingFaceMapComplex C).map f) n
[PROOFSTEP]
exact PInfty_f_naturality n f
[GOAL]
C : Type u_1
inst✝⁴ : Category.{u_4, u_1} C
inst✝³ : Preadditive C
X✝ : SimplicialObject C
D : Type u_2
inst✝² : Category.{u_3, u_2} D
inst✝¹ : Preadditive D
G : C ⥤ D
inst✝ : Functor.Additive G
X : SimplicialObject C
n : ℕ
⊢ HomologicalComplex.Hom.f PInfty n = G.map (HomologicalComplex.Hom.f PInfty n)
[PROOFSTEP]
simp only [PInfty_f, map_P]
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
Y : Karoubi (SimplicialObject C)
n : ℕ
⊢ (HomologicalComplex.Hom.f PInfty n).f = NatTrans.app Y.p (op [n]) ≫ HomologicalComplex.Hom.f PInfty n
[PROOFSTEP]
let Y₁ := (karoubiFunctorCategoryEmbedding _ _).obj Y
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
Y : Karoubi (SimplicialObject C)
n : ℕ
Y₁ : SimplexCategoryᵒᵖ ⥤ Karoubi C := (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj Y
⊢ (HomologicalComplex.Hom.f PInfty n).f = NatTrans.app Y.p (op [n]) ≫ HomologicalComplex.Hom.f PInfty n
[PROOFSTEP]
let Y₂ := Y.X
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
Y : Karoubi (SimplicialObject C)
n : ℕ
Y₁ : SimplexCategoryᵒᵖ ⥤ Karoubi C := (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj Y
Y₂ : SimplicialObject C := Y.X
⊢ (HomologicalComplex.Hom.f PInfty n).f = NatTrans.app Y.p (op [n]) ≫ HomologicalComplex.Hom.f PInfty n
[PROOFSTEP]
let Y₃ := ((whiskering _ _).obj (toKaroubi C)).obj Y.X
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
Y : Karoubi (SimplicialObject C)
n : ℕ
Y₁ : SimplexCategoryᵒᵖ ⥤ Karoubi C := (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj Y
Y₂ : SimplicialObject C := Y.X
Y₃ : SimplicialObject (Karoubi C) := ((whiskering C (Karoubi C)).obj (toKaroubi C)).obj Y.X
⊢ (HomologicalComplex.Hom.f PInfty n).f = NatTrans.app Y.p (op [n]) ≫ HomologicalComplex.Hom.f PInfty n
[PROOFSTEP]
let Y₄ := (karoubiFunctorCategoryEmbedding _ _).obj ((toKaroubi _).obj Y.X)
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
Y : Karoubi (SimplicialObject C)
n : ℕ
Y₁ : SimplexCategoryᵒᵖ ⥤ Karoubi C := (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj Y
Y₂ : SimplicialObject C := Y.X
Y₃ : SimplicialObject (Karoubi C) := ((whiskering C (Karoubi C)).obj (toKaroubi C)).obj Y.X
Y₄ : SimplexCategoryᵒᵖ ⥤ Karoubi C :=
  (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj ((toKaroubi (SimplexCategoryᵒᵖ ⥤ C)).obj Y.X)
⊢ (HomologicalComplex.Hom.f PInfty n).f = NatTrans.app Y.p (op [n]) ≫ HomologicalComplex.Hom.f PInfty n
[PROOFSTEP]
let P₁ : K[Y₁] ⟶ _ := PInfty
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
Y : Karoubi (SimplicialObject C)
n : ℕ
Y₁ : SimplexCategoryᵒᵖ ⥤ Karoubi C := (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj Y
Y₂ : SimplicialObject C := Y.X
Y₃ : SimplicialObject (Karoubi C) := ((whiskering C (Karoubi C)).obj (toKaroubi C)).obj Y.X
Y₄ : SimplexCategoryᵒᵖ ⥤ Karoubi C :=
  (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj ((toKaroubi (SimplexCategoryᵒᵖ ⥤ C)).obj Y.X)
P₁ : K[Y₁] ⟶ K[Y₁] := PInfty
⊢ (HomologicalComplex.Hom.f PInfty n).f = NatTrans.app Y.p (op [n]) ≫ HomologicalComplex.Hom.f PInfty n
[PROOFSTEP]
let P₂ : K[Y₂] ⟶ _ := PInfty
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
Y : Karoubi (SimplicialObject C)
n : ℕ
Y₁ : SimplexCategoryᵒᵖ ⥤ Karoubi C := (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj Y
Y₂ : SimplicialObject C := Y.X
Y₃ : SimplicialObject (Karoubi C) := ((whiskering C (Karoubi C)).obj (toKaroubi C)).obj Y.X
Y₄ : SimplexCategoryᵒᵖ ⥤ Karoubi C :=
  (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj ((toKaroubi (SimplexCategoryᵒᵖ ⥤ C)).obj Y.X)
P₁ : K[Y₁] ⟶ K[Y₁] := PInfty
P₂ : K[Y₂] ⟶ K[Y₂] := PInfty
⊢ (HomologicalComplex.Hom.f PInfty n).f = NatTrans.app Y.p (op [n]) ≫ HomologicalComplex.Hom.f PInfty n
[PROOFSTEP]
let P₃ : K[Y₃] ⟶ _ := PInfty
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
Y : Karoubi (SimplicialObject C)
n : ℕ
Y₁ : SimplexCategoryᵒᵖ ⥤ Karoubi C := (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj Y
Y₂ : SimplicialObject C := Y.X
Y₃ : SimplicialObject (Karoubi C) := ((whiskering C (Karoubi C)).obj (toKaroubi C)).obj Y.X
Y₄ : SimplexCategoryᵒᵖ ⥤ Karoubi C :=
  (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj ((toKaroubi (SimplexCategoryᵒᵖ ⥤ C)).obj Y.X)
P₁ : K[Y₁] ⟶ K[Y₁] := PInfty
P₂ : K[Y₂] ⟶ K[Y₂] := PInfty
P₃ : K[Y₃] ⟶ K[Y₃] := PInfty
⊢ (HomologicalComplex.Hom.f PInfty n).f = NatTrans.app Y.p (op [n]) ≫ HomologicalComplex.Hom.f PInfty n
[PROOFSTEP]
let P₄ : K[Y₄] ⟶ _ := PInfty
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
Y : Karoubi (SimplicialObject C)
n : ℕ
Y₁ : SimplexCategoryᵒᵖ ⥤ Karoubi C := (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj Y
Y₂ : SimplicialObject C := Y.X
Y₃ : SimplicialObject (Karoubi C) := ((whiskering C (Karoubi C)).obj (toKaroubi C)).obj Y.X
Y₄ : SimplexCategoryᵒᵖ ⥤ Karoubi C :=
  (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj ((toKaroubi (SimplexCategoryᵒᵖ ⥤ C)).obj Y.X)
P₁ : K[Y₁] ⟶ K[Y₁] := PInfty
P₂ : K[Y₂] ⟶ K[Y₂] := PInfty
P₃ : K[Y₃] ⟶ K[Y₃] := PInfty
P₄ : K[Y₄] ⟶ K[Y₄] := PInfty
⊢ (HomologicalComplex.Hom.f PInfty n).f = NatTrans.app Y.p (op [n]) ≫ HomologicalComplex.Hom.f PInfty n
[PROOFSTEP]
change (P₁.f n).f = Y.p.app (op [n]) ≫ P₂.f n
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
Y : Karoubi (SimplicialObject C)
n : ℕ
Y₁ : SimplexCategoryᵒᵖ ⥤ Karoubi C := (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj Y
Y₂ : SimplicialObject C := Y.X
Y₃ : SimplicialObject (Karoubi C) := ((whiskering C (Karoubi C)).obj (toKaroubi C)).obj Y.X
Y₄ : SimplexCategoryᵒᵖ ⥤ Karoubi C :=
  (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj ((toKaroubi (SimplexCategoryᵒᵖ ⥤ C)).obj Y.X)
P₁ : K[Y₁] ⟶ K[Y₁] := PInfty
P₂ : K[Y₂] ⟶ K[Y₂] := PInfty
P₃ : K[Y₃] ⟶ K[Y₃] := PInfty
P₄ : K[Y₄] ⟶ K[Y₄] := PInfty
⊢ (HomologicalComplex.Hom.f P₁ n).f = NatTrans.app Y.p (op [n]) ≫ HomologicalComplex.Hom.f P₂ n
[PROOFSTEP]
have h₃₂ : (P₃.f n).f = P₂.f n := Karoubi.hom_ext_iff.mp (map_PInfty_f (toKaroubi C) Y₂ n)
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
Y : Karoubi (SimplicialObject C)
n : ℕ
Y₁ : SimplexCategoryᵒᵖ ⥤ Karoubi C := (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj Y
Y₂ : SimplicialObject C := Y.X
Y₃ : SimplicialObject (Karoubi C) := ((whiskering C (Karoubi C)).obj (toKaroubi C)).obj Y.X
Y₄ : SimplexCategoryᵒᵖ ⥤ Karoubi C :=
  (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj ((toKaroubi (SimplexCategoryᵒᵖ ⥤ C)).obj Y.X)
P₁ : K[Y₁] ⟶ K[Y₁] := PInfty
P₂ : K[Y₂] ⟶ K[Y₂] := PInfty
P₃ : K[Y₃] ⟶ K[Y₃] := PInfty
P₄ : K[Y₄] ⟶ K[Y₄] := PInfty
h₃₂ : (HomologicalComplex.Hom.f P₃ n).f = HomologicalComplex.Hom.f P₂ n
⊢ (HomologicalComplex.Hom.f P₁ n).f = NatTrans.app Y.p (op [n]) ≫ HomologicalComplex.Hom.f P₂ n
[PROOFSTEP]
have h₄₃ : P₄.f n = P₃.f n :=
  by
  have h := Functor.congr_obj (toKaroubi_comp_karoubiFunctorCategoryEmbedding _ _) Y₂
  simp only [← natTransPInfty_f_app]
  congr 1
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
Y : Karoubi (SimplicialObject C)
n : ℕ
Y₁ : SimplexCategoryᵒᵖ ⥤ Karoubi C := (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj Y
Y₂ : SimplicialObject C := Y.X
Y₃ : SimplicialObject (Karoubi C) := ((whiskering C (Karoubi C)).obj (toKaroubi C)).obj Y.X
Y₄ : SimplexCategoryᵒᵖ ⥤ Karoubi C :=
  (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj ((toKaroubi (SimplexCategoryᵒᵖ ⥤ C)).obj Y.X)
P₁ : K[Y₁] ⟶ K[Y₁] := PInfty
P₂ : K[Y₂] ⟶ K[Y₂] := PInfty
P₃ : K[Y₃] ⟶ K[Y₃] := PInfty
P₄ : K[Y₄] ⟶ K[Y₄] := PInfty
h₃₂ : (HomologicalComplex.Hom.f P₃ n).f = HomologicalComplex.Hom.f P₂ n
⊢ HomologicalComplex.Hom.f P₄ n = HomologicalComplex.Hom.f P₃ n
[PROOFSTEP]
have h := Functor.congr_obj (toKaroubi_comp_karoubiFunctorCategoryEmbedding _ _) Y₂
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
Y : Karoubi (SimplicialObject C)
n : ℕ
Y₁ : SimplexCategoryᵒᵖ ⥤ Karoubi C := (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj Y
Y₂ : SimplicialObject C := Y.X
Y₃ : SimplicialObject (Karoubi C) := ((whiskering C (Karoubi C)).obj (toKaroubi C)).obj Y.X
Y₄ : SimplexCategoryᵒᵖ ⥤ Karoubi C :=
  (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj ((toKaroubi (SimplexCategoryᵒᵖ ⥤ C)).obj Y.X)
P₁ : K[Y₁] ⟶ K[Y₁] := PInfty
P₂ : K[Y₂] ⟶ K[Y₂] := PInfty
P₃ : K[Y₃] ⟶ K[Y₃] := PInfty
P₄ : K[Y₄] ⟶ K[Y₄] := PInfty
h₃₂ : (HomologicalComplex.Hom.f P₃ n).f = HomologicalComplex.Hom.f P₂ n
h :
  (toKaroubi (SimplexCategoryᵒᵖ ⥤ C) ⋙ karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj Y₂ =
    ((whiskeringRight SimplexCategoryᵒᵖ C (Karoubi C)).obj (toKaroubi C)).obj Y₂
⊢ HomologicalComplex.Hom.f P₄ n = HomologicalComplex.Hom.f P₃ n
[PROOFSTEP]
simp only [← natTransPInfty_f_app]
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
Y : Karoubi (SimplicialObject C)
n : ℕ
Y₁ : SimplexCategoryᵒᵖ ⥤ Karoubi C := (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj Y
Y₂ : SimplicialObject C := Y.X
Y₃ : SimplicialObject (Karoubi C) := ((whiskering C (Karoubi C)).obj (toKaroubi C)).obj Y.X
Y₄ : SimplexCategoryᵒᵖ ⥤ Karoubi C :=
  (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj ((toKaroubi (SimplexCategoryᵒᵖ ⥤ C)).obj Y.X)
P₁ : K[Y₁] ⟶ K[Y₁] := PInfty
P₂ : K[Y₂] ⟶ K[Y₂] := PInfty
P₃ : K[Y₃] ⟶ K[Y₃] := PInfty
P₄ : K[Y₄] ⟶ K[Y₄] := PInfty
h₃₂ : (HomologicalComplex.Hom.f P₃ n).f = HomologicalComplex.Hom.f P₂ n
h :
  (toKaroubi (SimplexCategoryᵒᵖ ⥤ C) ⋙ karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj Y₂ =
    ((whiskeringRight SimplexCategoryᵒᵖ C (Karoubi C)).obj (toKaroubi C)).obj Y₂
⊢ NatTrans.app (natTransPInfty_f (Karoubi C) n)
      ((karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj ((toKaroubi (SimplexCategoryᵒᵖ ⥤ C)).obj Y.X)) =
    NatTrans.app (natTransPInfty_f (Karoubi C) n) (((whiskering C (Karoubi C)).obj (toKaroubi C)).obj Y.X)
[PROOFSTEP]
congr 1
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
Y : Karoubi (SimplicialObject C)
n : ℕ
Y₁ : SimplexCategoryᵒᵖ ⥤ Karoubi C := (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj Y
Y₂ : SimplicialObject C := Y.X
Y₃ : SimplicialObject (Karoubi C) := ((whiskering C (Karoubi C)).obj (toKaroubi C)).obj Y.X
Y₄ : SimplexCategoryᵒᵖ ⥤ Karoubi C :=
  (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj ((toKaroubi (SimplexCategoryᵒᵖ ⥤ C)).obj Y.X)
P₁ : K[Y₁] ⟶ K[Y₁] := PInfty
P₂ : K[Y₂] ⟶ K[Y₂] := PInfty
P₃ : K[Y₃] ⟶ K[Y₃] := PInfty
P₄ : K[Y₄] ⟶ K[Y₄] := PInfty
h₃₂ : (HomologicalComplex.Hom.f P₃ n).f = HomologicalComplex.Hom.f P₂ n
h₄₃ : HomologicalComplex.Hom.f P₄ n = HomologicalComplex.Hom.f P₃ n
⊢ (HomologicalComplex.Hom.f P₁ n).f = NatTrans.app Y.p (op [n]) ≫ HomologicalComplex.Hom.f P₂ n
[PROOFSTEP]
have h₁₄ :=
  Idempotents.natTrans_eq ((𝟙 (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C)) ◫ (natTransPInfty_f (Karoubi C) n))
    Y
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
Y : Karoubi (SimplicialObject C)
n : ℕ
Y₁ : SimplexCategoryᵒᵖ ⥤ Karoubi C := (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj Y
Y₂ : SimplicialObject C := Y.X
Y₃ : SimplicialObject (Karoubi C) := ((whiskering C (Karoubi C)).obj (toKaroubi C)).obj Y.X
Y₄ : SimplexCategoryᵒᵖ ⥤ Karoubi C :=
  (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj ((toKaroubi (SimplexCategoryᵒᵖ ⥤ C)).obj Y.X)
P₁ : K[Y₁] ⟶ K[Y₁] := PInfty
P₂ : K[Y₂] ⟶ K[Y₂] := PInfty
P₃ : K[Y₃] ⟶ K[Y₃] := PInfty
P₄ : K[Y₄] ⟶ K[Y₄] := PInfty
h₃₂ : (HomologicalComplex.Hom.f P₃ n).f = HomologicalComplex.Hom.f P₂ n
h₄₃ : HomologicalComplex.Hom.f P₄ n = HomologicalComplex.Hom.f P₃ n
h₁₄ :
  NatTrans.app (𝟙 (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C) ◫ natTransPInfty_f (Karoubi C) n) Y =
    (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C ⋙
            alternatingFaceMapComplex (Karoubi C) ⋙ HomologicalComplex.eval (Karoubi C) (ComplexShape.down ℕ) n).map
        (Karoubi.decompId_i Y) ≫
      NatTrans.app (𝟙 (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C) ◫ natTransPInfty_f (Karoubi C) n)
          (Karoubi.mk Y.X (𝟙 Y.X)) ≫
        (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C ⋙
              alternatingFaceMapComplex (Karoubi C) ⋙ HomologicalComplex.eval (Karoubi C) (ComplexShape.down ℕ) n).map
          (Karoubi.decompId_p Y)
⊢ (HomologicalComplex.Hom.f P₁ n).f = NatTrans.app Y.p (op [n]) ≫ HomologicalComplex.Hom.f P₂ n
[PROOFSTEP]
dsimp [natTransPInfty_f] at h₁₄
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
Y : Karoubi (SimplicialObject C)
n : ℕ
Y₁ : SimplexCategoryᵒᵖ ⥤ Karoubi C := (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj Y
Y₂ : SimplicialObject C := Y.X
Y₃ : SimplicialObject (Karoubi C) := ((whiskering C (Karoubi C)).obj (toKaroubi C)).obj Y.X
Y₄ : SimplexCategoryᵒᵖ ⥤ Karoubi C :=
  (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj ((toKaroubi (SimplexCategoryᵒᵖ ⥤ C)).obj Y.X)
P₁ : K[Y₁] ⟶ K[Y₁] := PInfty
P₂ : K[Y₂] ⟶ K[Y₂] := PInfty
P₃ : K[Y₃] ⟶ K[Y₃] := PInfty
P₄ : K[Y₄] ⟶ K[Y₄] := PInfty
h₃₂ : (HomologicalComplex.Hom.f P₃ n).f = HomologicalComplex.Hom.f P₂ n
h₄₃ : HomologicalComplex.Hom.f P₄ n = HomologicalComplex.Hom.f P₃ n
h₁₄ :
  (Karoubi.Hom.mk (NatTrans.app Y.p (op [n])) ≫ HomologicalComplex.Hom.f PInfty n) ≫
      Karoubi.Hom.mk (NatTrans.app Y.p (op [n])) =
    NatTrans.app (KaroubiFunctorCategoryEmbedding.map (Karoubi.decompId_i Y)) (op [n]) ≫
      ((Karoubi.Hom.mk (𝟙 (Y.X.obj (op [n]))) ≫ HomologicalComplex.Hom.f PInfty n) ≫
          Karoubi.Hom.mk (𝟙 (Y.X.obj (op [n])))) ≫
        NatTrans.app (KaroubiFunctorCategoryEmbedding.map (Karoubi.decompId_p Y)) (op [n])
⊢ (HomologicalComplex.Hom.f P₁ n).f = NatTrans.app Y.p (op [n]) ≫ HomologicalComplex.Hom.f P₂ n
[PROOFSTEP]
erw [id_comp, id_comp, comp_id, comp_id] at h₁₄
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
Y : Karoubi (SimplicialObject C)
n : ℕ
Y₁ : SimplexCategoryᵒᵖ ⥤ Karoubi C := (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj Y
Y₂ : SimplicialObject C := Y.X
Y₃ : SimplicialObject (Karoubi C) := ((whiskering C (Karoubi C)).obj (toKaroubi C)).obj Y.X
Y₄ : SimplexCategoryᵒᵖ ⥤ Karoubi C :=
  (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj ((toKaroubi (SimplexCategoryᵒᵖ ⥤ C)).obj Y.X)
P₁ : K[Y₁] ⟶ K[Y₁] := PInfty
P₂ : K[Y₂] ⟶ K[Y₂] := PInfty
P₃ : K[Y₃] ⟶ K[Y₃] := PInfty
P₄ : K[Y₄] ⟶ K[Y₄] := PInfty
h₃₂ : (HomologicalComplex.Hom.f P₃ n).f = HomologicalComplex.Hom.f P₂ n
h₄₃ : HomologicalComplex.Hom.f P₄ n = HomologicalComplex.Hom.f P₃ n
h₁₄ :
  HomologicalComplex.Hom.f PInfty n =
    NatTrans.app (KaroubiFunctorCategoryEmbedding.map (Karoubi.decompId_i Y)) (op [n]) ≫
      HomologicalComplex.Hom.f PInfty n ≫
        NatTrans.app (KaroubiFunctorCategoryEmbedding.map (Karoubi.decompId_p Y)) (op [n])
⊢ (HomologicalComplex.Hom.f P₁ n).f = NatTrans.app Y.p (op [n]) ≫ HomologicalComplex.Hom.f P₂ n
[PROOFSTEP]
rw [← h₃₂, ← h₄₃, h₁₄]
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
Y : Karoubi (SimplicialObject C)
n : ℕ
Y₁ : SimplexCategoryᵒᵖ ⥤ Karoubi C := (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj Y
Y₂ : SimplicialObject C := Y.X
Y₃ : SimplicialObject (Karoubi C) := ((whiskering C (Karoubi C)).obj (toKaroubi C)).obj Y.X
Y₄ : SimplexCategoryᵒᵖ ⥤ Karoubi C :=
  (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj ((toKaroubi (SimplexCategoryᵒᵖ ⥤ C)).obj Y.X)
P₁ : K[Y₁] ⟶ K[Y₁] := PInfty
P₂ : K[Y₂] ⟶ K[Y₂] := PInfty
P₃ : K[Y₃] ⟶ K[Y₃] := PInfty
P₄ : K[Y₄] ⟶ K[Y₄] := PInfty
h₃₂ : (HomologicalComplex.Hom.f P₃ n).f = HomologicalComplex.Hom.f P₂ n
h₄₃ : HomologicalComplex.Hom.f P₄ n = HomologicalComplex.Hom.f P₃ n
h₁₄ :
  HomologicalComplex.Hom.f PInfty n =
    NatTrans.app (KaroubiFunctorCategoryEmbedding.map (Karoubi.decompId_i Y)) (op [n]) ≫
      HomologicalComplex.Hom.f PInfty n ≫
        NatTrans.app (KaroubiFunctorCategoryEmbedding.map (Karoubi.decompId_p Y)) (op [n])
⊢ (NatTrans.app (KaroubiFunctorCategoryEmbedding.map (Karoubi.decompId_i Y)) (op [n]) ≫
        HomologicalComplex.Hom.f PInfty n ≫
          NatTrans.app (KaroubiFunctorCategoryEmbedding.map (Karoubi.decompId_p Y)) (op [n])).f =
    NatTrans.app Y.p (op [n]) ≫ (HomologicalComplex.Hom.f P₄ n).f
[PROOFSTEP]
simp only [KaroubiFunctorCategoryEmbedding.map_app_f, Karoubi.decompId_p_f, Karoubi.decompId_i_f, Karoubi.comp_f]
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
Y : Karoubi (SimplicialObject C)
n : ℕ
Y₁ : SimplexCategoryᵒᵖ ⥤ Karoubi C := (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj Y
Y₂ : SimplicialObject C := Y.X
Y₃ : SimplicialObject (Karoubi C) := ((whiskering C (Karoubi C)).obj (toKaroubi C)).obj Y.X
Y₄ : SimplexCategoryᵒᵖ ⥤ Karoubi C :=
  (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj ((toKaroubi (SimplexCategoryᵒᵖ ⥤ C)).obj Y.X)
P₁ : K[Y₁] ⟶ K[Y₁] := PInfty
P₂ : K[Y₂] ⟶ K[Y₂] := PInfty
P₃ : K[Y₃] ⟶ K[Y₃] := PInfty
P₄ : K[Y₄] ⟶ K[Y₄] := PInfty
h₃₂ : (HomologicalComplex.Hom.f P₃ n).f = HomologicalComplex.Hom.f P₂ n
h₄₃ : HomologicalComplex.Hom.f P₄ n = HomologicalComplex.Hom.f P₃ n
h₁₄ :
  HomologicalComplex.Hom.f PInfty n =
    NatTrans.app (KaroubiFunctorCategoryEmbedding.map (Karoubi.decompId_i Y)) (op [n]) ≫
      HomologicalComplex.Hom.f PInfty n ≫
        NatTrans.app (KaroubiFunctorCategoryEmbedding.map (Karoubi.decompId_p Y)) (op [n])
⊢ NatTrans.app Y.p (op [n]) ≫ (HomologicalComplex.Hom.f PInfty n).f ≫ NatTrans.app Y.p (op [n]) =
    NatTrans.app Y.p (op [n]) ≫ (HomologicalComplex.Hom.f PInfty n).f
[PROOFSTEP]
let π : Y₄ ⟶ Y₄ := (toKaroubi _ ⋙ karoubiFunctorCategoryEmbedding _ _).map Y.p
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
Y : Karoubi (SimplicialObject C)
n : ℕ
Y₁ : SimplexCategoryᵒᵖ ⥤ Karoubi C := (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj Y
Y₂ : SimplicialObject C := Y.X
Y₃ : SimplicialObject (Karoubi C) := ((whiskering C (Karoubi C)).obj (toKaroubi C)).obj Y.X
Y₄ : SimplexCategoryᵒᵖ ⥤ Karoubi C :=
  (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj ((toKaroubi (SimplexCategoryᵒᵖ ⥤ C)).obj Y.X)
P₁ : K[Y₁] ⟶ K[Y₁] := PInfty
P₂ : K[Y₂] ⟶ K[Y₂] := PInfty
P₃ : K[Y₃] ⟶ K[Y₃] := PInfty
P₄ : K[Y₄] ⟶ K[Y₄] := PInfty
h₃₂ : (HomologicalComplex.Hom.f P₃ n).f = HomologicalComplex.Hom.f P₂ n
h₄₃ : HomologicalComplex.Hom.f P₄ n = HomologicalComplex.Hom.f P₃ n
h₁₄ :
  HomologicalComplex.Hom.f PInfty n =
    NatTrans.app (KaroubiFunctorCategoryEmbedding.map (Karoubi.decompId_i Y)) (op [n]) ≫
      HomologicalComplex.Hom.f PInfty n ≫
        NatTrans.app (KaroubiFunctorCategoryEmbedding.map (Karoubi.decompId_p Y)) (op [n])
π : Y₄ ⟶ Y₄ := (toKaroubi (SimplexCategoryᵒᵖ ⥤ C) ⋙ karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).map Y.p
⊢ NatTrans.app Y.p (op [n]) ≫ (HomologicalComplex.Hom.f PInfty n).f ≫ NatTrans.app Y.p (op [n]) =
    NatTrans.app Y.p (op [n]) ≫ (HomologicalComplex.Hom.f PInfty n).f
[PROOFSTEP]
have eq := Karoubi.hom_ext_iff.mp (PInfty_f_naturality n π)
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
Y : Karoubi (SimplicialObject C)
n : ℕ
Y₁ : SimplexCategoryᵒᵖ ⥤ Karoubi C := (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj Y
Y₂ : SimplicialObject C := Y.X
Y₃ : SimplicialObject (Karoubi C) := ((whiskering C (Karoubi C)).obj (toKaroubi C)).obj Y.X
Y₄ : SimplexCategoryᵒᵖ ⥤ Karoubi C :=
  (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj ((toKaroubi (SimplexCategoryᵒᵖ ⥤ C)).obj Y.X)
P₁ : K[Y₁] ⟶ K[Y₁] := PInfty
P₂ : K[Y₂] ⟶ K[Y₂] := PInfty
P₃ : K[Y₃] ⟶ K[Y₃] := PInfty
P₄ : K[Y₄] ⟶ K[Y₄] := PInfty
h₃₂ : (HomologicalComplex.Hom.f P₃ n).f = HomologicalComplex.Hom.f P₂ n
h₄₃ : HomologicalComplex.Hom.f P₄ n = HomologicalComplex.Hom.f P₃ n
h₁₄ :
  HomologicalComplex.Hom.f PInfty n =
    NatTrans.app (KaroubiFunctorCategoryEmbedding.map (Karoubi.decompId_i Y)) (op [n]) ≫
      HomologicalComplex.Hom.f PInfty n ≫
        NatTrans.app (KaroubiFunctorCategoryEmbedding.map (Karoubi.decompId_p Y)) (op [n])
π : Y₄ ⟶ Y₄ := (toKaroubi (SimplexCategoryᵒᵖ ⥤ C) ⋙ karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).map Y.p
eq :
  (NatTrans.app π (op [n]) ≫ HomologicalComplex.Hom.f PInfty n).f =
    (HomologicalComplex.Hom.f PInfty n ≫ NatTrans.app π (op [n])).f
⊢ NatTrans.app Y.p (op [n]) ≫ (HomologicalComplex.Hom.f PInfty n).f ≫ NatTrans.app Y.p (op [n]) =
    NatTrans.app Y.p (op [n]) ≫ (HomologicalComplex.Hom.f PInfty n).f
[PROOFSTEP]
simp only [Karoubi.comp_f] at eq
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
Y : Karoubi (SimplicialObject C)
n : ℕ
Y₁ : SimplexCategoryᵒᵖ ⥤ Karoubi C := (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj Y
Y₂ : SimplicialObject C := Y.X
Y₃ : SimplicialObject (Karoubi C) := ((whiskering C (Karoubi C)).obj (toKaroubi C)).obj Y.X
Y₄ : SimplexCategoryᵒᵖ ⥤ Karoubi C :=
  (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj ((toKaroubi (SimplexCategoryᵒᵖ ⥤ C)).obj Y.X)
P₁ : K[Y₁] ⟶ K[Y₁] := PInfty
P₂ : K[Y₂] ⟶ K[Y₂] := PInfty
P₃ : K[Y₃] ⟶ K[Y₃] := PInfty
P₄ : K[Y₄] ⟶ K[Y₄] := PInfty
h₃₂ : (HomologicalComplex.Hom.f P₃ n).f = HomologicalComplex.Hom.f P₂ n
h₄₃ : HomologicalComplex.Hom.f P₄ n = HomologicalComplex.Hom.f P₃ n
h₁₄ :
  HomologicalComplex.Hom.f PInfty n =
    NatTrans.app (KaroubiFunctorCategoryEmbedding.map (Karoubi.decompId_i Y)) (op [n]) ≫
      HomologicalComplex.Hom.f PInfty n ≫
        NatTrans.app (KaroubiFunctorCategoryEmbedding.map (Karoubi.decompId_p Y)) (op [n])
π : Y₄ ⟶ Y₄ := (toKaroubi (SimplexCategoryᵒᵖ ⥤ C) ⋙ karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).map Y.p
eq :
  (NatTrans.app ((toKaroubi (SimplexCategoryᵒᵖ ⥤ C) ⋙ karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).map Y.p)
          (op [n])).f ≫
      (HomologicalComplex.Hom.f PInfty n).f =
    (HomologicalComplex.Hom.f PInfty n).f ≫
      (NatTrans.app ((toKaroubi (SimplexCategoryᵒᵖ ⥤ C) ⋙ karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).map Y.p)
          (op [n])).f
⊢ NatTrans.app Y.p (op [n]) ≫ (HomologicalComplex.Hom.f PInfty n).f ≫ NatTrans.app Y.p (op [n]) =
    NatTrans.app Y.p (op [n]) ≫ (HomologicalComplex.Hom.f PInfty n).f
[PROOFSTEP]
dsimp at eq
[GOAL]
C : Type u_1
inst✝¹ : Category.{u_2, u_1} C
inst✝ : Preadditive C
X : SimplicialObject C
Y : Karoubi (SimplicialObject C)
n : ℕ
Y₁ : SimplexCategoryᵒᵖ ⥤ Karoubi C := (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj Y
Y₂ : SimplicialObject C := Y.X
Y₃ : SimplicialObject (Karoubi C) := ((whiskering C (Karoubi C)).obj (toKaroubi C)).obj Y.X
Y₄ : SimplexCategoryᵒᵖ ⥤ Karoubi C :=
  (karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).obj ((toKaroubi (SimplexCategoryᵒᵖ ⥤ C)).obj Y.X)
P₁ : K[Y₁] ⟶ K[Y₁] := PInfty
P₂ : K[Y₂] ⟶ K[Y₂] := PInfty
P₃ : K[Y₃] ⟶ K[Y₃] := PInfty
P₄ : K[Y₄] ⟶ K[Y₄] := PInfty
h₃₂ : (HomologicalComplex.Hom.f P₃ n).f = HomologicalComplex.Hom.f P₂ n
h₄₃ : HomologicalComplex.Hom.f P₄ n = HomologicalComplex.Hom.f P₃ n
h₁₄ :
  HomologicalComplex.Hom.f PInfty n =
    NatTrans.app (KaroubiFunctorCategoryEmbedding.map (Karoubi.decompId_i Y)) (op [n]) ≫
      HomologicalComplex.Hom.f PInfty n ≫
        NatTrans.app (KaroubiFunctorCategoryEmbedding.map (Karoubi.decompId_p Y)) (op [n])
π : Y₄ ⟶ Y₄ := (toKaroubi (SimplexCategoryᵒᵖ ⥤ C) ⋙ karoubiFunctorCategoryEmbedding SimplexCategoryᵒᵖ C).map Y.p
eq :
  NatTrans.app Y.p (op [n]) ≫ (HomologicalComplex.Hom.f PInfty n).f =
    (HomologicalComplex.Hom.f PInfty n).f ≫ NatTrans.app Y.p (op [n])
⊢ NatTrans.app Y.p (op [n]) ≫ (HomologicalComplex.Hom.f PInfty n).f ≫ NatTrans.app Y.p (op [n]) =
    NatTrans.app Y.p (op [n]) ≫ (HomologicalComplex.Hom.f PInfty n).f
[PROOFSTEP]
rw [← eq, app_idem_assoc Y (op [n])]


[GOAL]
a b : ℝ
h : 0 < b
⊢ IntegrableOn (fun x => exp (-b * x)) (Ioi a)
[PROOFSTEP]
have : Tendsto (fun x => -exp (-b * x) / b) atTop (𝓝 (-0 / b)) :=
  by
  refine' Tendsto.div_const (Tendsto.neg _) _
  exact tendsto_exp_atBot.comp (tendsto_id.neg_const_mul_atTop (Right.neg_neg_iff.2 h))
[GOAL]
a b : ℝ
h : 0 < b
⊢ Tendsto (fun x => -exp (-b * x) / b) atTop (𝓝 (-0 / b))
[PROOFSTEP]
refine' Tendsto.div_const (Tendsto.neg _) _
[GOAL]
a b : ℝ
h : 0 < b
⊢ Tendsto (fun x => exp (-b * x)) atTop (𝓝 0)
[PROOFSTEP]
exact tendsto_exp_atBot.comp (tendsto_id.neg_const_mul_atTop (Right.neg_neg_iff.2 h))
[GOAL]
a b : ℝ
h : 0 < b
this : Tendsto (fun x => -exp (-b * x) / b) atTop (𝓝 (-0 / b))
⊢ IntegrableOn (fun x => exp (-b * x)) (Ioi a)
[PROOFSTEP]
refine' integrableOn_Ioi_deriv_of_nonneg' (fun x _ => _) (fun x _ => (exp_pos _).le) this
[GOAL]
a b : ℝ
h : 0 < b
this : Tendsto (fun x => -exp (-b * x) / b) atTop (𝓝 (-0 / b))
x : ℝ
x✝ : x ∈ Ici a
⊢ HasDerivAt (fun x => -exp (-b * x) / b) (exp (-b * x)) x
[PROOFSTEP]
simpa [h.ne'] using ((hasDerivAt_id x).const_mul b).neg.exp.neg.div_const b
[GOAL]
f : ℝ → ℝ
a b : ℝ
h0 : 0 < b
h1 : ContinuousOn f (Ici a)
h2 : f =O[atTop] fun x => exp (-b * x)
⊢ IntegrableOn f (Ioi a)
[PROOFSTEP]
cases' h2.isBigOWith with c h3
[GOAL]
case intro
f : ℝ → ℝ
a b : ℝ
h0 : 0 < b
h1 : ContinuousOn f (Ici a)
h2 : f =O[atTop] fun x => exp (-b * x)
c : ℝ
h3 : Asymptotics.IsBigOWith c atTop f fun x => exp (-b * x)
⊢ IntegrableOn f (Ioi a)
[PROOFSTEP]
rw [Asymptotics.isBigOWith_iff, eventually_atTop] at h3
[GOAL]
case intro
f : ℝ → ℝ
a b : ℝ
h0 : 0 < b
h1 : ContinuousOn f (Ici a)
h2 : f =O[atTop] fun x => exp (-b * x)
c : ℝ
h3 : ∃ a, ∀ (b_1 : ℝ), b_1 ≥ a → ‖f b_1‖ ≤ c * ‖exp (-b * b_1)‖
⊢ IntegrableOn f (Ioi a)
[PROOFSTEP]
cases' h3 with r bdr
[GOAL]
case intro.intro
f : ℝ → ℝ
a b : ℝ
h0 : 0 < b
h1 : ContinuousOn f (Ici a)
h2 : f =O[atTop] fun x => exp (-b * x)
c r : ℝ
bdr : ∀ (b_1 : ℝ), b_1 ≥ r → ‖f b_1‖ ≤ c * ‖exp (-b * b_1)‖
⊢ IntegrableOn f (Ioi a)
[PROOFSTEP]
let v := max a r
[GOAL]
case intro.intro
f : ℝ → ℝ
a b : ℝ
h0 : 0 < b
h1 : ContinuousOn f (Ici a)
h2 : f =O[atTop] fun x => exp (-b * x)
c r : ℝ
bdr : ∀ (b_1 : ℝ), b_1 ≥ r → ‖f b_1‖ ≤ c * ‖exp (-b * b_1)‖
v : ℝ := max a r
⊢ IntegrableOn f (Ioi a)
[PROOFSTEP]
have int_left : IntegrableOn f (Ioc a v) :=
  by
  rw [← intervalIntegrable_iff_integrable_Ioc_of_le (le_max_left a r)]
  have u : Icc a v ⊆ Ici a := Icc_subset_Ici_self
  exact (h1.mono u).intervalIntegrable_of_Icc (le_max_left a r)
[GOAL]
f : ℝ → ℝ
a b : ℝ
h0 : 0 < b
h1 : ContinuousOn f (Ici a)
h2 : f =O[atTop] fun x => exp (-b * x)
c r : ℝ
bdr : ∀ (b_1 : ℝ), b_1 ≥ r → ‖f b_1‖ ≤ c * ‖exp (-b * b_1)‖
v : ℝ := max a r
⊢ IntegrableOn f (Ioc a v)
[PROOFSTEP]
rw [← intervalIntegrable_iff_integrable_Ioc_of_le (le_max_left a r)]
[GOAL]
f : ℝ → ℝ
a b : ℝ
h0 : 0 < b
h1 : ContinuousOn f (Ici a)
h2 : f =O[atTop] fun x => exp (-b * x)
c r : ℝ
bdr : ∀ (b_1 : ℝ), b_1 ≥ r → ‖f b_1‖ ≤ c * ‖exp (-b * b_1)‖
v : ℝ := max a r
⊢ IntervalIntegrable f volume a (max a r)
[PROOFSTEP]
have u : Icc a v ⊆ Ici a := Icc_subset_Ici_self
[GOAL]
f : ℝ → ℝ
a b : ℝ
h0 : 0 < b
h1 : ContinuousOn f (Ici a)
h2 : f =O[atTop] fun x => exp (-b * x)
c r : ℝ
bdr : ∀ (b_1 : ℝ), b_1 ≥ r → ‖f b_1‖ ≤ c * ‖exp (-b * b_1)‖
v : ℝ := max a r
u : Icc a v ⊆ Ici a
⊢ IntervalIntegrable f volume a (max a r)
[PROOFSTEP]
exact (h1.mono u).intervalIntegrable_of_Icc (le_max_left a r)
[GOAL]
case intro.intro
f : ℝ → ℝ
a b : ℝ
h0 : 0 < b
h1 : ContinuousOn f (Ici a)
h2 : f =O[atTop] fun x => exp (-b * x)
c r : ℝ
bdr : ∀ (b_1 : ℝ), b_1 ≥ r → ‖f b_1‖ ≤ c * ‖exp (-b * b_1)‖
v : ℝ := max a r
int_left : IntegrableOn f (Ioc a v)
⊢ IntegrableOn f (Ioi a)
[PROOFSTEP]
suffices IntegrableOn f (Ioi v) by
  have t := integrableOn_union.mpr ⟨int_left, this⟩
  simpa only [Ioc_union_Ioi_eq_Ioi, le_max_iff, le_refl, true_or_iff] using t
[GOAL]
f : ℝ → ℝ
a b : ℝ
h0 : 0 < b
h1 : ContinuousOn f (Ici a)
h2 : f =O[atTop] fun x => exp (-b * x)
c r : ℝ
bdr : ∀ (b_1 : ℝ), b_1 ≥ r → ‖f b_1‖ ≤ c * ‖exp (-b * b_1)‖
v : ℝ := max a r
int_left : IntegrableOn f (Ioc a v)
this : IntegrableOn f (Ioi v)
⊢ IntegrableOn f (Ioi a)
[PROOFSTEP]
have t := integrableOn_union.mpr ⟨int_left, this⟩
[GOAL]
f : ℝ → ℝ
a b : ℝ
h0 : 0 < b
h1 : ContinuousOn f (Ici a)
h2 : f =O[atTop] fun x => exp (-b * x)
c r : ℝ
bdr : ∀ (b_1 : ℝ), b_1 ≥ r → ‖f b_1‖ ≤ c * ‖exp (-b * b_1)‖
v : ℝ := max a r
int_left : IntegrableOn f (Ioc a v)
this : IntegrableOn f (Ioi v)
t : IntegrableOn f (Ioc a v ∪ Ioi v)
⊢ IntegrableOn f (Ioi a)
[PROOFSTEP]
simpa only [Ioc_union_Ioi_eq_Ioi, le_max_iff, le_refl, true_or_iff] using t
[GOAL]
case intro.intro
f : ℝ → ℝ
a b : ℝ
h0 : 0 < b
h1 : ContinuousOn f (Ici a)
h2 : f =O[atTop] fun x => exp (-b * x)
c r : ℝ
bdr : ∀ (b_1 : ℝ), b_1 ≥ r → ‖f b_1‖ ≤ c * ‖exp (-b * b_1)‖
v : ℝ := max a r
int_left : IntegrableOn f (Ioc a v)
⊢ IntegrableOn f (Ioi v)
[PROOFSTEP]
constructor
[GOAL]
case intro.intro.left
f : ℝ → ℝ
a b : ℝ
h0 : 0 < b
h1 : ContinuousOn f (Ici a)
h2 : f =O[atTop] fun x => exp (-b * x)
c r : ℝ
bdr : ∀ (b_1 : ℝ), b_1 ≥ r → ‖f b_1‖ ≤ c * ‖exp (-b * b_1)‖
v : ℝ := max a r
int_left : IntegrableOn f (Ioc a v)
⊢ AEStronglyMeasurable f (Measure.restrict volume (Ioi v))
[PROOFSTEP]
exact (h1.mono <| Ioi_subset_Ici <| le_max_left a r).aestronglyMeasurable measurableSet_Ioi
[GOAL]
case intro.intro.right
f : ℝ → ℝ
a b : ℝ
h0 : 0 < b
h1 : ContinuousOn f (Ici a)
h2 : f =O[atTop] fun x => exp (-b * x)
c r : ℝ
bdr : ∀ (b_1 : ℝ), b_1 ≥ r → ‖f b_1‖ ≤ c * ‖exp (-b * b_1)‖
v : ℝ := max a r
int_left : IntegrableOn f (Ioc a v)
⊢ HasFiniteIntegral f
[PROOFSTEP]
have : HasFiniteIntegral (fun x : ℝ => c * exp (-b * x)) (volume.restrict (Ioi v)) :=
  (exp_neg_integrableOn_Ioi v h0).hasFiniteIntegral.const_mul c
[GOAL]
case intro.intro.right
f : ℝ → ℝ
a b : ℝ
h0 : 0 < b
h1 : ContinuousOn f (Ici a)
h2 : f =O[atTop] fun x => exp (-b * x)
c r : ℝ
bdr : ∀ (b_1 : ℝ), b_1 ≥ r → ‖f b_1‖ ≤ c * ‖exp (-b * b_1)‖
v : ℝ := max a r
int_left : IntegrableOn f (Ioc a v)
this : HasFiniteIntegral fun x => c * exp (-b * x)
⊢ HasFiniteIntegral f
[PROOFSTEP]
apply this.mono
[GOAL]
case intro.intro.right
f : ℝ → ℝ
a b : ℝ
h0 : 0 < b
h1 : ContinuousOn f (Ici a)
h2 : f =O[atTop] fun x => exp (-b * x)
c r : ℝ
bdr : ∀ (b_1 : ℝ), b_1 ≥ r → ‖f b_1‖ ≤ c * ‖exp (-b * b_1)‖
v : ℝ := max a r
int_left : IntegrableOn f (Ioc a v)
this : HasFiniteIntegral fun x => c * exp (-b * x)
⊢ ∀ᵐ (a : ℝ) ∂Measure.restrict volume (Ioi v), ‖f a‖ ≤ ‖c * exp (-b * a)‖
[PROOFSTEP]
refine' (ae_restrict_iff' measurableSet_Ioi).mpr _
[GOAL]
case intro.intro.right
f : ℝ → ℝ
a b : ℝ
h0 : 0 < b
h1 : ContinuousOn f (Ici a)
h2 : f =O[atTop] fun x => exp (-b * x)
c r : ℝ
bdr : ∀ (b_1 : ℝ), b_1 ≥ r → ‖f b_1‖ ≤ c * ‖exp (-b * b_1)‖
v : ℝ := max a r
int_left : IntegrableOn f (Ioc a v)
this : HasFiniteIntegral fun x => c * exp (-b * x)
⊢ ∀ᵐ (x : ℝ), x ∈ Ioi v → ‖f x‖ ≤ ‖c * exp (-b * x)‖
[PROOFSTEP]
refine' ae_of_all _ fun x h1x => _
[GOAL]
case intro.intro.right
f : ℝ → ℝ
a b : ℝ
h0 : 0 < b
h1 : ContinuousOn f (Ici a)
h2 : f =O[atTop] fun x => exp (-b * x)
c r : ℝ
bdr : ∀ (b_1 : ℝ), b_1 ≥ r → ‖f b_1‖ ≤ c * ‖exp (-b * b_1)‖
v : ℝ := max a r
int_left : IntegrableOn f (Ioc a v)
this : HasFiniteIntegral fun x => c * exp (-b * x)
x : ℝ
h1x : x ∈ Ioi v
⊢ ‖f x‖ ≤ ‖c * exp (-b * x)‖
[PROOFSTEP]
rw [norm_mul, norm_eq_abs]
[GOAL]
case intro.intro.right
f : ℝ → ℝ
a b : ℝ
h0 : 0 < b
h1 : ContinuousOn f (Ici a)
h2 : f =O[atTop] fun x => exp (-b * x)
c r : ℝ
bdr : ∀ (b_1 : ℝ), b_1 ≥ r → ‖f b_1‖ ≤ c * ‖exp (-b * b_1)‖
v : ℝ := max a r
int_left : IntegrableOn f (Ioc a v)
this : HasFiniteIntegral fun x => c * exp (-b * x)
x : ℝ
h1x : x ∈ Ioi v
⊢ |f x| ≤ ‖c‖ * ‖exp (-b * x)‖
[PROOFSTEP]
rw [mem_Ioi] at h1x
[GOAL]
case intro.intro.right
f : ℝ → ℝ
a b : ℝ
h0 : 0 < b
h1 : ContinuousOn f (Ici a)
h2 : f =O[atTop] fun x => exp (-b * x)
c r : ℝ
bdr : ∀ (b_1 : ℝ), b_1 ≥ r → ‖f b_1‖ ≤ c * ‖exp (-b * b_1)‖
v : ℝ := max a r
int_left : IntegrableOn f (Ioc a v)
this : HasFiniteIntegral fun x => c * exp (-b * x)
x : ℝ
h1x : v < x
⊢ |f x| ≤ ‖c‖ * ‖exp (-b * x)‖
[PROOFSTEP]
specialize bdr x ((le_max_right a r).trans h1x.le)
[GOAL]
case intro.intro.right
f : ℝ → ℝ
a b : ℝ
h0 : 0 < b
h1 : ContinuousOn f (Ici a)
h2 : f =O[atTop] fun x => exp (-b * x)
c r : ℝ
v : ℝ := max a r
int_left : IntegrableOn f (Ioc a v)
this : HasFiniteIntegral fun x => c * exp (-b * x)
x : ℝ
h1x : v < x
bdr : ‖f x‖ ≤ c * ‖exp (-b * x)‖
⊢ |f x| ≤ ‖c‖ * ‖exp (-b * x)‖
[PROOFSTEP]
exact bdr.trans (mul_le_mul_of_nonneg_right (le_abs_self c) (norm_nonneg _))


[GOAL]
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝¹ : Zero α
inst✝ : DecidableEq n
A : Matrix n n α
h : IsDiag A
i j : n
⊢ diagonal (diag A) i j = A i j
[PROOFSTEP]
obtain rfl | hij := Decidable.eq_or_ne i j
[GOAL]
case inl
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝¹ : Zero α
inst✝ : DecidableEq n
A : Matrix n n α
h : IsDiag A
i : n
⊢ diagonal (diag A) i i = A i i
[PROOFSTEP]
rw [diagonal_apply_eq, diag]
[GOAL]
case inr
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝¹ : Zero α
inst✝ : DecidableEq n
A : Matrix n n α
h : IsDiag A
i j : n
hij : i ≠ j
⊢ diagonal (diag A) i j = A i j
[PROOFSTEP]
rw [diagonal_apply_ne _ hij, h hij]
[GOAL]
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝¹ : Zero α
inst✝ : Zero β
A : Matrix n n α
ha : IsDiag A
f : α → β
hf : f 0 = 0
⊢ IsDiag (Matrix.map A f)
[PROOFSTEP]
intro i j h
[GOAL]
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝¹ : Zero α
inst✝ : Zero β
A : Matrix n n α
ha : IsDiag A
f : α → β
hf : f 0 = 0
i j : n
h : i ≠ j
⊢ Matrix.map A f i j = 0
[PROOFSTEP]
simp [ha h, hf]
[GOAL]
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : AddGroup α
A : Matrix n n α
ha : IsDiag A
⊢ IsDiag (-A)
[PROOFSTEP]
intro i j h
[GOAL]
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : AddGroup α
A : Matrix n n α
ha : IsDiag A
i j : n
h : i ≠ j
⊢ (-A) i j = 0
[PROOFSTEP]
simp [ha h]
[GOAL]
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : AddZeroClass α
A B : Matrix n n α
ha : IsDiag A
hb : IsDiag B
⊢ IsDiag (A + B)
[PROOFSTEP]
intro i j h
[GOAL]
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : AddZeroClass α
A B : Matrix n n α
ha : IsDiag A
hb : IsDiag B
i j : n
h : i ≠ j
⊢ (A + B) i j = 0
[PROOFSTEP]
simp [ha h, hb h]
[GOAL]
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : AddGroup α
A B : Matrix n n α
ha : IsDiag A
hb : IsDiag B
⊢ IsDiag (A - B)
[PROOFSTEP]
intro i j h
[GOAL]
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : AddGroup α
A B : Matrix n n α
ha : IsDiag A
hb : IsDiag B
i j : n
h : i ≠ j
⊢ (A - B) i j = 0
[PROOFSTEP]
simp [ha h, hb h]
[GOAL]
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝² : Monoid R
inst✝¹ : AddMonoid α
inst✝ : DistribMulAction R α
k : R
A : Matrix n n α
ha : IsDiag A
⊢ IsDiag (k • A)
[PROOFSTEP]
intro i j h
[GOAL]
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝² : Monoid R
inst✝¹ : AddMonoid α
inst✝ : DistribMulAction R α
k : R
A : Matrix n n α
ha : IsDiag A
i j : n
h : i ≠ j
⊢ (k • A) i j = 0
[PROOFSTEP]
simp [ha h]
[GOAL]
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝¹ : Semiring α
inst✝ : StarRing α
A : Matrix n n α
ha : IsDiag Aᴴ
⊢ IsDiag A
[PROOFSTEP]
convert ha.conjTranspose
[GOAL]
case h.e'_4
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝¹ : Semiring α
inst✝ : StarRing α
A : Matrix n n α
ha : IsDiag Aᴴ
⊢ A = Aᴴᴴ
[PROOFSTEP]
simp
[GOAL]
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : MulZeroClass α
A : Matrix m m α
B : Matrix n n α
hA : IsDiag A
hB : IsDiag B
⊢ IsDiag (kroneckerMap (fun x x_1 => x * x_1) A B)
[PROOFSTEP]
rintro ⟨a, b⟩ ⟨c, d⟩ h
[GOAL]
case mk.mk
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : MulZeroClass α
A : Matrix m m α
B : Matrix n n α
hA : IsDiag A
hB : IsDiag B
a : m
b : n
c : m
d : n
h : (a, b) ≠ (c, d)
⊢ kroneckerMap (fun x x_1 => x * x_1) A B (a, b) (c, d) = 0
[PROOFSTEP]
simp only [Prod.mk.inj_iff, Ne.def, not_and_or] at h
[GOAL]
case mk.mk
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : MulZeroClass α
A : Matrix m m α
B : Matrix n n α
hA : IsDiag A
hB : IsDiag B
a : m
b : n
c : m
d : n
h : ¬a = c ∨ ¬b = d
⊢ kroneckerMap (fun x x_1 => x * x_1) A B (a, b) (c, d) = 0
[PROOFSTEP]
cases' h with hac hbd
[GOAL]
case mk.mk.inl
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : MulZeroClass α
A : Matrix m m α
B : Matrix n n α
hA : IsDiag A
hB : IsDiag B
a : m
b : n
c : m
d : n
hac : ¬a = c
⊢ kroneckerMap (fun x x_1 => x * x_1) A B (a, b) (c, d) = 0
[PROOFSTEP]
simp [hA hac]
[GOAL]
case mk.mk.inr
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : MulZeroClass α
A : Matrix m m α
B : Matrix n n α
hA : IsDiag A
hB : IsDiag B
a : m
b : n
c : m
d : n
hbd : ¬b = d
⊢ kroneckerMap (fun x x_1 => x * x_1) A B (a, b) (c, d) = 0
[PROOFSTEP]
simp [hB hbd]
[GOAL]
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : Zero α
A : Matrix n n α
h : IsDiag A
⊢ IsSymm A
[PROOFSTEP]
ext i j
[GOAL]
case a.h
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : Zero α
A : Matrix n n α
h : IsDiag A
i j : n
⊢ Aᵀ i j = A i j
[PROOFSTEP]
by_cases g : i = j
[GOAL]
case pos
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : Zero α
A : Matrix n n α
h : IsDiag A
i j : n
g : i = j
⊢ Aᵀ i j = A i j
[PROOFSTEP]
rw [g, transpose_apply]
[GOAL]
case neg
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : Zero α
A : Matrix n n α
h : IsDiag A
i j : n
g : ¬i = j
⊢ Aᵀ i j = A i j
[PROOFSTEP]
simp [h g, h (Ne.symm g)]
[GOAL]
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : Zero α
A : Matrix m m α
D : Matrix n n α
ha : IsDiag A
hd : IsDiag D
⊢ IsDiag (Matrix.fromBlocks A 0 0 D)
[PROOFSTEP]
rintro (i | i) (j | j) hij
[GOAL]
case inl.inl
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : Zero α
A : Matrix m m α
D : Matrix n n α
ha : IsDiag A
hd : IsDiag D
i j : m
hij : Sum.inl i ≠ Sum.inl j
⊢ Matrix.fromBlocks A 0 0 D (Sum.inl i) (Sum.inl j) = 0
[PROOFSTEP]
exact ha (ne_of_apply_ne _ hij)
[GOAL]
case inl.inr
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : Zero α
A : Matrix m m α
D : Matrix n n α
ha : IsDiag A
hd : IsDiag D
i : m
j : n
hij : Sum.inl i ≠ Sum.inr j
⊢ Matrix.fromBlocks A 0 0 D (Sum.inl i) (Sum.inr j) = 0
[PROOFSTEP]
rfl
[GOAL]
case inr.inl
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : Zero α
A : Matrix m m α
D : Matrix n n α
ha : IsDiag A
hd : IsDiag D
i : n
j : m
hij : Sum.inr i ≠ Sum.inl j
⊢ Matrix.fromBlocks A 0 0 D (Sum.inr i) (Sum.inl j) = 0
[PROOFSTEP]
rfl
[GOAL]
case inr.inr
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : Zero α
A : Matrix m m α
D : Matrix n n α
ha : IsDiag A
hd : IsDiag D
i j : n
hij : Sum.inr i ≠ Sum.inr j
⊢ Matrix.fromBlocks A 0 0 D (Sum.inr i) (Sum.inr j) = 0
[PROOFSTEP]
exact hd (ne_of_apply_ne _ hij)
[GOAL]
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : Zero α
A : Matrix m m α
B : Matrix m n α
C : Matrix n m α
D : Matrix n n α
⊢ IsDiag (fromBlocks A B C D) ↔ IsDiag A ∧ B = 0 ∧ C = 0 ∧ IsDiag D
[PROOFSTEP]
constructor
[GOAL]
case mp
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : Zero α
A : Matrix m m α
B : Matrix m n α
C : Matrix n m α
D : Matrix n n α
⊢ IsDiag (fromBlocks A B C D) → IsDiag A ∧ B = 0 ∧ C = 0 ∧ IsDiag D
[PROOFSTEP]
intro h
[GOAL]
case mp
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : Zero α
A : Matrix m m α
B : Matrix m n α
C : Matrix n m α
D : Matrix n n α
h : IsDiag (fromBlocks A B C D)
⊢ IsDiag A ∧ B = 0 ∧ C = 0 ∧ IsDiag D
[PROOFSTEP]
refine' ⟨fun i j hij => _, ext fun i j => _, ext fun i j => _, fun i j hij => _⟩
[GOAL]
case mp.refine'_1
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : Zero α
A : Matrix m m α
B : Matrix m n α
C : Matrix n m α
D : Matrix n n α
h : IsDiag (fromBlocks A B C D)
i j : m
hij : i ≠ j
⊢ A i j = 0
[PROOFSTEP]
exact h (Sum.inl_injective.ne hij)
[GOAL]
case mp.refine'_2
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : Zero α
A : Matrix m m α
B : Matrix m n α
C : Matrix n m α
D : Matrix n n α
h : IsDiag (fromBlocks A B C D)
i : m
j : n
⊢ B i j = OfNat.ofNat 0 i j
[PROOFSTEP]
exact h Sum.inl_ne_inr
[GOAL]
case mp.refine'_3
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : Zero α
A : Matrix m m α
B : Matrix m n α
C : Matrix n m α
D : Matrix n n α
h : IsDiag (fromBlocks A B C D)
i : n
j : m
⊢ C i j = OfNat.ofNat 0 i j
[PROOFSTEP]
exact h Sum.inr_ne_inl
[GOAL]
case mp.refine'_4
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : Zero α
A : Matrix m m α
B : Matrix m n α
C : Matrix n m α
D : Matrix n n α
h : IsDiag (fromBlocks A B C D)
i j : n
hij : i ≠ j
⊢ D i j = 0
[PROOFSTEP]
exact h (Sum.inr_injective.ne hij)
[GOAL]
case mpr
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : Zero α
A : Matrix m m α
B : Matrix m n α
C : Matrix n m α
D : Matrix n n α
⊢ IsDiag A ∧ B = 0 ∧ C = 0 ∧ IsDiag D → IsDiag (fromBlocks A B C D)
[PROOFSTEP]
rintro ⟨ha, hb, hc, hd⟩
[GOAL]
case mpr.intro.intro.intro
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : Zero α
A : Matrix m m α
B : Matrix m n α
C : Matrix n m α
D : Matrix n n α
ha : IsDiag A
hb : B = 0
hc : C = 0
hd : IsDiag D
⊢ IsDiag (fromBlocks A B C D)
[PROOFSTEP]
convert IsDiag.fromBlocks ha hd
[GOAL]
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : Zero α
A : Matrix m m α
C : Matrix n m α
D : Matrix n n α
h : IsSymm (Matrix.fromBlocks A 0 C D)
ha : IsDiag A
hd : IsDiag D
⊢ IsDiag (Matrix.fromBlocks A 0 C D)
[PROOFSTEP]
rw [← (isSymm_fromBlocks_iff.1 h).2.1]
[GOAL]
α : Type u_1
β : Type u_2
R : Type u_3
n : Type u_4
m : Type u_5
inst✝ : Zero α
A : Matrix m m α
C : Matrix n m α
D : Matrix n n α
h : IsSymm (Matrix.fromBlocks A 0 C D)
ha : IsDiag A
hd : IsDiag D
⊢ IsDiag (Matrix.fromBlocks A 0 0ᵀ D)
[PROOFSTEP]
exact ha.fromBlocks hd


[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : AddMonoidWithOne α
inst✝ : AddMonoidWithOne β
n : ℕ
⊢ (↑n).fst = ↑n
[PROOFSTEP]
induction n
[GOAL]
case zero
α : Type u_1
β : Type u_2
inst✝¹ : AddMonoidWithOne α
inst✝ : AddMonoidWithOne β
⊢ (↑Nat.zero).fst = ↑Nat.zero
[PROOFSTEP]
simp [*]
[GOAL]
case succ
α : Type u_1
β : Type u_2
inst✝¹ : AddMonoidWithOne α
inst✝ : AddMonoidWithOne β
n✝ : ℕ
n_ih✝ : (↑n✝).fst = ↑n✝
⊢ (↑(Nat.succ n✝)).fst = ↑(Nat.succ n✝)
[PROOFSTEP]
simp [*]
[GOAL]
α : Type u_1
β : Type u_2
inst✝¹ : AddMonoidWithOne α
inst✝ : AddMonoidWithOne β
n : ℕ
⊢ (↑n).snd = ↑n
[PROOFSTEP]
induction n
[GOAL]
case zero
α : Type u_1
β : Type u_2
inst✝¹ : AddMonoidWithOne α
inst✝ : AddMonoidWithOne β
⊢ (↑Nat.zero).snd = ↑Nat.zero
[PROOFSTEP]
simp [*]
[GOAL]
case succ
α : Type u_1
β : Type u_2
inst✝¹ : AddMonoidWithOne α
inst✝ : AddMonoidWithOne β
n✝ : ℕ
n_ih✝ : (↑n✝).snd = ↑n✝
⊢ (↑(Nat.succ n✝)).snd = ↑(Nat.succ n✝)
[PROOFSTEP]
simp [*]


[GOAL]
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
hs : x ∈ (chartAt H c).toLocalEquiv.source
hd : dist (↑(extChartAt I c) x) (↑(extChartAt I c) c) ≤ f.rIn
⊢ ↑f x = 1
[PROOFSTEP]
simp only [f.eqOn_source hs, (· ∘ ·), f.one_of_mem_closedBall hd]
[GOAL]
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
⊢ support ↑f = (chartAt H c).toLocalEquiv.source ∩ ↑(extChartAt I c) ⁻¹' ball (↑(extChartAt I c) c) f.rOut
[PROOFSTEP]
rw [coe_def, support_indicator, support_comp_eq_preimage, ← extChartAt_source I, ←
  (extChartAt I c).symm_image_target_inter_eq', ← (extChartAt I c).symm_image_target_inter_eq', f.support_eq]
[GOAL]
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
⊢ IsOpen (support ↑f)
[PROOFSTEP]
rw [support_eq_inter_preimage]
[GOAL]
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
⊢ IsOpen ((chartAt H c).toLocalEquiv.source ∩ ↑(extChartAt I c) ⁻¹' ball (↑(extChartAt I c) c) f.rOut)
[PROOFSTEP]
exact isOpen_extChartAt_preimage I c isOpen_ball
[GOAL]
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
⊢ support ↑f = ↑(LocalEquiv.symm (extChartAt I c)) '' (ball (↑(extChartAt I c) c) f.rOut ∩ range ↑I)
[PROOFSTEP]
rw [f.support_eq_inter_preimage, ← extChartAt_source I, ← (extChartAt I c).symm_image_target_inter_eq', inter_comm,
  ball_inter_range_eq_ball_inter_target]
[GOAL]
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
⊢ support ↑f ⊆ (chartAt H c).toLocalEquiv.source
[PROOFSTEP]
rw [f.support_eq_inter_preimage, ← extChartAt_source I]
[GOAL]
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
⊢ (extChartAt I c).source ∩ ↑(extChartAt I c) ⁻¹' ball (↑(extChartAt I c) c) f.rOut ⊆ (extChartAt I c).source
[PROOFSTEP]
exact inter_subset_left _ _
[GOAL]
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
s : Set M
hs : s ⊆ support ↑f
⊢ ↑(extChartAt I c) '' s =
    closedBall (↑(extChartAt I c) c) f.rOut ∩ range ↑I ∩ ↑(LocalEquiv.symm (extChartAt I c)) ⁻¹' s
[PROOFSTEP]
rw [support_eq_inter_preimage, subset_inter_iff, ← extChartAt_source I, ← image_subset_iff] at hs
[GOAL]
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
s : Set M
hs : s ⊆ (extChartAt I c).source ∧ ↑(extChartAt I c) '' s ⊆ ball (↑(extChartAt I c) c) f.rOut
⊢ ↑(extChartAt I c) '' s =
    closedBall (↑(extChartAt I c) c) f.rOut ∩ range ↑I ∩ ↑(LocalEquiv.symm (extChartAt I c)) ⁻¹' s
[PROOFSTEP]
cases' hs with hse hsf
[GOAL]
case intro
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
s : Set M
hse : s ⊆ (extChartAt I c).source
hsf : ↑(extChartAt I c) '' s ⊆ ball (↑(extChartAt I c) c) f.rOut
⊢ ↑(extChartAt I c) '' s =
    closedBall (↑(extChartAt I c) c) f.rOut ∩ range ↑I ∩ ↑(LocalEquiv.symm (extChartAt I c)) ⁻¹' s
[PROOFSTEP]
apply Subset.antisymm
[GOAL]
case intro.h₁
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
s : Set M
hse : s ⊆ (extChartAt I c).source
hsf : ↑(extChartAt I c) '' s ⊆ ball (↑(extChartAt I c) c) f.rOut
⊢ ↑(extChartAt I c) '' s ⊆
    closedBall (↑(extChartAt I c) c) f.rOut ∩ range ↑I ∩ ↑(LocalEquiv.symm (extChartAt I c)) ⁻¹' s
[PROOFSTEP]
refine' subset_inter (subset_inter (hsf.trans ball_subset_closedBall) _) _
[GOAL]
case intro.h₁.refine'_1
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
s : Set M
hse : s ⊆ (extChartAt I c).source
hsf : ↑(extChartAt I c) '' s ⊆ ball (↑(extChartAt I c) c) f.rOut
⊢ ↑(extChartAt I c) '' s ⊆ range ↑I
[PROOFSTEP]
rintro _ ⟨x, -, rfl⟩
[GOAL]
case intro.h₁.refine'_1.intro.intro
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x✝ : M
s : Set M
hse : s ⊆ (extChartAt I c).source
hsf : ↑(extChartAt I c) '' s ⊆ ball (↑(extChartAt I c) c) f.rOut
x : M
⊢ ↑(extChartAt I c) x ∈ range ↑I
[PROOFSTEP]
exact mem_range_self _
[GOAL]
case intro.h₁.refine'_2
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
s : Set M
hse : s ⊆ (extChartAt I c).source
hsf : ↑(extChartAt I c) '' s ⊆ ball (↑(extChartAt I c) c) f.rOut
⊢ ↑(extChartAt I c) '' s ⊆ ↑(LocalEquiv.symm (extChartAt I c)) ⁻¹' s
[PROOFSTEP]
rw [(extChartAt I c).image_eq_target_inter_inv_preimage hse]
[GOAL]
case intro.h₁.refine'_2
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
s : Set M
hse : s ⊆ (extChartAt I c).source
hsf : ↑(extChartAt I c) '' s ⊆ ball (↑(extChartAt I c) c) f.rOut
⊢ (extChartAt I c).target ∩ ↑(LocalEquiv.symm (extChartAt I c)) ⁻¹' s ⊆ ↑(LocalEquiv.symm (extChartAt I c)) ⁻¹' s
[PROOFSTEP]
exact inter_subset_right _ _
[GOAL]
case intro.h₂
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
s : Set M
hse : s ⊆ (extChartAt I c).source
hsf : ↑(extChartAt I c) '' s ⊆ ball (↑(extChartAt I c) c) f.rOut
⊢ closedBall (↑(extChartAt I c) c) f.rOut ∩ range ↑I ∩ ↑(LocalEquiv.symm (extChartAt I c)) ⁻¹' s ⊆
    ↑(extChartAt I c) '' s
[PROOFSTEP]
refine' Subset.trans (inter_subset_inter_left _ f.closedBall_subset) _
[GOAL]
case intro.h₂
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
s : Set M
hse : s ⊆ (extChartAt I c).source
hsf : ↑(extChartAt I c) '' s ⊆ ball (↑(extChartAt I c) c) f.rOut
⊢ (extChartAt I c).target ∩ ↑(LocalEquiv.symm (extChartAt I c)) ⁻¹' s ⊆ ↑(extChartAt I c) '' s
[PROOFSTEP]
rw [(extChartAt I c).image_eq_target_inter_inv_preimage hse]
[GOAL]
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
⊢ ↑f x ∈ Icc 0 1
[PROOFSTEP]
have : f x = 0 ∨ f x = _ := indicator_eq_zero_or_self _ _ _
[GOAL]
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
this : ↑f x = 0 ∨ ↑f x = (↑f.toContDiffBump ∘ ↑(extChartAt I c)) x
⊢ ↑f x ∈ Icc 0 1
[PROOFSTEP]
cases' this with h h
[GOAL]
case inl
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
h : ↑f x = 0
⊢ ↑f x ∈ Icc 0 1
[PROOFSTEP]
rw [h]
[GOAL]
case inr
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
h : ↑f x = (↑f.toContDiffBump ∘ ↑(extChartAt I c)) x
⊢ ↑f x ∈ Icc 0 1
[PROOFSTEP]
rw [h]
[GOAL]
case inl
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
h : ↑f x = 0
⊢ 0 ∈ Icc 0 1
case inr
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
h : ↑f x = (↑f.toContDiffBump ∘ ↑(extChartAt I c)) x
⊢ (↑f.toContDiffBump ∘ ↑(extChartAt I c)) x ∈ Icc 0 1
[PROOFSTEP]
exacts [left_mem_Icc.2 zero_le_one, ⟨f.nonneg, f.le_one⟩]
[GOAL]
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
hs : x ∈ (chartAt H c).toLocalEquiv.source
hd : dist (↑(extChartAt I c) x) (↑(extChartAt I c) c) < f.rIn
⊢ ↑f =ᶠ[𝓝 x] 1
[PROOFSTEP]
filter_upwards [IsOpen.mem_nhds (isOpen_extChartAt_preimage I c isOpen_ball) ⟨hs, hd⟩]
[GOAL]
case h
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
hs : x ∈ (chartAt H c).toLocalEquiv.source
hd : dist (↑(extChartAt I c) x) (↑(extChartAt I c) c) < f.rIn
⊢ ∀ (a : M),
    a ∈ (chartAt H c).toLocalEquiv.source ∩ ↑(extChartAt I c) ⁻¹' ball (↑(extChartAt I c) c) f.rIn →
      ↑f a = OfNat.ofNat 1 a
[PROOFSTEP]
rintro z ⟨hzs, hzd⟩
[GOAL]
case h.intro
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
hs : x ∈ (chartAt H c).toLocalEquiv.source
hd : dist (↑(extChartAt I c) x) (↑(extChartAt I c) c) < f.rIn
z : M
hzs : z ∈ (chartAt H c).toLocalEquiv.source
hzd : z ∈ ↑(extChartAt I c) ⁻¹' ball (↑(extChartAt I c) c) f.rIn
⊢ ↑f z = OfNat.ofNat 1 z
[PROOFSTEP]
exact f.one_of_dist_le hzs <| le_of_lt hzd
[GOAL]
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
⊢ dist (↑(extChartAt I c) c) (↑(extChartAt I c) c) < f.rIn
[PROOFSTEP]
rw [dist_self]
[GOAL]
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
⊢ 0 < f.rIn
[PROOFSTEP]
exact f.rIn_pos
[GOAL]
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x✝ x : M
hx : ↑f x = OfNat.ofNat 1 x
⊢ ↑f x ≠ 0
[PROOFSTEP]
rw [hx]
[GOAL]
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x✝ x : M
hx : ↑f x = OfNat.ofNat 1 x
⊢ OfNat.ofNat 1 x ≠ 0
[PROOFSTEP]
exact one_ne_zero
[GOAL]
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
⊢ HasBasis (𝓝[range ↑I] ↑(extChartAt I c) c) (fun x => True) fun f => closedBall (↑(extChartAt I c) c) f.rOut ∩ range ↑I
[PROOFSTEP]
refine'
  ((nhdsWithin_hasBasis nhds_basis_closedBall _).restrict_subset (extChartAt_target_mem_nhdsWithin _ _)).to_has_basis' _
    _
[GOAL]
case refine'_1
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
⊢ ∀ (i : ℝ),
    0 < i ∧ closedBall (↑(extChartAt I c) c) i ∩ range ↑I ⊆ (extChartAt I c).target →
      ∃ i', True ∧ closedBall (↑(extChartAt I c) c) i'.rOut ∩ range ↑I ⊆ closedBall (↑(extChartAt I c) c) i ∩ range ↑I
[PROOFSTEP]
rintro R ⟨hR0, hsub⟩
[GOAL]
case refine'_1.intro
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
R : ℝ
hR0 : 0 < R
hsub : closedBall (↑(extChartAt I c) c) R ∩ range ↑I ⊆ (extChartAt I c).target
⊢ ∃ i', True ∧ closedBall (↑(extChartAt I c) c) i'.rOut ∩ range ↑I ⊆ closedBall (↑(extChartAt I c) c) R ∩ range ↑I
[PROOFSTEP]
exact ⟨⟨⟨R / 2, R, half_pos hR0, half_lt_self hR0⟩, hsub⟩, trivial, Subset.rfl⟩
[GOAL]
case refine'_2
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
⊢ ∀ (i' : SmoothBumpFunction I c),
    True → closedBall (↑(extChartAt I c) c) i'.rOut ∩ range ↑I ∈ 𝓝[range ↑I] ↑(extChartAt I c) c
[PROOFSTEP]
exact fun f _ => inter_mem (mem_nhdsWithin_of_mem_nhds <| closedBall_mem_nhds _ f.rOut_pos) self_mem_nhdsWithin
[GOAL]
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
s : Set M
hsc : IsClosed s
hs : s ⊆ support ↑f
⊢ IsClosed (↑(extChartAt I c) '' s)
[PROOFSTEP]
rw [f.image_eq_inter_preimage_of_subset_support hs]
[GOAL]
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
s : Set M
hsc : IsClosed s
hs : s ⊆ support ↑f
⊢ IsClosed (closedBall (↑(extChartAt I c) c) f.rOut ∩ range ↑I ∩ ↑(LocalEquiv.symm (extChartAt I c)) ⁻¹' s)
[PROOFSTEP]
refine' ContinuousOn.preimage_closed_of_closed ((continuousOn_extChartAt_symm _ _).mono f.closedBall_subset) _ hsc
[GOAL]
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
s : Set M
hsc : IsClosed s
hs : s ⊆ support ↑f
⊢ IsClosed (closedBall (↑(extChartAt I c) c) f.rOut ∩ range ↑I)
[PROOFSTEP]
exact IsClosed.inter isClosed_ball I.closed_range
[GOAL]
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
s : Set M
hsc : IsClosed s
hs : s ⊆ support ↑f
⊢ ∃ r, r ∈ Ioo 0 f.rOut ∧ s ⊆ (chartAt H c).toLocalEquiv.source ∩ ↑(extChartAt I c) ⁻¹' ball (↑(extChartAt I c) c) r
[PROOFSTEP]
set e := extChartAt I c
[GOAL]
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
s : Set M
hsc : IsClosed s
hs : s ⊆ support ↑f
e : LocalEquiv M E := extChartAt I c
⊢ ∃ r, r ∈ Ioo 0 f.rOut ∧ s ⊆ (chartAt H c).toLocalEquiv.source ∩ ↑(extChartAt I c) ⁻¹' ball (↑(extChartAt I c) c) r
[PROOFSTEP]
have : IsClosed (e '' s) := f.isClosed_image_of_isClosed hsc hs
[GOAL]
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
s : Set M
hsc : IsClosed s
hs : s ⊆ support ↑f
e : LocalEquiv M E := extChartAt I c
this : IsClosed (↑e '' s)
⊢ ∃ r, r ∈ Ioo 0 f.rOut ∧ s ⊆ (chartAt H c).toLocalEquiv.source ∩ ↑(extChartAt I c) ⁻¹' ball (↑(extChartAt I c) c) r
[PROOFSTEP]
rw [support_eq_inter_preimage, subset_inter_iff, ← image_subset_iff] at hs
[GOAL]
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
s : Set M
hsc : IsClosed s
hs : s ⊆ (chartAt H c).toLocalEquiv.source ∧ ↑(extChartAt I c) '' s ⊆ ball (↑(extChartAt I c) c) f.rOut
e : LocalEquiv M E := extChartAt I c
this : IsClosed (↑e '' s)
⊢ ∃ r, r ∈ Ioo 0 f.rOut ∧ s ⊆ (chartAt H c).toLocalEquiv.source ∩ ↑(extChartAt I c) ⁻¹' ball (↑(extChartAt I c) c) r
[PROOFSTEP]
rcases exists_pos_lt_subset_ball f.rOut_pos this hs.2 with ⟨r, hrR, hr⟩
[GOAL]
case intro.intro
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
s : Set M
hsc : IsClosed s
hs : s ⊆ (chartAt H c).toLocalEquiv.source ∧ ↑(extChartAt I c) '' s ⊆ ball (↑(extChartAt I c) c) f.rOut
e : LocalEquiv M E := extChartAt I c
this : IsClosed (↑e '' s)
r : ℝ
hrR : r ∈ Ioo 0 f.rOut
hr : ↑e '' s ⊆ ball (↑(extChartAt I c) c) r
⊢ ∃ r, r ∈ Ioo 0 f.rOut ∧ s ⊆ (chartAt H c).toLocalEquiv.source ∩ ↑(extChartAt I c) ⁻¹' ball (↑(extChartAt I c) c) r
[PROOFSTEP]
exact ⟨r, hrR, subset_inter hs.1 (image_subset_iff.1 hr)⟩
[GOAL]
E : Type uE
inst✝⁶ : NormedAddCommGroup E
inst✝⁵ : NormedSpace ℝ E
inst✝⁴ : FiniteDimensional ℝ E
H : Type uH
inst✝³ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝² : TopologicalSpace M
inst✝¹ : ChartedSpace H M
inst✝ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
r : ℝ
hr : r ∈ Ioo 0 f.rOut
⊢ support ↑(updateRIn f r hr) = support ↑f
[PROOFSTEP]
simp only [support_eq_inter_preimage, updateRIn_rOut]
[GOAL]
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : FiniteDimensional ℝ E
H : Type uH
inst✝⁴ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝³ : TopologicalSpace M
inst✝² : ChartedSpace H M
inst✝¹ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
inst✝ : T2Space M
⊢ tsupport ↑f ⊆ ↑(LocalEquiv.symm (extChartAt I c)) '' (closedBall (↑(extChartAt I c) c) f.rOut ∩ range ↑I)
[PROOFSTEP]
rw [tsupport, support_eq_symm_image]
[GOAL]
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : FiniteDimensional ℝ E
H : Type uH
inst✝⁴ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝³ : TopologicalSpace M
inst✝² : ChartedSpace H M
inst✝¹ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
inst✝ : T2Space M
⊢ closure (↑(LocalEquiv.symm (extChartAt I c)) '' (ball (↑(extChartAt I c) c) f.rOut ∩ range ↑I)) ⊆
    ↑(LocalEquiv.symm (extChartAt I c)) '' (closedBall (↑(extChartAt I c) c) f.rOut ∩ range ↑I)
[PROOFSTEP]
exact
  closure_minimal (image_subset _ <| inter_subset_inter_left _ ball_subset_closedBall) f.isClosed_symm_image_closedBall
[GOAL]
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : FiniteDimensional ℝ E
H : Type uH
inst✝⁴ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝³ : TopologicalSpace M
inst✝² : ChartedSpace H M
inst✝¹ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
inst✝ : T2Space M
⊢ tsupport ↑f ⊆ (chartAt H c).toLocalEquiv.source
[PROOFSTEP]
simpa only [extChartAt_source] using f.tsupport_subset_extChartAt_source
[GOAL]
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : FiniteDimensional ℝ E
H : Type uH
inst✝⁴ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝³ : TopologicalSpace M
inst✝² : ChartedSpace H M
inst✝¹ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
inst✝ : T2Space M
⊢ HasBasis (𝓝 c) (fun x => True) fun f => tsupport ↑f
[PROOFSTEP]
have :
  (𝓝 c).HasBasis (fun _ : SmoothBumpFunction I c => True) fun f =>
    (extChartAt I c).symm '' (closedBall (extChartAt I c c) f.rOut ∩ range I) :=
  by
  rw [← map_extChartAt_symm_nhdsWithin_range I c]
  exact nhdsWithin_range_basis.map _
[GOAL]
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : FiniteDimensional ℝ E
H : Type uH
inst✝⁴ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝³ : TopologicalSpace M
inst✝² : ChartedSpace H M
inst✝¹ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
inst✝ : T2Space M
⊢ HasBasis (𝓝 c) (fun x => True) fun f =>
    ↑(LocalEquiv.symm (extChartAt I c)) '' (closedBall (↑(extChartAt I c) c) f.rOut ∩ range ↑I)
[PROOFSTEP]
rw [← map_extChartAt_symm_nhdsWithin_range I c]
[GOAL]
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : FiniteDimensional ℝ E
H : Type uH
inst✝⁴ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝³ : TopologicalSpace M
inst✝² : ChartedSpace H M
inst✝¹ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
inst✝ : T2Space M
⊢ HasBasis (map (↑(LocalEquiv.symm (extChartAt I c))) (𝓝[range ↑I] ↑(extChartAt I c) c)) (fun x => True) fun f =>
    ↑(LocalEquiv.symm (extChartAt I c)) '' (closedBall (↑(extChartAt I c) c) f.rOut ∩ range ↑I)
[PROOFSTEP]
exact nhdsWithin_range_basis.map _
[GOAL]
E : Type uE
inst✝⁷ : NormedAddCommGroup E
inst✝⁶ : NormedSpace ℝ E
inst✝⁵ : FiniteDimensional ℝ E
H : Type uH
inst✝⁴ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝³ : TopologicalSpace M
inst✝² : ChartedSpace H M
inst✝¹ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
inst✝ : T2Space M
this :
  HasBasis (𝓝 c) (fun x => True) fun f =>
    ↑(LocalEquiv.symm (extChartAt I c)) '' (closedBall (↑(extChartAt I c) c) f.rOut ∩ range ↑I)
⊢ HasBasis (𝓝 c) (fun x => True) fun f => tsupport ↑f
[PROOFSTEP]
refine'
  this.to_has_basis' (fun f _ => ⟨f, trivial, f.tsupport_subset_symm_image_closedBall⟩) fun f _ => f.tsupport_mem_nhds
[GOAL]
E : Type uE
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : FiniteDimensional ℝ E
H : Type uH
inst✝⁵ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝⁴ : TopologicalSpace M
inst✝³ : ChartedSpace H M
inst✝² : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
inst✝¹ : T2Space M
inst✝ : SmoothManifoldWithCorners I M
⊢ Smooth I 𝓘(ℝ, ℝ) ↑f
[PROOFSTEP]
refine' contMDiff_of_support fun x hx => _
[GOAL]
E : Type uE
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : FiniteDimensional ℝ E
H : Type uH
inst✝⁵ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝⁴ : TopologicalSpace M
inst✝³ : ChartedSpace H M
inst✝² : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x✝ : M
inst✝¹ : T2Space M
inst✝ : SmoothManifoldWithCorners I M
x : M
hx : x ∈ tsupport ↑f
⊢ ContMDiffAt I 𝓘(ℝ, ℝ) ⊤ (↑f) x
[PROOFSTEP]
have : x ∈ (chartAt H c).source := f.tsupport_subset_chartAt_source hx
[GOAL]
E : Type uE
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : FiniteDimensional ℝ E
H : Type uH
inst✝⁵ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝⁴ : TopologicalSpace M
inst✝³ : ChartedSpace H M
inst✝² : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x✝ : M
inst✝¹ : T2Space M
inst✝ : SmoothManifoldWithCorners I M
x : M
hx : x ∈ tsupport ↑f
this : x ∈ (chartAt H c).toLocalEquiv.source
⊢ ContMDiffAt I 𝓘(ℝ, ℝ) ⊤ (↑f) x
[PROOFSTEP]
refine'
  ContMDiffAt.congr_of_eventuallyEq _ <|
    f.eqOn_source.eventuallyEq_of_mem <| IsOpen.mem_nhds (chartAt H c).open_source this
[GOAL]
E : Type uE
inst✝⁸ : NormedAddCommGroup E
inst✝⁷ : NormedSpace ℝ E
inst✝⁶ : FiniteDimensional ℝ E
H : Type uH
inst✝⁵ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝⁴ : TopologicalSpace M
inst✝³ : ChartedSpace H M
inst✝² : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x✝ : M
inst✝¹ : T2Space M
inst✝ : SmoothManifoldWithCorners I M
x : M
hx : x ∈ tsupport ↑f
this : x ∈ (chartAt H c).toLocalEquiv.source
⊢ ContMDiffAt I 𝓘(ℝ, ℝ) ⊤ (↑f.toContDiffBump ∘ ↑(extChartAt I c)) x
[PROOFSTEP]
exact f.contDiffAt.contMDiffAt.comp _ (contMDiffAt_extChartAt' this)
[GOAL]
E : Type uE
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : NormedSpace ℝ E
inst✝⁸ : FiniteDimensional ℝ E
H : Type uH
inst✝⁷ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝⁶ : TopologicalSpace M
inst✝⁵ : ChartedSpace H M
inst✝⁴ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x : M
inst✝³ : T2Space M
inst✝² : SmoothManifoldWithCorners I M
G : Type u_1
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
g : M → G
hg : SmoothOn I 𝓘(ℝ, G) g (chartAt H c).toLocalEquiv.source
⊢ Smooth I 𝓘(ℝ, G) fun x => ↑f x • g x
[PROOFSTEP]
refine contMDiff_of_support fun x hx => ?_
[GOAL]
E : Type uE
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : NormedSpace ℝ E
inst✝⁸ : FiniteDimensional ℝ E
H : Type uH
inst✝⁷ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝⁶ : TopologicalSpace M
inst✝⁵ : ChartedSpace H M
inst✝⁴ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x✝ : M
inst✝³ : T2Space M
inst✝² : SmoothManifoldWithCorners I M
G : Type u_1
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
g : M → G
hg : SmoothOn I 𝓘(ℝ, G) g (chartAt H c).toLocalEquiv.source
x : M
hx : x ∈ tsupport fun x => ↑f x • g x
⊢ ContMDiffAt I 𝓘(ℝ, G) ⊤ (fun x => ↑f x • g x) x
[PROOFSTEP]
have : x ∈ (chartAt H c).source
[GOAL]
case this
E : Type uE
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : NormedSpace ℝ E
inst✝⁸ : FiniteDimensional ℝ E
H : Type uH
inst✝⁷ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝⁶ : TopologicalSpace M
inst✝⁵ : ChartedSpace H M
inst✝⁴ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x✝ : M
inst✝³ : T2Space M
inst✝² : SmoothManifoldWithCorners I M
G : Type u_1
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
g : M → G
hg : SmoothOn I 𝓘(ℝ, G) g (chartAt H c).toLocalEquiv.source
x : M
hx : x ∈ tsupport fun x => ↑f x • g x
⊢ x ∈ (chartAt H c).toLocalEquiv.source
[PROOFSTEP]
exact f.tsupport_subset_chartAt_source <| tsupport_smul_subset_left _ _ hx
[GOAL]
E : Type uE
inst✝¹⁰ : NormedAddCommGroup E
inst✝⁹ : NormedSpace ℝ E
inst✝⁸ : FiniteDimensional ℝ E
H : Type uH
inst✝⁷ : TopologicalSpace H
I : ModelWithCorners ℝ E H
M : Type uM
inst✝⁶ : TopologicalSpace M
inst✝⁵ : ChartedSpace H M
inst✝⁴ : SmoothManifoldWithCorners I M
c : M
f : SmoothBumpFunction I c
x✝ : M
inst✝³ : T2Space M
inst✝² : SmoothManifoldWithCorners I M
G : Type u_1
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
g : M → G
hg : SmoothOn I 𝓘(ℝ, G) g (chartAt H c).toLocalEquiv.source
x : M
hx : x ∈ tsupport fun x => ↑f x • g x
this : x ∈ (chartAt H c).toLocalEquiv.source
⊢ ContMDiffAt I 𝓘(ℝ, G) ⊤ (fun x => ↑f x • g x) x
[PROOFSTEP]
exact f.smoothAt.smul ((hg _ this).contMDiffAt <| IsOpen.mem_nhds (chartAt _ _).open_source this)