|  | 
|  | 1 | +\usepackage[hidelinks]{hyperref} | 
|  | 2 | +\usepackage{amssymb} | 
|  | 3 | +\usepackage{amsmath} | 
|  | 4 | + | 
|  | 5 | +\def\K{\mathsf} | 
|  | 6 | +\def\X{\mathit} | 
|  | 7 | +\def\F{\mathrm} | 
|  | 8 | + | 
|  | 9 | +\def\subtypeof{\preccurlyeq} | 
|  | 10 | +\def\ESUBRESOURCE{\K{resource}} | 
|  | 11 | + | 
|  | 12 | +% TODO: xref properly | 
|  | 13 | +\def\name{\X{name}} | 
|  | 14 | +\def\tyvar{\alpha} | 
|  | 15 | +\def\tyvarb{\beta} | 
|  | 16 | +\def\rtidx{\X{rtidx}} | 
|  | 17 | +\def\bool{\X{bool}} | 
|  | 18 | +\def\true{\K{true}} | 
|  | 19 | +\def\false{\K{false}} | 
|  | 20 | + | 
|  | 21 | +\catcode`:=11 | 
|  | 22 | +\def\core:type{\X{core{:}type}} | 
|  | 23 | +\def\core:typeidx{\X{core{:}typeidx}} | 
|  | 24 | +\def\core:funcidx{\X{core{:}funcidx}} | 
|  | 25 | +\def\core:memidx{\X{core{:}memidx}} | 
|  | 26 | +\def\core:functype{\X{core{:}functype}} | 
|  | 27 | +\def\core:tabletype{\X{core{:}tabletype}} | 
|  | 28 | +\def\core:memtype{\X{core{:}memtype}} | 
|  | 29 | +\def\core:globaltype{\X{core{:}globaltype}} | 
|  | 30 | +\def\core:import{\X{core{:}import}} | 
|  | 31 | +\def\core:importdesc{\X{core{:}importdesc}} | 
|  | 32 | +\def\core:module{\X{core{:}module}} | 
|  | 33 | +\def\core:IMODULE{\K{module}} | 
|  | 34 | +\def\core:ENAME{\K{name}} | 
|  | 35 | +\def\core:INAME{\K{name}} | 
|  | 36 | +\def\core:EDESC{\K{desc}} | 
|  | 37 | +\def\core:IDESC{\K{desc}} | 
|  | 38 | + | 
|  | 39 | +\makeatletter | 
|  | 40 | + | 
|  | 41 | +\protected\def\u{\afterassignment\@u\count255=} | 
|  | 42 | +\def\@u{\K{u\the\count255}} | 
|  | 43 | +\protected\def\i{\afterassignment\@i\count255=} | 
|  | 44 | +\def\@i{\K{i\the\count255}} | 
|  | 45 | + | 
|  | 46 | +\def\setupPCR{\def\production@cr{\global\let\production@cr=\\}} | 
|  | 47 | +\def\setupSP{% | 
|  | 48 | +  \def\alt{\\&&\mathchar"26A&}% | 
|  | 49 | +  \mathcode`|="8000% | 
|  | 50 | +  \setupPCR% | 
|  | 51 | +} | 
|  | 52 | +\catcode`|=13 | 
|  | 53 | +\def|{~\mathchar"26A~} | 
|  | 54 | +\catcode`|=12 | 
|  | 55 | +\newenvironment{sum-productions} | 
|  | 56 | +{\[\setupSP\begin{array}{llcl}} | 
|  | 57 | +{\end{array}\]} | 
|  | 58 | +\newenvironment{sum-production}[1] | 
|  | 59 | +{\begin{sum-productions}\production{#1}} | 
|  | 60 | +{\end{sum-productions}} | 
|  | 61 | +\def\production#1{\production@cr&\hypertarget{syntax:#1}{\csname#1\endcsname}&::=&} | 
|  | 62 | +\newenvironment{record-productions} | 
|  | 63 | +{\[\setupPCR\begin{array}{llll}} | 
|  | 64 | +{\end{array}\]} | 
|  | 65 | +\newenvironment{record-production}[1] | 
|  | 66 | +{\begin{record-productions}\production{#1}} | 
|  | 67 | +{\end{record-productions}} | 
|  | 68 | +
 | 
|  | 69 | +\def\defgrammar@#1#2#3{% | 
|  | 70 | +  \def\currentprefix{#1}% | 
|  | 71 | +  \def\currentgrammar{#2}% | 
|  | 72 | +  \expandafter\def\csname#2\endcsname{{\protect\hyperlink{syntax:#2}{#3}}}% | 
|  | 73 | +} | 
|  | 74 | +\def\defgrammar#1#2{\defgrammar@{#1}{#2}{\X{#2}}} | 
|  | 75 | +\def\defconstr@#1#2{% | 
|  | 76 | +  \expandafter\uppercase\expandafter{\expandafter\expandafter\expandafter\gdef\expandafter\csname\currentprefix#1}\expandafter\endcsname\expandafter{\expandafter{\expandafter\protect\expandafter\hyperlink\expandafter{\expandafter s\expandafter y\expandafter n\expandafter t\expandafter a\expandafter x\expandafter :\currentgrammar}{#2}}}% | 
|  | 77 | +} | 
|  | 78 | +\def\defconstr#1{\defconstr@{#1}{\K{#1}}} | 
|  | 79 | +
 | 
|  | 80 | +\def\defconstrs#1{\@defconstrs#1,,\relax} | 
|  | 81 | +\def\@defconstrs#1,#2\relax{\defconstr{#1}\if#2,\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi{}{\@defconstrs#2\relax}} | 
|  | 82 | +\def\defsyntax#1#2#3{\defgrammar{#1}{#2}\defconstrs{#3}} | 
|  | 83 | +
 | 
|  | 84 | +%%% Surface Type Syntax | 
|  | 85 | +
 | 
|  | 86 | +\defgrammar{VT}{primvaltype} | 
|  | 87 | +\defconstr{bool} | 
|  | 88 | +\protected\def\VTS{\afterassignment\@VTS\count255=} | 
|  | 89 | +\def\@VTS{\hyperlink{syntax:primvaltype}{\K{s\the\count255}}} | 
|  | 90 | +\protected\def\VTU{\afterassignment\@VTU\count255=} | 
|  | 91 | +\def\@VTU{\hyperlink{syntax:primvaltype}{\K{u\the\count255}}} | 
|  | 92 | +\protected\def\VTFLOAT{\afterassignment\@VTFLOAT\count255=} | 
|  | 93 | +\def\@VTFLOAT{\hyperlink{syntax:primvaltype}{\K{float\the\count255}}} | 
|  | 94 | +\defconstr{char} | 
|  | 95 | +\defconstr{string} | 
|  | 96 | +
 | 
|  | 97 | +\defgrammar{VT}{defvaltype} | 
|  | 98 | +\defconstr{prim} | 
|  | 99 | +\defconstr{record} | 
|  | 100 | +\defconstr{variant} | 
|  | 101 | +\defconstr{list} | 
|  | 102 | +\defconstr{tuple} | 
|  | 103 | +\defconstr{flags} | 
|  | 104 | +\defconstr{enum} | 
|  | 105 | +\defconstr{union} | 
|  | 106 | +\defconstr{option} | 
|  | 107 | +\defconstr{result} | 
|  | 108 | +\defconstr{own} | 
|  | 109 | +\defconstr{borrow} | 
|  | 110 | +
 | 
|  | 111 | +\defgrammar{VT}{valtype} | 
|  | 112 | +
 | 
|  | 113 | +\defgrammar{RF}{recordfield} | 
|  | 114 | +\defconstr{name} | 
|  | 115 | +\defconstr{type} | 
|  | 116 | +
 | 
|  | 117 | +\defgrammar{VC}{variantcase} | 
|  | 118 | +\defconstr{name} | 
|  | 119 | +\defconstr{type} | 
|  | 120 | +\defconstr{refines} | 
|  | 121 | +
 | 
|  | 122 | +\defgrammar{RT}{resourcetype} | 
|  | 123 | +\tracingmacros1 | 
|  | 124 | +\defconstrs{rep,dtor} | 
|  | 125 | +
 | 
|  | 126 | +\defsyntax{FT}{functype}{params,results} | 
|  | 127 | +\defsyntax{PL}{paramlist}{type,name} | 
|  | 128 | +\defsyntax{RL}{resultlist}{type,name} | 
|  | 129 | +
 | 
|  | 130 | +\defsyntax{IT}{instancetype}{} | 
|  | 131 | +\defsyntax{ID}{instancedecl}{alias,type,export} | 
|  | 132 | +\defsyntax{ED}{externdesc}{type,func,value,instance,component} | 
|  | 133 | +\defconstr@{coremodule}{\K{core\_module}} | 
|  | 134 | +\defsyntax{TB}{typebound}{eq,subr} | 
|  | 135 | +\defsyntax{ED}{exportdecl}{name,desc} | 
|  | 136 | +
 | 
|  | 137 | +\defsyntax{}{componenttype}{} | 
|  | 138 | +\defsyntax{CD}{componentdecl}{import} | 
|  | 139 | +\defsyntax{ID}{importdecl}{name,desc} | 
|  | 140 | +
 | 
|  | 141 | +\defsyntax{}{deftype}{} | 
|  | 142 | +
 | 
|  | 143 | +\defgrammar@{}{coredeftype}{\X{core{:}deftype}} | 
|  | 144 | +\defgrammar@{}{coremoduletype}{\X{core{:}moduletype}} | 
|  | 145 | +\defgrammar@{}{coremoduledecl}{\X{core{:}moduledecl}} | 
|  | 146 | +\defgrammar@{}{coreimportdecl}{\X{core{:}importdecl}} | 
|  | 147 | +\defgrammar@{CA}{corealias}{\X{core{:}alias}} | 
|  | 148 | +\defconstrs{sort,target} | 
|  | 149 | +\defgrammar@{CAT}{corealiastarget}{\X{core{:}aliastarget}} | 
|  | 150 | +\defconstrs{outer} | 
|  | 151 | +\defgrammar@{CED}{coreexportdecl}{\X{core{:}exportdecl}} | 
|  | 152 | +\defconstrs{name,desc} | 
|  | 153 | +
 | 
|  | 154 | +%%% Surface Expression Syntax | 
|  | 155 | +
 | 
|  | 156 | +\defsyntax{S}{sort}{core,func,value,type,component,instance} | 
|  | 157 | +\defgrammar@{CS}{coresort}{\X{core{:}sort}} | 
|  | 158 | +\defconstrs{instance,module,type,global,memory,table,func} | 
|  | 159 | +
 | 
|  | 160 | +\defgrammar@{}{coremoduleidx}{\X{core{:}moduleidx}} | 
|  | 161 | +\defgrammar@{}{coreinstanceidx}{\X{core{:}instanceidx}} | 
|  | 162 | +\defgrammar{}{componentidx} | 
|  | 163 | +\defgrammar{}{instanceidx} | 
|  | 164 | +\defgrammar{}{funcidx} | 
|  | 165 | +\defgrammar@{}{corefuncidx}{\X{core{:}funcidx}} | 
|  | 166 | +\defgrammar{}{valueidx} | 
|  | 167 | +\defgrammar{}{typeidx} | 
|  | 168 | +\defgrammar@{}{coretypeidx}{\X{core{:}typeidx}} | 
|  | 169 | +
 | 
|  | 170 | +\defgrammar@{CSI}{coresortidx}{\X{core{:}sortidx}} | 
|  | 171 | +\defconstrs{sort,idx} | 
|  | 172 | +\defsyntax{SI}{sortidx}{sort,idx} | 
|  | 173 | +
 | 
|  | 174 | +\defsyntax{D}{definition}{component,instance,alias,type,canon,start,import,export} | 
|  | 175 | +\defconstr@{coremodule}{\K{core\_module}} | 
|  | 176 | +\defconstr@{coreinstance}{\K{core\_instance}} | 
|  | 177 | +\defconstr@{coretype}{\K{core\_type}} | 
|  | 178 | +
 | 
|  | 179 | +\defgrammar@{CI}{coreinstance}{\X{core{:}instance}} | 
|  | 180 | +\defconstrs{instantiate,exports} | 
|  | 181 | +\defgrammar@{CIA}{coreinstantiatearg}{\X{core{:}instantiatearg}} | 
|  | 182 | +\defconstrs{instance,name} | 
|  | 183 | +\defgrammar@{CE}{coreexport}{\X{core{:}export}} | 
|  | 184 | +\defconstrs{def,name} | 
|  | 185 | +
 | 
|  | 186 | +\defsyntax{}{component}{} | 
|  | 187 | +
 | 
|  | 188 | +\defsyntax{I}{instance}{instantiate,exports} | 
|  | 189 | +\defsyntax{IA}{instantiatearg}{name,arg} | 
|  | 190 | +
 | 
|  | 191 | +\defsyntax{A}{alias}{sort,target} | 
|  | 192 | +\defsyntax{AT}{aliastarget}{export,outer} | 
|  | 193 | +\defconstr@{coreexport}{\K{core\_export}} | 
|  | 194 | +
 | 
|  | 195 | +\defsyntax{C}{canon}{lift,lower} | 
|  | 196 | +\defconstr@{resourcenew}{\K{resource.new}} | 
|  | 197 | +\defconstr@{resourcedrop}{\K{resource.drop}} | 
|  | 198 | +\defconstr@{resourcerep}{\K{resource.rep}} | 
|  | 199 | +\defsyntax{CO}{canonopt}{memory,realloc,postreturn} | 
|  | 200 | +\defconstr@{stringencodingUTFEIGHT}{\K{string\_encoding\_utf8}} | 
|  | 201 | +\defconstr@{stringencodingUTFSIXTEEN}{\K{string\_encoding\_utf16}} | 
|  | 202 | +\defconstr@{stringencodingLATINONEUTFSIXTEEN}{\K{string\_encoding\_latin1{+}utf16}} | 
|  | 203 | +
 | 
|  | 204 | +\defsyntax{F}{start}{func,args} | 
|  | 205 | +
 | 
|  | 206 | +\defsyntax{}{import}{} | 
|  | 207 | +
 | 
|  | 208 | +\defsyntax{E}{export}{name,def,desc} | 
|  | 209 | +
 | 
|  | 210 | +%%% Elaborated Type Syntax | 
|  | 211 | +\def\defesyntax#1#2#3{\defgrammar@{E#1}{e#2}{\X{#2}_e}\defconstrs{#3}} | 
|  | 212 | +
 | 
|  | 213 | +\def\maybedead{{\rlap{$\mathsurround=0pt\dagger$}?}} | 
|  | 214 | +
 | 
|  | 215 | +\defesyntax{VT}{valtype}{bool,char,list,record,variant,own,ref} | 
|  | 216 | +\protected\def\EVTS{\afterassignment\@EVTS\count255=} | 
|  | 217 | +\def\@EVTS{\hyperlink{syntax:evaltype}{\K{s\the\count255}}} | 
|  | 218 | +\protected\def\EVTU{\afterassignment\@EVTU\count255=} | 
|  | 219 | +\def\@EVTU{\hyperlink{syntax:evaltype}{\K{u\the\count255}}} | 
|  | 220 | +\protected\def\EVTFLOAT{\afterassignment\@EVTFLOAT\count255=} | 
|  | 221 | +\def\@EVTFLOAT{\hyperlink{syntax:evaltype}{\K{float\the\count255}}} | 
|  | 222 | +\defsyntax{RS}{refscope}{call} | 
|  | 223 | +\defgrammar@{}{evaltypead}{{\X{valtype}_e^\maybedead}} | 
|  | 224 | +
 | 
|  | 225 | +\defesyntax{RF}{recordfield}{name,type} | 
|  | 226 | +\defesyntax{VC}{variantcase}{name,type,refines} | 
|  | 227 | +
 | 
|  | 228 | +\defesyntax{RT}{resourcetype}{rep,dtor} | 
|  | 229 | +
 | 
|  | 230 | +\defesyntax{PL}{paramlist}{name,type} | 
|  | 231 | +\defesyntax{RL}{resultlist}{name,type} | 
|  | 232 | +
 | 
|  | 233 | +\defesyntax{}{functype}{} | 
|  | 234 | +\defesyntax{TB}{typebound}{eq,subr} | 
|  | 235 | +
 | 
|  | 236 | +\defesyntax{}{instancetype}{} | 
|  | 237 | +\defsyntax{}{boundedtyvar}{} | 
|  | 238 | +\defesyntax{ED}{externdecl}{name,desc} | 
|  | 239 | +\defesyntax{EMD}{externdesc}{func,value,type,instance,component} | 
|  | 240 | +\defconstr@{coremodule}{\K{core\_module}} | 
|  | 241 | +\defgrammar@{}{einstancetypead}{{\X{instancetype}_e^\maybedead}} | 
|  | 242 | +\defgrammar@{}{eexterndeclad}{{\X{externdecl}_e^\maybedead}} | 
|  | 243 | +
 | 
|  | 244 | +\defesyntax{}{componenttype}{} | 
|  | 245 | +
 | 
|  | 246 | +\defesyntax{DT}{deftype}{resource} | 
|  | 247 | +
 | 
|  | 248 | +\defgrammar@{}{ecoreinstancetype}{\X{core{:}instancetype}_e} | 
|  | 249 | +\defgrammar@{}{ecoremoduletype}{\X{core{:}moduletype}_e} | 
|  | 250 | +\defgrammar@{}{ecoredeftype}{\X{core{:}deftype}_e} | 
|  | 251 | +
 | 
|  | 252 | +%%% Contexts | 
|  | 253 | +
 | 
|  | 254 | +\defgrammar@{CTC}{coretyctx}{\Gamma_c} | 
|  | 255 | +\defconstrs{types,funcs,tables,mems,globals,modules,instances} | 
|  | 256 | +\defgrammar@{TC}{tyctx}{\Gamma} | 
|  | 257 | +\defconstrs{parent,core,vars,rtypes,types,components,instances,funcs,values} | 
|  | 258 | +\defconstr@{ob}{\K{outer\_boundary}} | 
|  | 259 | +\defconstr@{ld}{\K{locally\_defined}} | 
|  | 260 | +
 | 
|  | 261 | +\defsyntax{VCC}{vcctx}{ctx,cases} | 
|  | 262 | +\defgrammar@{EVTP}{evaltypepos}{{\pi_v}} | 
|  | 263 | +\defconstrs{result,export} | 
|  | 264 | +\defgrammar@{EDTP}{edeftypepos}{{\pi_d}} | 
|  | 265 | +\defconstr@{export}{extern} | 
|  | 266 | +
 | 
|  | 267 | +%%% Judgments | 
|  | 268 | +
 | 
|  | 269 | +
 | 
|  | 270 | +\def\vdashh!#1!{\mathrel{\hyperref[judgment:#1]{\vdash}}} | 
|  | 271 | +\def\leadstoh!#1!{\mathrel{\hyperref[judgment:#1]{\leadsto}}} | 
|  | 272 | +\def\dashvh!#1!{\mathrel{\hyperref[judgment:#1]{\dashv}}} | 
|  | 273 | +\def\trelh!#1!{\mathrel{\hyperref[judgment:#1]{:}}} | 
|  | 274 | +
 | 
|  | 275 | +\def\freeVars#1{\mathop{\F{fv}}(#1)} | 
|  | 276 | +\def\subst{\gamma} | 
|  | 277 | +\def\resolveVars#1{\mathop{\F{resolve\_vars}}(#1)} | 
|  | 278 | +\def\length#1{\lVert#1\rVert} | 
|  | 279 | +
 | 
|  | 280 | +\def\novalues#1{{}\mathrel{\hyperref[judgment:novalues]{\vdash^\mathsf{\mkern-20mu\neg v}}}{#1}} | 
|  | 281 | +
 | 
|  | 282 | +%\def\EEDtoCtx#1#2#3#4{{#1} \mathrel{\hyperref[judgment:EEDtoCtx]{\oplus}} {#2} \mathrel{\hyperref[judgment:EEDtoCtx]{=}} {#4} \mathrel{\hyperref[judgment:EEDtoCtx]{@}} {#3}} | 
|  | 283 | +%\def\callEITvars#1{\mathop{\hyperref[judgment:EITvars]{\F{unvar\_instance}}}({#1})} | 
|  | 284 | +%\def\EITvars#1#2#3{\callEITvars{#1} = \exists {#2}. {#3}} | 
|  | 285 | +
 | 
|  | 286 | +\makeatother | 
0 commit comments