An example from Sipser’s book, Introduction to the Theory of Computation, shows that it is not decidable for a $ TM$ to recognize whether a $ CFG$ (or a type 2 grammar) generates $ \Sigma^*$ , where $ \Sigma$ is the alphabet. Call this language $ CFG_{all}$

But the above language is also not computably enumerable. There can be a reduction from $ CFG_{all}$ to $ \bar{A_{TM}}$ , where $ \bar{A_{TM}}$ is the language s.t. the input $ TM$ does not accept any input. $ \bar{A_{TM}}$ is not computably enumerable.

But could we say that whether or not a type 3 grammar generates $ \Sigma^*$ is also not c.e. ? (since type 3 grammars are a subset of context-free grammars). While it is true that a finite automaton can recognize $ \Sigma^*$ , this language is different right from whether a type 3 grammar generates $ \Sigma^*$ ?

Just to clarify the source of my confusion, in summary, it is decidable for a $ TM$ to decide whether a pushdown automaton recognizes $ \Sigma^*$ or accepts any input, but it is not decidable or even computably enumerable for a $ TM$ to recognize that a CFG generates $ \Sigma^*$ . Similarly, it is decidable for a $ TM$ to check if a finite automaton accepts $ \Sigma^*$ , but it may not be decidable for a $ TM$ to check if a type 3 grammar generates $ \Sigma^*$ . It’s somehow the difference between recognizing and generating.