mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			60 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Alloy
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Alloy
		
	
	
	
	
	
| module examples/systems/file_system
 | |
| 
 | |
| /*
 | |
|  * Model of a generic file system.
 | |
|  */
 | |
| 
 | |
| abstract sig Object {}
 | |
| 
 | |
| sig Name {}
 | |
| 
 | |
| sig File extends Object {} { some d: Dir | this in d.entries.contents }
 | |
| 
 | |
| sig Dir extends Object {
 | |
|   entries: set DirEntry,
 | |
|   parent: lone Dir
 | |
| } {
 | |
|   parent = this.~@contents.~@entries
 | |
|   all e1, e2 : entries | e1.name = e2.name => e1 = e2
 | |
|   this !in this.^@parent
 | |
|   this != Root => Root in this.^@parent
 | |
| }
 | |
| 
 | |
| one sig Root extends Dir {} { no parent }
 | |
| 
 | |
| lone sig Cur extends Dir {}
 | |
| 
 | |
| sig DirEntry {
 | |
|   name: Name,
 | |
|   contents: Object
 | |
| } {
 | |
|   one this.~entries
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * all directories besides root have one parent
 | |
|  */
 | |
| pred OneParent_buggyVersion {
 | |
|     all d: Dir - Root | one d.parent
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * all directories besides root have one parent
 | |
|  */
 | |
| pred OneParent_correctVersion {
 | |
|     all d: Dir - Root | (one d.parent && one contents.d)
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Only files may be linked (that is, have more than one entry)
 | |
|  * That is, all directories are the contents of at most one directory entry
 | |
|  */
 | |
| pred NoDirAliases {
 | |
|     all o: Dir | lone o.~contents
 | |
| }
 | |
| 
 | |
| check { OneParent_buggyVersion => NoDirAliases } for 5 expect 1
 | |
| 
 | |
| check { OneParent_correctVersion => NoDirAliases } for 5 expect 0
 |