\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsthm}

\theoremstyle{plain}
\newtheorem{theorem}{Theorem}
\newtheorem{lemma}[theorem]{Lemma}
\newtheorem{proposition}[theorem]{Proposition}
\newtheorem{corollary}[theorem]{Corollary}

\theoremstyle{definition}
\newtheorem{definition}[theorem]{Definition}
\newtheorem{example}[theorem]{Example}

\theoremstyle{remark}
\newtheorem{remark}[theorem]{Remark}

\newcommand{\SemanticLoadCleveref}{%
  \usepackage{cleveref}%
  \crefname{theorem}{theorem}{theorems}%
  \Crefname{theorem}{Theorem}{Theorems}%
  \crefname{lemma}{lemma}{lemmas}%
  \Crefname{lemma}{Lemma}{Lemmas}%
  \crefname{proposition}{proposition}{propositions}%
  \Crefname{proposition}{Proposition}{Propositions}%
  \crefname{corollary}{corollary}{corollaries}%
  \Crefname{corollary}{Corollary}{Corollaries}%
  \crefname{definition}{definition}{definitions}%
  \Crefname{definition}{Definition}{Definitions}%
  \crefname{example}{example}{examples}%
  \Crefname{example}{Example}{Examples}%
  \crefname{remark}{remark}{remarks}%
  \Crefname{remark}{Remark}{Remarks}%
  \crefname{figure}{figure}{figures}%
  \Crefname{figure}{Figure}{Figures}%
}

\makeatletter
\@ifpackageloaded{hyperref}{%
  \SemanticLoadCleveref
}{%
  \AddToHook{package/hyperref/after}{\SemanticLoadCleveref}%
}
\makeatother
