triton_air/
table.rs

1use arbitrary::Arbitrary;
2use strum::Display;
3use strum::EnumCount;
4use strum::EnumIter;
5
6use crate::AIR;
7use crate::table::cascade::CascadeTable;
8use crate::table::hash::HashTable;
9use crate::table::jump_stack::JumpStackTable;
10use crate::table::lookup::LookupTable;
11use crate::table::op_stack::OpStackTable;
12use crate::table::processor::ProcessorTable;
13use crate::table::program::ProgramTable;
14use crate::table::ram::RamTable;
15use crate::table::u32::U32Table;
16
17pub mod cascade;
18pub mod hash;
19pub mod jump_stack;
20pub mod lookup;
21pub mod op_stack;
22pub mod processor;
23pub mod program;
24pub mod ram;
25pub mod u32;
26
27/// The total number of main columns across all tables.
28/// The degree lowering columns are _not_ included.
29pub const NUM_MAIN_COLUMNS: usize = <ProgramTable as AIR>::MainColumn::COUNT
30    + <ProcessorTable as AIR>::MainColumn::COUNT
31    + <OpStackTable as AIR>::MainColumn::COUNT
32    + <RamTable as AIR>::MainColumn::COUNT
33    + <JumpStackTable as AIR>::MainColumn::COUNT
34    + <HashTable as AIR>::MainColumn::COUNT
35    + <CascadeTable as AIR>::MainColumn::COUNT
36    + <LookupTable as AIR>::MainColumn::COUNT
37    + <U32Table as AIR>::MainColumn::COUNT;
38
39/// The total number of auxiliary columns across all tables.
40/// The degree lowering columns as well as any randomizer polynomials are _not_
41/// included.
42pub const NUM_AUX_COLUMNS: usize = <ProgramTable as AIR>::AuxColumn::COUNT
43    + <ProcessorTable as AIR>::AuxColumn::COUNT
44    + <OpStackTable as AIR>::AuxColumn::COUNT
45    + <RamTable as AIR>::AuxColumn::COUNT
46    + <JumpStackTable as AIR>::AuxColumn::COUNT
47    + <HashTable as AIR>::AuxColumn::COUNT
48    + <CascadeTable as AIR>::AuxColumn::COUNT
49    + <LookupTable as AIR>::AuxColumn::COUNT
50    + <U32Table as AIR>::AuxColumn::COUNT;
51
52pub const PROGRAM_TABLE_START: usize = 0;
53pub const PROGRAM_TABLE_END: usize = PROGRAM_TABLE_START + <ProgramTable as AIR>::MainColumn::COUNT;
54pub const PROCESSOR_TABLE_START: usize = PROGRAM_TABLE_END;
55pub const PROCESSOR_TABLE_END: usize =
56    PROCESSOR_TABLE_START + <ProcessorTable as AIR>::MainColumn::COUNT;
57pub const OP_STACK_TABLE_START: usize = PROCESSOR_TABLE_END;
58pub const OP_STACK_TABLE_END: usize =
59    OP_STACK_TABLE_START + <OpStackTable as AIR>::MainColumn::COUNT;
60pub const RAM_TABLE_START: usize = OP_STACK_TABLE_END;
61pub const RAM_TABLE_END: usize = RAM_TABLE_START + <RamTable as AIR>::MainColumn::COUNT;
62pub const JUMP_STACK_TABLE_START: usize = RAM_TABLE_END;
63pub const JUMP_STACK_TABLE_END: usize =
64    JUMP_STACK_TABLE_START + <JumpStackTable as AIR>::MainColumn::COUNT;
65pub const HASH_TABLE_START: usize = JUMP_STACK_TABLE_END;
66pub const HASH_TABLE_END: usize = HASH_TABLE_START + <HashTable as AIR>::MainColumn::COUNT;
67pub const CASCADE_TABLE_START: usize = HASH_TABLE_END;
68pub const CASCADE_TABLE_END: usize = CASCADE_TABLE_START + <CascadeTable as AIR>::MainColumn::COUNT;
69pub const LOOKUP_TABLE_START: usize = CASCADE_TABLE_END;
70pub const LOOKUP_TABLE_END: usize = LOOKUP_TABLE_START + <LookupTable as AIR>::MainColumn::COUNT;
71pub const U32_TABLE_START: usize = LOOKUP_TABLE_END;
72pub const U32_TABLE_END: usize = U32_TABLE_START + <U32Table as AIR>::MainColumn::COUNT;
73
74pub const AUX_PROGRAM_TABLE_START: usize = 0;
75pub const AUX_PROGRAM_TABLE_END: usize =
76    AUX_PROGRAM_TABLE_START + <ProgramTable as AIR>::AuxColumn::COUNT;
77pub const AUX_PROCESSOR_TABLE_START: usize = AUX_PROGRAM_TABLE_END;
78pub const AUX_PROCESSOR_TABLE_END: usize =
79    AUX_PROCESSOR_TABLE_START + <ProcessorTable as AIR>::AuxColumn::COUNT;
80pub const AUX_OP_STACK_TABLE_START: usize = AUX_PROCESSOR_TABLE_END;
81pub const AUX_OP_STACK_TABLE_END: usize =
82    AUX_OP_STACK_TABLE_START + <OpStackTable as AIR>::AuxColumn::COUNT;
83pub const AUX_RAM_TABLE_START: usize = AUX_OP_STACK_TABLE_END;
84pub const AUX_RAM_TABLE_END: usize = AUX_RAM_TABLE_START + <RamTable as AIR>::AuxColumn::COUNT;
85pub const AUX_JUMP_STACK_TABLE_START: usize = AUX_RAM_TABLE_END;
86pub const AUX_JUMP_STACK_TABLE_END: usize =
87    AUX_JUMP_STACK_TABLE_START + <JumpStackTable as AIR>::AuxColumn::COUNT;
88pub const AUX_HASH_TABLE_START: usize = AUX_JUMP_STACK_TABLE_END;
89pub const AUX_HASH_TABLE_END: usize = AUX_HASH_TABLE_START + <HashTable as AIR>::AuxColumn::COUNT;
90pub const AUX_CASCADE_TABLE_START: usize = AUX_HASH_TABLE_END;
91pub const AUX_CASCADE_TABLE_END: usize =
92    AUX_CASCADE_TABLE_START + <CascadeTable as AIR>::AuxColumn::COUNT;
93pub const AUX_LOOKUP_TABLE_START: usize = AUX_CASCADE_TABLE_END;
94pub const AUX_LOOKUP_TABLE_END: usize =
95    AUX_LOOKUP_TABLE_START + <LookupTable as AIR>::AuxColumn::COUNT;
96pub const AUX_U32_TABLE_START: usize = AUX_LOOKUP_TABLE_END;
97pub const AUX_U32_TABLE_END: usize = AUX_U32_TABLE_START + <U32Table as AIR>::AuxColumn::COUNT;
98
99/// Uniquely determines one of Triton VM's tables.
100#[derive(Debug, Display, Copy, Clone, Eq, PartialEq, Hash, EnumCount, EnumIter, Arbitrary)]
101pub enum TableId {
102    Program,
103    Processor,
104    OpStack,
105    Ram,
106    JumpStack,
107    Hash,
108    Cascade,
109    Lookup,
110    U32,
111}