Documentation

Atlas.DifferentialGeometry.code.Intrinsic

noncomputable def ChristoffelSymbols.secondPartialDeriv {n : } (patch : HypersurfacePatch n) (x : Fin n) (i j : Fin n) :
Fin (n + 1)
Instances For
    noncomputable def ChristoffelSymbols.christoffelSymbol {n : } (patch : HypersurfacePatch n) (x : Fin n) (i j k : Fin n) :
    Instances For
      theorem ChristoffelSymbols.secondPartialDeriv_symmetric {n : } (patch : HypersurfacePatch n) (x : Fin n) (hx : x patch.domain) (i j : Fin n) :
      secondPartialDeriv patch x i j = secondPartialDeriv patch x j i
      noncomputable def partialDeriv {n : } (i : Fin n) (g : (Fin n)) (x : Fin n) :
      Instances For
        theorem ChristoffelFromMetric.firstFundamentalForm_inv_symmetric {n : } (patch : HypersurfacePatch n) (x : Fin n) (hx : x patch.domain) (i j : Fin n) :
        theorem ChristoffelFromMetric.metric_partialDeriv_eq {n : } (patch : HypersurfacePatch n) (x : Fin n) (hx : x patch.domain) (a b m : Fin n) :
        theorem ChristoffelFromMetric.inner_secondPartial_eq_half_metric_derivs {n : } (patch : HypersurfacePatch n) (x : Fin n) (hx : x patch.domain) (i j l : Fin n) :
        ChristoffelSymbols.secondPartialDeriv patch x i j ⬝ᵥ patch.partialDeriv x l = 1 / 2 * (partialDeriv j (fun (y : Fin n) => firstFundamentalForm patch y i l) x - partialDeriv l (fun (y : Fin n) => firstFundamentalForm patch y i j) x + partialDeriv i (fun (y : Fin n) => firstFundamentalForm patch y j l) x)
        theorem ChristoffelFromMetric.christoffel_from_metric {n : } (patch : HypersurfacePatch n) (x : Fin n) (hx : x patch.domain) (i j l : Fin n) :
        ChristoffelSymbols.christoffelSymbol patch x i j l = 1 / 2 * k : Fin n, (firstFundamentalForm patch x)⁻¹ k l * (partialDeriv j (fun (y : Fin n) => firstFundamentalForm patch y i k) x - partialDeriv k (fun (y : Fin n) => firstFundamentalForm patch y i j) x + partialDeriv i (fun (y : Fin n) => firstFundamentalForm patch y j k) x)
        noncomputable def TensorDecomposition.tensorT {ι : Type u_1} {F : Type u_2} [Field F] (S : ιιιF) (i j k : ι) :
        F
        Instances For
          theorem TensorDecomposition.tensorT_symm_13 {ι : Type u_1} {F : Type u_2} [Field F] [CharZero F] (S : ιιιF) (hS : ∀ (i j k : ι), S i j k = S j i k) (i j k : ι) :
          tensorT S i j k = tensorT S k j i
          theorem TensorDecomposition.tensor_decomposition {ι : Type u_1} {F : Type u_2} [Field F] [CharZero F] (S : ιιιF) (hS : ∀ (i j k : ι), S i j k = S j i k) (i j k : ι) :
          S i j k = tensorT S i j k + tensorT S j i k
          theorem TensorDecomposition.exists_symmetric_tensor_decomposition {ι : Type u_1} {F : Type u_2} [Field F] [CharZero F] (S : ιιιF) (hS : ∀ (i j k : ι), S i j k = S j i k) :
          ∃ (T : ιιιF), (∀ (i j k : ι), T i j k = T k j i) ∀ (i j k : ι), S i j k = T i j k + T j i k
          structure MovingFrame.IsMovingBasis {n : } (patch : HypersurfacePatch n) (X : (Fin n)Matrix (Fin n) (Fin n) ) :
          Instances For
            structure MovingFrame.IsMovingFrame {n : } (patch : HypersurfacePatch n) (X : (Fin n)Matrix (Fin n) (Fin n) ) extends MovingFrame.IsMovingBasis patch X :
            Instances For
              noncomputable def MovingFrame.christoffelMatrix {n : } (patch : HypersurfacePatch n) (x : Fin n) (j : Fin n) :
              Matrix (Fin n) (Fin n)
              Instances For
                noncomputable def MovingFrame.matrixPartialDeriv {n : } (X : (Fin n)Matrix (Fin n) (Fin n) ) (x : Fin n) (j : Fin n) :
                Matrix (Fin n) (Fin n)
                Instances For
                  noncomputable def MovingFrame.connectionMatrix {n : } (patch : HypersurfacePatch n) (X : (Fin n)Matrix (Fin n) (Fin n) ) (x : Fin n) (j : Fin n) :
                  Matrix (Fin n) (Fin n)
                  Instances For
                    noncomputable def MovingFrame.curvatureMatrix {n : } (patch : HypersurfacePatch n) (X : (Fin n)Matrix (Fin n) (Fin n) ) (x : Fin n) (k j : Fin n) :
                    Matrix (Fin n) (Fin n)
                    Instances For
                      noncomputable def MovingFrame.riemannCurvatureMatrix {n : } (patch : HypersurfacePatch n) (x : Fin n) (k j : Fin n) :
                      Matrix (Fin n) (Fin n)
                      Instances For
                        theorem MovingFrame.connectionMatrix_fderiv_leibniz {n : } (patch : HypersurfacePatch n) (X : (Fin n)Matrix (Fin n) (Fin n) ) (hX : IsMovingBasis patch X) (x : Fin n) (hx : x patch.domain) (k j : Fin n) :
                        (fderiv (fun (y : Fin n) => (X y)⁻¹ * matrixPartialDeriv X y j + (X y)⁻¹ * christoffelMatrix patch y j * X y) x) (Pi.single k 1) = -(X x)⁻¹ * matrixPartialDeriv X x k * (X x)⁻¹ * matrixPartialDeriv X x j + (fderiv (fun (y : Fin n) => matrixPartialDeriv X y j) x) (Pi.single k 1) - (X x)⁻¹ * matrixPartialDeriv X x k * (X x)⁻¹ * christoffelMatrix patch x j * X x + (X x)⁻¹ * (fderiv (fun (y : Fin n) => christoffelMatrix patch y j) x) (Pi.single k 1) * X x + (X x)⁻¹ * christoffelMatrix patch x j * matrixPartialDeriv X x k
                        theorem MovingFrame.matrixPartialDeriv_comm {n : } (X : (Fin n)Matrix (Fin n) (Fin n) ) {s : Set (Fin n)} (hs : IsOpen s) (hX_smooth : ContDiffOn X s) (x : Fin n) (hx : x s) (k j : Fin n) :
                        (fderiv (fun (y : Fin n) => matrixPartialDeriv X y j) x) (Pi.single k 1) = (fderiv (fun (y : Fin n) => matrixPartialDeriv X y k) x) (Pi.single j 1)
                        theorem MovingFrame.curvatureMatrix_eq_conjugate {n : } (patch : HypersurfacePatch n) (X : (Fin n)Matrix (Fin n) (Fin n) ) (hX : IsMovingBasis patch X) (x : Fin n) (hx : x patch.domain) (k j : Fin n) :
                        curvatureMatrix patch X x k j = (X x)⁻¹ * riemannCurvatureMatrix patch x k j * X x
                        noncomputable def MovingFrame.metricPartialDeriv {n : } (patch : HypersurfacePatch n) (x : Fin n) (j : Fin n) :
                        Matrix (Fin n) (Fin n)
                        Instances For
                          theorem MovingFrame.metricCompatibility_matrix {n : } (patch : HypersurfacePatch n) (x : Fin n) (hx : x patch.domain) (j : Fin n) :
                          theorem MovingFrame.fderiv_tripleProduct_matrix {n : } (patch : HypersurfacePatch n) (X : (Fin n)Matrix (Fin n) (Fin n) ) (hF : IsMovingFrame patch X) (x : Fin n) (hx : x patch.domain) (j : Fin n) :
                          (fderiv (fun (y : Fin n) => (X y).transpose * firstFundamentalForm patch y * X y) x) (Pi.single j 1) = (matrixPartialDeriv X x j).transpose * firstFundamentalForm patch x * X x + (X x).transpose * metricPartialDeriv patch x j * X x + (X x).transpose * firstFundamentalForm patch x * matrixPartialDeriv X x j
                          theorem MovingFrame.connectionMatrix_skewSymmetric {n : } (patch : HypersurfacePatch n) (X : (Fin n)Matrix (Fin n) (Fin n) ) (hF : IsMovingFrame patch X) (x : Fin n) (hx : x patch.domain) (j : Fin n) :
                          (connectionMatrix patch X x j).transpose = -connectionMatrix patch X x j
                          theorem MovingFrame.skewSymm_commutator_01_eq_zero (A B : Matrix (Fin 2) (Fin 2) ) (hA : A.transpose = -A) (hB : B.transpose = -B) :
                          (A * B - B * A) 0 1 = 0
                          theorem MovingFrame.riemannCurvatureMatrix_GR_entry (patch : HypersurfacePatch 2) (x : Fin 2) (hx : x patch.domain) :
                          (firstFundamentalForm patch x * riemannCurvatureMatrix patch x 1 0) 0 1 = riemannCurvatureMatrix patch x 1 0 0 1
                          theorem MovingFrame.conjScale_riemannCurvatureMatrix (patch : HypersurfacePatch 2) (X : (Fin 2)Matrix (Fin 2) (Fin 2) ) (hF : IsMovingFrame patch X) (x : Fin 2) (hx : x patch.domain) :
                          ((X x)⁻¹ * riemannCurvatureMatrix patch x 1 0 * X x) 0 1 = riemannCurvatureMatrix patch x 1 0 0 1 * (X x).det
                          theorem MovingFrame.gaussCurvature_eq_curvatureMatrix_entry (patch : HypersurfacePatch 2) (X : (Fin 2)Matrix (Fin 2) (Fin 2) ) (hF : IsMovingFrame patch X) (x : Fin 2) (hx : x patch.domain) (hpos : 0 < (X x).det) :
                          gaussCurvature patch x * (firstFundamentalForm patch x).det = curvatureMatrix patch X x 1 0 0 1
                          Instances For
                            theorem NormalCoordinates.exists_normal_coordinates {n : } (G : Matrix (Fin n) (Fin n) ) (hG : G.PosDef) (S : Fin nFin nFin n) (hS_symm : ∀ (i j k : Fin n), S i j k = S j i k) :
                            ∃ (B : Matrix (Fin n) (Fin n) ) (T : Fin nFin nFin n), (B.transpose = B IsUnit B.det transformedMetricLinear G B = 1) (∀ (i j k : Fin n), T i j k = T k j i) ∀ (i j k : Fin n), S i j k = T i j k + T j i k
                            def NormalCoordinates.metricDerivAfterQuadraticChange {n : } (S T : Fin nFin nFin n) (i j k : Fin n) :
                            Instances For
                              theorem NormalCoordinates.metric_deriv_vanishes_of_decomposition {n : } (S T : Fin nFin nFin n) (hDecomp : ∀ (i j k : Fin n), S i j k = T i j k + T j i k) (i j k : Fin n) :
                              theorem NormalCoordinates.exists_normal_coordinates_vanishing_derivs_algebraic {n : } (G : Matrix (Fin n) (Fin n) ) (hG : G.PosDef) (S : Fin nFin nFin n) (hS_symm : ∀ (i j k : Fin n), S i j k = S j i k) :
                              ∃ (B : Matrix (Fin n) (Fin n) ) (T : Fin nFin nFin n), (B.transpose = B IsUnit B.det transformedMetricLinear G B = 1) (∀ (i j k : Fin n), T i j k = T k j i) ∀ (i j k : Fin n), metricDerivAfterQuadraticChange S T i j k = 0
                              theorem NormalCoordinates.exists_normal_coordinates_vanishing_derivs {n : } (patch : HypersurfacePatch n) (p : Fin n) (_hp : p patch.domain) (hG : (firstFundamentalForm patch p).PosDef) (hDiff : DifferentiableAt (firstFundamentalForm patch) p) :
                              have S := fun (i j k : Fin n) => MovingFrame.metricPartialDeriv patch p k i j; ∃ (B : Matrix (Fin n) (Fin n) ) (T : Fin nFin nFin n), (B.transpose = B IsUnit B.det transformedMetricLinear (firstFundamentalForm patch p) B = 1) (∀ (i j k : Fin n), T i j k = T k j i) ∀ (i j k : Fin n), metricDerivAfterQuadraticChange S T i j k = 0
                              noncomputable def RiemannIntrinsic.riemannCurvature {n : } (patch : HypersurfacePatch n) (x : Fin n) (i j k s : Fin n) :
                              Instances For
                                theorem RiemannIntrinsic.fderiv_eq_of_eq_on_open {n : } {f g : (Fin n)} {s : Set (Fin n)} (hs : IsOpen s) {x : Fin n} (hx : x s) (hfg : ys, f y = g y) :
                                theorem RiemannIntrinsic.partialDeriv_metric_eq {n : } (patch₁ patch₂ : HypersurfacePatch n) (_hdom : patch₁.domain = patch₂.domain) (hG : xpatch₁.domain, firstFundamentalForm patch₁ x = firstFundamentalForm patch₂ x) (x : Fin n) (hx : x patch₁.domain) (i j m : Fin n) :
                                partialDeriv m (fun (y : Fin n) => firstFundamentalForm patch₁ y i j) x = partialDeriv m (fun (y : Fin n) => firstFundamentalForm patch₂ y i j) x
                                theorem RiemannIntrinsic.christoffelSymbol_eq_of_metric_eq {n : } (patch₁ patch₂ : HypersurfacePatch n) (hdom : patch₁.domain = patch₂.domain) (hG : xpatch₁.domain, firstFundamentalForm patch₁ x = firstFundamentalForm patch₂ x) (x : Fin n) (hx : x patch₁.domain) (i j l : Fin n) :
                                theorem RiemannIntrinsic.christoffelMatrix_eq_of_metric_eq {n : } (patch₁ patch₂ : HypersurfacePatch n) (hdom : patch₁.domain = patch₂.domain) (hG : xpatch₁.domain, firstFundamentalForm patch₁ x = firstFundamentalForm patch₂ x) (x : Fin n) (hx : x patch₁.domain) (j : Fin n) :
                                theorem RiemannIntrinsic.fderiv_christoffelMatrix_eq_of_metric_eq {n : } (patch₁ patch₂ : HypersurfacePatch n) (hdom : patch₁.domain = patch₂.domain) (hG : xpatch₁.domain, firstFundamentalForm patch₁ x = firstFundamentalForm patch₂ x) (x : Fin n) (hx : x patch₁.domain) (j k : Fin n) :
                                (fderiv (fun (y : Fin n) => MovingFrame.christoffelMatrix patch₁ y j) x) (Pi.single k 1) = (fderiv (fun (y : Fin n) => MovingFrame.christoffelMatrix patch₂ y j) x) (Pi.single k 1)
                                theorem RiemannIntrinsic.generalized_theorema_egregium {n : } (patch₁ patch₂ : HypersurfacePatch n) (hdom : patch₁.domain = patch₂.domain) (hG : xpatch₁.domain, firstFundamentalForm patch₁ x = firstFundamentalForm patch₂ x) (x : Fin n) :
                                x patch₁.domain∀ (i j k s : Fin n), riemannCurvature patch₁ x i j k s = riemannCurvature patch₂ x i j k s
                                noncomputable def GaussEquation.riemannCurvature {n : } (patch : HypersurfacePatch n) (x : Fin n) (i j k s : Fin n) :
                                Instances For
                                  noncomputable def GaussEquation.thirdPartialDeriv {n : } (patch : HypersurfacePatch n) (x : Fin n) (i j k : Fin n) :
                                  Fin (n + 1)
                                  Instances For
                                    noncomputable def GaussEquation.thirdDerivTangComp {n : } (patch : HypersurfacePatch n) (x : Fin n) (i j k s : Fin n) :
                                    Instances For
                                      theorem GaussEquation.thirdPartialDeriv_symm_jk {n : } (patch : HypersurfacePatch n) (x : Fin n) (hx : x patch.domain) (i j k : Fin n) :
                                      thirdPartialDeriv patch x i j k = thirdPartialDeriv patch x i k j
                                      theorem GaussEquation.thirdDerivTangComp_symm_jk {n : } (patch : HypersurfacePatch n) (x : Fin n) (hx : x patch.domain) (i j k s : Fin n) :
                                      thirdDerivTangComp patch x i j k s = thirdDerivTangComp patch x i k j s
                                      theorem GaussEquation.tangential_formula_eq {n : } (patch : HypersurfacePatch n) (x : Fin n) (hx : x patch.domain) (i j k s : Fin n) :
                                      thirdDerivTangComp patch x i j k s = partialDeriv k (fun (y : Fin n) => ChristoffelSymbols.christoffelSymbol patch y i j s) x + t : Fin n, ChristoffelSymbols.christoffelSymbol patch x i j t * ChristoffelSymbols.christoffelSymbol patch x k t s - secondFundamentalForm patch x i j * shapeOperator patch x s k
                                      theorem GaussEquation.tangential_component_third_deriv {n : } (patch : HypersurfacePatch n) (x : Fin n) (hx : x patch.domain) (i j k s : Fin n) :
                                      partialDeriv k (fun (y : Fin n) => ChristoffelSymbols.christoffelSymbol patch y i j s) x + t : Fin n, ChristoffelSymbols.christoffelSymbol patch x i j t * ChristoffelSymbols.christoffelSymbol patch x k t s - secondFundamentalForm patch x i j * shapeOperator patch x s k = partialDeriv j (fun (y : Fin n) => ChristoffelSymbols.christoffelSymbol patch y i k s) x + t : Fin n, ChristoffelSymbols.christoffelSymbol patch x i k t * ChristoffelSymbols.christoffelSymbol patch x j t s - secondFundamentalForm patch x i k * shapeOperator patch x s j
                                      theorem GaussEquation.gauss_equation {n : } (patch : HypersurfacePatch n) (x : Fin n) (hx : x patch.domain) (i j k s : Fin n) :
                                      secondFundamentalForm patch x i j * shapeOperator patch x s k - secondFundamentalForm patch x i k * shapeOperator patch x s j = riemannCurvature patch x i j k s
                                      noncomputable def IntrinsicCurvatures.exteriorPowerShapeOp {n : } (patch : HypersurfacePatch n) (x : Fin n) (i j k s : Fin n) :
                                      Instances For
                                        theorem IntrinsicCurvatures.principalCurvatureProducts_intrinsic {n : } (patch₁ patch₂ : HypersurfacePatch n) (hdom : patch₁.domain = patch₂.domain) (hG : xpatch₁.domain, firstFundamentalForm patch₁ x = firstFundamentalForm patch₂ x) (x : Fin n) :
                                        x patch₁.domain∀ (i j k s : Fin n), exteriorPowerShapeOp patch₁ x i j k s = exteriorPowerShapeOp patch₂ x i j k s
                                        noncomputable def IntrinsicCurvatures.exteriorPowerShapeOpMatrix {n : } (patch : HypersurfacePatch n) (x : Fin n) :
                                        Matrix (Fin n × Fin n) (Fin n × Fin n)
                                        Instances For
                                          theorem IntrinsicCurvatures.principalCurvatureProducts_matrix_intrinsic {n : } (patch₁ patch₂ : HypersurfacePatch n) (hdom : patch₁.domain = patch₂.domain) (hG : xpatch₁.domain, firstFundamentalForm patch₁ x = firstFundamentalForm patch₂ x) (x : Fin n) :
                                          @[reducible, inline]
                                          Instances For
                                            theorem IntrinsicCurvatures.compoundMatrix_diagonal_entries {n : } (D : Fin n) (p q : AntisymIndex n) :
                                            Matrix.diagonal D (↑p).1 (↑q).1 * Matrix.diagonal D (↑p).2 (↑q).2 - Matrix.diagonal D (↑p).1 (↑q).2 * Matrix.diagonal D (↑p).2 (↑q).1 = if p = q then D (↑p).1 * D (↑p).2 else 0
                                            theorem IntrinsicCurvatures.compoundMatrix_diagonal_eq {n : } (D : Fin n) :
                                            (Matrix.of fun (p q : AntisymIndex n) => Matrix.diagonal D (↑p).1 (↑q).1 * Matrix.diagonal D (↑p).2 (↑q).2 - Matrix.diagonal D (↑p).1 (↑q).2 * Matrix.diagonal D (↑p).2 (↑q).1) = Matrix.diagonal fun (p : AntisymIndex n) => D (↑p).1 * D (↑p).2
                                            theorem IntrinsicCurvatures.principalCurvatureProducts_antisym_intrinsic {n : } (patch₁ patch₂ : HypersurfacePatch n) (hdom : patch₁.domain = patch₂.domain) (hG : xpatch₁.domain, firstFundamentalForm patch₁ x = firstFundamentalForm patch₂ x) (x : Fin n) :
                                            theorem IntrinsicCurvatures.principalCurvatureProducts_antisym_charpoly_intrinsic {n : } (patch₁ patch₂ : HypersurfacePatch n) (hdom : patch₁.domain = patch₂.domain) (hG : xpatch₁.domain, firstFundamentalForm patch₁ x = firstFundamentalForm patch₂ x) (x : Fin n) :
                                            theorem IntrinsicCurvatures.scalarCurvature_intrinsic {n : } (patch₁ patch₂ : HypersurfacePatch n) (hdom : patch₁.domain = patch₂.domain) (hG : xpatch₁.domain, firstFundamentalForm patch₁ x = firstFundamentalForm patch₂ x) (x : Fin n) :
                                            x patch₁.domainscalarCurvature patch₁ x = scalarCurvature patch₂ x
                                            theorem IntrinsicCurvatures.det_pow_eq_of_minors_eq {n : } (L₁ L₂ : Matrix (Fin n) (Fin n) ) (hMinors : ∀ (i j k s : Fin n), L₁ i k * L₁ j s - L₁ i s * L₁ j k = L₂ i k * L₂ j s - L₂ i s * L₂ j k) :
                                            L₁.det ^ (n - 1) = L₂.det ^ (n - 1)
                                            theorem IntrinsicCurvatures.gaussCurvature_pow_intrinsic {n : } (patch₁ patch₂ : HypersurfacePatch n) (hdom : patch₁.domain = patch₂.domain) (hG : xpatch₁.domain, firstFundamentalForm patch₁ x = firstFundamentalForm patch₂ x) (x : Fin n) :
                                            x patch₁.domaingaussCurvature patch₁ x ^ (n - 1) = gaussCurvature patch₂ x ^ (n - 1)
                                            theorem IntrinsicCurvatures.gaussCurvature_intrinsic_even {n : } (hn : Even n) (hn_pos : 0 < n) (patch₁ patch₂ : HypersurfacePatch n) (hdom : patch₁.domain = patch₂.domain) (hG : xpatch₁.domain, firstFundamentalForm patch₁ x = firstFundamentalForm patch₂ x) (x : Fin n) :
                                            x patch₁.domaingaussCurvature patch₁ x = gaussCurvature patch₂ x
                                            theorem IntrinsicCurvatures.absGaussCurvature_intrinsic_odd {n : } (hn : Odd n) (hn_ge : 3 n) (patch₁ patch₂ : HypersurfacePatch n) (hdom : patch₁.domain = patch₂.domain) (hG : xpatch₁.domain, firstFundamentalForm patch₁ x = firstFundamentalForm patch₂ x) (x : Fin n) :
                                            x patch₁.domain|gaussCurvature patch₁ x| = |gaussCurvature patch₂ x|
                                            theorem IntrinsicCurvatures.scalarCurvature_gaussCurvature_intrinsic :
                                            (∀ {n : } (patch₁ patch₂ : HypersurfacePatch n), patch₁.domain = patch₂.domain(∀ xpatch₁.domain, firstFundamentalForm patch₁ x = firstFundamentalForm patch₂ x)xpatch₁.domain, scalarCurvature patch₁ x = scalarCurvature patch₂ x) (∀ {n : } (patch₁ patch₂ : HypersurfacePatch n), patch₁.domain = patch₂.domain(∀ xpatch₁.domain, firstFundamentalForm patch₁ x = firstFundamentalForm patch₂ x)xpatch₁.domain, gaussCurvature patch₁ x ^ (n - 1) = gaussCurvature patch₂ x ^ (n - 1)) (∀ {n : }, Even n0 < n∀ (patch₁ patch₂ : HypersurfacePatch n), patch₁.domain = patch₂.domain(∀ xpatch₁.domain, firstFundamentalForm patch₁ x = firstFundamentalForm patch₂ x)xpatch₁.domain, gaussCurvature patch₁ x = gaussCurvature patch₂ x) ∀ {n : }, Odd n3 n∀ (patch₁ patch₂ : HypersurfacePatch n), patch₁.domain = patch₂.domain(∀ xpatch₁.domain, firstFundamentalForm patch₁ x = firstFundamentalForm patch₂ x)xpatch₁.domain, |gaussCurvature patch₁ x| = |gaussCurvature patch₂ x|
                                            theorem RigidityRank3.rank3_products_determine_sign (a b c a' b' c' : ) (ha : a 0) (hb : b 0) (hc : c 0) (hab : a * b = a' * b') (hac : a * c = a' * c') (hbc : b * c = b' * c') :
                                            a' = a b' = b c' = c a' = -a b' = -b c' = -c
                                            theorem RigidityRank3.exteriorPower_rank3_implies_H_eq_or_neg {n : } (patch₁ patch₂ : HypersurfacePatch n) (x : Fin n) (hx : x patch₁.domain) (hdomain : patch₁.domain = patch₂.domain) (hG_eq : firstFundamentalForm patch₁ x = firstFundamentalForm patch₂ x) (hext : ∀ (i j k s : Fin n), IntrinsicCurvatures.exteriorPowerShapeOp patch₁ x i j k s = IntrinsicCurvatures.exteriorPowerShapeOp patch₂ x i j k s) (hrank : 3 (secondFundamentalForm patch₁ x).rank) :
                                            theorem RigidityRank3.secondFF_sign_constant_on_connected {n : } (patch₁ patch₂ : HypersurfacePatch n) (hconn : IsConnected patch₁.domain) (hrank : xpatch₁.domain, 3 (secondFundamentalForm patch₁ x).rank) (h_pw : xpatch₁.domain, secondFundamentalForm patch₁ x = secondFundamentalForm patch₂ x secondFundamentalForm patch₁ x = -secondFundamentalForm patch₂ x) (x₁ : Fin n) (hx₁ : x₁ patch₁.domain) (hx₁_neg : secondFundamentalForm patch₁ x₁ = -secondFundamentalForm patch₂ x₁) (x₂ : Fin n) (hx₂ : x₂ patch₁.domain) (hx₂_pos : secondFundamentalForm patch₁ x₂ = secondFundamentalForm patch₂ x₂) :
                                            theorem RigidityRank3.secondFundamentalForm_eq_or_neg {n : } (patch₁ patch₂ : HypersurfacePatch n) (hconn : IsConnected patch₁.domain) (hdomain : patch₁.domain = patch₂.domain) (hG : xpatch₁.domain, firstFundamentalForm patch₁ x = firstFundamentalForm patch₂ x) (hrank : xpatch₁.domain, 3 (secondFundamentalForm patch₁ x).rank) :
                                            (∀ xpatch₁.domain, secondFundamentalForm patch₁ x = secondFundamentalForm patch₂ x) xpatch₁.domain, secondFundamentalForm patch₁ x = -secondFundamentalForm patch₂ x
                                            theorem RigidityRank3.rigidity_theorem_neg_H {n : } (patch₁ patch₂ : HypersurfacePatch n) (hconn : IsConnected patch₁.domain) (hdomain : patch₁.domain = patch₂.domain) (hG : xpatch₁.domain, firstFundamentalForm patch₁ x = firstFundamentalForm patch₂ x) (hH : xpatch₁.domain, secondFundamentalForm patch₁ x = -secondFundamentalForm patch₂ x) :
                                            ∃ (A : Matrix (Fin (n + 1)) (Fin (n + 1)) ) (b : Fin (n + 1)), A Matrix.orthogonalGroup (Fin (n + 1)) xpatch₁.domain, patch₂.f x = A.mulVec (patch₁.f x) + b
                                            theorem RigidityRank3.rigidity_of_rank_geq_three {n : } (patch₁ patch₂ : HypersurfacePatch n) (hconn : IsConnected patch₁.domain) (hdomain : patch₁.domain = patch₂.domain) (hG : xpatch₁.domain, firstFundamentalForm patch₁ x = firstFundamentalForm patch₂ x) (hrank : xpatch₁.domain, 3 (secondFundamentalForm patch₁ x).rank) :
                                            ∃ (A : Matrix (Fin (n + 1)) (Fin (n + 1)) ) (c : Fin (n + 1)), A Matrix.orthogonalGroup (Fin (n + 1)) xpatch₁.domain, patch₂.f x = A.mulVec (patch₁.f x) + c
                                            noncomputable def TheoremaEgregium.riemannCurvature (patch : HypersurfacePatch 2) (x : Fin 2) (i j k s : Fin 2) :
                                            Instances For
                                              theorem TheoremaEgregium.theorema_egregium (patch : HypersurfacePatch 2) (x : Fin 2) (hx : x patch.domain) :
                                              gaussCurvature patch x = (∑ u : Fin 2, firstFundamentalForm patch x 1 u * riemannCurvature patch x 0 0 1 u) / (firstFundamentalForm patch x).det
                                              theorem GaussBonnetTorus.gauss_bonnet_torus_integration_step (patch : HypersurfacePatch 2) (T₁ T₂ : ) (α₁ α₂ : ) (hProp18_4 : ∀ (x₁ x₂ : ), gaussCurvature patch ![x₁, x₂] * (firstFundamentalForm patch ![x₁, x₂]).det = deriv (α₁ x₁) x₂ - deriv (fun (t : ) => α₂ t x₂) x₁) (hα₁_per : ∀ (x₁ : ), α₁ x₁ T₂ = α₁ x₁ 0) (hα₂_per : ∀ (x₂ : ), α₂ T₁ x₂ = α₂ 0 x₂) (hα₁_deriv : ∀ (x₁ x₂ : ), x₂ Set.uIcc 0 T₂HasDerivAt (α₁ x₁) (deriv (α₁ x₁) x₂) x₂) (hα₂_deriv : ∀ (x₂ x₁ : ), x₁ Set.uIcc 0 T₁HasDerivAt (fun (t : ) => α₂ t x₂) (deriv (fun (t : ) => α₂ t x₂) x₁) x₁) (hα₁_int : ∀ (x₁ : ), IntervalIntegrable (deriv (α₁ x₁)) MeasureTheory.volume 0 T₂) (hα₂_int : ∀ (x₂ : ), IntervalIntegrable (deriv fun (t : ) => α₂ t x₂) MeasureTheory.volume 0 T₁) (hFubini : (x₁ : ) in 0..T₁, (x₂ : ) in 0..T₂, deriv (fun (t : ) => α₂ t x₂) x₁ = (x₂ : ) in 0..T₂, (x₁ : ) in 0..T₁, deriv (fun (t : ) => α₂ t x₂) x₁) (h_sub_int : ∀ (x₁ : ), IntervalIntegrable (fun (x₂ : ) => deriv (fun (t : ) => α₂ t x₂) x₁) MeasureTheory.volume 0 T₂) :
                                              (x₁ : ) in 0..T₁, (x₂ : ) in 0..T₂, gaussCurvature patch ![x₁, x₂] * (firstFundamentalForm patch ![x₁, x₂]).det = 0
                                              theorem GaussBonnetTorus.exists_periodic_orthonormal_frame (patch : HypersurfacePatch 2) (T₁ T₂ : ) (hT₁ : T₁ > 0) (hT₂ : T₂ > 0) (hper₁ : ∀ (x : Fin 2), patch.f ![x 0 + T₁, x 1] = patch.f x) (hper₂ : ∀ (x : Fin 2), patch.f ![x 0, x 1 + T₂] = patch.f x) :
                                              ∃ (X : (Fin 2)Matrix (Fin 2) (Fin 2) ), MovingFrame.IsMovingFrame patch X (∀ (x : Fin 2), 0 < (X x).det) (∀ (x : Fin 2), X ![x 0 + T₁, x 1] = X x) ∀ (x : Fin 2), X ![x 0, x 1 + T₂] = X x
                                              theorem GaussBonnetTorus.connectionMatrix_periodic (patch : HypersurfacePatch 2) (X : (Fin 2)Matrix (Fin 2) (Fin 2) ) (T₁ T₂ : ) (hper₁ : ∀ (x : Fin 2), patch.f ![x 0 + T₁, x 1] = patch.f x) (hper₂ : ∀ (x : Fin 2), patch.f ![x 0, x 1 + T₂] = patch.f x) (hXper₁ : ∀ (x : Fin 2), X ![x 0 + T₁, x 1] = X x) (hXper₂ : ∀ (x : Fin 2), X ![x 0, x 1 + T₂] = X x) :
                                              (∀ (x : Fin 2) (j : Fin 2), MovingFrame.connectionMatrix patch X ![x 0 + T₁, x 1] j = MovingFrame.connectionMatrix patch X x j) ∀ (x : Fin 2) (j : Fin 2), MovingFrame.connectionMatrix patch X ![x 0, x 1 + T₂] j = MovingFrame.connectionMatrix patch X x j
                                              theorem GaussBonnetTorus.connection_form_curvature_identity (patch : HypersurfacePatch 2) (X : (Fin 2)Matrix (Fin 2) (Fin 2) ) (hF : MovingFrame.IsMovingFrame patch X) (hpos : ∀ (x : Fin 2), 0 < (X x).det) :
                                              have α₁ := fun (x₁ x₂ : ) => MovingFrame.connectionMatrix patch X ![x₁, x₂] 0 0 1; have α₂ := fun (x₁ x₂ : ) => MovingFrame.connectionMatrix patch X ![x₁, x₂] 1 0 1; ∀ (x₁ x₂ : ), gaussCurvature patch ![x₁, x₂] * (firstFundamentalForm patch ![x₁, x₂]).det = deriv (α₁ x₁) x₂ - deriv (fun (t : ) => α₂ t x₂) x₁
                                              theorem GaussBonnetTorus.connection_form_regularity (patch : HypersurfacePatch 2) (X : (Fin 2)Matrix (Fin 2) (Fin 2) ) (hF : MovingFrame.IsMovingFrame patch X) (T₁ T₂ : ) (hT₁ : T₁ > 0) (hT₂ : T₂ > 0) :
                                              have α₁ := fun (x₁ x₂ : ) => MovingFrame.connectionMatrix patch X ![x₁, x₂] 0 0 1; have α₂ := fun (x₁ x₂ : ) => MovingFrame.connectionMatrix patch X ![x₁, x₂] 1 0 1; (∀ (x₁ x₂ : ), x₂ Set.uIcc 0 T₂HasDerivAt (α₁ x₁) (deriv (α₁ x₁) x₂) x₂) (∀ (x₂ x₁ : ), x₁ Set.uIcc 0 T₁HasDerivAt (fun (t : ) => α₂ t x₂) (deriv (fun (t : ) => α₂ t x₂) x₁) x₁) (∀ (x₁ : ), IntervalIntegrable (deriv (α₁ x₁)) MeasureTheory.volume 0 T₂) (∀ (x₂ : ), IntervalIntegrable (deriv fun (t : ) => α₂ t x₂) MeasureTheory.volume 0 T₁) (x₁ : ) in 0..T₁, (x₂ : ) in 0..T₂, deriv (fun (t : ) => α₂ t x₂) x₁ = (x₂ : ) in 0..T₂, (x₁ : ) in 0..T₁, deriv (fun (t : ) => α₂ t x₂) x₁ ∀ (x₁ : ), IntervalIntegrable (fun (x₂ : ) => deriv (fun (t : ) => α₂ t x₂) x₁) MeasureTheory.volume 0 T₂
                                              theorem GaussBonnetTorus.periodic_connection_forms_exist (patch : HypersurfacePatch 2) (T₁ T₂ : ) (hT₁ : T₁ > 0) (hT₂ : T₂ > 0) (hper₁ : ∀ (x : Fin 2), patch.f ![x 0 + T₁, x 1] = patch.f x) (hper₂ : ∀ (x : Fin 2), patch.f ![x 0, x 1 + T₂] = patch.f x) :
                                              ∃ (α₁ : ) (α₂ : ), (∀ (x₁ x₂ : ), gaussCurvature patch ![x₁, x₂] * (firstFundamentalForm patch ![x₁, x₂]).det = deriv (α₁ x₁) x₂ - deriv (fun (t : ) => α₂ t x₂) x₁) (∀ (x₁ : ), α₁ x₁ T₂ = α₁ x₁ 0) (∀ (x₂ : ), α₂ T₁ x₂ = α₂ 0 x₂) (∀ (x₁ x₂ : ), x₂ Set.uIcc 0 T₂HasDerivAt (α₁ x₁) (deriv (α₁ x₁) x₂) x₂) (∀ (x₂ x₁ : ), x₁ Set.uIcc 0 T₁HasDerivAt (fun (t : ) => α₂ t x₂) (deriv (fun (t : ) => α₂ t x₂) x₁) x₁) (∀ (x₁ : ), IntervalIntegrable (deriv (α₁ x₁)) MeasureTheory.volume 0 T₂) (∀ (x₂ : ), IntervalIntegrable (deriv fun (t : ) => α₂ t x₂) MeasureTheory.volume 0 T₁) (x₁ : ) in 0..T₁, (x₂ : ) in 0..T₂, deriv (fun (t : ) => α₂ t x₂) x₁ = (x₂ : ) in 0..T₂, (x₁ : ) in 0..T₁, deriv (fun (t : ) => α₂ t x₂) x₁ ∀ (x₁ : ), IntervalIntegrable (fun (x₂ : ) => deriv (fun (t : ) => α₂ t x₂) x₁) MeasureTheory.volume 0 T₂
                                              theorem GaussBonnetTorus.gauss_bonnet_torus (patch : HypersurfacePatch 2) (T₁ T₂ : ) (hT₁ : T₁ > 0) (hT₂ : T₂ > 0) (hper₁ : ∀ (x : Fin 2), patch.f ![x 0 + T₁, x 1] = patch.f x) (hper₂ : ∀ (x : Fin 2), patch.f ![x 0, x 1 + T₂] = patch.f x) :
                                              (x₁ : ) in 0..T₁, (x₂ : ) in 0..T₂, gaussCurvature patch ![x₁, x₂] * (firstFundamentalForm patch ![x₁, x₂]).det = 0
                                              theorem GaussBonnetTorus.interval_integral_nonpos_eq_zero_imp (patch : HypersurfacePatch 2) (T₁ T₂ : ) (hT₁ : T₁ > 0) (hT₂ : T₂ > 0) (hTotal : (x₁ : ) in 0..T₁, (x₂ : ) in 0..T₂, gaussCurvature patch ![x₁, x₂] * (firstFundamentalForm patch ![x₁, x₂]).det = 0) (hNonpos : xpatch.domain, gaussCurvature patch x 0) (x : Fin 2) :
                                              x patch.domaingaussCurvature patch x = 0
                                              theorem GaussBonnetTorus.interval_integral_nonneg_eq_zero_imp (patch : HypersurfacePatch 2) (T₁ T₂ : ) (hT₁ : T₁ > 0) (hT₂ : T₂ > 0) (hTotal : (x₁ : ) in 0..T₁, (x₂ : ) in 0..T₂, gaussCurvature patch ![x₁, x₂] * (firstFundamentalForm patch ![x₁, x₂]).det = 0) (hNonneg : xpatch.domain, gaussCurvature patch x 0) (x : Fin 2) :
                                              x patch.domaingaussCurvature patch x = 0
                                              theorem GaussBonnetTorus.flat_torus_curvature_nonvanishing (patch : HypersurfacePatch 2) (T₁ T₂ : ) (hT₁ : T₁ > 0) (hT₂ : T₂ > 0) (hper₁ : ∀ (x : Fin 2), patch.f ![x 0 + T₁, x 1] = patch.f x) (hper₂ : ∀ (x : Fin 2), patch.f ![x 0, x 1 + T₂] = patch.f x) :
                                              xpatch.domain, gaussCurvature patch x 0
                                              theorem GaussBonnetTorus.torus_curvature_sign_change (patch : HypersurfacePatch 2) (T₁ T₂ : ) (hT₁ : T₁ > 0) (hT₂ : T₂ > 0) (hper₁ : ∀ (x : Fin 2), patch.f ![x 0 + T₁, x 1] = patch.f x) (hper₂ : ∀ (x : Fin 2), patch.f ![x 0, x 1 + T₂] = patch.f x) :
                                              (∃ xpatch.domain, gaussCurvature patch x > 0) xpatch.domain, gaussCurvature patch x < 0
                                              Instances For
                                                Instances For
                                                  noncomputable def AbstractGaussBonnet.scalarPartialDeriv (i : Fin 2) (f : (Fin 2)) (x : Fin 2) :
                                                  Instances For
                                                    noncomputable def AbstractGaussBonnet.abstractChristoffel (g : RiemannianMetric2D) (x : Fin 2) (i j k : Fin 2) :
                                                    Instances For
                                                      Instances For
                                                        noncomputable def AbstractGaussBonnet.loweredChristoffel (g : RiemannianMetric2D) (i j k : Fin 2) (x : Fin 2) :
                                                        Instances For
                                                          Instances For
                                                            Instances For
                                                              theorem AbstractGaussBonnet.gEntry_smooth (g : RiemannianMetric2D) (i j : Fin 2) :
                                                              ContDiff fun (x : Fin 2) => g.G x i j
                                                              theorem AbstractGaussBonnet.scalarPartialDeriv_smooth (g : RiemannianMetric2D) (i j k : Fin 2) :
                                                              ContDiff fun (x : Fin 2) => scalarPartialDeriv k (fun (y : Fin 2) => g.G y i j) x
                                                              theorem AbstractGaussBonnet.fderiv_periodic {f : (Fin 2)} (hf : ContDiff f) {v : Fin 2} (hper : ∀ (z : Fin 2), f (z + v) = f z) (x : Fin 2) :
                                                              fderiv f (x + v) = fderiv f x
                                                              theorem AbstractGaussBonnet.connectionForm_periodic_aux (g : RiemannianMetric2D) (v : Fin 2) (hGper : ∀ (z : Fin 2), g.G (z + v) = g.G z) (i j k : Fin 2) (x : Fin 2) :
                                                              loweredChristoffel g i j k (x + v) = loweredChristoffel g i j k x
                                                              theorem AbstractGaussBonnet.connectionFormF₁_periodic (g : RiemannianMetric2D) (v : Fin 2) (hGper : ∀ (z : Fin 2), g.G (z + v) = g.G z) (x : Fin 2) :
                                                              theorem AbstractGaussBonnet.connectionFormF₂_periodic (g : RiemannianMetric2D) (v : Fin 2) (hGper : ∀ (z : Fin 2), g.G (z + v) = g.G z) (x : Fin 2) :
                                                              theorem AbstractGaussBonnet.connectionFormF₁_periodic_x0 (g : RiemannianMetric2D) (T₁ T₂ : ) (hper : IsDoublyPeriodic g T₁ T₂) (x₁ x₂ : ) :
                                                              connectionFormF₁ g ![x₁ + T₁, x₂] = connectionFormF₁ g ![x₁, x₂]
                                                              theorem AbstractGaussBonnet.connectionFormF₁_periodic_x1 (g : RiemannianMetric2D) (T₁ T₂ : ) (hper : IsDoublyPeriodic g T₁ T₂) (x₁ x₂ : ) :
                                                              connectionFormF₁ g ![x₁, x₂ + T₂] = connectionFormF₁ g ![x₁, x₂]
                                                              theorem AbstractGaussBonnet.connectionFormF₂_periodic_x0 (g : RiemannianMetric2D) (T₁ T₂ : ) (hper : IsDoublyPeriodic g T₁ T₂) (x₁ x₂ : ) :
                                                              connectionFormF₂ g ![x₁ + T₁, x₂] = connectionFormF₂ g ![x₁, x₂]
                                                              theorem AbstractGaussBonnet.connectionFormF₂_periodic_x1 (g : RiemannianMetric2D) (T₁ T₂ : ) (hper : IsDoublyPeriodic g T₁ T₂) (x₁ x₂ : ) :
                                                              connectionFormF₂ g ![x₁, x₂ + T₂] = connectionFormF₂ g ![x₁, x₂]
                                                              theorem AbstractGaussBonnet.curvature_density_divergence_form (g : RiemannianMetric2D) (T₁ T₂ : ) (hT₁ : T₁ > 0) (hT₂ : T₂ > 0) (hper : IsDoublyPeriodic g T₁ T₂) :
                                                              ∃ (F₁ : (Fin 2)) (F₂ : (Fin 2)), ContDiff F₁ ContDiff F₂ (∀ (x₁ x₂ : ), F₁ ![x₁ + T₁, x₂] = F₁ ![x₁, x₂]) (∀ (x₁ x₂ : ), F₁ ![x₁, x₂ + T₂] = F₁ ![x₁, x₂]) (∀ (x₁ x₂ : ), F₂ ![x₁ + T₁, x₂] = F₂ ![x₁, x₂]) (∀ (x₁ x₂ : ), F₂ ![x₁, x₂ + T₂] = F₂ ![x₁, x₂]) ∀ (x : Fin 2), abstractGaussCurvature g x * (g.G x).det = scalarPartialDeriv 0 F₁ x + scalarPartialDeriv 1 F₂ x
                                                              theorem AbstractGaussBonnet.integral_divergence_periodic_rectangle (F₁ F₂ : (Fin 2)) (T₁ T₂ : ) (hT₁ : T₁ > 0) (hT₂ : T₂ > 0) (hF₁_smooth : ContDiff F₁) (hF₂_smooth : ContDiff F₂) (hF₁_per1 : ∀ (x₁ x₂ : ), F₁ ![x₁ + T₁, x₂] = F₁ ![x₁, x₂]) (hF₁_per2 : ∀ (x₁ x₂ : ), F₁ ![x₁, x₂ + T₂] = F₁ ![x₁, x₂]) (hF₂_per1 : ∀ (x₁ x₂ : ), F₂ ![x₁ + T₁, x₂] = F₂ ![x₁, x₂]) (hF₂_per2 : ∀ (x₁ x₂ : ), F₂ ![x₁, x₂ + T₂] = F₂ ![x₁, x₂]) :
                                                              (x₁ : ) in 0..T₁, (x₂ : ) in 0..T₂, scalarPartialDeriv 0 F₁ ![x₁, x₂] + scalarPartialDeriv 1 F₂ ![x₁, x₂] = 0
                                                              theorem AbstractGaussBonnet.gauss_bonnet_doubly_periodic_abstract (g : RiemannianMetric2D) (T₁ T₂ : ) (hT₁ : T₁ > 0) (hT₂ : T₂ > 0) (hper : IsDoublyPeriodic g T₁ T₂) :
                                                              (x₁ : ) in 0..T₁, (x₂ : ) in 0..T₂, abstractGaussCurvature g ![x₁, x₂] * (g.G ![x₁, x₂]).det = 0