Then to actually restrict relationships, the plugin could reserve a special relationship (e.g. grammar) for declaring the grammar of a relationship:

→
- [[supports]]
	- [[grammar]] ->
    	- ([[type]] -> [[evidence]]) -> ([[type]] -> [[claim]])
→

This would be parsed by the plugin as:

→

“supports is a relationship from a block whose relationship type is evidence to a block whose relationship type is claim”

→

If desired, the plugin could also automatically add the required relationship when it is missing

→

There are a lot of tricky details to this, and certainly some plugin-side caching will be required eventually since the queries could get messy, so I’m happy to discuss more.

→

If preferred, the plugin could allow the user to provide Logseq page and block properties to create a grammar. This could still be done in the notes like so:

→
- [[supports]]
	- [[grammar]] ->
    	- (tags:evidence) -> (tags:claim)
→