Metamath Proof Explorer


Theorem sticksstones9

Description: Establish mapping between strictly monotone functions and functions that sum to a fixed non-negative integer. (Contributed by metakunt, 6-Oct-2024)

Ref Expression
Hypotheses sticksstones9.1 ( 𝜑𝑁 ∈ ℕ0 )
sticksstones9.2 ( 𝜑𝐾 = 0 )
sticksstones9.3 𝐺 = ( 𝑏𝐵 ↦ if ( 𝐾 = 0 , { ⟨ 1 , 𝑁 ⟩ } , ( 𝑘 ∈ ( 1 ... ( 𝐾 + 1 ) ) ↦ if ( 𝑘 = ( 𝐾 + 1 ) , ( ( 𝑁 + 𝐾 ) − ( 𝑏𝐾 ) ) , if ( 𝑘 = 1 , ( ( 𝑏 ‘ 1 ) − 1 ) , ( ( ( 𝑏𝑘 ) − ( 𝑏 ‘ ( 𝑘 − 1 ) ) ) − 1 ) ) ) ) ) )
sticksstones9.4 𝐴 = { 𝑔 ∣ ( 𝑔 : ( 1 ... ( 𝐾 + 1 ) ) ⟶ ℕ0 ∧ Σ 𝑖 ∈ ( 1 ... ( 𝐾 + 1 ) ) ( 𝑔𝑖 ) = 𝑁 ) }
sticksstones9.5 𝐵 = { 𝑓 ∣ ( 𝑓 : ( 1 ... 𝐾 ) ⟶ ( 1 ... ( 𝑁 + 𝐾 ) ) ∧ ∀ 𝑥 ∈ ( 1 ... 𝐾 ) ∀ 𝑦 ∈ ( 1 ... 𝐾 ) ( 𝑥 < 𝑦 → ( 𝑓𝑥 ) < ( 𝑓𝑦 ) ) ) }
Assertion sticksstones9 ( 𝜑𝐺 : 𝐵𝐴 )

Proof

