Bernstein's sociolinguistic codes: a logical analysis