Theorem: Prod.fst.arg_self.isomorph_rule (SciLean/Core/FunctionTransformations/Isomorph/RealToFloat.lean)

State before:
α✝ : Type ?u.1407
α'✝ : Type ?u.1410
β : Type ?u.1413
β' : Type ?u.1416
γ : Type ?u.1419
γ' : Type ?u.1422
inst✝⁵ : IsomorphicType `RealToFloat α✝ α'✝
inst✝⁴ : IsomorphicType `RealToFloat β β'
inst✝³ : IsomorphicType `RealToFloat γ γ'
α : Type u_1
α' : Type u_2
β₁ : Type u_3
β₂ : Type u_4
β₁' : Type u_5
β₂' : Type u_6
inst✝² : IsomorphicType `RealToFloat α α'
inst✝¹ : IsomorphicType `RealToFloat β₁ β₁'
inst✝ : IsomorphicType `RealToFloat β₂ β₂'
f : α → β₁ × β₂
⊢ (isomorph `RealToFloat fun x => (f x).1) = fun x => (isomorph `RealToFloat f x).1
Tactic:
funext x
State after:
case h
α✝ : Type ?u.1407
α'✝ : Type ?u.1410
β : Type ?u.1413
β' : Type ?u.1416
γ : Type ?u.1419
γ' : Type ?u.1422
inst✝⁵ : IsomorphicType `RealToFloat α✝ α'✝
inst✝⁴ : IsomorphicType `RealToFloat β β'
inst✝³ : IsomorphicType `RealToFloat γ γ'
α : Type u_1
α' : Type u_2
β₁ : Type u_3
β₂ : Type u_4
β₁' : Type u_5
β₂' : Type u_6
inst✝² : IsomorphicType `RealToFloat α α'
inst✝¹ : IsomorphicType `RealToFloat β₁ β₁'
inst✝ : IsomorphicType `RealToFloat β₂ β₂'
f : α → β₁ × β₂
x : α'
⊢ isomorph `RealToFloat (fun x => (f x).1) x = (isomorph `RealToFloat f x).1

State before:
case h
α✝ : Type ?u.1407
α'✝ : Type ?u.1410
β : Type ?u.1413
β' : Type ?u.1416
γ : Type ?u.1419
γ' : Type ?u.1422
inst✝⁵ : IsomorphicType `RealToFloat α✝ α'✝
inst✝⁴ : IsomorphicType `RealToFloat β β'
inst✝³ : IsomorphicType `RealToFloat γ γ'
α : Type u_1
α' : Type u_2
β₁ : Type u_3
β₂ : Type u_4
β₁' : Type u_5
β₂' : Type u_6
inst✝² : IsomorphicType `RealToFloat α α'
inst✝¹ : IsomorphicType `RealToFloat β₁ β₁'
inst✝ : IsomorphicType `RealToFloat β₂ β₂'
f : α → β₁ × β₂
x : α'
⊢ isomorph `RealToFloat (fun x => (f x).1) x = (isomorph `RealToFloat f x).1
Tactic:
unfold isomorph
State after:
case h
α✝ : Type ?u.1407
α'✝ : Type ?u.1410
β : Type ?u.1413
β' : Type ?u.1416
γ : Type ?u.1419
γ' : Type ?u.1422
inst✝⁵ : IsomorphicType `RealToFloat α✝ α'✝
inst✝⁴ : IsomorphicType `RealToFloat β β'
inst✝³ : IsomorphicType `RealToFloat γ γ'
α : Type u_1
α' : Type u_2
β₁ : Type u_3
β₂ : Type u_4
β₁' : Type u_5
β₂' : Type u_6
inst✝² : IsomorphicType `RealToFloat α α'
inst✝¹ : IsomorphicType `RealToFloat β₁ β₁'
inst✝ : IsomorphicType `RealToFloat β₂ β₂'
f : α → β₁ × β₂
x : α'
⊢ (IsomorphicType.equiv `RealToFloat) ((fun x => (f x).1) ((IsomorphicType.equiv `RealToFloat).symm x)) =
    ((IsomorphicType.equiv `RealToFloat) (f ((IsomorphicType.equiv `RealToFloat).symm x))).1

