When creating an array of dimensions [D1,..,Dn], a nested structure is created with the top-level term having the functor []/D1, its arguments being structures with functor []/D2, and so on. The functor [] is chosen to remind of arrays, but is otherwise not significant.
[eclipse]: dim(M,[3,4]), dim(M,L). M = []([](_131, _132, _133, _134), [](_126, _127, _128, _129), [](_121, _122, _123, _124)) L = [3, 4] yes.