In Isabelle it seems that "x + y" and ‹x + y› are synonymous. For example, I can write
fun conj :: "bool ⇒ bool ⇒ bool" where
"conj True True = True" |
"conj _ _ = False"
or
fun conj :: ‹bool ⇒ bool ⇒ bool› where
‹conj True True = True› |
‹conj _ _ = False›
and Isabelle will happily accept either form.
Why do both of these syntaxes exist? Is one preferred over another in certain situations?
" is the "older" form
It is easier to type, but it has a major drawback: you cannot put quotes within quotes
There is no way to parse:
ML "@{term "x=y"}"
while ML ‹@{term ‹x=y›}› is clear
Last updated: Apr 14 2026 at 09:21 UTC