Desugared.AstSourceAbstract syntax tree of the desugared representation
Inside a scope, a definition can refer either to a scope def, or a subscope def
type rule = {just : Scopelang.Ast.expr Pos.marked Bindlib.box;cons : Scopelang.Ast.expr Pos.marked Bindlib.box;parameter : (Scopelang.Ast.Var.t * Scopelang.Ast.typ Pos.marked) option;exception_to_rule : RuleName.t option;}type meta_assertion = | FixedBy of reference_typ Pos.marked| VariesWith of unit * variation_typ Pos.marked optiontype scope = {scope_vars : Scopelang.Ast.ScopeVarSet.t;scope_sub_scopes : Scopelang.Ast.ScopeName.t Scopelang.Ast.SubScopeMap.t;scope_uid : Scopelang.Ast.ScopeName.t;scope_defs : (rule RuleMap.t * Scopelang.Ast.typ Pos.marked) ScopeDefMap.t;scope_assertions : assertion list;scope_meta_assertions : meta_assertion list;}type program = {program_scopes : scope Scopelang.Ast.ScopeMap.t;program_enums : Scopelang.Ast.enum_ctx;program_structs : Scopelang.Ast.struct_ctx;}