With a bit of intuition we can design the DFA for the truncate operation and hence prove regular language is closed under truncate operation..
Informal description of the required DFA :
As mentioned in the question , for truncate operation , we need to remove the rightmost character from each string..So to get the rightmost character , we need to go to the final states of the present DFA(means DFA of the original language)..Now for each final state of the DFA , we need to check the two possibilities :
Case 1 : If the final state concerned has no self loop :
Whether the final state has self loop or not can be checked easily using the transition rules of the DFA for the concerned final state.
If at all , there is no self loop in that state , it means we have to go one state backwards and make that final state and the current state will be non final as from the new final state to old final state we have only one character which we want not to be accepted by the new DFA...Hence the old final state becomes the non final state basically..
Case 2 : If the final state has self loop :
In this case all things remain the same except that the old final state is retained as final state in the new DFA as well and the previous to final state is also made final state as in the previous case..
This we do for every final state of the original DFA..Hence truncate operation on regular language leads to regular language only.