State before:
case h
α✝ : Type ?u.1407
α'✝ : Type ?u.1410
β : Type ?u.1413
β' : Type ?u.1416
γ : Type ?u.1419
γ' : Type ?u.1422
inst✝⁵ : IsomorphicType `RealToFloat α✝ α'✝
inst✝⁴ : IsomorphicType `RealToFloat β β'
inst✝³ : IsomorphicType `RealToFloat γ γ'
α : Type u_1
α' : Type u_2
β₁ : Type u_3
β₂ : Type u_4
β₁' : Type u_5
β₂' : Type u_6
inst✝² : IsomorphicType `RealToFloat α α'
inst✝¹ : IsomorphicType `RealToFloat β₁ β₁'
inst✝ : IsomorphicType `RealToFloat β₂ β₂'
f : α → β₁ × β₂
x : α'
⊢ (IsomorphicType.equiv `RealToFloat) ((fun x => (f x).1) ((IsomorphicType.equiv `RealToFloat).symm x)) =
    ((IsomorphicType.equiv `RealToFloat) (f ((IsomorphicType.equiv `RealToFloat).symm x))).1
Tactic:
unfold IsomorphicType.equiv
State after:
case h
α✝ : Type ?u.1407
α'✝ : Type ?u.1410
β : Type ?u.1413
β' : Type ?u.1416
γ : Type ?u.1419
γ' : Type ?u.1422
inst✝⁵ : IsomorphicType `RealToFloat α✝ α'✝
inst✝⁴ : IsomorphicType `RealToFloat β β'
inst✝³ : IsomorphicType `RealToFloat γ γ'
α : Type u_1
α' : Type u_2
β₁ : Type u_3
β₂ : Type u_4
β₁' : Type u_5
β₂' : Type u_6
inst✝² : IsomorphicType `RealToFloat α α'
inst✝¹ : IsomorphicType `RealToFloat β₁ β₁'
inst✝ : IsomorphicType `RealToFloat β₂ β₂'
f : α → β₁ × β₂
x : α'
⊢ inst✝¹.1 ((fun x => (f x).1) (inst✝².1.symm x)) =
    ({
            equiv :=
              {
                toFun := fun x =>
                  match x with
                  | (a, b) => (inst✝¹.1 a, inst✝.1 b),
                invFun := fun x =>
                  match x with
                  | (a', b') => (inst✝¹.1.symm a', inst✝.1.symm b'),
                left_inv := ⋯, right_inv := ⋯ } }.1
        (f (inst✝².1.symm x))).1

State before:
case h
α✝ : Type ?u.1407
α'✝ : Type ?u.1410
β : Type ?u.1413
β' : Type ?u.1416
γ : Type ?u.1419
γ' : Type ?u.1422
inst✝⁵ : IsomorphicType `RealToFloat α✝ α'✝
inst✝⁴ : IsomorphicType `RealToFloat β β'
inst✝³ : IsomorphicType `RealToFloat γ γ'
α : Type u_1
α' : Type u_2
β₁ : Type u_3
β₂ : Type u_4
β₁' : Type u_5
β₂' : Type u_6
inst✝² : IsomorphicType `RealToFloat α α'
inst✝¹ : IsomorphicType `RealToFloat β₁ β₁'
inst✝ : IsomorphicType `RealToFloat β₂ β₂'
f : α → β₁ × β₂
x : α'
⊢ inst✝¹.1 ((fun x => (f x).1) (inst✝².1.symm x)) =
    ({
            equiv :=
              {
                toFun := fun x =>
                  match x with
                  | (a, b) => (inst✝¹.1 a, inst✝.1 b),
                invFun := fun x =>
                  match x with
                  | (a', b') => (inst✝¹.1.symm a', inst✝.1.symm b'),
                left_inv := ⋯, right_inv := ⋯ } }.1
        (f (inst✝².1.symm x))).1
Tactic:
simp
State after:
no goals