/-- The analytic groupoid on a boundaryless charted space modeled on a complete vector space
consists of the local homeomorphisms which are analytic and have analytic inverse. -/
theorem mem_analyticGroupoid_of_boundaryless [CompleteSpace E] [I.Boundaryless]
    (e : PartialHomeomorph H H) :
    e ∈ analyticGroupoid I ↔ AnalyticOn 𝕜 (I ∘ e ∘ I.symm) (I '' e.source) ∧
    AnalyticOn 𝕜 (I ∘ e.symm ∘ I.symm) (I '' e.target) := by
  apply Iff.intro
  · intro he
    have := mem_groupoid_of_pregroupoid.mp he.right
    simp only [I.image_eq, I.range_eq_univ, interior_univ, subset_univ, and_true] at this ⊢
    exact this
  · intro he
    apply And.intro
    all_goals apply mem_groupoid_of_pregroupoid.mpr; 

Proof state:
case mpr.left
𝕜 : Type u_1
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
H : Type u_3
inst✝³ : TopologicalSpace H
I : ModelWithCorners 𝕜 E H
M : Type u_4
inst✝² : TopologicalSpace M
inst✝¹ : CompleteSpace E
inst✝ : ModelWithCorners.Boundaryless I
e : PartialHomeomorph H H
he :
  AnalyticOn 𝕜 (↑I ∘ ↑e ∘ ↑(ModelWithCorners.symm I)) (↑I '' e.source) ∧
    AnalyticOn 𝕜 (↑I ∘ ↑(PartialHomeomorph.symm e) ∘ ↑(ModelWithCorners.symm I)) (↑I '' e.target)
⊢ Pregroupoid.property
      {
        property := fun f s =>
          ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I),
        comp :=
          (_ :
            ∀ {f g : H → H} {u v : Set H},
              ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                ContDiffOn 𝕜 ⊤ (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' v ∩ range ↑I) →
                  IsOpen u →
                    IsOpen v →
                      IsOpen (u ∩ f ⁻¹' v) →
                        (fun f s =>
                            ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                              (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                          (g ∘ f) (u ∩ f ⁻¹' v)),
        id_mem :=
          (_ : ContDiffOn 𝕜 ⊤ (↑I ∘ id ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' univ ∩ range ↑I)),
        locality :=
          (_ :
            ∀ {f : H → H} {u : Set H},
              IsOpen u →
                (∀ x ∈ u,
                    ∃ v,
                      IsOpen v ∧
                        x ∈ v ∧
                          (fun f s =>
                              ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                                (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                            f (u ∩ v)) →
                  ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)),
        congr :=
          (_ :
            ∀ {f g : H → H} {u : Set H},
              IsOpen u →
                (∀ x ∈ u, g x = f x) →
                  ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                    ContDiffOn 𝕜 ⊤ (↑I ∘ g ∘ ↑(ModelWithCorners.symm I))
                      (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)) }
      (↑e) e.source ∧
    Pregroupoid.property
      {
        property := fun f s =>
          ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I),
        comp :=
          (_ :
            ∀ {f g : H → H} {u v : Set H},
              ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                ContDiffOn 𝕜 ⊤ (↑I ∘ g ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' v ∩ range ↑I) →
                  IsOpen u →
                    IsOpen v →
                      IsOpen (u ∩ f ⁻¹' v) →
                        (fun f s =>
                            ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                              (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                          (g ∘ f) (u ∩ f ⁻¹' v)),
        id_mem :=
          (_ : ContDiffOn 𝕜 ⊤ (↑I ∘ id ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' univ ∩ range ↑I)),
        locality :=
          (_ :
            ∀ {f : H → H} {u : Set H},
              IsOpen u →
                (∀ x ∈ u,
                    ∃ v,
                      IsOpen v ∧
                        x ∈ v ∧
                          (fun f s =>
                              ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I))
                                (↑(ModelWithCorners.symm I) ⁻¹' s ∩ range ↑I))
                            f (u ∩ v)) →
                  ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)),
        congr :=
          (_ :
            ∀ {f g : H → H} {u : Set H},
              IsOpen u →
                (∀ x ∈ u, g x = f x) →
                  ContDiffOn 𝕜 ⊤ (↑I ∘ f ∘ ↑(ModelWithCorners.symm I)) (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I) →
                    ContDiffOn 𝕜 ⊤ (↑I ∘ g ∘ ↑(ModelWithCorners.symm I))
                      (↑(ModelWithCorners.symm I) ⁻¹' u ∩ range ↑I)) }
      (↑(PartialHomeomorph.symm e)) e.target

Next tactic:
simp only [I.image_eq, I.range_eq_univ,
      interior_univ, subset_univ, and_true] at he ⊢