Step Hyp Ref Expression
1 sticksstones9.1 ( 𝜑𝑁 ∈ ℕ0 )
2 sticksstones9.2 ( 𝜑𝐾 = 0 )
3 sticksstones9.3 𝐺 = ( 𝑏𝐵 ↦ if ( 𝐾 = 0 , { ⟨ 1 , 𝑁 ⟩ } , ( 𝑘 ∈ ( 1 ... ( 𝐾 + 1 ) ) ↦ if ( 𝑘 = ( 𝐾 + 1 ) , ( ( 𝑁 + 𝐾 ) − ( 𝑏𝐾 ) ) , if ( 𝑘 = 1 , ( ( 𝑏 ‘ 1 ) − 1 ) , ( ( ( 𝑏𝑘 ) − ( 𝑏 ‘ ( 𝑘 − 1 ) ) ) − 1 ) ) ) ) ) )
4 sticksstones9.4 𝐴 = { 𝑔 ∣ ( 𝑔 : ( 1 ... ( 𝐾 + 1 ) ) ⟶ ℕ0 ∧ Σ 𝑖 ∈ ( 1 ... ( 𝐾 + 1 ) ) ( 𝑔𝑖 ) = 𝑁 ) }
5 sticksstones9.5 𝐵 = { 𝑓 ∣ ( 𝑓 : ( 1 ... 𝐾 ) ⟶ ( 1 ... ( 𝑁 + 𝐾 ) ) ∧ ∀ 𝑥 ∈ ( 1 ... 𝐾 ) ∀ 𝑦 ∈ ( 1 ... 𝐾 ) ( 𝑥 < 𝑦 → ( 𝑓𝑥 ) < ( 𝑓𝑦 ) ) ) }
6 2 iftrued ( 𝜑 → if ( 𝐾 = 0 , { ⟨ 1 , 𝑁 ⟩ } , ( 𝑘 ∈ ( 1 ... ( 𝐾 + 1 ) ) ↦ if ( 𝑘 = ( 𝐾 + 1 ) , ( ( 𝑁 + 𝐾 ) − ( 𝑏𝐾 ) ) , if ( 𝑘 = 1 , ( ( 𝑏 ‘ 1 ) − 1 ) , ( ( ( 𝑏𝑘 ) − ( 𝑏 ‘ ( 𝑘 − 1 ) ) ) − 1 ) ) ) ) ) = { ⟨ 1 , 𝑁 ⟩ } )
7 6 adantr ( ( 𝜑𝑏𝐵 ) → if ( 𝐾 = 0 , { ⟨ 1 , 𝑁 ⟩ } , ( 𝑘 ∈ ( 1 ... ( 𝐾 + 1 ) ) ↦ if ( 𝑘 = ( 𝐾 + 1 ) , ( ( 𝑁 + 𝐾 ) − ( 𝑏𝐾 ) ) , if ( 𝑘 = 1 , ( ( 𝑏 ‘ 1 ) − 1 ) , ( ( ( 𝑏𝑘 ) − ( 𝑏 ‘ ( 𝑘 − 1 ) ) ) − 1 ) ) ) ) ) = { ⟨ 1 , 𝑁 ⟩ } )
8 eqid { ⟨ 1 , 𝑁 ⟩ } = { ⟨ 1 , 𝑁 ⟩ }
9 1nn 1 ∈ ℕ
10 9 a1i ( 𝜑 → 1 ∈ ℕ )
11 fsng ( ( 1 ∈ ℕ ∧ 𝑁 ∈ ℕ0 ) → ( { ⟨ 1 , 𝑁 ⟩ } : { 1 } ⟶ { 𝑁 } ↔ { ⟨ 1 , 𝑁 ⟩ } = { ⟨ 1 , 𝑁 ⟩ } ) )
12 10 1 11 syl2anc ( 𝜑 → ( { ⟨ 1 , 𝑁 ⟩ } : { 1 } ⟶ { 𝑁 } ↔ { ⟨ 1 , 𝑁 ⟩ } = { ⟨ 1 , 𝑁 ⟩ } ) )
13 8 12 mpbiri ( 𝜑 → { ⟨ 1 , 𝑁 ⟩ } : { 1 } ⟶ { 𝑁 } )
14 1 snssd ( 𝜑 → { 𝑁 } ⊆ ℕ0 )
15 13 14 jca ( 𝜑 → ( { ⟨ 1 , 𝑁 ⟩ } : { 1 } ⟶ { 𝑁 } ∧ { 𝑁 } ⊆ ℕ0 ) )
16 fss ( ( { ⟨ 1 , 𝑁 ⟩ } : { 1 } ⟶ { 𝑁 } ∧ { 𝑁 } ⊆ ℕ0 ) → { ⟨ 1 , 𝑁 ⟩ } : { 1 } ⟶ ℕ0 )
17 15 16 syl ( 𝜑 → { ⟨ 1 , 𝑁 ⟩ } : { 1 } ⟶ ℕ0 )
18 2 oveq1d ( 𝜑 → ( 𝐾 + 1 ) = ( 0 + 1 ) )
19 0p1e1 ( 0 + 1 ) = 1
20 18 19 eqtrdi ( 𝜑 → ( 𝐾 + 1 ) = 1 )
21 20 oveq2d ( 𝜑 → ( 1 ... ( 𝐾 + 1 ) ) = ( 1 ... 1 ) )
22 1zzd ( 𝜑 → 1 ∈ ℤ )
23 fzsn ( 1 ∈ ℤ → ( 1 ... 1 ) = { 1 } )
24 22 23 syl ( 𝜑 → ( 1 ... 1 ) = { 1 } )
25 21 24 eqtrd ( 𝜑 → ( 1 ... ( 𝐾 + 1 ) ) = { 1 } )
26 25 eqcomd ( 𝜑 → { 1 } = ( 1 ... ( 𝐾 + 1 ) ) )
27 26 feq2d ( 𝜑 → ( { ⟨ 1 , 𝑁 ⟩ } : { 1 } ⟶ ℕ0 ↔ { ⟨ 1 , 𝑁 ⟩ } : ( 1 ... ( 𝐾 + 1 ) ) ⟶ ℕ0 ) )
28 17 27 mpbid ( 𝜑 → { ⟨ 1 , 𝑁 ⟩ } : ( 1 ... ( 𝐾 + 1 ) ) ⟶ ℕ0 )
29 25 sumeq1d ( 𝜑 → Σ 𝑖 ∈ ( 1 ... ( 𝐾 + 1 ) ) ( { ⟨ 1 , 𝑁 ⟩ } ‘ 𝑖 ) = Σ 𝑖 ∈ { 1 } ( { ⟨ 1 , 𝑁 ⟩ } ‘ 𝑖 ) )
30 fvsng ( ( 1 ∈ ℕ ∧ 𝑁 ∈ ℕ0 ) → ( { ⟨ 1 , 𝑁 ⟩ } ‘ 1 ) = 𝑁 )
31 10 1 30 syl2anc ( 𝜑 → ( { ⟨ 1 , 𝑁 ⟩ } ‘ 1 ) = 𝑁 )
32 1 nn0cnd ( 𝜑𝑁 ∈ ℂ )
33 31 32 eqeltrd ( 𝜑 → ( { ⟨ 1 , 𝑁 ⟩ } ‘ 1 ) ∈ ℂ )
34 10 33 jca ( 𝜑 → ( 1 ∈ ℕ ∧ ( { ⟨ 1 , 𝑁 ⟩ } ‘ 1 ) ∈ ℂ ) )
35 fveq2 ( 𝑖 = 1 → ( { ⟨ 1 , 𝑁 ⟩ } ‘ 𝑖 ) = ( { ⟨ 1 , 𝑁 ⟩ } ‘ 1 ) )
36 35 sumsn ( ( 1 ∈ ℕ ∧ ( { ⟨ 1 , 𝑁 ⟩ } ‘ 1 ) ∈ ℂ ) → Σ 𝑖 ∈ { 1 } ( { ⟨ 1 , 𝑁 ⟩ } ‘ 𝑖 ) = ( { ⟨ 1 , 𝑁 ⟩ } ‘ 1 ) )
37 34 36 syl ( 𝜑 → Σ 𝑖 ∈ { 1 } ( { ⟨ 1 , 𝑁 ⟩ } ‘ 𝑖 ) = ( { ⟨ 1 , 𝑁 ⟩ } ‘ 1 ) )
38 10 1 jca ( 𝜑 → ( 1 ∈ ℕ ∧ 𝑁 ∈ ℕ0 ) )
39 38 30 syl ( 𝜑 → ( { ⟨ 1 , 𝑁 ⟩ } ‘ 1 ) = 𝑁 )
40 37 39 eqtrd ( 𝜑 → Σ 𝑖 ∈ { 1 } ( { ⟨ 1 , 𝑁 ⟩ } ‘ 𝑖 ) = 𝑁 )
41 29 40 eqtrd ( 𝜑 → Σ 𝑖 ∈ ( 1 ... ( 𝐾 + 1 ) ) ( { ⟨ 1 , 𝑁 ⟩ } ‘ 𝑖 ) = 𝑁 )
42 28 41 jca ( 𝜑 → ( { ⟨ 1 , 𝑁 ⟩ } : ( 1 ... ( 𝐾 + 1 ) ) ⟶ ℕ0 ∧ Σ 𝑖 ∈ ( 1 ... ( 𝐾 + 1 ) ) ( { ⟨ 1 , 𝑁 ⟩ } ‘ 𝑖 ) = 𝑁 ) )
43 42 adantr ( ( 𝜑𝑏𝐵 ) → ( { ⟨ 1 , 𝑁 ⟩ } : ( 1 ... ( 𝐾 + 1 ) ) ⟶ ℕ0 ∧ Σ 𝑖 ∈ ( 1 ... ( 𝐾 + 1 ) ) ( { ⟨ 1 , 𝑁 ⟩ } ‘ 𝑖 ) = 𝑁 ) )
44 snex { ⟨ 1 , 𝑁 ⟩ } ∈ V
45 feq1 ( 𝑔 = { ⟨ 1 , 𝑁 ⟩ } → ( 𝑔 : ( 1 ... ( 𝐾 + 1 ) ) ⟶ ℕ0 ↔ { ⟨ 1 , 𝑁 ⟩ } : ( 1 ... ( 𝐾 + 1 ) ) ⟶ ℕ0 ) )
46 simpl ( ( 𝑔 = { ⟨ 1 , 𝑁 ⟩ } ∧ 𝑖 ∈ ( 1 ... ( 𝐾 + 1 ) ) ) → 𝑔 = { ⟨ 1 , 𝑁 ⟩ } )
47 46 fveq1d ( ( 𝑔 = { ⟨ 1 , 𝑁 ⟩ } ∧ 𝑖 ∈ ( 1 ... ( 𝐾 + 1 ) ) ) → ( 𝑔𝑖 ) = ( { ⟨ 1 , 𝑁 ⟩ } ‘ 𝑖 ) )
48 47 sumeq2dv ( 𝑔 = { ⟨ 1 , 𝑁 ⟩ } → Σ 𝑖 ∈ ( 1 ... ( 𝐾 + 1 ) ) ( 𝑔𝑖 ) = Σ 𝑖 ∈ ( 1 ... ( 𝐾 + 1 ) ) ( { ⟨ 1 , 𝑁 ⟩ } ‘ 𝑖 ) )
49 48 eqeq1d ( 𝑔 = { ⟨ 1 , 𝑁 ⟩ } → ( Σ 𝑖 ∈ ( 1 ... ( 𝐾 + 1 ) ) ( 𝑔𝑖 ) = 𝑁 ↔ Σ 𝑖 ∈ ( 1 ... ( 𝐾 + 1 ) ) ( { ⟨ 1 , 𝑁 ⟩ } ‘ 𝑖 ) = 𝑁 ) )
50 45 49 anbi12d ( 𝑔 = { ⟨ 1 , 𝑁 ⟩ } → ( ( 𝑔 : ( 1 ... ( 𝐾 + 1 ) ) ⟶ ℕ0 ∧ Σ 𝑖 ∈ ( 1 ... ( 𝐾 + 1 ) ) ( 𝑔𝑖 ) = 𝑁 ) ↔ ( { ⟨ 1 , 𝑁 ⟩ } : ( 1 ... ( 𝐾 + 1 ) ) ⟶ ℕ0 ∧ Σ 𝑖 ∈ ( 1 ... ( 𝐾 + 1 ) ) ( { ⟨ 1 , 𝑁 ⟩ } ‘ 𝑖 ) = 𝑁 ) ) )
51 50 elabg ( { ⟨ 1 , 𝑁 ⟩ } ∈ V → ( { ⟨ 1 , 𝑁 ⟩ } ∈ { 𝑔 ∣ ( 𝑔 : ( 1 ... ( 𝐾 + 1 ) ) ⟶ ℕ0 ∧ Σ 𝑖 ∈ ( 1 ... ( 𝐾 + 1 ) ) ( 𝑔𝑖 ) = 𝑁 ) } ↔ ( { ⟨ 1 , 𝑁 ⟩ } : ( 1 ... ( 𝐾 + 1 ) ) ⟶ ℕ0 ∧ Σ 𝑖 ∈ ( 1 ... ( 𝐾 + 1 ) ) ( { ⟨ 1 , 𝑁 ⟩ } ‘ 𝑖 ) = 𝑁 ) ) )
52 44 51 ax-mp ( { ⟨ 1 , 𝑁 ⟩ } ∈ { 𝑔 ∣ ( 𝑔 : ( 1 ... ( 𝐾 + 1 ) ) ⟶ ℕ0 ∧ Σ 𝑖 ∈ ( 1 ... ( 𝐾 + 1 ) ) ( 𝑔𝑖 ) = 𝑁 ) } ↔ ( { ⟨ 1 , 𝑁 ⟩ } : ( 1 ... ( 𝐾 + 1 ) ) ⟶ ℕ0 ∧ Σ 𝑖 ∈ ( 1 ... ( 𝐾 + 1 ) ) ( { ⟨ 1 , 𝑁 ⟩ } ‘ 𝑖 ) = 𝑁 ) )
53 43 52 sylibr ( ( 𝜑𝑏𝐵 ) → { ⟨ 1 , 𝑁 ⟩ } ∈ { 𝑔 ∣ ( 𝑔 : ( 1 ... ( 𝐾 + 1 ) ) ⟶ ℕ0 ∧ Σ 𝑖 ∈ ( 1 ... ( 𝐾 + 1 ) ) ( 𝑔𝑖 ) = 𝑁 ) } )
54 4 a1i ( ( 𝜑𝑏𝐵 ) → 𝐴 = { 𝑔 ∣ ( 𝑔 : ( 1 ... ( 𝐾 + 1 ) ) ⟶ ℕ0 ∧ Σ 𝑖 ∈ ( 1 ... ( 𝐾 + 1 ) ) ( 𝑔𝑖 ) = 𝑁 ) } )
55 53 54 eleqtrrd ( ( 𝜑𝑏𝐵 ) → { ⟨ 1 , 𝑁 ⟩ } ∈ 𝐴 )
56 7 55 eqeltrd ( ( 𝜑𝑏𝐵 ) → if ( 𝐾 = 0 , { ⟨ 1 , 𝑁 ⟩ } , ( 𝑘 ∈ ( 1 ... ( 𝐾 + 1 ) ) ↦ if ( 𝑘 = ( 𝐾 + 1 ) , ( ( 𝑁 + 𝐾 ) − ( 𝑏𝐾 ) ) , if ( 𝑘 = 1 , ( ( 𝑏 ‘ 1 ) − 1 ) , ( ( ( 𝑏𝑘 ) − ( 𝑏 ‘ ( 𝑘 − 1 ) ) ) − 1 ) ) ) ) ) ∈ 𝐴 )
57 56 3 fmptd ( 𝜑𝐺 : 𝐵𝐴 )