-- Lean 4 proof step from Mathlib.Combinatorics.Tiling.Tile (goal)
Goal:
G : Type u_1
X : Type u_2
ιₚ : Type u_3
inst : Group G
inst_1 : MulAction G X
ps : Protoset G X ιₚ
i₁ : ιₚ
g₁ :
  G ⧸
    Subgroup.map (Subgroup.subtype (MulAction.stabilizer G (↑((↑ps : ιₚ → Prototile G X) i₁) : Set X)))
      ((↑ps : ιₚ → Prototile G X) i₁).symmetries
i₂ : ιₚ
g₂ :
  G ⧸
    Subgroup.map (Subgroup.subtype (MulAction.stabilizer G (↑((↑ps : ιₚ → Prototile G X) i₂) : Set X)))
      ((↑ps : ιₚ → Prototile G X) i₂).symmetries
h :
  { index := i₁, groupElts := g₁ : PlacedTile ps }.index = { index := i₂, groupElts := g₂ : PlacedTile ps }.index ∧
    Quotient.mk
          (QuotientGroup.leftRel
            (Subgroup.map
              (Subgroup.subtype
                (MulAction.stabilizer G
                  (↑((↑ps : ιₚ → Prototile G X) { index := i₁, groupElts := g₁ : PlacedTile ps }.index) : Set X)))
              ((↑ps : ιₚ → Prototile G X) { index := i₁, groupElts := g₁ : PlacedTile ps }.index).symmetries)) ⁻¹'
        {{ index := i₁, groupElts := g₁ : PlacedTile ps }.groupElts} =
      Quotient.mk
          (QuotientGroup.leftRel
            (Subgroup.map
              (Subgroup.subtype
                (MulAction.stabilizer G
                  (↑((↑ps : ιₚ → Prototile G X) { index := i₂, groupElts := g₂ : PlacedTile ps }.index) : Set X)))
              ((↑ps : ιₚ → Prototile G X) { index := i₂, groupElts := g₂ : PlacedTile ps }.index).symmetries)) ⁻¹'
        {{ index := i₂, groupElts := g₂ : PlacedTile ps }.groupElts}
hi : i₁ = i₂
hq :
  Quotient.mk
        (QuotientGroup.leftRel
          (Subgroup.map
            (Subgroup.subtype
              (MulAction.stabilizer G
                (↑((↑ps : ιₚ → Prototile G X) { index := i₁, groupElts := g₁ : PlacedTile ps }.index) : Set X)))
            ((↑ps : ιₚ → Prototile G X) { index := i₁, groupElts := g₁ : PlacedTile ps }.index).symmetries)) ⁻¹'
      {{ index := i₁, groupElts := g₁ : PlacedTile ps }.groupElts} =
    Quotient.mk
        (QuotientGroup.leftRel
          (Subgroup.map
            (Subgroup.subtype
              (MulAction.stabilizer G
                (↑((↑ps : ιₚ → Prototile G X) { index := i₂, groupElts := g₂ : PlacedTile ps }.index) : Set X)))
            ((↑ps : ιₚ → Prototile G X) { index := i₂, groupElts := g₂ : PlacedTile ps }.index).symmetries)) ⁻¹'
      {{ index := i₂, groupElts := g₂ : PlacedTile ps }.groupElts}
⊢ { index := i₁, groupElts := g₁ : PlacedTile ps } = { index := i₂, groupElts := g₂ }
have refine_2 : ∀
  (g₂ :
    G ⧸
      Subgroup.map (Subgroup.subtype (MulAction.stabilizer G (↑((↑ps : ιₚ → Prototile G X) i₁) : Set X)))
        ((↑ps : ιₚ → Prototile G X) i₁).symmetries),
  { index := i₁, groupElts := g₁ : PlacedTile ps }.index = { index := i₁, groupElts := g₂ : PlacedTile ps }.index ∧
      Quotient.mk
            (QuotientGroup.leftRel
              (Subgroup.map
                (Subgroup.subtype
                  (MulAction.stabilizer G
                    (↑((↑ps : ιₚ → Prototile G X) { index := i₁, groupElts := g₁ : PlacedTile ps }.index) : Set X)))
                ((↑ps : ιₚ → Prototile G X) { index := i₁, groupElts := g₁ : PlacedTile ps }.index).symmetries)) ⁻¹'
          {{ index := i₁, groupElts := g₁ : PlacedTile ps }.groupElts} =
        Quotient.mk
            (QuotientGroup.leftRel
              (Subgroup.map
                (Subgroup.subtype
                  (MulAction.stabilizer G
                    (↑((↑ps : ιₚ → Prototile G X) { index := i₁, groupElts := g₂ : PlacedTile ps }.index) : Set X)))
                ((↑ps : ιₚ → Prototile G X) { index := i₁, groupElts := g₂ : PlacedTile ps }.index).symmetries)) ⁻¹'
          {{ index := i₁, groupElts := g₂ : PlacedTile ps }.groupElts} →
    ∀
      (hq :
        Quotient.mk
              (QuotientGroup.leftRel
                (Subgroup.map
                  (Subgroup.subtype
                    (MulAction.stabilizer G
                      (↑((↑ps : ιₚ → Prototile G X) { index := i₁, groupElts := g₁ : PlacedTile ps }.index) : Set X)))
                  ((↑ps : ιₚ → Prototile G X) { index := i₁, groupElts := g₁ : PlacedTile ps }.index).symmetries)) ⁻¹'
            {{ index := i₁, groupElts := g₁ : PlacedTile ps }.groupElts} =
          Quotient.mk
              (QuotientGroup.leftRel
                (Subgroup.map
                  (Subgroup.subtype
                    (MulAction.stabilizer G
                      (↑((↑ps : ιₚ → Prototile G X) { index := i₁, groupElts := g₂ : PlacedTile ps }.index) : Set X)))
                  ((↑ps : ιₚ → Prototile G X) { index := i₁, groupElts := g₂ : PlacedTile ps }.index).symmetries)) ⁻¹'
            {{ index := i₁, groupElts := g₂ : PlacedTile ps }.groupElts}),
      { index := i₁, groupElts := g₁ : PlacedTile ps } = { index := i₁, groupElts := g₂ }
Tactic: subst hi
Cleared hypotheses: i₂, g₂, h, hi, hq