Metamath Proof Explorer


Theorem mpocurryd

Description: The currying of an operation given in maps-to notation, splitting the operation (function of two arguments) into a function of the first argument, producing a function over the second argument. (Contributed by AV, 27-Oct-2019)

Ref Expression
Hypotheses mpocurryd.f ⊢ F = x ∈ X , y ∈ Y ⟼ C
mpocurryd.c ⊢ φ → ∀ x ∈ X ∀ y ∈ Y C ∈ V
mpocurryd.n ⊢ φ → Y ≠ ∅
Assertion mpocurryd ⊢ φ → curry F = x ∈ X ⟼ y ∈ Y ⟼ C

Proof

Step Hyp Ref Expression
1 mpocurryd.f ⊢ F = x ∈ X , y ∈ Y ⟼ C
2 mpocurryd.c ⊢ φ → ∀ x ∈ X ∀ y ∈ Y C ∈ V
3 mpocurryd.n ⊢ φ → Y ≠ ∅
4 df-cur ⊢ curry F = x ∈ dom ⁡ dom ⁡ F ⟼ y z | x y F z
5 1 dmmpoga ⊢ ∀ x ∈ X ∀ y ∈ Y C ∈ V → dom ⁡ F = X × Y
6 2 5 syl ⊢ φ → dom ⁡ F = X × Y
7 6 dmeqd ⊢ φ → dom ⁡ dom ⁡ F = dom ⁡ X × Y
8 dmxp ⊢ Y ≠ ∅ → dom ⁡ X × Y = X
9 3 8 syl ⊢ φ → dom ⁡ X × Y = X
10 7 9 eqtrd ⊢ φ → dom ⁡ dom ⁡ F = X
11 10 mpteq1d ⊢ φ → x ∈ dom ⁡ dom ⁡ F ⟼ y z | x y F z = x ∈ X ⟼ y z | x y F z
12 df-mpt ⊢ y ∈ Y ⟼ C = y z | y ∈ Y ∧ z = C
13 1 mpofun ⊢ Fun ⁡ F
14 funbrfv2b ⊢ Fun ⁡ F → x y F z ↔ x y ∈ dom ⁡ F ∧ F ⁡ x y = z
15 13 14 mp1i ⊢ φ ∧ x ∈ X → x y F z ↔ x y ∈ dom ⁡ F ∧ F ⁡ x y = z
16 6 adantr ⊢ φ ∧ x ∈ X → dom ⁡ F = X × Y
17 16 eleq2d ⊢ φ ∧ x ∈ X → x y ∈ dom ⁡ F ↔ x y ∈ X × Y
18 opelxp ⊢ x y ∈ X × Y ↔ x ∈ X ∧ y ∈ Y
19 17 18 bitrdi ⊢ φ ∧ x ∈ X → x y ∈ dom ⁡ F ↔ x ∈ X ∧ y ∈ Y
20 19 anbi1d ⊢ φ ∧ x ∈ X → x y ∈ dom ⁡ F ∧ F ⁡ x y = z ↔ x ∈ X ∧ y ∈ Y ∧ F ⁡ x y = z
21 an21 ⊢ x ∈ X ∧ y ∈ Y ∧ F ⁡ x y = z ↔ y ∈ Y ∧ x ∈ X ∧ F ⁡ x y = z
22 ibar ⊢ x ∈ X → F ⁡ x y = z ↔ x ∈ X ∧ F ⁡ x y = z
23 22 bicomd ⊢ x ∈ X → x ∈ X ∧ F ⁡ x y = z ↔ F ⁡ x y = z
24 23 adantl ⊢ φ ∧ x ∈ X → x ∈ X ∧ F ⁡ x y = z ↔ F ⁡ x y = z
25 24 adantr ⊢ φ ∧ x ∈ X ∧ y ∈ Y → x ∈ X ∧ F ⁡ x y = z ↔ F ⁡ x y = z
26 df-ov ⊢ x F y = F ⁡ x y
27 nfcv ⊢ Ⅎ _ a C
28 nfcv ⊢ Ⅎ _ b C
29 nfcv ⊢ Ⅎ _ x b
30 nfcsb1v ⊢ Ⅎ _ x ⦋ a / x⦌ C
31 29 30 nfcsbw ⊢ Ⅎ _ x ⦋ b / y⦌ ⦋ a / x⦌ C
32 nfcsb1v ⊢ Ⅎ _ y ⦋ b / y⦌ ⦋ a / x⦌ C
33 csbeq1a ⊢ x = a → C = ⦋ a / x⦌ C
34 csbeq1a ⊢ y = b → ⦋ a / x⦌ C = ⦋ b / y⦌ ⦋ a / x⦌ C
35 33 34 sylan9eq ⊢ x = a ∧ y = b → C = ⦋ b / y⦌ ⦋ a / x⦌ C
36 27 28 31 32 35 cbvmpo ⊢ x ∈ X , y ∈ Y ⟼ C = a ∈ X , b ∈ Y ⟼ ⦋ b / y⦌ ⦋ a / x⦌ C
37 1 36 eqtri ⊢ F = a ∈ X , b ∈ Y ⟼ ⦋ b / y⦌ ⦋ a / x⦌ C
38 37 a1i ⊢ φ ∧ x ∈ X ∧ y ∈ Y → F = a ∈ X , b ∈ Y ⟼ ⦋ b / y⦌ ⦋ a / x⦌ C
39 33 eqcomd ⊢ x = a → ⦋ a / x⦌ C = C
40 39 equcoms ⊢ a = x → ⦋ a / x⦌ C = C
41 40 csbeq2dv ⊢ a = x → ⦋ b / y⦌ ⦋ a / x⦌ C = ⦋ b / y⦌ C
42 csbeq1a ⊢ y = b → C = ⦋ b / y⦌ C
43 42 eqcomd ⊢ y = b → ⦋ b / y⦌ C = C
44 43 equcoms ⊢ b = y → ⦋ b / y⦌ C = C
45 41 44 sylan9eq ⊢ a = x ∧ b = y → ⦋ b / y⦌ ⦋ a / x⦌ C = C
46 45 adantl ⊢ φ ∧ x ∈ X ∧ y ∈ Y ∧ a = x ∧ b = y → ⦋ b / y⦌ ⦋ a / x⦌ C = C
47 simpr ⊢ φ ∧ x ∈ X → x ∈ X
48 47 adantr ⊢ φ ∧ x ∈ X ∧ y ∈ Y → x ∈ X
49 simpr ⊢ φ ∧ x ∈ X ∧ y ∈ Y → y ∈ Y
50 rsp2 ⊢ ∀ x ∈ X ∀ y ∈ Y C ∈ V → x ∈ X ∧ y ∈ Y → C ∈ V
51 2 50 syl ⊢ φ → x ∈ X ∧ y ∈ Y → C ∈ V
52 51 impl ⊢ φ ∧ x ∈ X ∧ y ∈ Y → C ∈ V
53 38 46 48 49 52 ovmpod ⊢ φ ∧ x ∈ X ∧ y ∈ Y → x F y = C
54 26 53 eqtr3id ⊢ φ ∧ x ∈ X ∧ y ∈ Y → F ⁡ x y = C
55 54 eqeq1d ⊢ φ ∧ x ∈ X ∧ y ∈ Y → F ⁡ x y = z ↔ C = z
56 eqcom ⊢ C = z ↔ z = C
57 55 56 bitrdi ⊢ φ ∧ x ∈ X ∧ y ∈ Y → F ⁡ x y = z ↔ z = C
58 25 57 bitrd ⊢ φ ∧ x ∈ X ∧ y ∈ Y → x ∈ X ∧ F ⁡ x y = z ↔ z = C
59 58 pm5.32da ⊢ φ ∧ x ∈ X → y ∈ Y ∧ x ∈ X ∧ F ⁡ x y = z ↔ y ∈ Y ∧ z = C
60 21 59 bitrid ⊢ φ ∧ x ∈ X → x ∈ X ∧ y ∈ Y ∧ F ⁡ x y = z ↔ y ∈ Y ∧ z = C
61 15 20 60 3bitrrd ⊢ φ ∧ x ∈ X → y ∈ Y ∧ z = C ↔ x y F z
62 61 opabbidv ⊢ φ ∧ x ∈ X → y z | y ∈ Y ∧ z = C = y z | x y F z
63 12 62 eqtr2id ⊢ φ ∧ x ∈ X → y z | x y F z = y ∈ Y ⟼ C
64 63 mpteq2dva ⊢ φ → x ∈ X ⟼ y z | x y F z = x ∈ X ⟼ y ∈ Y ⟼ C
65 11 64 eqtrd ⊢ φ → x ∈ dom ⁡ dom ⁡ F ⟼ y z | x y F z = x ∈ X ⟼ y ∈ Y ⟼ C
66 4 65 eqtrid ⊢ φ → curry F = x ∈ X ⟼ y ∈ Y ⟼ C