Metamath Proof Explorer


Theorem eq0rabdioph

Description: This is the first of a number of theorems which allow sets to be proven Diophantine by syntactic induction, and models the correspondence between Diophantine sets and monotone existential first-order logic. This first theorem shows that the zero set of an implicit polynomial is Diophantine. (Contributed by Stefan O'Rear, 10-Oct-2014)

Ref Expression
Assertion eq0rabdioph ( ( 𝑁 ∈ ℕ0 ∧ ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ∈ ( mzPoly ‘ ( 1 ... 𝑁 ) ) ) → { 𝑡 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ∣ 𝐴 = 0 } ∈ ( Dioph ‘ 𝑁 ) )

Proof

Step Hyp Ref Expression
1 nfv 𝑡 𝑁 ∈ ℕ0
2 nfmpt1 𝑡 ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 )
3 2 nfel1 𝑡 ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ∈ ( mzPoly ‘ ( 1 ... 𝑁 ) )
4 1 3 nfan 𝑡 ( 𝑁 ∈ ℕ0 ∧ ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ∈ ( mzPoly ‘ ( 1 ... 𝑁 ) ) )
5 zex ℤ ∈ V
6 nn0ssz 0 ⊆ ℤ
7 mapss ( ( ℤ ∈ V ∧ ℕ0 ⊆ ℤ ) → ( ℕ0m ( 1 ... 𝑁 ) ) ⊆ ( ℤ ↑m ( 1 ... 𝑁 ) ) )
8 5 6 7 mp2an ( ℕ0m ( 1 ... 𝑁 ) ) ⊆ ( ℤ ↑m ( 1 ... 𝑁 ) )
9 8 sseli ( 𝑡 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) → 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) )
10 9 adantl ( ( ( 𝑁 ∈ ℕ0 ∧ ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ∈ ( mzPoly ‘ ( 1 ... 𝑁 ) ) ) ∧ 𝑡 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ) → 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) )
11 mzpf ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ∈ ( mzPoly ‘ ( 1 ... 𝑁 ) ) → ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) : ( ℤ ↑m ( 1 ... 𝑁 ) ) ⟶ ℤ )
12 mptfcl ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) : ( ℤ ↑m ( 1 ... 𝑁 ) ) ⟶ ℤ → ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) → 𝐴 ∈ ℤ ) )
13 12 imp ( ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) : ( ℤ ↑m ( 1 ... 𝑁 ) ) ⟶ ℤ ∧ 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ) → 𝐴 ∈ ℤ )
14 11 9 13 syl2an ( ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ∈ ( mzPoly ‘ ( 1 ... 𝑁 ) ) ∧ 𝑡 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ) → 𝐴 ∈ ℤ )
15 14 adantll ( ( ( 𝑁 ∈ ℕ0 ∧ ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ∈ ( mzPoly ‘ ( 1 ... 𝑁 ) ) ) ∧ 𝑡 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ) → 𝐴 ∈ ℤ )
16 eqid ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) = ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 )
17 16 fvmpt2 ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ∧ 𝐴 ∈ ℤ ) → ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑡 ) = 𝐴 )
18 10 15 17 syl2anc ( ( ( 𝑁 ∈ ℕ0 ∧ ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ∈ ( mzPoly ‘ ( 1 ... 𝑁 ) ) ) ∧ 𝑡 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ) → ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑡 ) = 𝐴 )
19 18 eqcomd ( ( ( 𝑁 ∈ ℕ0 ∧ ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ∈ ( mzPoly ‘ ( 1 ... 𝑁 ) ) ) ∧ 𝑡 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ) → 𝐴 = ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑡 ) )
20 19 eqeq1d ( ( ( 𝑁 ∈ ℕ0 ∧ ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ∈ ( mzPoly ‘ ( 1 ... 𝑁 ) ) ) ∧ 𝑡 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ) → ( 𝐴 = 0 ↔ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑡 ) = 0 ) )
21 20 ex ( ( 𝑁 ∈ ℕ0 ∧ ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ∈ ( mzPoly ‘ ( 1 ... 𝑁 ) ) ) → ( 𝑡 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) → ( 𝐴 = 0 ↔ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑡 ) = 0 ) ) )
22 4 21 ralrimi ( ( 𝑁 ∈ ℕ0 ∧ ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ∈ ( mzPoly ‘ ( 1 ... 𝑁 ) ) ) → ∀ 𝑡 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ( 𝐴 = 0 ↔ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑡 ) = 0 ) )
23 rabbi ( ∀ 𝑡 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ( 𝐴 = 0 ↔ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑡 ) = 0 ) ↔ { 𝑡 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ∣ 𝐴 = 0 } = { 𝑡 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ∣ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑡 ) = 0 } )
24 22 23 sylib ( ( 𝑁 ∈ ℕ0 ∧ ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ∈ ( mzPoly ‘ ( 1 ... 𝑁 ) ) ) → { 𝑡 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ∣ 𝐴 = 0 } = { 𝑡 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ∣ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑡 ) = 0 } )
25 nfcv 𝑡 ( ℕ0m ( 1 ... 𝑁 ) )
26 nfcv 𝑎 ( ℕ0m ( 1 ... 𝑁 ) )
27 nfv 𝑎 ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑡 ) = 0
28 nffvmpt1 𝑡 ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑎 )
29 28 nfeq1 𝑡 ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑎 ) = 0
30 fveqeq2 ( 𝑡 = 𝑎 → ( ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑡 ) = 0 ↔ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑎 ) = 0 ) )
31 25 26 27 29 30 cbvrabw { 𝑡 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ∣ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑡 ) = 0 } = { 𝑎 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ∣ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑎 ) = 0 }
32 24 31 eqtrdi ( ( 𝑁 ∈ ℕ0 ∧ ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ∈ ( mzPoly ‘ ( 1 ... 𝑁 ) ) ) → { 𝑡 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ∣ 𝐴 = 0 } = { 𝑎 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ∣ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑎 ) = 0 } )
33 df-rab { 𝑎 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ∣ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑎 ) = 0 } = { 𝑎 ∣ ( 𝑎 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ∧ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑎 ) = 0 ) }
34 32 33 eqtrdi ( ( 𝑁 ∈ ℕ0 ∧ ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ∈ ( mzPoly ‘ ( 1 ... 𝑁 ) ) ) → { 𝑡 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ∣ 𝐴 = 0 } = { 𝑎 ∣ ( 𝑎 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ∧ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑎 ) = 0 ) } )
35 elmapi ( 𝑏 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) → 𝑏 : ( 1 ... 𝑁 ) ⟶ ℕ0 )
36 ffn ( 𝑏 : ( 1 ... 𝑁 ) ⟶ ℕ0𝑏 Fn ( 1 ... 𝑁 ) )
37 fnresdm ( 𝑏 Fn ( 1 ... 𝑁 ) → ( 𝑏 ↾ ( 1 ... 𝑁 ) ) = 𝑏 )
38 35 36 37 3syl ( 𝑏 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) → ( 𝑏 ↾ ( 1 ... 𝑁 ) ) = 𝑏 )
39 38 eqeq2d ( 𝑏 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) → ( 𝑎 = ( 𝑏 ↾ ( 1 ... 𝑁 ) ) ↔ 𝑎 = 𝑏 ) )
40 equcom ( 𝑎 = 𝑏𝑏 = 𝑎 )
41 39 40 bitrdi ( 𝑏 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) → ( 𝑎 = ( 𝑏 ↾ ( 1 ... 𝑁 ) ) ↔ 𝑏 = 𝑎 ) )
42 41 anbi1d ( 𝑏 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) → ( ( 𝑎 = ( 𝑏 ↾ ( 1 ... 𝑁 ) ) ∧ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑏 ) = 0 ) ↔ ( 𝑏 = 𝑎 ∧ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑏 ) = 0 ) ) )
43 42 rexbiia ( ∃ 𝑏 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ( 𝑎 = ( 𝑏 ↾ ( 1 ... 𝑁 ) ) ∧ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑏 ) = 0 ) ↔ ∃ 𝑏 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ( 𝑏 = 𝑎 ∧ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑏 ) = 0 ) )
44 fveqeq2 ( 𝑏 = 𝑎 → ( ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑏 ) = 0 ↔ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑎 ) = 0 ) )
45 44 ceqsrexbv ( ∃ 𝑏 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ( 𝑏 = 𝑎 ∧ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑏 ) = 0 ) ↔ ( 𝑎 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ∧ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑎 ) = 0 ) )
46 43 45 bitr2i ( ( 𝑎 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ∧ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑎 ) = 0 ) ↔ ∃ 𝑏 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ( 𝑎 = ( 𝑏 ↾ ( 1 ... 𝑁 ) ) ∧ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑏 ) = 0 ) )
47 46 abbii { 𝑎 ∣ ( 𝑎 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ∧ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑎 ) = 0 ) } = { 𝑎 ∣ ∃ 𝑏 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ( 𝑎 = ( 𝑏 ↾ ( 1 ... 𝑁 ) ) ∧ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑏 ) = 0 ) }
48 34 47 eqtrdi ( ( 𝑁 ∈ ℕ0 ∧ ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ∈ ( mzPoly ‘ ( 1 ... 𝑁 ) ) ) → { 𝑡 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ∣ 𝐴 = 0 } = { 𝑎 ∣ ∃ 𝑏 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ( 𝑎 = ( 𝑏 ↾ ( 1 ... 𝑁 ) ) ∧ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑏 ) = 0 ) } )
49 simpl ( ( 𝑁 ∈ ℕ0 ∧ ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ∈ ( mzPoly ‘ ( 1 ... 𝑁 ) ) ) → 𝑁 ∈ ℕ0 )
50 nn0z ( 𝑁 ∈ ℕ0𝑁 ∈ ℤ )
51 uzid ( 𝑁 ∈ ℤ → 𝑁 ∈ ( ℤ𝑁 ) )
52 50 51 syl ( 𝑁 ∈ ℕ0𝑁 ∈ ( ℤ𝑁 ) )
53 52 adantr ( ( 𝑁 ∈ ℕ0 ∧ ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ∈ ( mzPoly ‘ ( 1 ... 𝑁 ) ) ) → 𝑁 ∈ ( ℤ𝑁 ) )
54 simpr ( ( 𝑁 ∈ ℕ0 ∧ ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ∈ ( mzPoly ‘ ( 1 ... 𝑁 ) ) ) → ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ∈ ( mzPoly ‘ ( 1 ... 𝑁 ) ) )
55 eldioph ( ( 𝑁 ∈ ℕ0𝑁 ∈ ( ℤ𝑁 ) ∧ ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ∈ ( mzPoly ‘ ( 1 ... 𝑁 ) ) ) → { 𝑎 ∣ ∃ 𝑏 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ( 𝑎 = ( 𝑏 ↾ ( 1 ... 𝑁 ) ) ∧ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑏 ) = 0 ) } ∈ ( Dioph ‘ 𝑁 ) )
56 49 53 54 55 syl3anc ( ( 𝑁 ∈ ℕ0 ∧ ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ∈ ( mzPoly ‘ ( 1 ... 𝑁 ) ) ) → { 𝑎 ∣ ∃ 𝑏 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ( 𝑎 = ( 𝑏 ↾ ( 1 ... 𝑁 ) ) ∧ ( ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ‘ 𝑏 ) = 0 ) } ∈ ( Dioph ‘ 𝑁 ) )
57 48 56 eqeltrd ( ( 𝑁 ∈ ℕ0 ∧ ( 𝑡 ∈ ( ℤ ↑m ( 1 ... 𝑁 ) ) ↦ 𝐴 ) ∈ ( mzPoly ‘ ( 1 ... 𝑁 ) ) ) → { 𝑡 ∈ ( ℕ0m ( 1 ... 𝑁 ) ) ∣ 𝐴 = 0 } ∈ ( Dioph ‘ 𝑁 ) )