Everything that is declared as Pure.intro / intro / iff (or one of its variants ? Or ! ) ! considered as a default introduction rule (that is, if no current facts are tied at the moment), just like that declared as Pure.elim / elim / iff , it is treated as a default exception (i.e. if current facts are tied). Typically, later declarations take precedence over earlier ones (at least if the same type of declaration is used ... confusing, for example, Pure.intro? With intro , etc., It may turn out differently).
However, this will simply answer which rules are considered in principle. I do not know how to directly find out which rule was applied. But it’s relatively straightforward to find the correct find_theorems intro rule right above the line you were wondering about. For example.
lemma "A & B" find_theorems intro proof
will show you all the rules that can be applied as an introduction rule to the A & B goal. One of them is the default rule applied by proof (you will recognize it by the subgoals you received).
For exception rules that you can use, for example,
lemma assumes "A | B" shows "P" using assms find_theorems elim proof
chris
source share