/-- The fixing subgroup of `K : IntermediateField F E` is isomorphic to `E ≃ₐ[K] E` -/
def fixingSubgroupEquiv : fixingSubgroup K ≃* E ≃ₐ[K] E where
  toFun ϕ := { AlgEquiv.toRingEquiv (ϕ : E ≃ₐ[F] E) with commutes' := ϕ.mem }
  invFun ϕ := ⟨ϕ.restrictScalars _, ϕ.commutes⟩
  left_inv _ := by ext; rfl
  right_inv _ := by ext; rfl
  map_mul' _ _ := by 

Proof state:
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
H : Subgroup (E ≃ₐ[F] E)
K : IntermediateField F E
x✝¹ x✝ : ↥(fixingSubgroup K)
⊢ Equiv.toFun
      {
        toFun := fun ϕ =>
          let src := toRingEquiv ↑ϕ;
          { toEquiv := src.toEquiv,
            map_mul' :=
              (_ :
                ∀ (x y : E), Equiv.toFun src.toEquiv (x * y) = Equiv.toFun src.toEquiv x * Equiv.toFun src.toEquiv y),
            map_add' :=
              (_ :
                ∀ (x y : E), Equiv.toFun src.toEquiv (x + y) = Equiv.toFun src.toEquiv x + Equiv.toFun src.toEquiv y),
            commutes' := (_ : ↑ϕ ∈ ↑(fixingSubgroup K)) },
        invFun := fun ϕ =>
          { val := AlgEquiv.restrictScalars F ϕ,
            property := (_ : ∀ (r : ↥K), ϕ ((algebraMap (↥K) E) r) = (algebraMap (↥K) E) r) },
        left_inv :=
          (_ :
            ∀ (x : ↥(fixingSubgroup K)),
              (fun ϕ =>
                    { val := AlgEquiv.restrictScalars F ϕ,
                      property := (_ : ∀ (r : ↥K), ϕ ((algebraMap (↥K) E) r) = (algebraMap (↥K) E) r) })
                  ((fun ϕ =>
                      let src := toRingEquiv ↑ϕ;
                      { toEquiv := src.toEquiv,
                        map_mul' :=
                          (_ :
                            ∀ (x y : E),
                              Equiv.toFun src.toEquiv (x * y) = Equiv.toFun src.toEquiv x * Equiv.toFun src.toEquiv y),
                        map_add' :=
                          (_ :
                            ∀ (x y : E),
                              Equiv.toFun src.toEquiv (x + y) = Equiv.toFun src.toEquiv x + Equiv.toFun src.toEquiv y),
                        commutes' := (_ : ↑ϕ ∈ ↑(fixingSubgroup K)) })
                    x) =
                x),
        right_inv :=
          (_ :
            ∀ (x : E ≃ₐ[↥K] E),
              (fun ϕ =>
                    let src := toRingEquiv ↑ϕ;
                    { toEquiv := src.toEquiv,
                      map_mul' :=
                        (_ :
                          ∀ (x y : E),
                            Equiv.toFun src.toEquiv (x * y) = Equiv.toFun src.toEquiv x * Equiv.toFun src.toEquiv y),
                      map_add' :=
                        (_ :
                          ∀ (x y : E),
                            Equiv.toFun src.toEquiv (x + y) = Equiv.toFun src.toEquiv x + Equiv.toFun src.toEquiv y),
                      commutes' := (_ : ↑ϕ ∈ ↑(fixingSubgroup K)) })
                  ((fun ϕ =>
                      { val := AlgEquiv.restrictScalars F ϕ,
                        property := (_ : ∀ (r : ↥K), ϕ ((algebraMap (↥K) E) r) = (algebraMap (↥K) E) r) })
                    x) =
                x) }
      (x✝¹ * x✝) =
    Equiv.toFun
        {
          toFun := fun ϕ =>
            let src := toRingEquiv ↑ϕ;
            { toEquiv := src.toEquiv,
              map_mul' :=
                (_ :
                  ∀ (x y : E), Equiv.toFun src.toEquiv (x * y) = Equiv.toFun src.toEquiv x * Equiv.toFun src.toEquiv y),
              map_add' :=
                (_ :
                  ∀ (x y : E), Equiv.toFun src.toEquiv (x + y) = Equiv.toFun src.toEquiv x + Equiv.toFun src.toEquiv y),
              commutes' := (_ : ↑ϕ ∈ ↑(fixingSubgroup K)) },
          invFun := fun ϕ =>
            { val := AlgEquiv.restrictScalars F ϕ,
              property := (_ : ∀ (r : ↥K), ϕ ((algebraMap (↥K) E) r) = (algebraMap (↥K) E) r) },
          left_inv :=
            (_ :
              ∀ (x : ↥(fixingSubgroup K)),
                (fun ϕ =>
                      { val := AlgEquiv.restrictScalars F ϕ,
                        property := (_ : ∀ (r : ↥K), ϕ ((algebraMap (↥K) E) r) = (algebraMap (↥K) E) r) })
                    ((fun ϕ =>
                        let src := toRingEquiv ↑ϕ;
                        { toEquiv := src.toEquiv,
                          map_mul' :=
                            (_ :
                              ∀ (x y : E),
                                Equiv.toFun src.toEquiv (x * y) =
                                  Equiv.toFun src.toEquiv x * Equiv.toFun src.toEquiv y),
                          map_add' :=
                            (_ :
                              ∀ (x y : E),
                                Equiv.toFun src.toEquiv (x + y) =
                                  Equiv.toFun src.toEquiv x + Equiv.toFun src.toEquiv y),
                          commutes' := (_ : ↑ϕ ∈ ↑(fixingSubgroup K)) })
                      x) =
                  x),
          right_inv :=
            (_ :
              ∀ (x : E ≃ₐ[↥K] E),
                (fun ϕ =>
                      let src := toRingEquiv ↑ϕ;
                      { toEquiv := src.toEquiv,
                        map_mul' :=
                          (_ :
                            ∀ (x y : E),
                              Equiv.toFun src.toEquiv (x * y) = Equiv.toFun src.toEquiv x * Equiv.toFun src.toEquiv y),
                        map_add' :=
                          (_ :
                            ∀ (x y : E),
                              Equiv.toFun src.toEquiv (x + y) = Equiv.toFun src.toEquiv x + Equiv.toFun src.toEquiv y),
                        commutes' := (_ : ↑ϕ ∈ ↑(fixingSubgroup K)) })
                    ((fun ϕ =>
                        { val := AlgEquiv.restrictScalars F ϕ,
                          property := (_ : ∀ (r : ↥K), ϕ ((algebraMap (↥K) E) r) = (algebraMap (↥K) E) r) })
                      x) =
                  x) }
        x✝¹ *
      Equiv.toFun
        {
          toFun := fun ϕ =>
            let src := toRingEquiv ↑ϕ;
            { toEquiv := src.toEquiv,
              map_mul' :=
                (_ :
                  ∀ (x y : E), Equiv.toFun src.toEquiv (x * y) = Equiv.toFun src.toEquiv x * Equiv.toFun src.toEquiv y),
              map_add' :=
                (_ :
                  ∀ (x y : E), Equiv.toFun src.toEquiv (x + y) = Equiv.toFun src.toEquiv x + Equiv.toFun src.toEquiv y),
              commutes' := (_ : ↑ϕ ∈ ↑(fixingSubgroup K)) },
          invFun := fun ϕ =>
            { val := AlgEquiv.restrictScalars F ϕ,
              property := (_ : ∀ (r : ↥K), ϕ ((algebraMap (↥K) E) r) = (algebraMap (↥K) E) r) },
          left_inv :=
            (_ :
              ∀ (x : ↥(fixingSubgroup K)),
                (fun ϕ =>
                      { val := AlgEquiv.restrictScalars F ϕ,
                        property := (_ : ∀ (r : ↥K), ϕ ((algebraMap (↥K) E) r) = (algebraMap (↥K) E) r) })
                    ((fun ϕ =>
                        let src := toRingEquiv ↑ϕ;
                        { toEquiv := src.toEquiv,
                          map_mul' :=
                            (_ :
                              ∀ (x y : E),
                                Equiv.toFun src.toEquiv (x * y) =
                                  Equiv.toFun src.toEquiv x * Equiv.toFun src.toEquiv y),
                          map_add' :=
                            (_ :
                              ∀ (x y : E),
                                Equiv.toFun src.toEquiv (x + y) =
                                  Equiv.toFun src.toEquiv x + Equiv.toFun src.toEquiv y),
                          commutes' := (_ : ↑ϕ ∈ ↑(fixingSubgroup K)) })
                      x) =
                  x),
          right_inv :=
            (_ :
              ∀ (x : E ≃ₐ[↥K] E),
                (fun ϕ =>
                      let src := toRingEquiv ↑ϕ;
                      { toEquiv := src.toEquiv,
                        map_mul' :=
                          (_ :
                            ∀ (x y : E),
                              Equiv.toFun src.toEquiv (x * y) = Equiv.toFun src.toEquiv x * Equiv.toFun src.toEquiv y),
                        map_add' :=
                          (_ :
                            ∀ (x y : E),
                              Equiv.toFun src.toEquiv (x + y) = Equiv.toFun src.toEquiv x + Equiv.toFun src.toEquiv y),
                        commutes' := (_ : ↑ϕ ∈ ↑(fixingSubgroup K)) })
                    ((fun ϕ =>
                        { val := AlgEquiv.restrictScalars F ϕ,
                          property := (_ : ∀ (r : ↥K), ϕ ((algebraMap (↥K) E) r) = (algebraMap (↥K) E) r) })
                      x) =
                  x) }
        x✝

Next tactic:
ext