There's no self-correcting mechanism (or maybe I don't understand what you meant).
OverHat[\[Beta]] = 7
(* This created a DownValues entry for OverHat[\[Beta]], where \[Beta] is the literal symbol \[Beta]. *)
OverHat[\[Beta]] = 1
(* This overwrites the DownValues for OverHat[\[Beta]]. *)
\[Beta] = 5
(* This creates OwnValues for \[Beta]. This has no effect on the DownValues for OverHat. *)
Style[OverHat[\[Beta]], Red]
(* The OverHat[\[Beta]] evaluates to OverHat[5]. There are no `DownValues` for OverHat[5], so it just remains as OverHat[5] and the Style is applied. *)
OverHat[\[Beta]] = 7
(* This creates DownValues for OverHat[5]. *)
OverHat[\[Beta]] = 1
(* This overwrites the DownValues for OverHat[5]. *)
\[Beta] = 5
(* This overwrites the OwnValues for \[Beta]. It happens to be the same value. *)
Style[OverHat[\[Beta]], Red]
(* OverHat[\[Beta]], using DownValues, evaluates to OverHat[5] and then, using DownValues again, to 1. Then Style is applied. *)
You can walk through the \[Alpha]
-related expressions in the same way. Just be aware that you've changed the order, starting with assigning OwnValues
to \[Alpha]
before assigning DownValues
to OverHat
.
You can evaluate OwnValues[\[Beta]]
and DownValues[OverHat]
after each assignment to see the current state of the "environment".