I don't know if this issue has been discussed before, if anyone know any related post, please let me know, thank you :)
Unprotect the function Sin and create a new definition for it:
Unprotect[Sin];
Sin[x_] := x^2;
Because x_ matches any expression, then I think (naively) the system definition of Sin would never be applied.
{Sin[2], Sin[1.2], Sin[Sin]}
(*
{4, 1.44, Sin^2}
*)
Every thing works as expected except for Plot:
Plot[Sin[x], {x, 0, Pi}]

I think it's related to the internal computation of Plot, I checked the mass output of Trace and found nothing useful.
I know it's stupid to modify a system symbol this way, but could you please give me some explanation? Thanks in advance.

Sinis to some extent hard-coded in the system. Modifying system symbols in such a way as to contradict their usual behavior carries the risk that your modifications may be unpredictably reverted at any time. – Oleksandr R. Jul 15 '13 at 03:13Plot[Evaluated@Sin...works, but Oleksandr's point is valid nevertheless. – rm -rf Jul 15 '13 at 03:51CompileyourSinand you get sine). ButMethod -> {Compiled -> False}yields a sine curve. However,Plot[Sin[x], {x, 0, 10}, WorkingPrecision -> 10]andPlot[(If[,,]; Sin[x]), {x, 0, 10}]yield parabolas; butPlot[(If[True,,]; Sin[x]), {x, 0, 10}]yields sine. Curious. But I, too, think Oleksandr is on target. – Michael E2 Jul 15 '13 at 06:07