I was recently trying to find the reasons that led to the use of curly braces for blocks (compound-statements) in the C language and other languages of the same family.
Thinks like square brackets for arrays or parentheses to change operator precedence seems to come from the mathematical notation used for these things so it makes sense to me. The semicolon makes sense too, it's meant to separate related sentences with independent clauses, and it does something like that in C.
But I couldn't find something similar for curly braces: they are used for sets in mathematics, and something somehow similar is their use in musical notation (Ensemble staves) where they are used to indicate that the music on all the staves is to be played simultaneously (not quite the same use but I thought it was closer than their use in mathematics for sets).
Also, I was wondering if C is actually the first language to introduce this block syntax or did it just popularize it?