# g `(!x. x = x) /\ (!y.y = y) /\ (!z.z = z)`;; Warning: inventing type variables val it : xgoalstack = 1 subgoal (1 total) `(!x. x = x) /\ (!y. y = y) /\ (!z. z = z)` # e (REPEAT CONJ_TAC);; val it : xgoalstack = 3 subgoals (3 total) `!z. z = z` `!y. y = y` `!x. x = x` # e (GEN_TAC);; val it : xgoalstack = 1 subgoal (3 total) `x = x` # e (REFL_TAC);; val it : xgoalstack = 1 subgoal (2 total) `!y. y = y` # e (GEN_TAC);; val it : xgoalstack = 1 subgoal (2 total) `y = y` # e (REFL_TAC);; val it : xgoalstack = 1 subgoal (1 total) `!z. z = z` # e (GEN_TAC);; val it : xgoalstack = 1 subgoal (1 total) `z = z` # e (REFL_TAC);; val it : xgoalstack = No subgoals # print_executed_proof ();; e (REPEAT CONJ_TAC);; e (GEN_TAC);; e (REFL_TAC);; e (GEN_TAC);; e (REFL_TAC);; e (GEN_TAC);; e (REFL_TAC);; val it : unit = () # print_flat_proof ();; e (CONJ_TAC);; e (GEN_TAC);; e (REFL_TAC);; e (CONJ_TAC);; e (GEN_TAC);; e (REFL_TAC);; e (GEN_TAC);; e (REFL_TAC);; val it : unit = () # print_thenl_proof ();; e (CONJ_TAC THENL [GEN_TAC THEN REFL_TAC; CONJ_TAC THENL [GEN_TAC THEN REFL_TAC; GEN_TAC THEN REFL_TAC]]);; val it : unit = () # print_optimal_proof ();; e (REPEAT CONJ_TAC THEN GEN_TAC THEN REFL_TAC);; val it : unit = () #