├── docs ├── pict.png ├── pict_10.png ├── pict_11.png ├── pict_12.png ├── pict_13.png ├── pict_14.png ├── pict_15.png ├── pict_16.png ├── pict_17.png ├── pict_18.png ├── pict_19.png ├── pict_2.png ├── pict_20.png ├── pict_21.png ├── pict_22.png ├── pict_23.png ├── pict_24.png ├── pict_25.png ├── pict_26.png ├── pict_27.png ├── pict_28.png ├── pict_29.png ├── pict_3.png ├── pict_30.png ├── pict_31.png ├── pict_32.png ├── pict_33.png ├── pict_34.png ├── pict_35.png ├── pict_36.png ├── pict_37.png ├── pict_38.png ├── pict_39.png ├── pict_4.png ├── pict_40.png ├── pict_41.png ├── pict_42.png ├── pict_43.png ├── pict_44.png ├── pict_45.png ├── pict_46.png ├── pict_47.png ├── pict_48.png ├── pict_49.png ├── pict_5.png ├── pict_50.png ├── pict_51.png ├── pict_52.png ├── pict_53.png ├── pict_54.png ├── pict_55.png ├── pict_56.png ├── pict_57.png ├── pict_58.png ├── pict_59.png ├── pict_6.png ├── pict_60.png ├── pict_61.png ├── pict_62.png ├── pict_63.png ├── pict_64.png ├── pict_65.png ├── pict_66.png ├── pict_67.png ├── pict_68.png ├── pict_69.png ├── pict_7.png ├── pict_70.png ├── pict_71.png ├── pict_72.png ├── pict_73.png ├── pict_74.png ├── pict_75.png ├── pict_76.png ├── pict_77.png ├── pict_78.png ├── pict_79.png ├── pict_8.png ├── pict_80.png ├── pict_81.png ├── pict_82.png ├── pict_83.png ├── pict_84.png ├── pict_85.png ├── pict_86.png ├── pict_87.png ├── pict_88.png ├── pict_89.png ├── pict_9.png ├── pict_90.png ├── pict_91.png ├── pict_92.png ├── pict_93.png ├── pict_94.png ├── pict_95.png ├── pict_96.png ├── pict_97.png ├── pict_98.png ├── pict_99.png ├── pict_100.png ├── pict_101.png ├── pict_102.png ├── pict_103.png ├── pict_104.png ├── pict_105.png ├── pict_106.png ├── pict_107.png ├── pict_108.png ├── pict_109.png ├── pict_110.png ├── pict_111.png ├── pict_112.png ├── pict_113.png ├── pict_114.png ├── pict_115.png ├── pict_116.png ├── pict_117.png ├── pict_118.png ├── pict_119.png ├── pict_120.png ├── pict_121.png ├── pict_122.png ├── pict_123.png ├── pict_124.png ├── pict_125.png ├── pict_126.png ├── pict_127.png ├── pict_128.png ├── pict_129.png ├── pict_130.png ├── pict_131.png ├── pict_132.png ├── pict_133.png ├── pict_134.png ├── pict_135.png ├── pict_136.png ├── pict_137.png ├── pict_138.png ├── pict_139.png ├── pict_140.png ├── pict_141.png ├── pict_142.png ├── pict_143.png ├── pict_144.png ├── pict_145.png ├── pict_146.png ├── pict_147.png ├── pict_148.png ├── pict_149.png ├── pict_150.png ├── pict_151.png ├── pict_152.png ├── pict_153.png ├── pict_154.png ├── pict_155.png ├── pict_156.png ├── pict_157.png ├── pict_158.png ├── pict_159.png ├── pict_160.png ├── pict_161.png ├── pict_162.png ├── pict_163.png ├── pict_164.png ├── pict_165.png ├── pict_166.png ├── pict_167.png ├── pict_168.png ├── pict_169.png ├── pict_170.png ├── pict_171.png ├── pict_172.png ├── pict_173.png ├── pict_174.png ├── pict_175.png ├── pict_176.png ├── pict_177.png ├── pict_178.png ├── pict_179.png ├── pict_180.png ├── pict_181.png ├── pict_182.png ├── pict_183.png ├── pict_184.png ├── pict_185.png ├── pict_186.png ├── pict_187.png ├── pict_188.png ├── pict_189.png ├── pict_190.png ├── pict_191.png ├── pict_192.png ├── pict_193.png ├── pict_194.png ├── pict_195.png ├── pict_196.png ├── pict_197.png ├── pict_198.png ├── pict_199.png ├── pict_200.png ├── pict_201.png ├── pict_202.png ├── pict_203.png ├── pict_204.png ├── pict_205.png ├── pict_206.png ├── pict_207.png ├── pict_208.png ├── pict_209.png ├── pict_210.png ├── pict_211.png ├── pict_212.png ├── pict_213.png ├── pict_214.png ├── pict_215.png ├── pict_216.png ├── pict_217.png ├── pict_218.png ├── pict_219.png ├── pict_220.png ├── pict_221.png ├── pict_222.png ├── pict_223.png ├── pict_224.png ├── pict_225.png ├── pict_226.png ├── pict_227.png ├── pict_228.png ├── pict_229.png ├── pict_230.png ├── pict_231.png ├── pict_232.png ├── pict_233.png ├── pict_234.png ├── pict_235.png ├── pict_236.png ├── pict_237.png ├── pict_238.png ├── pict_239.png ├── pict_240.png ├── pict_241.png ├── pict_242.png ├── pict_243.png ├── pict_244.png ├── pict_245.png ├── pict_246.png ├── pict_247.png ├── pict_248.png ├── pict_249.png ├── pict_250.png ├── pict_251.png ├── pict_252.png ├── pict_253.png ├── pict_254.png ├── pict_255.png ├── pict_256.png ├── pict_257.png ├── pict_258.png ├── pict_259.png ├── pict_260.png ├── pict_261.png ├── pict_262.png ├── pict_263.png ├── pict_264.png ├── pict_265.png ├── pict_266.png ├── pict_267.png ├── pict_268.png ├── pict_269.png ├── pict_270.png ├── pict_271.png ├── pict_272.png ├── pict_273.png ├── pict_274.png ├── pict_275.png ├── pict_276.png ├── pict_277.png ├── pict_278.png ├── pict_279.png ├── pict_280.png ├── pict_281.png ├── pict_282.png ├── pict_283.png ├── pict_284.png ├── pict_285.png ├── pict_286.png ├── pict_287.png ├── pict_288.png ├── pict_289.png ├── pict_290.png ├── pict_291.png ├── pict_292.png ├── pict_293.png ├── pict_294.png ├── pict_295.png ├── pict_296.png ├── pict_297.png ├── pict_298.png ├── pict_299.png ├── pict_300.png ├── pict_301.png ├── pict_302.png ├── pict_303.png ├── pict_304.png ├── pict_305.png ├── pict_306.png ├── pict_307.png ├── pict_308.png ├── pict_309.png ├── pict_310.png ├── pict_311.png ├── pict_312.png ├── pict_313.png ├── pict_314.png ├── pict_315.png ├── pict_316.png ├── pict_317.png ├── pict_318.png ├── pict_319.png ├── pict_320.png ├── pict_321.png ├── pict_322.png ├── pict_323.png ├── pict_324.png ├── pict_325.png ├── pict_326.png ├── pict_327.png ├── pict_328.png ├── pict_329.png ├── pict_330.png ├── pict_331.png ├── pict_332.png ├── pict_333.png ├── pict_334.png ├── pict_335.png ├── pict_336.png ├── pict_337.png ├── pict_338.png ├── pict_339.png ├── pict_340.png ├── pict_341.png ├── pict_342.png ├── pict_343.png ├── pict_344.png ├── pict_345.png ├── pict_346.png ├── pict_347.png ├── pict_348.png ├── pict_349.png ├── pict_350.png ├── pict_351.png ├── pict_352.png ├── pict_353.png ├── pict_354.png ├── pict_355.png ├── pict_356.png ├── pict_357.png ├── pict_358.png ├── pict_359.png ├── pict_360.png ├── pict_361.png ├── pict_362.png ├── pict_363.png ├── pict_364.png ├── pict_365.png ├── pict_366.png ├── pict_367.png ├── pict_368.png ├── pict_369.png ├── pict_370.png ├── pict_371.png ├── pict_372.png ├── pict_373.png ├── pict_374.png ├── pict_375.png ├── pict_376.png ├── pict_377.png ├── pict_378.png ├── pict_379.png ├── pict_380.png ├── pict_381.png ├── pict_382.png ├── pict_383.png ├── pict_384.png ├── pict_385.png ├── pict_386.png ├── pict_387.png ├── pict_388.png ├── pict_389.png ├── pict_390.png ├── pict_391.png ├── pict_392.png ├── pict_393.png ├── pict_394.png ├── pict_395.png ├── pict_396.png ├── autobib.css ├── figure.css ├── figure.js ├── scribble-common.js ├── manual-racket.css ├── manual-racket.js ├── scribble.css └── manual-style.css ├── README.md ├── Makefile ├── model.rkt ├── model ├── lang.rkt ├── inhabitation.rkt ├── type-rep.rkt ├── metafunctions.rkt └── rendering.rkt ├── bib.rkt ├── .gitignore ├── math-tools.rkt └── LICENSE /docs/pict.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict.png -------------------------------------------------------------------------------- /docs/pict_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_10.png -------------------------------------------------------------------------------- /docs/pict_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_11.png -------------------------------------------------------------------------------- /docs/pict_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_12.png -------------------------------------------------------------------------------- /docs/pict_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_13.png -------------------------------------------------------------------------------- /docs/pict_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_14.png -------------------------------------------------------------------------------- /docs/pict_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_15.png -------------------------------------------------------------------------------- /docs/pict_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_16.png -------------------------------------------------------------------------------- /docs/pict_17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_17.png -------------------------------------------------------------------------------- /docs/pict_18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_18.png -------------------------------------------------------------------------------- /docs/pict_19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_19.png -------------------------------------------------------------------------------- /docs/pict_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_2.png -------------------------------------------------------------------------------- /docs/pict_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_20.png -------------------------------------------------------------------------------- /docs/pict_21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_21.png -------------------------------------------------------------------------------- /docs/pict_22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_22.png -------------------------------------------------------------------------------- /docs/pict_23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_23.png -------------------------------------------------------------------------------- /docs/pict_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_24.png -------------------------------------------------------------------------------- /docs/pict_25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_25.png -------------------------------------------------------------------------------- /docs/pict_26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_26.png -------------------------------------------------------------------------------- /docs/pict_27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_27.png -------------------------------------------------------------------------------- /docs/pict_28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_28.png -------------------------------------------------------------------------------- /docs/pict_29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_29.png -------------------------------------------------------------------------------- /docs/pict_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_3.png -------------------------------------------------------------------------------- /docs/pict_30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_30.png -------------------------------------------------------------------------------- /docs/pict_31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_31.png -------------------------------------------------------------------------------- /docs/pict_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_32.png -------------------------------------------------------------------------------- /docs/pict_33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_33.png -------------------------------------------------------------------------------- /docs/pict_34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_34.png -------------------------------------------------------------------------------- /docs/pict_35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_35.png -------------------------------------------------------------------------------- /docs/pict_36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_36.png -------------------------------------------------------------------------------- /docs/pict_37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_37.png -------------------------------------------------------------------------------- /docs/pict_38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_38.png -------------------------------------------------------------------------------- /docs/pict_39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_39.png -------------------------------------------------------------------------------- /docs/pict_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_4.png -------------------------------------------------------------------------------- /docs/pict_40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_40.png -------------------------------------------------------------------------------- /docs/pict_41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_41.png -------------------------------------------------------------------------------- /docs/pict_42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_42.png -------------------------------------------------------------------------------- /docs/pict_43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_43.png -------------------------------------------------------------------------------- /docs/pict_44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_44.png -------------------------------------------------------------------------------- /docs/pict_45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_45.png -------------------------------------------------------------------------------- /docs/pict_46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_46.png -------------------------------------------------------------------------------- /docs/pict_47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_47.png -------------------------------------------------------------------------------- /docs/pict_48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_48.png -------------------------------------------------------------------------------- /docs/pict_49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_49.png -------------------------------------------------------------------------------- /docs/pict_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_5.png -------------------------------------------------------------------------------- /docs/pict_50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_50.png -------------------------------------------------------------------------------- /docs/pict_51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_51.png -------------------------------------------------------------------------------- /docs/pict_52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_52.png -------------------------------------------------------------------------------- /docs/pict_53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_53.png -------------------------------------------------------------------------------- /docs/pict_54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_54.png -------------------------------------------------------------------------------- /docs/pict_55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_55.png -------------------------------------------------------------------------------- /docs/pict_56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_56.png -------------------------------------------------------------------------------- /docs/pict_57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_57.png -------------------------------------------------------------------------------- /docs/pict_58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_58.png -------------------------------------------------------------------------------- /docs/pict_59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_59.png -------------------------------------------------------------------------------- /docs/pict_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_6.png -------------------------------------------------------------------------------- /docs/pict_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_60.png -------------------------------------------------------------------------------- /docs/pict_61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_61.png -------------------------------------------------------------------------------- /docs/pict_62.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_62.png -------------------------------------------------------------------------------- /docs/pict_63.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_63.png -------------------------------------------------------------------------------- /docs/pict_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_64.png -------------------------------------------------------------------------------- /docs/pict_65.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_65.png -------------------------------------------------------------------------------- /docs/pict_66.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_66.png -------------------------------------------------------------------------------- /docs/pict_67.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_67.png -------------------------------------------------------------------------------- /docs/pict_68.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_68.png -------------------------------------------------------------------------------- /docs/pict_69.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_69.png -------------------------------------------------------------------------------- /docs/pict_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_7.png -------------------------------------------------------------------------------- /docs/pict_70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_70.png -------------------------------------------------------------------------------- /docs/pict_71.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_71.png -------------------------------------------------------------------------------- /docs/pict_72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_72.png -------------------------------------------------------------------------------- /docs/pict_73.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_73.png -------------------------------------------------------------------------------- /docs/pict_74.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_74.png -------------------------------------------------------------------------------- /docs/pict_75.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_75.png -------------------------------------------------------------------------------- /docs/pict_76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_76.png -------------------------------------------------------------------------------- /docs/pict_77.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_77.png -------------------------------------------------------------------------------- /docs/pict_78.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_78.png -------------------------------------------------------------------------------- /docs/pict_79.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_79.png -------------------------------------------------------------------------------- /docs/pict_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_8.png -------------------------------------------------------------------------------- /docs/pict_80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_80.png -------------------------------------------------------------------------------- /docs/pict_81.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_81.png -------------------------------------------------------------------------------- /docs/pict_82.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_82.png -------------------------------------------------------------------------------- /docs/pict_83.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_83.png -------------------------------------------------------------------------------- /docs/pict_84.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_84.png -------------------------------------------------------------------------------- /docs/pict_85.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_85.png -------------------------------------------------------------------------------- /docs/pict_86.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_86.png -------------------------------------------------------------------------------- /docs/pict_87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_87.png -------------------------------------------------------------------------------- /docs/pict_88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_88.png -------------------------------------------------------------------------------- /docs/pict_89.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_89.png -------------------------------------------------------------------------------- /docs/pict_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_9.png -------------------------------------------------------------------------------- /docs/pict_90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_90.png -------------------------------------------------------------------------------- /docs/pict_91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_91.png -------------------------------------------------------------------------------- /docs/pict_92.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_92.png -------------------------------------------------------------------------------- /docs/pict_93.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_93.png -------------------------------------------------------------------------------- /docs/pict_94.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_94.png -------------------------------------------------------------------------------- /docs/pict_95.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_95.png -------------------------------------------------------------------------------- /docs/pict_96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_96.png -------------------------------------------------------------------------------- /docs/pict_97.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_97.png -------------------------------------------------------------------------------- /docs/pict_98.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_98.png -------------------------------------------------------------------------------- /docs/pict_99.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_99.png -------------------------------------------------------------------------------- /docs/pict_100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_100.png -------------------------------------------------------------------------------- /docs/pict_101.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_101.png -------------------------------------------------------------------------------- /docs/pict_102.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_102.png -------------------------------------------------------------------------------- /docs/pict_103.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_103.png -------------------------------------------------------------------------------- /docs/pict_104.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_104.png -------------------------------------------------------------------------------- /docs/pict_105.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_105.png -------------------------------------------------------------------------------- /docs/pict_106.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_106.png -------------------------------------------------------------------------------- /docs/pict_107.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_107.png -------------------------------------------------------------------------------- /docs/pict_108.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_108.png -------------------------------------------------------------------------------- /docs/pict_109.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_109.png -------------------------------------------------------------------------------- /docs/pict_110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_110.png -------------------------------------------------------------------------------- /docs/pict_111.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_111.png -------------------------------------------------------------------------------- /docs/pict_112.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_112.png -------------------------------------------------------------------------------- /docs/pict_113.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_113.png -------------------------------------------------------------------------------- /docs/pict_114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_114.png -------------------------------------------------------------------------------- /docs/pict_115.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_115.png -------------------------------------------------------------------------------- /docs/pict_116.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_116.png -------------------------------------------------------------------------------- /docs/pict_117.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_117.png -------------------------------------------------------------------------------- /docs/pict_118.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_118.png -------------------------------------------------------------------------------- /docs/pict_119.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_119.png -------------------------------------------------------------------------------- /docs/pict_120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_120.png -------------------------------------------------------------------------------- /docs/pict_121.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_121.png -------------------------------------------------------------------------------- /docs/pict_122.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_122.png -------------------------------------------------------------------------------- /docs/pict_123.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_123.png -------------------------------------------------------------------------------- /docs/pict_124.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_124.png -------------------------------------------------------------------------------- /docs/pict_125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_125.png -------------------------------------------------------------------------------- /docs/pict_126.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_126.png -------------------------------------------------------------------------------- /docs/pict_127.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_127.png -------------------------------------------------------------------------------- /docs/pict_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_128.png -------------------------------------------------------------------------------- /docs/pict_129.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_129.png -------------------------------------------------------------------------------- /docs/pict_130.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_130.png -------------------------------------------------------------------------------- /docs/pict_131.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_131.png -------------------------------------------------------------------------------- /docs/pict_132.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_132.png -------------------------------------------------------------------------------- /docs/pict_133.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_133.png -------------------------------------------------------------------------------- /docs/pict_134.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_134.png -------------------------------------------------------------------------------- /docs/pict_135.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_135.png -------------------------------------------------------------------------------- /docs/pict_136.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_136.png -------------------------------------------------------------------------------- /docs/pict_137.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_137.png -------------------------------------------------------------------------------- /docs/pict_138.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_138.png -------------------------------------------------------------------------------- /docs/pict_139.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_139.png -------------------------------------------------------------------------------- /docs/pict_140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_140.png -------------------------------------------------------------------------------- /docs/pict_141.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_141.png -------------------------------------------------------------------------------- /docs/pict_142.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_142.png -------------------------------------------------------------------------------- /docs/pict_143.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_143.png -------------------------------------------------------------------------------- /docs/pict_144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_144.png -------------------------------------------------------------------------------- /docs/pict_145.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_145.png -------------------------------------------------------------------------------- /docs/pict_146.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_146.png -------------------------------------------------------------------------------- /docs/pict_147.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_147.png -------------------------------------------------------------------------------- /docs/pict_148.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_148.png -------------------------------------------------------------------------------- /docs/pict_149.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_149.png -------------------------------------------------------------------------------- /docs/pict_150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_150.png -------------------------------------------------------------------------------- /docs/pict_151.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_151.png -------------------------------------------------------------------------------- /docs/pict_152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_152.png -------------------------------------------------------------------------------- /docs/pict_153.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_153.png -------------------------------------------------------------------------------- /docs/pict_154.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_154.png -------------------------------------------------------------------------------- /docs/pict_155.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_155.png -------------------------------------------------------------------------------- /docs/pict_156.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_156.png -------------------------------------------------------------------------------- /docs/pict_157.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_157.png -------------------------------------------------------------------------------- /docs/pict_158.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_158.png -------------------------------------------------------------------------------- /docs/pict_159.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_159.png -------------------------------------------------------------------------------- /docs/pict_160.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_160.png -------------------------------------------------------------------------------- /docs/pict_161.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_161.png -------------------------------------------------------------------------------- /docs/pict_162.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_162.png -------------------------------------------------------------------------------- /docs/pict_163.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_163.png -------------------------------------------------------------------------------- /docs/pict_164.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_164.png -------------------------------------------------------------------------------- /docs/pict_165.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_165.png -------------------------------------------------------------------------------- /docs/pict_166.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_166.png -------------------------------------------------------------------------------- /docs/pict_167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_167.png -------------------------------------------------------------------------------- /docs/pict_168.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_168.png -------------------------------------------------------------------------------- /docs/pict_169.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_169.png -------------------------------------------------------------------------------- /docs/pict_170.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_170.png -------------------------------------------------------------------------------- /docs/pict_171.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_171.png -------------------------------------------------------------------------------- /docs/pict_172.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_172.png -------------------------------------------------------------------------------- /docs/pict_173.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_173.png -------------------------------------------------------------------------------- /docs/pict_174.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_174.png -------------------------------------------------------------------------------- /docs/pict_175.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_175.png -------------------------------------------------------------------------------- /docs/pict_176.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_176.png -------------------------------------------------------------------------------- /docs/pict_177.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_177.png -------------------------------------------------------------------------------- /docs/pict_178.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_178.png -------------------------------------------------------------------------------- /docs/pict_179.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_179.png -------------------------------------------------------------------------------- /docs/pict_180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_180.png -------------------------------------------------------------------------------- /docs/pict_181.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_181.png -------------------------------------------------------------------------------- /docs/pict_182.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_182.png -------------------------------------------------------------------------------- /docs/pict_183.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_183.png -------------------------------------------------------------------------------- /docs/pict_184.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_184.png -------------------------------------------------------------------------------- /docs/pict_185.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_185.png -------------------------------------------------------------------------------- /docs/pict_186.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_186.png -------------------------------------------------------------------------------- /docs/pict_187.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_187.png -------------------------------------------------------------------------------- /docs/pict_188.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_188.png -------------------------------------------------------------------------------- /docs/pict_189.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_189.png -------------------------------------------------------------------------------- /docs/pict_190.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_190.png -------------------------------------------------------------------------------- /docs/pict_191.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_191.png -------------------------------------------------------------------------------- /docs/pict_192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_192.png -------------------------------------------------------------------------------- /docs/pict_193.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_193.png -------------------------------------------------------------------------------- /docs/pict_194.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_194.png -------------------------------------------------------------------------------- /docs/pict_195.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_195.png -------------------------------------------------------------------------------- /docs/pict_196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_196.png -------------------------------------------------------------------------------- /docs/pict_197.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_197.png -------------------------------------------------------------------------------- /docs/pict_198.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_198.png -------------------------------------------------------------------------------- /docs/pict_199.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_199.png -------------------------------------------------------------------------------- /docs/pict_200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_200.png -------------------------------------------------------------------------------- /docs/pict_201.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_201.png -------------------------------------------------------------------------------- /docs/pict_202.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_202.png -------------------------------------------------------------------------------- /docs/pict_203.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_203.png -------------------------------------------------------------------------------- /docs/pict_204.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_204.png -------------------------------------------------------------------------------- /docs/pict_205.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_205.png -------------------------------------------------------------------------------- /docs/pict_206.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_206.png -------------------------------------------------------------------------------- /docs/pict_207.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_207.png -------------------------------------------------------------------------------- /docs/pict_208.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_208.png -------------------------------------------------------------------------------- /docs/pict_209.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_209.png -------------------------------------------------------------------------------- /docs/pict_210.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_210.png -------------------------------------------------------------------------------- /docs/pict_211.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_211.png -------------------------------------------------------------------------------- /docs/pict_212.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_212.png -------------------------------------------------------------------------------- /docs/pict_213.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_213.png -------------------------------------------------------------------------------- /docs/pict_214.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_214.png -------------------------------------------------------------------------------- /docs/pict_215.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_215.png -------------------------------------------------------------------------------- /docs/pict_216.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_216.png -------------------------------------------------------------------------------- /docs/pict_217.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_217.png -------------------------------------------------------------------------------- /docs/pict_218.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_218.png -------------------------------------------------------------------------------- /docs/pict_219.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_219.png -------------------------------------------------------------------------------- /docs/pict_220.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_220.png -------------------------------------------------------------------------------- /docs/pict_221.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_221.png -------------------------------------------------------------------------------- /docs/pict_222.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_222.png -------------------------------------------------------------------------------- /docs/pict_223.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_223.png -------------------------------------------------------------------------------- /docs/pict_224.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_224.png -------------------------------------------------------------------------------- /docs/pict_225.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_225.png -------------------------------------------------------------------------------- /docs/pict_226.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_226.png -------------------------------------------------------------------------------- /docs/pict_227.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_227.png -------------------------------------------------------------------------------- /docs/pict_228.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_228.png -------------------------------------------------------------------------------- /docs/pict_229.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_229.png -------------------------------------------------------------------------------- /docs/pict_230.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_230.png -------------------------------------------------------------------------------- /docs/pict_231.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_231.png -------------------------------------------------------------------------------- /docs/pict_232.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_232.png -------------------------------------------------------------------------------- /docs/pict_233.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_233.png -------------------------------------------------------------------------------- /docs/pict_234.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_234.png -------------------------------------------------------------------------------- /docs/pict_235.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_235.png -------------------------------------------------------------------------------- /docs/pict_236.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_236.png -------------------------------------------------------------------------------- /docs/pict_237.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_237.png -------------------------------------------------------------------------------- /docs/pict_238.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_238.png -------------------------------------------------------------------------------- /docs/pict_239.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_239.png -------------------------------------------------------------------------------- /docs/pict_240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_240.png -------------------------------------------------------------------------------- /docs/pict_241.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_241.png -------------------------------------------------------------------------------- /docs/pict_242.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_242.png -------------------------------------------------------------------------------- /docs/pict_243.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_243.png -------------------------------------------------------------------------------- /docs/pict_244.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_244.png -------------------------------------------------------------------------------- /docs/pict_245.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_245.png -------------------------------------------------------------------------------- /docs/pict_246.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_246.png -------------------------------------------------------------------------------- /docs/pict_247.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_247.png -------------------------------------------------------------------------------- /docs/pict_248.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_248.png -------------------------------------------------------------------------------- /docs/pict_249.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_249.png -------------------------------------------------------------------------------- /docs/pict_250.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_250.png -------------------------------------------------------------------------------- /docs/pict_251.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_251.png -------------------------------------------------------------------------------- /docs/pict_252.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_252.png -------------------------------------------------------------------------------- /docs/pict_253.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_253.png -------------------------------------------------------------------------------- /docs/pict_254.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_254.png -------------------------------------------------------------------------------- /docs/pict_255.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_255.png -------------------------------------------------------------------------------- /docs/pict_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_256.png -------------------------------------------------------------------------------- /docs/pict_257.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_257.png -------------------------------------------------------------------------------- /docs/pict_258.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_258.png -------------------------------------------------------------------------------- /docs/pict_259.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_259.png -------------------------------------------------------------------------------- /docs/pict_260.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_260.png -------------------------------------------------------------------------------- /docs/pict_261.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_261.png -------------------------------------------------------------------------------- /docs/pict_262.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_262.png -------------------------------------------------------------------------------- /docs/pict_263.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_263.png -------------------------------------------------------------------------------- /docs/pict_264.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_264.png -------------------------------------------------------------------------------- /docs/pict_265.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_265.png -------------------------------------------------------------------------------- /docs/pict_266.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_266.png -------------------------------------------------------------------------------- /docs/pict_267.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_267.png -------------------------------------------------------------------------------- /docs/pict_268.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_268.png -------------------------------------------------------------------------------- /docs/pict_269.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_269.png -------------------------------------------------------------------------------- /docs/pict_270.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_270.png -------------------------------------------------------------------------------- /docs/pict_271.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_271.png -------------------------------------------------------------------------------- /docs/pict_272.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_272.png -------------------------------------------------------------------------------- /docs/pict_273.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_273.png -------------------------------------------------------------------------------- /docs/pict_274.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_274.png -------------------------------------------------------------------------------- /docs/pict_275.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_275.png -------------------------------------------------------------------------------- /docs/pict_276.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_276.png -------------------------------------------------------------------------------- /docs/pict_277.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_277.png -------------------------------------------------------------------------------- /docs/pict_278.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_278.png -------------------------------------------------------------------------------- /docs/pict_279.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_279.png -------------------------------------------------------------------------------- /docs/pict_280.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_280.png -------------------------------------------------------------------------------- /docs/pict_281.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_281.png -------------------------------------------------------------------------------- /docs/pict_282.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_282.png -------------------------------------------------------------------------------- /docs/pict_283.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_283.png -------------------------------------------------------------------------------- /docs/pict_284.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_284.png -------------------------------------------------------------------------------- /docs/pict_285.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_285.png -------------------------------------------------------------------------------- /docs/pict_286.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_286.png -------------------------------------------------------------------------------- /docs/pict_287.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_287.png -------------------------------------------------------------------------------- /docs/pict_288.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_288.png -------------------------------------------------------------------------------- /docs/pict_289.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_289.png -------------------------------------------------------------------------------- /docs/pict_290.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_290.png -------------------------------------------------------------------------------- /docs/pict_291.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_291.png -------------------------------------------------------------------------------- /docs/pict_292.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_292.png -------------------------------------------------------------------------------- /docs/pict_293.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_293.png -------------------------------------------------------------------------------- /docs/pict_294.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_294.png -------------------------------------------------------------------------------- /docs/pict_295.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_295.png -------------------------------------------------------------------------------- /docs/pict_296.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_296.png -------------------------------------------------------------------------------- /docs/pict_297.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_297.png -------------------------------------------------------------------------------- /docs/pict_298.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_298.png -------------------------------------------------------------------------------- /docs/pict_299.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_299.png -------------------------------------------------------------------------------- /docs/pict_300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_300.png -------------------------------------------------------------------------------- /docs/pict_301.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_301.png -------------------------------------------------------------------------------- /docs/pict_302.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_302.png -------------------------------------------------------------------------------- /docs/pict_303.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_303.png -------------------------------------------------------------------------------- /docs/pict_304.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_304.png -------------------------------------------------------------------------------- /docs/pict_305.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_305.png -------------------------------------------------------------------------------- /docs/pict_306.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_306.png -------------------------------------------------------------------------------- /docs/pict_307.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_307.png -------------------------------------------------------------------------------- /docs/pict_308.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_308.png -------------------------------------------------------------------------------- /docs/pict_309.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_309.png -------------------------------------------------------------------------------- /docs/pict_310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_310.png -------------------------------------------------------------------------------- /docs/pict_311.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_311.png -------------------------------------------------------------------------------- /docs/pict_312.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_312.png -------------------------------------------------------------------------------- /docs/pict_313.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_313.png -------------------------------------------------------------------------------- /docs/pict_314.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_314.png -------------------------------------------------------------------------------- /docs/pict_315.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_315.png -------------------------------------------------------------------------------- /docs/pict_316.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_316.png -------------------------------------------------------------------------------- /docs/pict_317.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_317.png -------------------------------------------------------------------------------- /docs/pict_318.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_318.png -------------------------------------------------------------------------------- /docs/pict_319.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_319.png -------------------------------------------------------------------------------- /docs/pict_320.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_320.png -------------------------------------------------------------------------------- /docs/pict_321.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_321.png -------------------------------------------------------------------------------- /docs/pict_322.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_322.png -------------------------------------------------------------------------------- /docs/pict_323.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_323.png -------------------------------------------------------------------------------- /docs/pict_324.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_324.png -------------------------------------------------------------------------------- /docs/pict_325.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_325.png -------------------------------------------------------------------------------- /docs/pict_326.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_326.png -------------------------------------------------------------------------------- /docs/pict_327.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_327.png -------------------------------------------------------------------------------- /docs/pict_328.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_328.png -------------------------------------------------------------------------------- /docs/pict_329.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_329.png -------------------------------------------------------------------------------- /docs/pict_330.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_330.png -------------------------------------------------------------------------------- /docs/pict_331.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_331.png -------------------------------------------------------------------------------- /docs/pict_332.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_332.png -------------------------------------------------------------------------------- /docs/pict_333.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_333.png -------------------------------------------------------------------------------- /docs/pict_334.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_334.png -------------------------------------------------------------------------------- /docs/pict_335.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_335.png -------------------------------------------------------------------------------- /docs/pict_336.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_336.png -------------------------------------------------------------------------------- /docs/pict_337.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_337.png -------------------------------------------------------------------------------- /docs/pict_338.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_338.png -------------------------------------------------------------------------------- /docs/pict_339.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_339.png -------------------------------------------------------------------------------- /docs/pict_340.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_340.png -------------------------------------------------------------------------------- /docs/pict_341.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_341.png -------------------------------------------------------------------------------- /docs/pict_342.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_342.png -------------------------------------------------------------------------------- /docs/pict_343.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_343.png -------------------------------------------------------------------------------- /docs/pict_344.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_344.png -------------------------------------------------------------------------------- /docs/pict_345.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_345.png -------------------------------------------------------------------------------- /docs/pict_346.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_346.png -------------------------------------------------------------------------------- /docs/pict_347.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_347.png -------------------------------------------------------------------------------- /docs/pict_348.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_348.png -------------------------------------------------------------------------------- /docs/pict_349.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_349.png -------------------------------------------------------------------------------- /docs/pict_350.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_350.png -------------------------------------------------------------------------------- /docs/pict_351.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_351.png -------------------------------------------------------------------------------- /docs/pict_352.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_352.png -------------------------------------------------------------------------------- /docs/pict_353.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_353.png -------------------------------------------------------------------------------- /docs/pict_354.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_354.png -------------------------------------------------------------------------------- /docs/pict_355.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_355.png -------------------------------------------------------------------------------- /docs/pict_356.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_356.png -------------------------------------------------------------------------------- /docs/pict_357.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_357.png -------------------------------------------------------------------------------- /docs/pict_358.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_358.png -------------------------------------------------------------------------------- /docs/pict_359.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_359.png -------------------------------------------------------------------------------- /docs/pict_360.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_360.png -------------------------------------------------------------------------------- /docs/pict_361.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_361.png -------------------------------------------------------------------------------- /docs/pict_362.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_362.png -------------------------------------------------------------------------------- /docs/pict_363.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_363.png -------------------------------------------------------------------------------- /docs/pict_364.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_364.png -------------------------------------------------------------------------------- /docs/pict_365.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_365.png -------------------------------------------------------------------------------- /docs/pict_366.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_366.png -------------------------------------------------------------------------------- /docs/pict_367.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_367.png -------------------------------------------------------------------------------- /docs/pict_368.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_368.png -------------------------------------------------------------------------------- /docs/pict_369.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_369.png -------------------------------------------------------------------------------- /docs/pict_370.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_370.png -------------------------------------------------------------------------------- /docs/pict_371.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_371.png -------------------------------------------------------------------------------- /docs/pict_372.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_372.png -------------------------------------------------------------------------------- /docs/pict_373.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_373.png -------------------------------------------------------------------------------- /docs/pict_374.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_374.png -------------------------------------------------------------------------------- /docs/pict_375.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_375.png -------------------------------------------------------------------------------- /docs/pict_376.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_376.png -------------------------------------------------------------------------------- /docs/pict_377.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_377.png -------------------------------------------------------------------------------- /docs/pict_378.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_378.png -------------------------------------------------------------------------------- /docs/pict_379.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_379.png -------------------------------------------------------------------------------- /docs/pict_380.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_380.png -------------------------------------------------------------------------------- /docs/pict_381.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_381.png -------------------------------------------------------------------------------- /docs/pict_382.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_382.png -------------------------------------------------------------------------------- /docs/pict_383.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_383.png -------------------------------------------------------------------------------- /docs/pict_384.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_384.png -------------------------------------------------------------------------------- /docs/pict_385.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_385.png -------------------------------------------------------------------------------- /docs/pict_386.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_386.png -------------------------------------------------------------------------------- /docs/pict_387.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_387.png -------------------------------------------------------------------------------- /docs/pict_388.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_388.png -------------------------------------------------------------------------------- /docs/pict_389.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_389.png -------------------------------------------------------------------------------- /docs/pict_390.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_390.png -------------------------------------------------------------------------------- /docs/pict_391.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_391.png -------------------------------------------------------------------------------- /docs/pict_392.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_392.png -------------------------------------------------------------------------------- /docs/pict_393.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_393.png -------------------------------------------------------------------------------- /docs/pict_394.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_394.png -------------------------------------------------------------------------------- /docs/pict_395.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_395.png -------------------------------------------------------------------------------- /docs/pict_396.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pnwamk/sst-tutorial/HEAD/docs/pict_396.png -------------------------------------------------------------------------------- /docs/autobib.css: -------------------------------------------------------------------------------- 1 | 2 | .AutoBibliography p { 3 | padding-left: 1em; 4 | text-indent: -1em; 5 | } 6 | 7 | .AutoBibliography td { 8 | vertical-align: text-top; 9 | } 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Down and Dirty with Semantic Set-theoretic Types 2 | 3 | If you're looking for the source code you're in the right place! 4 | 5 | The rendered tutorial is hosted at [https://pnwamk.github.io/sst-tutorial/](https://pnwamk.github.io/sst-tutorial/). 6 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | test: 2 | raco make -v index.scrbl 3 | raco test model/testing.rkt 4 | 5 | html: 6 | raco make -v index.scrbl 7 | scribble --dest docs --html index.scrbl 8 | 9 | clean: 10 | rm -fr docs/* 11 | 12 | #test-ci: 13 | # raco test --drdr --timeout +inf.0 -j 4 --package redex-aam-tutorial 14 | 15 | #install: 16 | # raco pkg install ../redex-aam-tutorial 17 | -------------------------------------------------------------------------------- /model.rkt: -------------------------------------------------------------------------------- 1 | #lang racket/base 2 | 3 | (require "model/lang.rkt" 4 | "model/type-rep.rkt" 5 | "model/inhabitation.rkt" 6 | "model/testing.rkt" 7 | "model/rendering.rkt") 8 | 9 | (provide (all-from-out "model/lang.rkt" 10 | "model/type-rep.rkt" 11 | "model/inhabitation.rkt" 12 | "model/testing.rkt" 13 | "model/rendering.rkt")) 14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/figure.css: -------------------------------------------------------------------------------- 1 | 2 | .Centertext { 3 | text-align: center; 4 | margin: 0 0 0 0; 5 | } 6 | 7 | .Figure, .FigureMulti, .FigureMultiWide, .Herefigure { 8 | margin: 1em 0 1em 0; 9 | border: 1px solid #1818FF; 10 | } 11 | 12 | .Figure, .FigureMulti, .Herefigure { 13 | width: 100%; 14 | } 15 | 16 | .FigureMultiWide { 17 | width: 125%; 18 | } 19 | 20 | .Centerfigure { 21 | text-align: center; 22 | margin: 0 0 0 0; 23 | } 24 | 25 | .Leftfigure { 26 | text-align: left; 27 | margin: 0 0 0 0; 28 | } 29 | 30 | .Rightfigure { 31 | text-align: right; 32 | margin: 0 0 0 0; 33 | } 34 | 35 | .FigureInside { 36 | margin: 1em 1em 1em 1em; 37 | } 38 | -------------------------------------------------------------------------------- /docs/figure.js: -------------------------------------------------------------------------------- 1 | 2 | AddOnLoad(function () { 3 | /* Lift figure targets to the start of the figure's blockquote, 4 | so that clicking on a target reference shows the figure 5 | content, instead of scrolling the figure caption to the 6 | top of the page. */ 7 | var targets = document.getElementsByTagName("a"); 8 | for (var i = 0; i < targets.length; i++) { 9 | var a = targets[i]; 10 | var n = a.attributes["x-target-lift"]; 11 | if (n) { 12 | var s = n.value; 13 | var p = a.parentNode; 14 | while (p && (p.className != s)) { 15 | p = p.parentNode; 16 | } 17 | if (p) { 18 | var cs = p.children; 19 | a.parentNode.removeChild(a); 20 | if (cs.length > 0) 21 | p.insertBefore(a, cs[0]); 22 | else 23 | p.appendChild(a); 24 | } 25 | } 26 | } 27 | }); 28 | -------------------------------------------------------------------------------- /model/lang.rkt: -------------------------------------------------------------------------------- 1 | #lang racket/base 2 | 3 | (require redex/reduction-semantics 4 | racket/match) 5 | 6 | (provide (all-defined-out)) 7 | 8 | 9 | 10 | (define-language sst 11 | ;; base types 12 | [ι ::= Int Str True False] 13 | ;; user-level type syntax 14 | [τ σ ::= ι (Pair τ τ) (Fun τ τ) (Or τ τ) (And τ τ) (Not τ) Any Empty] 15 | ;; types (efficient representation) 16 | [t s ::= (Type β Prodb Arrowb)] 17 | [β ::= (Base ± B)] 18 | [B ::= (Set ι ...)] 19 | [± ::= + -] 20 | ;; Lazy Binary Decision Diagrams (BDD) 21 | [b ::= Top Bot n] 22 | [n ::= (Node a b b b)] 23 | [a ::= (× t t) (→ t t)] 24 | [Prodb ::= Top Bot (Node (× t t) Prodb Prodb Prodb)] 25 | [Arrowb ::= Top Bot (Node (→ t t) Arrowb Arrowb Arrowb)] 26 | ;; Base type union/negation 27 | [P ::= ∅ (set-cons a P)] 28 | [N ::= ∅ (set-cons a N)] 29 | [bool ::= #true #false] 30 | [idx ::= 1 2]) 31 | 32 | (define-term Any-Pair (Pair Any Any)) 33 | (define-term Any-Fun (Fun Empty Any)) 34 | (define-term Any-Base (Not (Or Any-Pair Any-Fun))) 35 | 36 | (define-judgment-form sst 37 | #:mode (equal-to I I) 38 | #:contract (equal-to any any) 39 | [------------------ 40 | (equal-to any_1 any_1)]) 41 | 42 | 43 | ;; an ordering on symbol/null/cons trees 44 | ;; sym < nil < cons 45 | (define (raw-term* () (#:size exact-nonnegative-integer?) 13 | #:rest (listof (or/c pict? string?)) 14 | pict?)] 15 | [msub (->* (string?) (exact-nonnegative-integer? real?) pict?)] 16 | [msup (->* (string?) (exact-nonnegative-integer? real?) pict?)] 17 | [roman (->* (string?) (exact-nonnegative-integer? real?) pict?)] 18 | [sans (->* (string?) (exact-nonnegative-integer? real?) pict?)] 19 | [mono (->* (string?) (exact-nonnegative-integer? real?) pict?)] 20 | [mcaps (->* (string?) (exact-nonnegative-integer? real?) pict?)] 21 | [rcaps (->* (string?) (exact-nonnegative-integer? real?) pict?)] 22 | [big-wedge (->* () (#:size exact-nonnegative-integer? #:below pict?) 23 | #:rest (listof pict?) 24 | pict?)] 25 | [big-vee (->* () (#:size exact-nonnegative-integer? #:below pict?) 26 | #:rest (listof pict?) 27 | pict?)] 28 | [big-cap (->* () (#:size exact-nonnegative-integer? #:below pict?) 29 | #:rest (listof pict?) 30 | pict?)] 31 | [big-cup (->* () (#:size exact-nonnegative-integer? #:below pict?) 32 | #:rest (listof pict?) 33 | pict?)] 34 | [parens (->* () (#:offset exact-integer? 35 | #:style (or/c 'round 'square 'curly 'angle)) 36 | #:rest (listof pict?) 37 | pict?)] 38 | [inference-rule (->* (pict? pict?) 39 | (#:thickness exact-nonnegative-integer? 40 | #:scale (and/c real? positive?)) 41 | pict?)] 42 | [draw-bdd (-> bdd/c pict?)] 43 | [draw-lbdd (-> lbdd/c pict?)])) 44 | 45 | (define ($ #:size [size 20] 46 | . bodies) 47 | (define (->pict x) 48 | (match x 49 | [(? string?) (math x)] 50 | [(? pict?) x])) 51 | (apply hbl-append (map ->pict bodies))) 52 | 53 | (define (msub str [size 20] [angle 0]) 54 | (text str (cons 'subscript "Latin Modern Math") size angle)) 55 | 56 | (define (msup str [size 20] [angle 0]) 57 | (text str (cons 'superscript "Latin Modern Math") size angle)) 58 | 59 | (define (math str [size 20] [angle 0]) 60 | (text str "Latin Modern Math" size angle)) 61 | 62 | (define (roman str [size 20] [angle 0]) 63 | (text str "Latin Modern Roman" size angle)) 64 | 65 | (define (sans str [size 20] [angle 0]) 66 | (text str "Latin Modern Sans" size angle)) 67 | 68 | (define (mono str [size 20] [angle 0]) 69 | (text str "Latin Modern Mono" size angle)) 70 | 71 | (define (mcaps str [size 20] [angle 0]) 72 | (text str "Latin Modern Mono Caps" size angle)) 73 | 74 | (define (rcaps str [size 20] [angle 0]) 75 | (text str "Latin Modern Roman Caps" size angle)) 76 | 77 | 78 | (define ((big-op op) #:size [size 20] #:below [below (blank 0 0)] 79 | . rhss) 80 | (define the-op (math op (* 3 size))) 81 | (define rhs (apply hbl-append rhss)) 82 | (define big-op-app (if (< (pict-height rhs) (pict-height the-op)) 83 | hc-append 84 | hbl-append)) 85 | (vl-append 86 | (big-op-app the-op rhs) 87 | (scale below 3/4))) 88 | 89 | (define big-wedge (big-op "∧")) 90 | (define big-vee (big-op "∨")) 91 | (define big-cap (big-op "∩")) 92 | (define big-cup (big-op "∪")) 93 | 94 | 95 | (define (parens #:style [style 'round] 96 | #:offset [offset 0] . bodies) 97 | (define body (apply hbl-append bodies)) 98 | (define body-height (pict-height body)) 99 | (define-values (l-str r-str) 100 | (match style 101 | ['round (values "(" ")")] 102 | ['square (values "[" "]")] 103 | ['curly (values "{" "}")] 104 | ['angle (values "⟨" "⟩")])) 105 | (let loop ([size 2] 106 | [scalar 1]) 107 | (define l (scale (math l-str size) 1 scalar)) 108 | (cond 109 | [(>= (pict-height l) body-height) 110 | (hc-append offset l body (scale (math r-str size) 1 scalar))] 111 | [(< scalar 6/4) (loop size (+ scalar 1/4))] 112 | [else 113 | (loop (+ 2 size) 1)]))) 114 | 115 | (define (inference-rule above below 116 | #:thickness [thickness 1] 117 | #:scale [scalar 1]) 118 | (define w (* scalar (max (pict-width above) (pict-width below)))) 119 | (vc-append (scale above scalar) 120 | (hline w thickness) 121 | (scale below scalar))) 122 | 123 | (define blue (make-object color% 51 153 255)) 124 | (define red (make-object color% 255 80 80)) 125 | (define grey (make-object color% 200 200 200)) 126 | 127 | 128 | (define bdd/c 129 | (or/c pict? 130 | (list/c pict? 131 | (recursive-contract bdd/c #:flat) 132 | (recursive-contract bdd/c #:flat)))) 133 | 134 | (define (node p) 135 | (cc-superimpose 136 | (filled-rounded-rectangle 137 | (* 1.5 (pict-width p)) 138 | (* 1.5 (pict-height p)) 139 | #:color "white") 140 | p)) 141 | 142 | (define edge-width 6) 143 | 144 | (define (draw-bdd b) 145 | (inset 146 | (naive-layered 147 | (let loop ([b b]) 148 | (match b 149 | [(? pict?) (tree-layout #:pict (node b) #f #f)] 150 | [(list x l r) 151 | (tree-layout 152 | #:pict (node x) 153 | (tree-edge #:edge-color blue 154 | #:edge-width edge-width 155 | (loop l)) 156 | (tree-edge #:edge-color red 157 | #:edge-width edge-width 158 | (loop r)))]))) 159 | 5)) 160 | 161 | (define lbdd/c 162 | (or/c pict? 163 | (list/c pict? 164 | (recursive-contract lbdd/c #:flat) 165 | (recursive-contract lbdd/c #:flat) 166 | (recursive-contract lbdd/c #:flat)))) 167 | 168 | (define (draw-lbdd b) 169 | (inset 170 | (naive-layered 171 | (let loop ([b b]) 172 | (match b 173 | [(? pict?) (tree-layout #:pict (node b))] 174 | [(list x l m r) 175 | (tree-layout 176 | #:pict (node x) 177 | (tree-edge #:edge-color blue 178 | #:edge-width edge-width 179 | (loop l)) 180 | (tree-edge #:edge-color grey 181 | #:edge-width edge-width 182 | (loop m)) 183 | (tree-edge #:edge-color red 184 | #:edge-width edge-width 185 | (loop r)))]))) 186 | 5)) 187 | -------------------------------------------------------------------------------- /docs/scribble-common.js: -------------------------------------------------------------------------------- 1 | // Common functionality for PLT documentation pages 2 | 3 | // Page Parameters ------------------------------------------------------------ 4 | 5 | var page_query_string = location.search.substring(1); 6 | 7 | var page_args = 8 | ((function(){ 9 | if (!page_query_string) return []; 10 | var args = page_query_string.split(/[&;]/); 11 | for (var i=0; i= 0) args[i] = [a.substring(0,p), a.substring(p+1)]; 15 | else args[i] = [a, false]; 16 | } 17 | return args; 18 | })()); 19 | 20 | function GetPageArg(key, def) { 21 | for (var i=0; i= 0 && cur.substring(0,eql) == key) 78 | return unescape(cur.substring(eql+1)); 79 | } 80 | return def; 81 | } 82 | } 83 | 84 | function SetCookie(key, val) { 85 | try { 86 | localStorage[key] = val; 87 | } catch(e) { 88 | var d = new Date(); 89 | d.setTime(d.getTime()+(365*24*60*60*1000)); 90 | try { 91 | document.cookie = 92 | key + "=" + escape(val) + "; expires="+ d.toGMTString() + "; path=/"; 93 | } catch (e) {} 94 | } 95 | } 96 | 97 | // note that this always stores a directory name, ending with a "/" 98 | function SetPLTRoot(ver, relative) { 99 | var root = location.protocol + "//" + location.host 100 | + NormalizePath(location.pathname.replace(/[^\/]*$/, relative)); 101 | SetCookie("PLT_Root."+ver, root); 102 | } 103 | 104 | // adding index.html works because of the above 105 | function GotoPLTRoot(ver, relative) { 106 | var u = GetCookie("PLT_Root."+ver, null); 107 | if (u == null) return true; // no cookie: use plain up link 108 | // the relative path is optional, default goes to the toplevel start page 109 | if (!relative) relative = "index.html"; 110 | location = u + relative; 111 | return false; 112 | } 113 | 114 | // Utilities ------------------------------------------------------------------ 115 | 116 | var normalize_rxs = [/\/\/+/g, /\/\.(\/|$)/, /\/[^\/]*\/\.\.(\/|$)/]; 117 | function NormalizePath(path) { 118 | var tmp, i; 119 | for (i = 0; i < normalize_rxs.length; i++) 120 | while ((tmp = path.replace(normalize_rxs[i], "/")) != path) path = tmp; 121 | return path; 122 | } 123 | 124 | // `noscript' is problematic in some browsers (always renders as a 125 | // block), use this hack instead (does not always work!) 126 | // document.write(""); 127 | 128 | // Interactions --------------------------------------------------------------- 129 | 130 | function DoSearchKey(event, field, ver, top_path) { 131 | var val = field.value; 132 | if (event && event.key === 'Enter') { 133 | var u = GetCookie("PLT_Root."+ver, null); 134 | if (u == null) u = top_path; // default: go to the top path 135 | u += "search/index.html?q=" + encodeURIComponent(val); 136 | u = MergePageArgsIntoUrl(u); 137 | location = u; 138 | return false; 139 | } 140 | return true; 141 | } 142 | 143 | function TocviewToggle(glyph, id) { 144 | var s = document.getElementById(id).style; 145 | var expand = s.display == "none"; 146 | s.display = expand ? "block" : "none"; 147 | glyph.innerHTML = expand ? "▼" : "►"; 148 | } 149 | 150 | function TocsetToggle() { 151 | document.body.classList.toggle("tocsetoverlay"); 152 | } 153 | 154 | // Page Init ------------------------------------------------------------------ 155 | 156 | // Note: could make a function that inspects and uses window.onload to chain to 157 | // a previous one, but this file needs to be required first anyway, since it 158 | // contains utilities for all other files. 159 | var on_load_funcs = []; 160 | function AddOnLoad(fun) { on_load_funcs.push(fun); } 161 | window.onload = function() { 162 | for (var i=0; i tr:first-child > td > .together { 186 | border-top: 0px; /* erase border on first instance of together */ 187 | } 188 | 189 | .RktBlk { 190 | white-space: pre; 191 | text-align: left; 192 | } 193 | 194 | .highlighted { 195 | font-size: 1rem; 196 | background-color: #fee; 197 | } 198 | 199 | .defmodule { 200 | font-family: 'Fira-Mono', monospace; 201 | padding: 0.25rem 0.75rem 0.25rem 0.5rem; 202 | margin-bottom: 1rem; 203 | width: 100%; 204 | background-color: #ebf0f4; 205 | } 206 | 207 | .defmodule a { 208 | color: #444; 209 | } 210 | 211 | 212 | .defmodule td span.hspace:first-child { 213 | position: absolute; 214 | width: 0; 215 | display: inline-block; 216 | } 217 | 218 | .defmodule .RpackageSpec .Smaller, 219 | .defmodule .RpackageSpec .stt { 220 | font-size: 1rem; 221 | } 222 | 223 | /* make parens ordinary color in defmodule */ 224 | .defmodule .RktPn { 225 | color: inherit; 226 | } 227 | 228 | .specgrammar { 229 | float: none; 230 | padding-left: 1em; 231 | } 232 | 233 | 234 | .RBibliography td { 235 | vertical-align: text-top; 236 | padding-top: 1em; 237 | } 238 | 239 | .leftindent { 240 | margin-left: 2rem; 241 | margin-right: 0em; 242 | } 243 | 244 | .insetpara { 245 | margin-left: 1em; 246 | margin-right: 1em; 247 | } 248 | 249 | .SCodeFlow .Rfilebox { 250 | margin-left: -1em; /* see 17.2 of guide, module languages */ 251 | } 252 | 253 | .Rfiletitle { 254 | text-align: right; 255 | background-color: #eee; 256 | } 257 | 258 | .SCodeFlow .Rfiletitle { 259 | border-top: 1px dotted gray; 260 | border-right: 1px dotted gray; 261 | } 262 | 263 | 264 | .Rfilename { 265 | border-top: 0; 266 | border-right: 0; 267 | padding-left: 0.5em; 268 | padding-right: 0.5em; 269 | background-color: inherit; 270 | } 271 | 272 | .Rfilecontent { 273 | margin: 0.5em; 274 | } 275 | 276 | .RpackageSpec { 277 | padding-right: 0; 278 | } 279 | 280 | /* ---------------------------------------- */ 281 | /* For background labels */ 282 | 283 | .RBackgroundLabel { 284 | float: right; 285 | width: 0px; 286 | height: 0px; 287 | } 288 | 289 | .RBackgroundLabelInner { 290 | position: relative; 291 | width: 25em; 292 | left: -25.5em; 293 | top: 0.20rem; /* sensitive to monospaced font choice */ 294 | text-align: right; 295 | z-index: 0; 296 | font-weight: 300; 297 | font-family: 'Fira-Mono', monospace; 298 | font-size: 0.9rem; 299 | color: gray; 300 | } 301 | 302 | 303 | .RpackageSpec .Smaller { 304 | font-weight: 300; 305 | font-family: 'Fira-Mono', monospace; 306 | font-size: 0.9rem; 307 | } 308 | 309 | .RForeground { 310 | position: relative; 311 | left: 0px; 312 | top: 0px; 313 | z-index: 1; 314 | } 315 | 316 | /* ---------------------------------------- */ 317 | /* For section source modules & tags */ 318 | 319 | .RPartExplain { 320 | background: #eee; 321 | font-size: 0.9rem; 322 | margin-top: 0.2rem; 323 | padding: 0.2rem; 324 | text-align: left; 325 | } 326 | -------------------------------------------------------------------------------- /model/inhabitation.rkt: -------------------------------------------------------------------------------- 1 | #lang racket/base 2 | 3 | (require "lang.rkt" 4 | "type-rep.rkt" 5 | redex/reduction-semantics 6 | racket/match 7 | (only-in racket/list in-combinations) 8 | (only-in racket/set set-union set-intersect set-subtract) 9 | (for-syntax racket/base)) 10 | 11 | (provide (all-defined-out)) 12 | 13 | (define-judgment-form sst 14 | #:mode (<: I I) 15 | #:contract (<: τ τ) 16 | [(where #true (subtype (parse σ) (parse τ))) 17 | ---------------- 18 | (<: σ τ)]) 19 | 20 | (define-judgment-form sst 21 | #:mode (≈ I I) 22 | #:contract (≈ τ τ) 23 | [(where #true (subtype (parse σ) (parse τ))) 24 | (where #true (subtype (parse τ) (parse σ))) 25 | ---------------- 26 | (≈ σ τ)]) 27 | 28 | (define-metafunction sst 29 | empty : t -> bool 30 | [(empty (Type (Base + (Set)) Prodb Arrowb)) 31 | ,(AND (term (emptyP Prodb Any-t Any-t ∅)) 32 | and (term (emptyA Arrowb Empty-t ∅ ∅)))] 33 | [(empty _) #false]) 34 | 35 | (define-metafunction sst 36 | subtype : t t -> bool 37 | [(subtype s t) (empty (t-diff s t))]) 38 | 39 | (define-metafunction sst 40 | overlap : t t -> bool 41 | [(overlap s t) (empty (t-and s t))]) 42 | 43 | (define-metafunction sst 44 | equiv : t t -> bool 45 | [(equiv s t) ,(AND (term (subtype s t)) and (term (subtype t s)))]) 46 | 47 | (define-syntax (OR stx) 48 | (syntax-case stx (or) 49 | [(_ term1 or term2) 50 | (syntax/loc stx (or term1 term2))] 51 | [(_ term1 or term2 or term3) 52 | (syntax/loc stx (or term1 term2 term3))])) 53 | 54 | ;; duplicate definition that will be rendered with parens 55 | (define-syntax POR (make-rename-transformer #'OR)) 56 | 57 | (define-syntax (AND stx) 58 | (syntax-case stx (and) 59 | [(_ term1 and term2) 60 | (syntax/loc stx (and term1 term2))] 61 | [(_ term1 and term2 and term3) 62 | (syntax/loc stx (and term1 term2 term3))])) 63 | 64 | ;; duplicate definition that will be rendered with parens 65 | (define-syntax PAND (make-rename-transformer #'AND)) 66 | 67 | 68 | 69 | (define-metafunction sst 70 | emptyP : Prodb s s N -> bool 71 | [(emptyP Bot s_1 s_2 N) #true] 72 | [(emptyP Top s_1 s_2 N) 73 | ,(OR (term (empty s_1)) or (term (empty s_2)) or (term (emptyP-aux s_1 s_2 N)))] 74 | [(emptyP (Node (× t_1 t_2) Prodb_l Prodb_m Prodb_r) s_1 s_2 N) 75 | ,(AND (term (emptyP Prodb_l (t-and s_1 t_1) (t-and s_2 t_2) N)) 76 | and (term (emptyP Prodb_m s_1 s_2 N)) 77 | and (term (emptyP Prodb_r s_1 s_2 (set-cons (× t_1 t_2) N))))]) 78 | 79 | 80 | (define-metafunction sst 81 | emptyP-aux : s s N -> bool 82 | [(emptyP-aux s_1 s_2 ∅) #false] 83 | [(emptyP-aux s_1 s_2 (set-cons (× t_1 t_2) N)) 84 | ,(AND (POR (term (subtype s_1 t_1)) or (term (emptyP-aux (t-diff s_1 t_1) s_2 N))) 85 | and (POR (term (subtype s_2 t_2)) or (term (emptyP-aux s_1 (t-diff s_2 t_2) N))))]) 86 | 87 | 88 | (define-metafunction sst 89 | emptyA : Arrowb s P N -> bool 90 | [(emptyA Bot s P N) #true] 91 | [(emptyA Top s P ∅) #false] 92 | [(emptyA Top s P (set-cons (→ t_1 t_2) N)) 93 | ,(OR (PAND (term (subtype t_1 s)) and (term (emptyA-aux t_1 (t-not t_2) P))) 94 | or (term (emptyA Top s P N)))] 95 | [(emptyA (Node (→ s_d s_r) Arrowb_l Arrowb_m Arrowb_r) s P N) 96 | ,(AND (term (emptyA Arrowb_l (t-or s s_d) (set-cons (→ s_d s_r) P) N)) 97 | and (term (emptyA Arrowb_m s P N)) 98 | and (term (emptyA Arrowb_r s P (set-cons (→ s_d s_r) N))))]) 99 | 100 | (define-metafunction sst 101 | emptyA-aux : t_1 t_2 P -> bool 102 | [(emptyA-aux t_1 t_2 ∅) ,(OR (term (empty t_1)) or (term (empty t_2)))] 103 | [(emptyA-aux t_1 t_2 (set-cons (→ s_1 s_2) P)) 104 | ,(AND (POR (term (subtype t_1 s_1)) or (term (emptyA-aux (t-diff t_1 s_1) t_2 P))) 105 | and (POR (term (subtype t_2 (t-not s_2))) or (term (emptyA-aux t_1 (t-and t_2 s_2) P))))]) 106 | 107 | 108 | 109 | 110 | 111 | ; 112 | ; 113 | ; ; 114 | ; 115 | ; ; ;; ;;;; ;;; ; ; ;;; 116 | ; ;; ; ; ; ; ; ;; ; 117 | ; ; ; ; ; ; ; ; ;; 118 | ; ; ; ;;;; ; ; ; ;;;;;; 119 | ; ; ; ; ; ; ; ; ; 120 | ; ; ; ; ; ; ; ; 121 | ; ; ; ;;;; ;;;;; ; ;;;; 122 | ; 123 | ; 124 | ; 125 | ; 126 | ; ; 127 | ; ; ; 128 | ; ; ; 129 | ; ;;; ; ; ;;;; ;;;;; ; ; ;;;; ;;; 130 | ; ; ; ; ; ;; ;; ; ; ; ;; ;; ;; ; 131 | ; ; ; ; ; ; ; ; ; ; ; ; ;; 132 | ; ;;; ; ; ; ; ; ; ; ; ; ;;;;;; 133 | ; ; ; ; ; ; ; ; ; ; ; ; 134 | ; ; ; ; ; ;; ;; ; ;; ;; ;; ; 135 | ; ;;; ;;;; ;;;; ;;; ; ;;;; ;;;; 136 | ; ; ; 137 | ; ; ; 138 | ; ;; ; 139 | ; (for comparison against efficient version) 140 | 141 | 142 | (define-metafunction sst 143 | nsubtype : t t -> bool 144 | [(nsubtype s t) (nempty (t-diff s t))]) 145 | 146 | (define-metafunction sst 147 | nempty : t -> bool 148 | [(nempty (Type (Base + (Set)) Prodb Arrowb)) 149 | #true 150 | (where #true ,(naive-empty-prods (term Prodb))) 151 | (where #true ,(naive-empty-arrows (term Arrowb)))] 152 | [(nempty _) #false]) 153 | 154 | 155 | (define (naive-empty-prods bdd) 156 | (let loop ([bdd bdd] 157 | [s1 (term Any-t)] 158 | [s2 (term Any-t)] 159 | [N '()]) 160 | (match bdd 161 | ['Bot #t] 162 | ['Top (for/and ([N* (in-combinations N)]) 163 | (or (let ([t1 (term (t-or* ,@(map car N*)))]) 164 | (term (nsubtype ,s1 ,t1))) 165 | (let ([t2c (term (t-or* ,@(map cdr (set-subtract N N*))))]) 166 | (term (nsubtype ,s2 ,t2c)))))] 167 | [`(Node (× ,t1 ,t2) ,l ,m ,r) 168 | (and (loop l 169 | (term (t-and ,s1 ,t1)) 170 | (term (t-and ,s2 ,t2)) 171 | N) 172 | (loop m s1 s2 N) 173 | (loop r s1 s2 (cons (cons t1 t2) N)))]))) 174 | 175 | 176 | (define (naive-empty-arrows bdd) 177 | (let loop ([bdd bdd] 178 | [dom (term Empty-t)] 179 | [P '()] 180 | [N '()]) 181 | (match bdd 182 | ['Bot #t] 183 | ['Top (for*/or ([narrow (in-list N)] 184 | [t1 (in-value (car narrow))] 185 | [t2 (in-value (cdr narrow))] 186 | #:when (term (nsubtype ,t1 ,dom))) 187 | (for/and ([P* (in-combinations P)]) 188 | (or (let ([dom* (term (t-or* ,@(map car (set-subtract P P*))))]) 189 | (term (nsubtype ,t1 ,dom*))) 190 | (let ([rng* (term (t-and* ,@(map cdr P*)))]) 191 | (term (nsubtype ,rng* ,t2))))))] 192 | [`(Node (→ ,t1 ,t2) ,l ,m ,r) 193 | (and (loop l (term (t-or ,dom ,t1)) (cons (cons t1 t2) P) N) 194 | (loop m dom P N) 195 | (loop r dom P (cons (cons t1 t2) N)))]))) -------------------------------------------------------------------------------- /model/type-rep.rkt: -------------------------------------------------------------------------------- 1 | #lang racket/base 2 | 3 | (require "lang.rkt" 4 | redex/reduction-semantics 5 | (only-in racket/set set-union set-intersect set-subtract)) 6 | 7 | 8 | (provide (all-defined-out)) 9 | 10 | 11 | (define-metafunction sst 12 | Base-t : ι -> t 13 | [(Base-t ι) (Type (Base + (Set ι)) Bot Bot)]) 14 | 15 | (define-metafunction sst 16 | Prod-t : t t -> t 17 | [(Prod-t t_1 t_2) (Type (Base + (Set)) (Node (× t_1 t_2) Top Bot Bot) Bot)]) 18 | 19 | (define-metafunction sst 20 | Arrow-t : t t -> t 21 | [(Arrow-t t_1 t_2) (Type (Base + (Set)) Bot (Node (→ t_1 t_2) Top Bot Bot))]) 22 | 23 | 24 | (define-metafunction sst 25 | parse : τ -> t 26 | [(parse ι) (Type (Base + (Set ι)) Bot Bot)] 27 | [(parse (Pair τ σ)) (Type (Base + (Set)) (Node (× t_1 t_2) Top Bot Bot) Bot) 28 | (where t_1 (parse τ)) 29 | (where t_2 (parse σ))] 30 | [(parse (Fun τ σ)) (Type (Base + (Set)) Bot (Node (→ t_1 t_2) Top Bot Bot)) 31 | (where t_1 (parse τ)) 32 | (where t_2 (parse σ))] 33 | [(parse (Or τ σ)) (t-or (parse τ) (parse σ))] 34 | [(parse (And τ σ)) (t-and (parse τ) (parse σ))] 35 | [(parse (Not τ)) (t-not (parse τ))] 36 | [(parse Any) (Type (Base - (Set)) Top Top)] 37 | [(parse Empty) (Type (Base + (Set)) Bot Bot)]) 38 | 39 | 40 | (define-metafunction sst 41 | Set-union : (Set any ...) (Set any ...) -> (Set any ...) 42 | [(Set-union (Set any_1 ...) (Set any_2 ...)) 43 | (Set ,@(set-union (term (any_1 ...)) (term (any_2 ...))))]) 44 | 45 | (define-metafunction sst 46 | Set-intersect : (Set any ...) (Set any ...) -> (Set any ...) 47 | [(Set-intersect (Set any_1 ...) (Set any_2 ...)) 48 | (Set ,@(set-intersect (term (any_1 ...)) (term (any_2 ...))))]) 49 | 50 | (define-metafunction sst 51 | Set-diff : (Set any ...) (Set any ...) -> (Set any ...) 52 | [(Set-diff (Set any_1 ...) (Set any_2 ...)) 53 | (Set ,@(set-subtract (term (any_1 ...)) (term (any_2 ...))))]) 54 | 55 | (define-metafunction sst 56 | Base-or : β β -> β 57 | [(Base-or (Base + B_1) (Base + B_2)) 58 | (Base + (Set-union B_1 B_2))] 59 | [(Base-or (Base - B_1) (Base - B_2)) 60 | (Base - (Set-intersect B_1 B_2))] 61 | [(Base-or (Base + B_1) (Base - B_2)) 62 | (Base - (Set-diff B_2 B_1))] 63 | [(Base-or (Base - B_1) (Base + B_2)) 64 | (Base - (Set-diff B_1 B_2))]) 65 | 66 | (define-metafunction sst 67 | Base-and : β β -> β 68 | [(Base-and (Base + B_1) (Base + B_2)) 69 | (Base + (Set-intersect B_1 B_2))] 70 | [(Base-and (Base - B_1) (Base - B_2)) 71 | (Base - (Set-union B_1 B_2))] 72 | [(Base-and (Base + B_1) (Base - B_2)) 73 | (Base + (Set-diff B_1 B_2))] 74 | [(Base-and (Base - B_1) (Base + B_2)) 75 | (Base + (Set-diff B_2 B_1))]) 76 | 77 | (define-metafunction sst 78 | Base-diff : β β -> β 79 | [(Base-diff (Base + B_1) (Base + B_2)) 80 | (Base + (Set-diff B_1 B_2))] 81 | [(Base-diff (Base - B_1) (Base - B_2)) 82 | (Base + (Set-diff B_2 B_1))] 83 | [(Base-diff (Base + B_1) (Base - B_2)) 84 | (Base + (Set-intersect B_1 B_2))] 85 | [(Base-diff (Base - B_1) (Base + B_2)) 86 | (Base - (Set-union B_1 B_2))]) 87 | 88 | (define-metafunction sst 89 | node : a b b b -> b 90 | [(node a b_l Top b_r) Top] 91 | [(node a b b_m b) (b-or b b_m)] 92 | [(node a b_l b_m b_r) (Node a b_l b_m b_r)]) 93 | 94 | (define-metafunction sst 95 | atom : n -> a 96 | [(atom (Node a b_l b_m b_r)) a]) 97 | 98 | (define-metafunction sst 99 | left : n -> b 100 | [(left (Node a b_l b_m b_r)) b_l]) 101 | 102 | (define-metafunction sst 103 | mid : n -> b 104 | [(mid (Node a b_l b_m b_r)) b_m]) 105 | 106 | (define-metafunction sst 107 | right : n -> b 108 | [(right (Node a b_l b_m b_r)) b_r]) 109 | 110 | (define-metafunction sst 111 | b-or : b b -> b 112 | [(b-or b b) b] 113 | [(b-or b Top) Top] 114 | [(b-or Top b) Top] 115 | [(b-or b Bot) b] 116 | [(b-or Bot b) b] 117 | [(b-or n_1 n_2) 118 | (node (atom n_1) (left n_1) (b-or (mid n_1) n_2) (right n_1)) 119 | (judgment-holds (less-than (atom n_1) (atom n_2)))] 120 | [(b-or n_1 n_2) 121 | (node (atom n_2) (left n_2) (b-or (mid n_2) n_1) (right n_2)) 122 | (judgment-holds (greater-than (atom n_1) (atom n_2)))] 123 | [(b-or n_1 n_2) 124 | (node (atom n_1) (b-or (left n_1) (left n_2)) (b-or (mid n_1) (mid n_2)) (b-or (right n_1) (right n_2))) 125 | (judgment-holds (equal-to (atom n_1) (atom n_2)))]) 126 | 127 | 128 | (define-metafunction sst 129 | b-and : b b -> b 130 | [(b-and b b) b] 131 | [(b-and b Top) b] 132 | [(b-and Top b) b] 133 | [(b-and b Bot) Bot] 134 | [(b-and Bot b) Bot] 135 | [(b-and n_1 n_2) 136 | (node (atom n_1) (b-and (left n_1) n_2) (b-and (mid n_1) n_2) (b-and (right n_1) n_2)) 137 | (judgment-holds (less-than (atom n_1) (atom n_2)))] 138 | [(b-and n_1 n_2) 139 | (node (atom n_2) (b-and n_1 (left n_2)) (b-and n_1 (mid n_2)) (b-and n_1 (right n_2))) 140 | (judgment-holds (greater-than (atom n_1) (atom n_2)))] 141 | [(b-and n_1 n_2) 142 | (node (atom n_1) 143 | (b-and (b-or (left n_1) (mid n_1)) (b-or (left n_2) (mid n_2))) 144 | Bot 145 | (b-and (b-or (right n_1) (mid n_1)) (b-or (right n_2) (mid n_2)))) 146 | (judgment-holds (equal-to (atom n_1) (atom n_2)))]) 147 | 148 | 149 | (define-metafunction sst 150 | b-not : b -> b 151 | [(b-not Top) Bot] 152 | [(b-not Bot) Top] 153 | [(b-not (Node a b_1 b_2 Bot)) 154 | (node a Bot (b-not (b-or b_2 b_1)) (b-not b_2))] 155 | [(b-not (Node a Bot b_2 b_3)) 156 | (node a (b-not b_2) (b-not (b-or b_2 b_3)) Bot)] 157 | [(b-not (Node a b_1 Bot b_3)) 158 | (node a (b-not b_1) (b-not (b-or b_1 b_3)) (b-not b_3))] 159 | [(b-not (Node a_1 b_1 b_2 b_3)) 160 | (node a_1 (b-not (b-or b_1 b_2)) Bot (b-not (b-or b_3 b_2)))]) 161 | 162 | 163 | (define-metafunction sst 164 | b-diff : b b -> b 165 | [(b-diff b b) Bot] 166 | [(b-diff b Top) Bot] 167 | [(b-diff Top b) (b-not b)] 168 | [(b-diff b Bot) b] 169 | [(b-diff Bot b) Bot] 170 | [(b-diff n_1 n_2) 171 | (node (atom n_1) (b-diff (b-or (left n_1) (mid n_1)) n_2) Bot (b-diff (b-or (right n_1) (mid n_1)) n_2)) 172 | (judgment-holds (less-than (atom n_1) (atom n_2)))] 173 | [(b-diff n_1 n_2) 174 | (node (atom n_2) (b-diff n_1 (b-or (left n_2) (mid n_2))) Bot (b-diff n_1 (b-or (right n_2) (mid n_2)))) 175 | (judgment-holds (greater-than (atom n_1) (atom n_2)))] 176 | [(b-diff n_1 n_2) 177 | (node (atom n_1) (b-diff (left n_1) (left n_2)) (b-diff (mid n_1) (mid n_2)) (b-diff (right n_1) (right n_2)))]) 178 | 179 | (define-metafunction sst 180 | t-and : t t -> t 181 | [(t-and (Type β_1 Prodb_1 Arrowb_1) (Type β_2 Prodb_2 Arrowb_2)) 182 | (Type (Base-and β_1 β_2) (b-and Prodb_1 Prodb_2) (b-and Arrowb_1 Arrowb_2))]) 183 | 184 | (define-metafunction sst 185 | t-or : t t -> t 186 | [(t-or (Type β_1 Prodb_1 Arrowb_1) (Type β_2 Prodb_2 Arrowb_2)) 187 | (Type (Base-or β_1 β_2) (b-or Prodb_1 Prodb_2) (b-or Arrowb_1 Arrowb_2))]) 188 | 189 | (define-metafunction sst 190 | t-diff : t t -> t 191 | [(t-diff (Type β_1 Prodb_1 Arrowb_1) (Type β_2 Prodb_2 Arrowb_2)) 192 | (Type (Base-diff β_1 β_2) (b-diff Prodb_1 Prodb_2) (b-diff Arrowb_1 Arrowb_2))]) 193 | 194 | (define-metafunction sst 195 | t-not : t -> t 196 | [(t-not t) (t-diff Any-t t)]) 197 | 198 | 199 | (define-metafunction sst 200 | t-or* : t ... -> t 201 | [(t-or*) Empty-t] 202 | [(t-or* t) t] 203 | [(t-or* t s ...) (t-or t (t-or* s ...))]) 204 | 205 | (define-metafunction sst 206 | t-and* : t ... -> t 207 | [(t-and*) Any-t] 208 | [(t-and* t) t] 209 | [(t-and* t s ...) (t-and t (t-and* s ...))]) 210 | 211 | 212 | 213 | (define-term Any-t (Type (Base - (Set)) Top Top)) 214 | (define-term Empty-t (Type (Base + (Set)) Bot Bot)) 215 | (define-term Any-Prod-t (Type (Base + (Set)) Top Bot)) 216 | (define-term Any-Fun-t (Type (Base + (Set)) Bot Top)) 217 | (define-term Any-Base-t (Type (Base - (Set)) Bot Bot)) 218 | (define-term Int-t (Base-t Int)) 219 | (define-term Str-t (Base-t Str)) 220 | (define-term True-t (Base-t True)) 221 | (define-term False-t (Base-t False)) 222 | (define-term Bool-t (Or True-t False-t)) -------------------------------------------------------------------------------- /model/metafunctions.rkt: -------------------------------------------------------------------------------- 1 | #lang racket/base 2 | 3 | (require redex/reduction-semantics 4 | racket/match 5 | (only-in racket/list in-combinations) 6 | (only-in racket/set set-subtract) 7 | "lang.rkt" 8 | "type-rep.rkt" 9 | "inhabitation.rkt") 10 | 11 | (provide (all-defined-out)) 12 | 13 | (define-metafunction sst 14 | select : idx t t -> t 15 | [(select 1 t_1 t_2) t_1] 16 | [(select 2 t_1 t_2) t_2]) 17 | 18 | ;; Given a type, calulcate its first 19 | ;; projection (or return false if 20 | ;; it is not a pair) 21 | (define-metafunction sst 22 | maybe-project : idx t -> t or #false 23 | [(maybe-project idx t) 24 | (project idx Prodb Any-t Any-t ∅) 25 | (side-condition (term (subtype t Any-Prod-t))) 26 | (where (Type _ Prodb _) t)] 27 | [(maybe-project idx t) #false]) 28 | 29 | (define-metafunction sst 30 | project : idx Prodb s s N -> t 31 | [(project idx Bot s_1 s_2 N) Empty-t] 32 | [(project idx Prodb s_1 s_2 N) 33 | Empty-t 34 | (side-condition (OR (term (empty s_1)) or (term (empty s_2))))] 35 | [(project idx Top s_1 s_2 N) 36 | (project-aux idx s_1 s_2 N)] 37 | [(project idx (Node (× t_1 t_2) Prodb_l Prodb_m Prodb_r) s_1 s_2 N) 38 | (t-or t_l (t-or t_m t_r)) 39 | (where t_l (project idx Prodb_l (t-and s_1 t_1) (t-and s_2 t_2) N)) 40 | (where t_m (project idx Prodb_m s_1 s_2 N)) 41 | (where t_r (project idx Prodb_r s_1 s_2 (set-cons (× t_1 t_2) N)))]) 42 | 43 | (define-metafunction sst 44 | project-aux : idx s s N -> t 45 | [(project-aux idx s_1 s_2 N) 46 | Empty-t 47 | (side-condition (OR (term (empty s_1)) or (term (empty s_2))))] 48 | [(project-aux idx s_1 s_2 ∅) (select idx s_1 s_2)] 49 | [(project-aux idx s_1 s_2 (set-cons (× t_1 t_2) N)) 50 | (t-or (project-aux idx (t-diff s_1 t_1) s_2 N) (project-aux idx s_1 (t-diff s_2 t_2) N))]) 51 | 52 | 53 | ;; Given a type, calculate its 54 | ;; domain (or return #false if it 55 | ;; is not a function). 56 | (define-metafunction sst 57 | maybe-domain : t -> t or #false 58 | [(maybe-domain t) 59 | (domain Empty-t Arrowb) 60 | (side-condition (term (subtype t Any-Fun-t))) 61 | (where (Type _ _ Arrowb) t)] 62 | [(maybe-domain t) #false]) 63 | 64 | ;; NOTE slightly diff from haskell 65 | ;; version, double check w/ testing of course 66 | (define-metafunction sst 67 | domain : t Arrowb -> t 68 | [(domain t Top) t] 69 | [(domain t Bot) Any-t] 70 | [(domain t (Node (→ s_1 s_2) Arrowb_l Arrowb_m Arrowb_r)) 71 | (t-and t_l (t-and t_m t_r)) 72 | (where t_l (domain (t-or t s_1) Arrowb_l)) 73 | (where t_m (domain t Arrowb_m)) 74 | (where t_r (domain t Arrowb_r))]) 75 | 76 | ;; Given a (function) type and 77 | ;; a (argument) type, return the 78 | ;; type of the result of applying 79 | ;; the first to the second, or #false 80 | ;; if the first is not a function or 81 | ;; if the second is not in the domain 82 | ;; of the first. 83 | (define-metafunction sst 84 | maybe-funapp : t t -> t or #false 85 | [(maybe-funapp t_f t_a) 86 | (funapp t_a Any-t Arrowb) 87 | (where t_d (maybe-domain t_f)) 88 | (side-condition (term (subtype t_a t_d))) 89 | (where (Type _ _ Arrowb) t_f)] 90 | [(maybe-funapp t_f t_a) #false]) 91 | 92 | (define-metafunction sst 93 | funapp : t t Arrowb -> t 94 | [(funapp t_a t Bot) Empty-t] 95 | [(funapp t_a t Arrowb) 96 | Empty-t 97 | (side-condition (OR (term (empty t_a)) or (term (empty t))))] 98 | [(funapp t_a t Top) t] 99 | [(funapp t_a t (Node (→ s_1 s_2) Arrowb_l Arrowb_m Arrowb_r)) 100 | (t-or t_l1 (t-or t_l2 (t-or t_m t_r))) 101 | (where t_l1 (funapp t_a (t-and t s_2) Arrowb_l)) 102 | (where t_l2 (funapp (t-diff t_a s_1) t Arrowb_l)) 103 | (where t_m (funapp t_a t Arrowb_m)) 104 | (where t_r (funapp t_a t Arrowb_r))]) 105 | 106 | 107 | 108 | ; 109 | ; 110 | ; ; 111 | ; 112 | ; ; ;; ;;;; ;;; ; ; ;;; 113 | ; ;; ; ; ; ; ; ;; ; 114 | ; ; ; ; ; ; ; ; ;; 115 | ; ; ; ;;;; ; ; ; ;;;;;; 116 | ; ; ; ; ; ; ; ; ; 117 | ; ; ; ; ; ; ; ; 118 | ; ; ; ;;;; ;;;;; ; ;;;; 119 | ; 120 | ; 121 | ; 122 | ; 123 | ; ;; 124 | ; ; ; 125 | ; ; ; 126 | ; ;;;;;; ;;; ;;;;; ;;;; ;;;;; ; ; ; ;; ;;; 127 | ; ; ; ; ;; ; ; ; ; ; ; ;; ; ; ; 128 | ; ; ; ; ; ;; ; ; ; ; ; ; ; ; 129 | ; ; ; ; ;;;;;; ; ;;;; ; ; ; ; ; ;;; 130 | ; ; ; ; ; ; ; ; ; ; ; ; ; ; 131 | ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; 132 | ; ; ; ; ;;;; ;;; ;;;; ; ;;;; ; ; ;;; 133 | ; 134 | ; 135 | ; 136 | 137 | 138 | (define (union-domains arrows) 139 | (for/fold ([dom (term Empty-t)]) 140 | ([a (in-list arrows)]) 141 | (match a 142 | [`(→ ,t1 ,_) (term (t-or ,dom ,t1))]))) 143 | 144 | (define (intersect-codomains arrows) 145 | (for/fold ([cdom (term Any-t)]) 146 | ([a (in-list arrows)]) 147 | (match a 148 | [`(→ ,_ ,t2) (term (t-and ,cdom ,t2))]))) 149 | 150 | 151 | (define-metafunction sst 152 | nmaybe-project : idx t -> t or #false 153 | [(nmaybe-project idx t) 154 | (nproject idx Prodb) 155 | (side-condition (term (subtype t Any-Prod-t))) 156 | (where (Type _ Prodb _) t)] 157 | [(nmaybe-project idx t) #false]) 158 | 159 | (define-metafunction sst 160 | nproject : idx Prodb -> t 161 | [(nproject idx Prodb) ,(naive-project (term idx) (term Prodb))]) 162 | 163 | (define (naive-project idx bdd) 164 | (let loop ([bdd bdd] 165 | [s1 (term Any-t)] 166 | [s2 (term Any-t)]) 167 | (match bdd 168 | ['Bot (term Empty-t)] 169 | ['Top (match* ((term (empty ,s1)) (term (empty ,s2))) 170 | [(#true _) (term Empty-t)] 171 | [(_ #true) (term Empty-t)] 172 | [(#false #false) 173 | (match idx [1 s1] [2 s2])])] 174 | [`(Node (× ,t1 ,t2) ,l ,m ,r) 175 | (define res1 (loop l 176 | (term (t-and ,s1 ,t1)) 177 | (term (t-and ,s2 ,t2)))) 178 | (define res2 (loop m s1 s2)) 179 | (define res3 (loop r (term (t-diff ,s1 ,t1)) s2)) 180 | (define res4 (loop r s1 (term (t-diff ,s2 ,t2)))) 181 | (term (t-or ,res1 (t-or ,res2 (t-or ,res3 ,res4))))]))) 182 | 183 | 184 | (define-metafunction sst 185 | nmaybe-domain : t -> t or #false 186 | [(nmaybe-domain t) 187 | (ndomain Arrowb) 188 | (side-condition (term (subtype t Any-Fun-t))) 189 | (where (Type _ _ Arrowb) t)] 190 | [(nmaybe-domain t) #false]) 191 | 192 | 193 | (define-metafunction sst 194 | ndomain : Arrowb -> t 195 | [(ndomain Arrowb) ,(naive-domain (term Arrowb))]) 196 | 197 | (define (naive-domain bdd) 198 | (let loop ([bdd bdd] 199 | [P '()]) 200 | (match bdd 201 | ['Bot (term Any-t)] 202 | ['Top (union-domains P)] 203 | [`(Node ,a ,l ,m ,r) 204 | (define res1 (loop l (cons a P))) 205 | (define res2 (loop m P)) 206 | (define res3 (loop r P)) 207 | (term (t-and ,res1 (t-and ,res2 ,res3)))]))) 208 | 209 | 210 | (define-metafunction sst 211 | nmaybe-funapp : t t -> t or #false 212 | [(nmaybe-funapp t_f t_a) 213 | (nfunapp t_a Arrowb) 214 | (where t_d (nmaybe-domain t_f)) 215 | (side-condition (term (subtype t_a t_d))) 216 | (where (Type _ _ Arrowb) t_f)] 217 | [(nmaybe-funapp t_f t_a) #false]) 218 | 219 | (define-metafunction sst 220 | nfunapp : t Arrowb -> t 221 | [(nfunapp t_a Arrowb) ,(naive-funapp (term t_a) (term Arrowb))]) 222 | 223 | 224 | (define (naive-funapp arg bdd) 225 | (let loop ([bdd bdd] 226 | [P '()]) 227 | (match bdd 228 | ['Bot (term Empty-t)] 229 | ['Top (for/fold ([res (term Empty-t)]) 230 | ([P* (in-combinations P)] 231 | #:when (not (term (subtype ,arg ,(union-domains 232 | (set-subtract P P*)))))) 233 | (term (t-or ,res ,(intersect-codomains P*))))] 234 | [`(Node ,a ,l ,m ,r) 235 | (define res1 (loop l (cons a P))) 236 | (define res2 (loop m P)) 237 | (define res3 (loop r P)) 238 | (term (t-or ,res1 (t-or ,res2 ,res3)))]))) 239 | 240 | -------------------------------------------------------------------------------- /docs/manual-racket.js: -------------------------------------------------------------------------------- 1 | /* For the Racket manual style */ 2 | 3 | AddOnLoad(function() { 4 | /* Look for header elements that have x-source-module and x-part tag. 5 | For those elements, add a hidden element that explains how to 6 | link to the section, and set the element's onclick() to display 7 | the explanation. */ 8 | var tag_names = ["h1", "h2", "h3", "h4", "h5"]; 9 | for (var j = 0; j < tag_names.length; j++) { 10 | elems = document.getElementsByTagName(tag_names[j]); 11 | for (var i = 0; i < elems.length; i++) { 12 | var elem = elems.item(i); 13 | AddPartTitleOnClick(elem); 14 | } 15 | } 16 | }) 17 | 18 | // cache of source urls 19 | var cache = {}; 20 | 21 | function ParseSource(source, mod_path, single_collection) { 22 | 23 | var source_url = new URL(source); 24 | 25 | if (source_url.protocol == "github:") { 26 | // browser URL parser only works with http(s) URLs 27 | source_url = new URL("https" + source.substring(6)); 28 | var host = source_url.host; 29 | var url_path = source_url.pathname.substring(1).split("/"); 30 | if (!(url_path.length >= 2)) return null; 31 | var user = url_path.shift(); 32 | var repo = url_path.shift(); 33 | var branch = url_path.shift(); 34 | var source_path = url_path.join("/"); 35 | } 36 | else if (("https:" == source_url.protocol) || ("git:" == source_url.protocol)) { 37 | // browser URL parser only works with http(s) URLs 38 | if ("git:" == source_url.protocol) 39 | source_url = new URL("https" + source.substring(3)); 40 | 41 | var host = source_url.host; 42 | var source_path = source_url.searchParams.get("path"); 43 | var branch = (source_url.hash || "#master").substring(1); 44 | var url_path = source_url.pathname.substring(1).split("/"); 45 | if (url_path.length < 2) throw [source_url.pathname, url_path]; 46 | var user = url_path.shift(); 47 | var repo = url_path.shift(); 48 | var mtch = repo.match(/(.*)\.git$/); 49 | if (mtch) repo = mtch[1]; 50 | 51 | } 52 | else return null; 53 | 54 | var mod_path_re = /^\(lib "(.+)"\)$/; 55 | 56 | var mod_path_elems = mod_path && mod_path.match(mod_path_re)[1].split("/"); 57 | 58 | if (!user || !repo || !mod_path_elems) 59 | return null; 60 | if (single_collection) 61 | mod_path_elems.shift(); 62 | 63 | var file_path = mod_path_elems.join("/"); 64 | 65 | 66 | if (source_path) { 67 | file_path = source_path + "/" + file_path; 68 | } 69 | 70 | return { user: user, 71 | repo: repo, 72 | file_path: file_path, 73 | branch: branch, 74 | host: host }; 75 | } 76 | 77 | function AddSourceElement(pkg_url, info) { 78 | info.appendChild(document.createTextNode("Document source ")); 79 | var url_line = document.createElement("div"); 80 | var a = document.createElement("a"); 81 | a.href = pkg_url; 82 | a.style.whiteSpace = "nowrap"; 83 | a.appendChild(document.createTextNode(pkg_url)); 84 | addSpan(url_line, "\xA0", "RktRdr"); 85 | url_line.appendChild(a); 86 | info.appendChild(url_line); 87 | } 88 | 89 | var prefixes = { "github.com": "tree", 90 | "gitlab.com": "-/blob" }; 91 | 92 | 93 | function AddSourceUrl(source, mod_path, collection, info) { 94 | // multi is encoded as an array, empty as false 95 | single_collection = (typeof collection === "string"); 96 | 97 | var parsed = source && mod_path && ParseSource(source, mod_path, single_collection); 98 | 99 | if (!parsed) return; 100 | 101 | prefix = prefixes.hasOwnProperty(parsed.host) && prefixes[parsed.host]; 102 | if (!prefix) return; 103 | 104 | var correct_url = "https://" + [parsed.host, parsed.user, parsed.repo, prefix, parsed.branch, parsed.file_path].join("/"); 105 | 106 | if (info) AddSourceElement(correct_url, info); 107 | } 108 | 109 | function addSpan(dest, str, cn) { 110 | var s = document.createElement("span"); 111 | s.className = cn; 112 | s.style.whiteSpace = "nowrap"; 113 | s.appendChild(document.createTextNode(str)); 114 | dest.appendChild(s); 115 | } 116 | 117 | 118 | // test cases 119 | if (false) { 120 | console.log(ParseSource("git://gitlab.com/benn/foo?path=xxx", 121 | '(lib "asn1/scribblings/asn1.scrbl")', 122 | false)) 123 | console.log(ParseSource("github://github.com/carl-eastlund/mischief/master", 124 | '(lib "asn1/scribblings/asn1.scrbl")', 125 | false)) 126 | console.log(ParseSource("github://github.com/carl-eastlund/mischief/stable/dir", 127 | '(lib "asn1/scribblings/asn1.scrbl")', 128 | false)) 129 | 130 | console.log(ParseSource("git://github.com/racket/racket/?path=pkgs/racket-doc", 131 | '(lib "asn1/scribblings/asn1.scrbl")', 132 | false)); 133 | 134 | console.log(ParseSource("git://github.com/rmculpepper/asn1.git?path=asn1-doc", 135 | '(lib "asn1/scribblings/asn1.scrbl")', 136 | true)); 137 | console.log(ParseSource("git://github.com/rmculpepper/asn1", 138 | '(lib "asn1/scribblings/asn1.scrbl")', 139 | true)); 140 | console.log(ParseSource("git://github.com/rmculpepper/asn1", 141 | '(lib "asn1/scribblings/asn1.scrbl")', 142 | false)); 143 | } 144 | 145 | function AddPartTitleOnClick(elem) { 146 | var mod_path = elem.getAttribute("x-source-module"); 147 | var tag = elem.getAttribute("x-part-tag"); 148 | var source_pkg = elem.getAttribute("x-source-pkg"); 149 | 150 | // create here to share 151 | var info = document.createElement("div"); 152 | 153 | 154 | // tag is not needed, but this way we can add the element in only one place 155 | // avoid failing on browser that don't have `fetch` 156 | if (mod_path && source_pkg && tag && window.fetch) { 157 | 158 | var cached = cache[mod_path] 159 | if (cached) { 160 | AddSourceElement(cached[0], mod_path, cached[1], info); 161 | } 162 | else { 163 | fetch("https://pkgs.racket-lang.org/pkg/" + source_pkg + ".json") 164 | .then(function (response) { return response.json(); }) 165 | .then(function (data) { 166 | var vers = data["versions"] || {}; 167 | var def = vers["default"] || {}; 168 | var source = def["source"] || undefined; 169 | var collection = data["collection"]; 170 | if (source) { 171 | cache[mod_path] = [source, collection]; 172 | AddSourceUrl(source, mod_path, collection, info); 173 | } 174 | }); 175 | } 176 | } 177 | 178 | if (mod_path && tag) { 179 | // Might not be present: 180 | var prefixes = elem.getAttribute("x-part-prefixes"); 181 | 182 | info.className = "RPartExplain"; 183 | 184 | /* The "top" tag refers to a whole document: */ 185 | var is_top = (tag == "\"top\""); 186 | info.appendChild(document.createTextNode("Link to this " 187 | + (is_top ? "document" : "section") 188 | + " with ")); 189 | 190 | /* Break `secref` into two lines if the module path and tag 191 | are long enough: */ 192 | var is_long = (is_top ? false : ((mod_path.length 193 | + tag.length 194 | + (prefixes ? (16 + prefixes.length) : 0)) 195 | > 60)); 196 | 197 | var line1 = document.createElement("div"); 198 | var line1x = ((is_long && prefixes) ? document.createElement("div") : line1); 199 | var line2 = (is_long ? document.createElement("div") : line1); 200 | 201 | /* Construct a `secref` call with suitable syntax coloring: */ 202 | addSpan(line1, "\xA0@", "RktRdr"); 203 | addSpan(line1, (is_top ? "other-doc" : "secref"), "RktSym"); 204 | addSpan(line1, "[", "RktPn"); 205 | if (!is_top) 206 | addSpan(line1, tag, "RktVal"); 207 | if (is_long) { 208 | /* indent additional lines: */ 209 | if (prefixes) 210 | addSpan(line1x, "\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0", "RktPn"); 211 | addSpan(line2, "\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0", "RktPn"); 212 | } 213 | if (prefixes) { 214 | addSpan(line1x, " #:tag-prefixes ", "RktPn"); 215 | addSpan(line1x, "'", "RktVal"); 216 | addSpan(line1x, prefixes, "RktVal"); 217 | } 218 | if (!is_top) 219 | addSpan(line2, " #:doc ", "RktPn"); 220 | addSpan(line2, "'", "RktVal"); 221 | addSpan(line2, mod_path, "RktVal"); 222 | addSpan(line2, "]", "RktPn"); 223 | 224 | info.appendChild(line1); 225 | if (is_long) 226 | info.appendChild(line1x); 227 | if (is_long) 228 | info.appendChild(line2); 229 | 230 | info.style.display = "none"; 231 | 232 | /* Add the new element afterthe header: */ 233 | var n = elem.nextSibling; 234 | if (n) 235 | elem.parentNode.insertBefore(info, n); 236 | else 237 | elem.parentNode.appendChild(info); 238 | 239 | /* Clicking the header shows the explanation element: */ 240 | elem.onclick = function () { 241 | if (info.style.display == "none") 242 | info.style.display = "block"; 243 | else 244 | info.style.display = "none"; 245 | } 246 | } 247 | } 248 | -------------------------------------------------------------------------------- /docs/scribble.css: -------------------------------------------------------------------------------- 1 | 2 | /* This file is used by default by all Scribble documents. 3 | See also "manual.css", which is added by default by the 4 | `scribble/manual` language. */ 5 | 6 | /* CSS seems backward: List all the classes for which we want a 7 | particular font, so that the font can be changed in one place. (It 8 | would be nicer to reference a font definition from all the places 9 | that we want it.) 10 | 11 | As you read the rest of the file, remember to double-check here to 12 | see if any font is set. */ 13 | 14 | /* Monospace: */ 15 | .maincolumn, .refpara, .refelem, .tocset, .stt, .hspace, .refparaleft, .refelemleft { 16 | font-family: monospace; 17 | } 18 | 19 | /* Serif: */ 20 | .main, .refcontent, .tocview, .tocsub, .sroman, i { 21 | font-family: serif; 22 | } 23 | 24 | /* Sans-serif: */ 25 | .version, .versionNoNav, .ssansserif { 26 | font-family: sans-serif; 27 | } 28 | .ssansserif { 29 | font-size: 80%; 30 | font-weight: bold; 31 | } 32 | 33 | /* Emphasis: alternate italics and normal as we nest */ 34 | .emph { 35 | font-style: italic; 36 | } 37 | .emph .emph { 38 | font-style: normal; 39 | } 40 | .emph .emph .emph { 41 | font-style: italic; 42 | } 43 | .emph .emph .emph .emph { 44 | font-style: normal; 45 | } 46 | .emph .emph .emph .emph .emph { 47 | font-style: italic; 48 | } 49 | .emph .emph .emph .emph .emph .emph { 50 | font-style: normal; 51 | } 52 | 53 | /* ---------------------------------------- */ 54 | 55 | p, .SIntrapara { 56 | display: block; 57 | margin: 1em 0; 58 | } 59 | 60 | h2 { /* per-page main title */ 61 | margin-top: 0; 62 | } 63 | 64 | h3, h4, h5, h6, h7, h8 { 65 | margin-top: 1.75em; 66 | margin-bottom: 0.5em; 67 | } 68 | 69 | .SSubSubSubSection { 70 | font-weight: bold; 71 | font-size: 0.83em; /* should match h5; from HTML 4 reference */ 72 | } 73 | 74 | /* Needed for browsers like Opera, and eventually for HTML 4 conformance. 75 | This means that multiple paragraphs in a table element do not have a space 76 | between them. */ 77 | table p { 78 | margin-top: 0; 79 | margin-bottom: 0; 80 | } 81 | 82 | /* ---------------------------------------- */ 83 | /* Main */ 84 | 85 | body { 86 | color: black; 87 | background-color: #ffffff; 88 | } 89 | 90 | table td { 91 | padding-left: 0; 92 | padding-right: 0; 93 | } 94 | 95 | .maincolumn { 96 | width: 43em; 97 | margin-right: -40em; 98 | margin-left: 15em; 99 | } 100 | 101 | .main { 102 | text-align: left; 103 | } 104 | 105 | /* ---------------------------------------- */ 106 | /* Navigation */ 107 | 108 | .navsettop, .navsetbottom { 109 | background-color: #f0f0e0; 110 | padding: 0.25em 0 0.25em 0; 111 | } 112 | 113 | .navsettop { 114 | margin-bottom: 1.5em; 115 | border-bottom: 2px solid #e0e0c0; 116 | } 117 | 118 | .navsetbottom { 119 | margin-top: 2em; 120 | border-top: 2px solid #e0e0c0; 121 | } 122 | 123 | .navleft { 124 | margin-left: 1ex; 125 | position: relative; 126 | float: left; 127 | white-space: nowrap; 128 | } 129 | .navright { 130 | margin-right: 1ex; 131 | position: relative; 132 | float: right; 133 | white-space: nowrap; 134 | } 135 | .nonavigation { 136 | color: #e0e0e0; 137 | } 138 | 139 | .navleft .tocsettoggle { 140 | display: none; 141 | } 142 | 143 | .searchform { 144 | display: inline; 145 | margin: 0; 146 | padding: 0; 147 | } 148 | 149 | .nosearchform { 150 | display: none; 151 | } 152 | 153 | .searchbox { 154 | width: 16em; 155 | margin: 0px; 156 | padding: 0px; 157 | background-color: #eee; 158 | border: 1px solid #ddd; 159 | vertical-align: middle; 160 | } 161 | 162 | .searchbox::placeholder { 163 | text-align: center; 164 | } 165 | 166 | #contextindicator { 167 | position: fixed; 168 | background-color: #c6f; 169 | color: #000; 170 | font-family: monospace; 171 | font-weight: bold; 172 | padding: 2px 10px; 173 | display: none; 174 | right: 0; 175 | bottom: 0; 176 | } 177 | 178 | /* ---------------------------------------- */ 179 | /* Version */ 180 | 181 | .versionbox { 182 | position: relative; 183 | float: right; 184 | left: 2em; 185 | height: 0em; 186 | width: 13em; 187 | margin: 0em -13em 0em 0em; 188 | } 189 | .version { 190 | font-size: small; 191 | } 192 | .versionNoNav { 193 | font-size: xx-small; /* avoid overlap with author */ 194 | } 195 | 196 | .version:before, .versionNoNav:before { 197 | content: "Version "; 198 | } 199 | 200 | /* ---------------------------------------- */ 201 | /* Margin notes */ 202 | 203 | .refpara, .refelem { 204 | position: relative; 205 | float: right; 206 | left: 2em; 207 | height: 0em; 208 | width: 13em; 209 | margin: 0em -13em 0em 0em; 210 | } 211 | 212 | .refpara, .refparaleft { 213 | top: -1em; 214 | } 215 | 216 | .refcolumn { 217 | background-color: #F5F5DC; 218 | display: block; 219 | position: relative; 220 | width: 13em; 221 | font-size: 85%; 222 | border: 0.5em solid #F5F5DC; 223 | margin: 0 0 0 0; 224 | white-space: normal; /* in case margin note is inside code sample */ 225 | } 226 | 227 | .refcontent { 228 | margin: 0 0 0 0; 229 | } 230 | 231 | .refcontent p { 232 | margin-top: 0; 233 | margin-bottom: 0; 234 | } 235 | 236 | .refparaleft, .refelemleft { 237 | position: relative; 238 | float: left; 239 | right: 2em; 240 | height: 0em; 241 | width: 13em; 242 | margin: 0em 0em 0em -13em; 243 | } 244 | 245 | .refcolumnleft { 246 | background-color: #F5F5DC; 247 | display: block; 248 | position: relative; 249 | width: 13em; 250 | font-size: 85%; 251 | border: 0.5em solid #F5F5DC; 252 | margin: 0 0 0 0; 253 | } 254 | 255 | 256 | /* ---------------------------------------- */ 257 | /* Table of contents, inline */ 258 | 259 | .toclink { 260 | text-decoration: none; 261 | color: blue; 262 | font-size: 85%; 263 | } 264 | 265 | .toptoclink { 266 | text-decoration: none; 267 | color: blue; 268 | font-weight: bold; 269 | } 270 | 271 | /* ---------------------------------------- */ 272 | /* Table of contents, left margin */ 273 | 274 | .tocset { 275 | position: relative; 276 | float: left; 277 | width: 12.5em; 278 | margin-right: 2em; 279 | } 280 | .tocset td { 281 | vertical-align: text-top; 282 | } 283 | 284 | .tocview { 285 | text-align: left; 286 | background-color: #f0f0e0; 287 | } 288 | 289 | .tocsub { 290 | text-align: left; 291 | margin-top: 0.5em; 292 | background-color: #f0f0e0; 293 | } 294 | 295 | .tocviewlist, .tocsublist { 296 | margin-left: 0.2em; 297 | margin-right: 0.2em; 298 | padding-top: 0.2em; 299 | padding-bottom: 0.2em; 300 | } 301 | .tocviewlist table { 302 | font-size: 82%; 303 | } 304 | 305 | .tocviewlisttopspace { 306 | margin-bottom: 1em; 307 | } 308 | 309 | .tocviewsublist, .tocviewsublistonly, .tocviewsublisttop, .tocviewsublistbottom { 310 | margin-left: 0.4em; 311 | border-left: 1px solid #bbf; 312 | padding-left: 0.8em; 313 | } 314 | .tocviewsublist { 315 | margin-bottom: 1em; 316 | } 317 | .tocviewsublist table, 318 | .tocviewsublistonly table, 319 | .tocviewsublisttop table, 320 | .tocviewsublistbottom table { 321 | font-size: 75%; 322 | } 323 | 324 | .tocviewtitle * { 325 | font-weight: bold; 326 | } 327 | 328 | .tocviewlink { 329 | text-decoration: none; 330 | color: blue; 331 | } 332 | 333 | .tocviewselflink { 334 | text-decoration: underline; 335 | color: blue; 336 | } 337 | 338 | .tocviewtoggle { 339 | text-decoration: none; 340 | color: blue; 341 | font-size: 75%; /* looks better, and avoids bounce when toggling sub-sections due to font alignments */ 342 | } 343 | 344 | .tocsublist td { 345 | padding-left: 1em; 346 | text-indent: -1em; 347 | } 348 | 349 | .tocsublinknumber { 350 | font-size: 82%; 351 | } 352 | 353 | .tocsublink { 354 | font-size: 82%; 355 | text-decoration: none; 356 | } 357 | 358 | .tocsubseclink { 359 | font-size: 82%; 360 | text-decoration: none; 361 | } 362 | 363 | .tocsubnonseclink { 364 | font-size: 82%; 365 | text-decoration: none; 366 | padding-left: 0.5em; 367 | } 368 | 369 | .tocsubtitle { 370 | font-size: 82%; 371 | font-style: italic; 372 | margin: 0.2em; 373 | } 374 | 375 | /* ---------------------------------------- */ 376 | /* Some inline styles */ 377 | 378 | .indexlink { 379 | text-decoration: none; 380 | } 381 | 382 | .nobreak { 383 | white-space: nowrap; 384 | } 385 | 386 | pre { margin-left: 2em; } 387 | blockquote { margin-left: 2em; } 388 | 389 | ol { list-style-type: decimal; } 390 | ol ol { list-style-type: lower-alpha; } 391 | ol ol ol { list-style-type: lower-roman; } 392 | ol ol ol ol { list-style-type: upper-alpha; } 393 | 394 | .SCodeFlow { 395 | display: block; 396 | margin-left: 1em; 397 | margin-bottom: 0em; 398 | margin-right: 1em; 399 | margin-top: 0em; 400 | white-space: nowrap; 401 | } 402 | 403 | .SVInsetFlow { 404 | display: block; 405 | margin-left: 0em; 406 | margin-bottom: 0em; 407 | margin-right: 0em; 408 | margin-top: 0em; 409 | } 410 | 411 | .SubFlow { 412 | display: block; 413 | margin: 0em; 414 | } 415 | 416 | .boxed { 417 | width: 100%; 418 | background-color: #E8E8FF; 419 | } 420 | 421 | .hspace { 422 | } 423 | 424 | .slant { 425 | font-style: oblique; 426 | } 427 | 428 | .badlink { 429 | text-decoration: underline; 430 | color: red; 431 | } 432 | 433 | .plainlink { 434 | text-decoration: none; 435 | color: blue; 436 | } 437 | 438 | .techoutside { text-decoration: underline; color: #b0b0b0; } 439 | .techoutside:hover { text-decoration: underline; color: blue; } 440 | 441 | /* .techinside:hover doesn't work with FF, .techinside:hover> 442 | .techinside doesn't work with IE, so use both (and IE doesn't 443 | work with inherit in the second one, so use blue directly) */ 444 | .techinside { color: black; } 445 | .techinside:hover { color: blue; } 446 | .techoutside:hover>.techinside { color: inherit; } 447 | 448 | .SCentered { 449 | text-align: center; 450 | } 451 | 452 | .imageleft { 453 | float: left; 454 | margin-right: 0.3em; 455 | } 456 | 457 | .Smaller { 458 | font-size: 82%; 459 | } 460 | 461 | .Larger { 462 | font-size: 122%; 463 | } 464 | 465 | /* A hack, inserted to break some Scheme ids: */ 466 | .mywbr { 467 | display: inline-block; 468 | height: 0; 469 | width: 0; 470 | font-size: 1px; 471 | } 472 | 473 | .compact li p { 474 | margin: 0em; 475 | padding: 0em; 476 | } 477 | 478 | .noborder img { 479 | border: 0; 480 | } 481 | 482 | .SVerbatim { 483 | white-space: nowrap; 484 | } 485 | 486 | .SAuthorListBox { 487 | position: relative; 488 | float: right; 489 | left: 2em; 490 | top: -2.5em; 491 | height: 0em; 492 | width: 13em; 493 | margin: 0em -13em 0em 0em; 494 | } 495 | .SAuthorList { 496 | font-size: 82%; 497 | } 498 | .SAuthorList:before { 499 | content: "by "; 500 | } 501 | .author { 502 | display: inline; 503 | white-space: nowrap; 504 | } 505 | 506 | /* print styles : hide the navigation elements */ 507 | @media print { 508 | .tocset, 509 | .navsettop, 510 | .navsetbottom { display: none; } 511 | .maincolumn { 512 | width: auto; 513 | margin-right: 13em; 514 | margin-left: 0; 515 | } 516 | } 517 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /docs/manual-style.css: -------------------------------------------------------------------------------- 1 | 2 | /* See the beginning of "scribble.css". 3 | This file is used by the `scribble/manual` language, along with 4 | "manual-racket.css". */ 5 | 6 | @import url("manual-fonts.css"); 7 | 8 | * { 9 | margin: 0; 10 | padding: 0; 11 | } 12 | 13 | @media all {html {font-size: 15px;}} 14 | @media all and (max-width:940px){html {font-size: 14px;}} 15 | @media all and (max-width:850px){html {font-size: 13px;}} 16 | @media all and (max-width:830px){html {font-size: 12px;}} 17 | @media all and (max-width:740px){html {font-size: 11px;}} 18 | 19 | /* CSS seems backward: List all the classes for which we want a 20 | particular font, so that the font can be changed in one place. (It 21 | would be nicer to reference a font definition from all the places 22 | that we want it.) 23 | 24 | As you read the rest of the file, remember to double-check here to 25 | see if any font is set. */ 26 | 27 | /* Monospace: */ 28 | .maincolumn, .refpara, .refelem, .tocset, .stt, .hspace, .refparaleft, .refelemleft { 29 | font-family: 'Fira-Mono', monospace; 30 | white-space: inherit; 31 | font-size: 1rem; 32 | } 33 | 34 | /* embolden the "Racket Guide" and "Racket Reference" links on the TOC */ 35 | /* there isn't an obvious tag in the markup that designates the top TOC page, which is called "start.scrbl" */ 36 | /* nor a tag that designates these two links as special */ 37 | /* so we'll use this slightly tortured sibling selector that hooks onto the h2 tag */ 38 | h2[x-source-module='(lib "scribblings/main/start.scrbl")'] ~ table a[href="guide/index.html"], 39 | h2[x-source-module='(lib "scribblings/main/start.scrbl")'] ~ table a[href="reference/index.html"] { 40 | font-weight: bold; 41 | } 42 | 43 | 44 | h2 .stt { 45 | font-size: 2.3rem; 46 | /* prevent automatic bolding from h2 */ 47 | font-weight: 400; 48 | } 49 | 50 | .toptoclink .stt { 51 | font-size: inherit; 52 | } 53 | .toclink .stt { 54 | font-size: 90%; 55 | } 56 | 57 | .RpackageSpec .stt { 58 | font-weight: 300; 59 | font-family: 'Fira-Mono', monospace; 60 | font-size: 0.9rem; 61 | } 62 | 63 | h3 .stt, h4 .stt, h5 .stt { 64 | color: #333; 65 | font-size: 1.65rem; 66 | font-weight: 400; 67 | } 68 | 69 | 70 | /* Serif: */ 71 | .main, .refcontent, .tocview, .tocsub, .sroman, i { 72 | font-family: 'Charter-Racket', serif; 73 | font-size: 1.18rem; 74 | /* Don't use font-feature-settings with Charter, 75 | it fouls up loading for reasons mysterious */ 76 | /* font-feature-settings: 'tnum' 1, 'liga' 0; */ 77 | } 78 | 79 | 80 | /* Sans-serif: */ 81 | .version, .versionNoNav, .ssansserif { 82 | font-family: 'Fira', sans-serif; 83 | } 84 | 85 | /* used mostly for DrRacket menu commands */ 86 | .ssansserif { 87 | font-family: 'Fira', sans-serif; 88 | font-size: 0.9em; 89 | } 90 | 91 | .tocset .ssansserif { 92 | font-size: 100%; 93 | } 94 | 95 | /* ---------------------------------------- */ 96 | 97 | p, .SIntrapara { 98 | display: block; 99 | margin: 0 0 1em 0; 100 | line-height: 1.4; 101 | } 102 | 103 | .compact { 104 | padding: 0 0 1em 0; 105 | } 106 | 107 | li { 108 | list-style-position: outside; 109 | margin-left: 1.2em; 110 | } 111 | 112 | h1, h2, h3, h4, h5, h6, h7, h8 { 113 | font-family: 'Fira', sans-serif; 114 | font-weight: 300; 115 | font-size: 1.6rem; 116 | color: #333; 117 | margin-top: inherit; 118 | margin-bottom: 1rem; 119 | line-height: 1.25; 120 | 121 | } 122 | 123 | h3, h4, h5, h6, h7, h8 { 124 | border-top: 1px solid black; 125 | } 126 | 127 | 128 | 129 | h2 { /* per-page main title */ 130 | font-family: 'Cooper-Hewitt'; 131 | margin-top: 4rem; 132 | font-size: 2.3rem; 133 | font-weight: bold; 134 | line-height: 1.2; 135 | width: 90%; 136 | /* a little nudge to make text visually lower than 4rem rule in left margin */ 137 | position: relative; 138 | top: 6px; 139 | } 140 | 141 | h3, h4, h5, h6, h7, h8 { 142 | margin-top: 2em; 143 | padding-top: 0.1em; 144 | margin-bottom: 0.75em; 145 | } 146 | 147 | /* ---------------------------------------- */ 148 | /* Main */ 149 | 150 | body { 151 | color: black; 152 | background-color: white; 153 | } 154 | 155 | .maincolumn { 156 | width: auto; 157 | margin-top: 4rem; 158 | margin-left: 17rem; 159 | margin-right: 2rem; 160 | margin-bottom: 10rem; /* to avoid fixed bottom nav bar */ 161 | max-width: 700px; 162 | min-width: 370px; /* below this size, code samples don't fit */ 163 | } 164 | 165 | a { 166 | text-decoration: inherit; 167 | } 168 | 169 | a, .toclink, .toptoclink, .tocviewlink, .tocviewselflink, .tocviewtoggle, .plainlink, 170 | .techinside, .techoutside:hover, .techinside:hover { 171 | color: #07A; 172 | } 173 | 174 | a:hover { 175 | text-decoration: underline; 176 | } 177 | 178 | 179 | /* ---------------------------------------- */ 180 | /* Navigation */ 181 | 182 | .navsettop, .navsetbottom { 183 | left: 0; 184 | width: 15rem; 185 | height: 6rem; 186 | font-family: 'Fira', sans-serif; 187 | font-size: 0.9rem; 188 | border-bottom: 0px solid hsl(216, 15%, 70%); 189 | background-color: inherit; 190 | padding: 0; 191 | } 192 | 193 | .navsettop { 194 | position: fixed; 195 | z-index: 2; 196 | background: #a7b0be; 197 | top: 0; 198 | left: 0; 199 | margin-bottom: 0; 200 | border-bottom: 0; 201 | } 202 | 203 | .navsettop a, .navsetbottom a { 204 | color: black; 205 | } 206 | 207 | .navsettop a:hover, .navsetbottom a:hover { 208 | background: hsl(216, 78%, 95%); 209 | text-decoration: none; 210 | } 211 | 212 | .navleft, .navright { 213 | position: static; 214 | float: none; 215 | margin: 0; 216 | white-space: normal; 217 | } 218 | 219 | 220 | .navleft a { 221 | display: inline-block; 222 | } 223 | 224 | .navright a { 225 | display: inline-block; 226 | text-align: center; 227 | } 228 | 229 | .navleft a, .navright a, .navright span { 230 | display: inline-block; 231 | padding: 0.5rem; 232 | min-width: 1rem; 233 | } 234 | 235 | 236 | .navright { 237 | white-space: nowrap; 238 | } 239 | 240 | 241 | .navsetbottom { 242 | display: none; 243 | } 244 | 245 | .nonavigation { 246 | color: #889; 247 | } 248 | 249 | .searchform { 250 | display: block; 251 | margin: 0; 252 | padding: 0; 253 | border-bottom: 1px solid #eee; 254 | height: 4rem; 255 | } 256 | 257 | .nosearchform { 258 | margin: 0; 259 | padding: 0; 260 | height: 4rem; 261 | } 262 | 263 | .searchbox { 264 | font-size: 0.9rem; 265 | width: 12rem; 266 | margin: 1rem; 267 | padding: 0.25rem 0.4rem ; 268 | vertical-align: middle; 269 | background-color: white; 270 | font-family: 'Fira-Mono', monospace; 271 | } 272 | 273 | 274 | #search_box { 275 | font-family: 'Fira-Mono', monospace; 276 | font-size: 1rem; 277 | padding: 0.25rem 0.3rem ; 278 | } 279 | 280 | /* Default to local view. Global will specialize */ 281 | .plt_global_only { display: none; } 282 | .plt_local_only { display: block; } 283 | 284 | /* ---------------------------------------- */ 285 | /* Version */ 286 | 287 | .versionbox { 288 | position: absolute; 289 | float: none; 290 | top: 0.25rem; 291 | left: 17rem; 292 | z-index: 11000; 293 | height: 2em; 294 | font-size: 70%; 295 | font-weight: lighter; 296 | width: inherit; 297 | margin: 0; 298 | } 299 | .version, .versionNoNav { 300 | font-size: inherit; 301 | } 302 | .version:before, .versionNoNav:before { 303 | content: "v."; 304 | } 305 | 306 | 307 | /* ---------------------------------------- */ 308 | /* Margin notes */ 309 | 310 | /* cancel scribble.css styles: */ 311 | .refpara, .refelem { 312 | position: static; 313 | float: none; 314 | height: auto; 315 | width: auto; 316 | margin: 0; 317 | } 318 | 319 | .refcolumn { 320 | position: static; 321 | display: block; 322 | width: auto; 323 | font-size: inherit; 324 | margin: 2rem; 325 | margin-left: 2rem; 326 | padding: 0.5em; 327 | padding-left: 0.75em; 328 | padding-right: 1em; 329 | background: hsl(60, 29%, 94%); 330 | border: 1px solid #ccb; 331 | border-left: 0.4rem solid #ccb; 332 | } 333 | 334 | 335 | /* slightly different handling for margin-note* on narrow screens */ 336 | @media all and (max-width:1340px) { 337 | span.refcolumn { 338 | float: right; 339 | width: 50%; 340 | margin-left: 1rem; 341 | margin-bottom: 0.8rem; 342 | margin-top: 1.2rem; 343 | } 344 | 345 | } 346 | 347 | .refcontent, .refcontent p { 348 | line-height: 1.5; 349 | margin: 0; 350 | } 351 | 352 | .refcontent p + p { 353 | margin-top: 1em; 354 | } 355 | 356 | .refcontent a { 357 | font-weight: 400; 358 | } 359 | 360 | .refpara, .refparaleft { 361 | top: -1em; 362 | } 363 | 364 | 365 | @media all and (max-width:600px) { 366 | .refcolumn { 367 | margin-left: 0; 368 | margin-right: 0; 369 | } 370 | } 371 | 372 | 373 | @media all and (min-width:1340px) { 374 | .refcolumn { 375 | margin: 0 -22.5rem 1rem 0; 376 | float: right; 377 | clear: right; 378 | width: 18rem; 379 | } 380 | } 381 | 382 | .refcontent { 383 | font-family: 'Fira', sans-serif; 384 | font-size: 1rem; 385 | line-height: 1.6; 386 | margin: 0 0 0 0; 387 | } 388 | 389 | 390 | .refparaleft, .refelemleft { 391 | position: relative; 392 | float: left; 393 | right: 2em; 394 | height: 0em; 395 | width: 13em; 396 | margin: 0em 0em 0em 0em; 397 | display: contents; 398 | } 399 | 400 | .refcolumnleft { 401 | background-color: hsl(60, 29%, 94%); 402 | display: block; 403 | position: relative; 404 | width: 13em; 405 | font-size: 85%; 406 | border: 0.5em solid hsl(60, 29%, 94%); 407 | margin: 0 0 0 0; 408 | } 409 | 410 | 411 | /* ---------------------------------------- */ 412 | /* Table of contents, left margin */ 413 | 414 | .tocset { 415 | position: fixed; 416 | z-index: 2; 417 | overflow-y: scroll; 418 | float: none; 419 | left: 0; 420 | top: 0rem; 421 | bottom: 0; 422 | width: 14rem; 423 | padding: 0rem 0.5rem 0.5rem 0.5rem; 424 | background-color: hsl(216, 15%, 70%); 425 | border-top: 6rem solid hsl(216, 15%, 70%); 426 | } 427 | 428 | .tocset td { 429 | vertical-align: text-top; 430 | padding-bottom: 0.4rem; 431 | padding-left: 0.2rem; 432 | line-height: 1.1; 433 | font-family: 'Fira', sans-serif; 434 | } 435 | 436 | .tocset td a { 437 | color: black; 438 | font-weight: 400; 439 | } 440 | 441 | 442 | .tocview { 443 | text-align: left; 444 | background-color: inherit; 445 | margin-top: 1em; 446 | } 447 | 448 | 449 | .tocview td, .tocsub td { 450 | line-height: 1.3; 451 | } 452 | 453 | 454 | .tocview table, .tocsub table { 455 | width: 90%; 456 | } 457 | 458 | .tocset td a.tocviewselflink { 459 | font-weight: lighter; 460 | font-size: 110%; /* monospaced styles below don't need to enlarge */ 461 | color: white; 462 | } 463 | 464 | .tocviewselflink { 465 | text-decoration: none; 466 | } 467 | 468 | .tocsub { 469 | text-align: left; 470 | margin-top: 0.5em; 471 | background-color: inherit; 472 | } 473 | 474 | .tocviewlist, .tocsublist { 475 | margin-left: 0.2em; 476 | margin-right: 0.2em; 477 | padding-top: 0.2em; 478 | padding-bottom: 0.2em; 479 | } 480 | .tocviewlist table { 481 | font-size: 82%; 482 | } 483 | 484 | .tocviewlisttopspace { 485 | margin-bottom: 1em; 486 | } 487 | 488 | .tocviewsublist, .tocviewsublistonly, .tocviewsublisttop, .tocviewsublistbottom { 489 | margin-left: 0.4em; 490 | border-left: 1px solid #99a; 491 | padding-left: 0.8em; 492 | } 493 | .tocviewsublist { 494 | margin-bottom: 1em; 495 | } 496 | .tocviewsublist table, 497 | .tocviewsublistonly table, 498 | .tocviewsublisttop table, 499 | .tocviewsublistbottom table, 500 | table.tocsublist { 501 | font-size: 1rem; 502 | } 503 | 504 | .tocviewsublist td, 505 | .tocviewsublistbottom td, 506 | .tocviewsublisttop td, 507 | .tocsub td, 508 | .tocviewsublistonly td { 509 | font-size: 90%; 510 | } 511 | 512 | /* shrink the monospaced text (`stt`) within nav */ 513 | .tocviewsublist td .stt, 514 | .tocviewsublistbottom td .stt, 515 | .tocviewsublisttop td .stt, 516 | .tocsub td .stt, 517 | .tocviewsublistonly td .stt { 518 | font-size: 95%; 519 | } 520 | 521 | 522 | .tocviewtoggle { 523 | font-size: 75%; /* looks better, and avoids bounce when toggling sub-sections due to font alignments */ 524 | } 525 | 526 | .tocsublist td { 527 | padding-left: 0.5rem; 528 | padding-top: 0.25rem; 529 | text-indent: 0; 530 | } 531 | 532 | .tocsublinknumber { 533 | font-size: 100%; 534 | } 535 | 536 | .tocsublink { 537 | font-size: 82%; 538 | text-decoration: none; 539 | } 540 | 541 | .tocsubseclink { 542 | font-size: 100%; 543 | text-decoration: none; 544 | } 545 | 546 | .tocsubnonseclink { 547 | font-size: 82%; 548 | text-decoration: none; 549 | margin-left: 1rem; 550 | padding-left: 0; 551 | display: inline-block; 552 | } 553 | 554 | /* the label "on this page" */ 555 | .tocsubtitle { 556 | display: block; 557 | font-size: 62%; 558 | font-family: 'Fira', sans-serif; 559 | font-weight: bolder; 560 | font-style: normal; 561 | letter-spacing: 2px; 562 | text-transform: uppercase; 563 | margin: 0.5em; 564 | } 565 | 566 | .toptoclink { 567 | font-weight: bold; 568 | font-size: 110%; 569 | margin-bottom: 0.5rem; 570 | margin-top: 1.5rem; 571 | display: inline-block; 572 | } 573 | 574 | .toclink { 575 | font-size: inherit; 576 | } 577 | 578 | /* ---------------------------------------- */ 579 | /* Some inline styles */ 580 | 581 | .indexlink { 582 | text-decoration: none; 583 | } 584 | 585 | pre { 586 | margin-left: 2em; 587 | } 588 | 589 | blockquote { 590 | margin-left: 2em; 591 | margin-right: 2em; 592 | margin-bottom: 1em; 593 | } 594 | 595 | .SCodeFlow { 596 | border-left: 1px dotted black; 597 | padding-left: 1em; 598 | padding-right: 1em; 599 | margin-top: 1em; 600 | margin-bottom: 1em; 601 | margin-left: 0em; 602 | margin-right: 2em; 603 | white-space: nowrap; 604 | line-height: 1.5; 605 | } 606 | 607 | .SCodeFlow img { 608 | margin-top: 0.5em; 609 | margin-bottom: 0.5em; 610 | } 611 | 612 | /* put a little air between lines of code sample */ 613 | /* Fira Mono appears taller than Source Code Pro */ 614 | .SCodeFlow td { 615 | padding-bottom: 1px; 616 | } 617 | 618 | .boxed { 619 | margin: 0; 620 | margin-top: 2em; 621 | padding: 0.25em; 622 | padding-top: 0.3em; 623 | padding-bottom: 0.4em; 624 | background: #f3f3f3; 625 | box-sizing:border-box; 626 | border-top: 1px solid #99b; 627 | background: hsl(216, 78%, 95%); 628 | background: -moz-linear-gradient(to bottom left, hsl(0, 0%, 99%) 0%, hsl(216, 62%, 95%) 100%); 629 | background: -webkit-linear-gradient(to bottom left, hsl(0, 0%, 99%) 0%, hsl(216, 62%, 95%) 100%); 630 | background: -o-linear-gradient(to bottom left, hsl(0, 0%, 99%) 0%, hsl(216, 62%, 95%) 100%); 631 | background: -ms-linear-gradient(to bottom left, hsl(0, 0%, 99%) 0%, hsl(216, 62%, 95%) 100%); 632 | background: linear-gradient(to bottom left, hsl(0, 0%, 99%) 0%, hsl(216, 62%, 95%) 100%); 633 | } 634 | 635 | blockquote > blockquote.SVInsetFlow { 636 | /* resolves issue in e.g. /reference/notation.html */ 637 | margin-top: 0em; 638 | } 639 | 640 | .leftindent .SVInsetFlow { /* see e.g. section 4.5 of Racket Guide */ 641 | margin-top: 1em; 642 | margin-bottom: 1em; 643 | } 644 | 645 | .SVInsetFlow a, .SCodeFlow a { 646 | color: #07A; 647 | } 648 | 649 | .SubFlow { 650 | display: block; 651 | margin: 0em; 652 | } 653 | 654 | .boxed { 655 | width: 100%; 656 | background-color: inherit; 657 | } 658 | 659 | .techoutside { text-decoration: none; } 660 | 661 | .SAuthorListBox { 662 | position: static; 663 | float: none; 664 | font-family: 'Fira', sans-serif; 665 | font-weight: 300; 666 | font-size: 110%; 667 | margin-top: 1rem; 668 | margin-bottom: 2rem; 669 | width: 30rem; 670 | height: auto; 671 | } 672 | 673 | .author > a { /* email links within author block */ 674 | font-weight: inherit; 675 | color: inherit; 676 | } 677 | 678 | .SAuthorList { 679 | font-size: 82%; 680 | } 681 | .SAuthorList:before { 682 | content: "by "; 683 | } 684 | .author { 685 | display: inline; 686 | white-space: nowrap; 687 | } 688 | 689 | /* phone + tablet styles */ 690 | 691 | @media all and (max-width:720px){ 692 | 693 | 694 | @media all and (max-width:720px){ 695 | 696 | @media all {html {font-size: 15px;}} 697 | @media all and (max-width:700px){html {font-size: 14px;}} 698 | @media all and (max-width:630px){html {font-size: 13px;}} 699 | @media all and (max-width:610px){html {font-size: 12px;}} 700 | @media all and (max-width:550px){html {font-size: 11px;}} 701 | @media all and (max-width:520px){html {font-size: 10px;}} 702 | 703 | .navsettop, .navsetbottom { 704 | display: flex; 705 | position: absolute; 706 | width: 100%; 707 | height: 4rem; 708 | border: 0; 709 | background-color: hsl(216, 15%, 70%); 710 | align-items: center; 711 | } 712 | 713 | .tocsetoverlay .navsettop { 714 | position: fixed; 715 | } 716 | 717 | .navleft { 718 | flex: 1; 719 | } 720 | 721 | .searchform { 722 | display: inline; 723 | border: 0; 724 | } 725 | 726 | .searchbox { 727 | margin-top: 0; 728 | margin-bottom: 0; 729 | } 730 | 731 | .navleft .tocsettoggle { 732 | display: initial; 733 | } 734 | 735 | .navright { 736 | margin-right: 1.3rem; 737 | border: 0px solid red; 738 | } 739 | 740 | .navsetbottom { 741 | display: block; 742 | margin-top: 8rem; 743 | } 744 | 745 | .tocset { 746 | display: none; 747 | border-top-width: 4rem; 748 | } 749 | 750 | .tocsetoverlay .tocset { 751 | display: block; 752 | } 753 | 754 | .versionbox { 755 | top: 4.5rem; 756 | left: 1rem; /* same distance as main-column */ 757 | z-index: 1; 758 | height: 2em; 759 | font-size: 70%; 760 | font-weight: lighter; 761 | } 762 | 763 | 764 | .maincolumn { 765 | margin-left: 1em; 766 | margin-top: 7rem; 767 | margin-bottom: 0rem; 768 | } 769 | 770 | } 771 | 772 | } 773 | 774 | /* print styles : hide the navigation elements */ 775 | @media print { 776 | .tocset, 777 | .navsettop, 778 | .navsetbottom { display: none; } 779 | .maincolumn { 780 | width: auto; 781 | margin-right: 13em; 782 | margin-left: 0; 783 | } 784 | } 785 | -------------------------------------------------------------------------------- /model/rendering.rkt: -------------------------------------------------------------------------------- 1 | #lang racket/base 2 | 3 | (require redex/reduction-semantics 4 | racket/match 5 | redex/pict 6 | unstable/gui/redex 7 | pict 8 | (for-syntax racket/base) 9 | "lang.rkt" 10 | "type-rep.rkt" 11 | "inhabitation.rkt" 12 | "metafunctions.rkt" 13 | "testing.rkt") 14 | 15 | (provide (all-defined-out)) 16 | 17 | 18 | (define mf-font "Latin Modern Mono") 19 | (define math-font "Latin Modern Math") 20 | (define lit-font "Latin Modern Mono Caps") 21 | (non-terminal-style "Latin Modern Math") 22 | (non-terminal-subscript-style (cons 'subscript "Latin Modern Math")) 23 | (non-terminal-superscript-style (cons 'superscript "Latin Modern Math")) 24 | (default-style "Latin Modern Math") 25 | (literal-style "Latin Modern Math") 26 | (paren-style "Latin Modern Math") 27 | (grammar-style "Latin Modern Math") 28 | 29 | 30 | (add-atomic-rewriters! 31 | 'idx (λ () (text "i" math-font (default-font-size))) 32 | 'Bot (λ () (text "𝟘" math-font (default-font-size))) 33 | 'Top (λ () (text "𝟙" math-font (default-font-size))) 34 | 'Int (λ () (text "Int" lit-font (default-font-size))) 35 | 'True (λ () (text "True" lit-font (default-font-size))) 36 | 'False (λ () (text "False" lit-font (default-font-size))) 37 | 'Str (λ () (text "Str" lit-font (default-font-size))) 38 | 'Any (λ () (text "Any" lit-font (default-font-size))) 39 | 'Empty (λ () (text "Empty" lit-font (default-font-size))) 40 | 'Any-t (λ () (text "⊤" lit-font (default-font-size))) 41 | 'Empty-t (λ () (text "⊥" lit-font (default-font-size))) 42 | 'Any-Base-t (λ () (hbl-append (text "⊤" lit-font (default-font-size)) 43 | (text "ι" '(superscript . symbol) (default-font-size)))) 44 | 'Any-Prod-t (λ () (hbl-append (text "⊤" lit-font (default-font-size)) 45 | (text "×" '(superscript . symbol) (default-font-size)))) 46 | 'Any-Fun-t (λ () (hbl-append (text "⊤" lit-font (default-font-size)) 47 | (text "→" '(superscript . symbol) (default-font-size)))) 48 | '+ (λ () (text "+" mf-font (default-font-size))) 49 | '- (λ () (text "-" mf-font (default-font-size))) 50 | 'Prodb (λ () (hbl-append -3 (text "b" math-font (default-font-size)) 51 | (text "×" '(superscript . symbol) (default-font-size)))) 52 | 'Arrowb (λ () (hbl-append -3 (text "b" math-font (default-font-size)) 53 | (text "→" '(superscript . symbol) (default-font-size)))) 54 | 'Base-or (λ () (text "∪" math-font (default-font-size))) 55 | 'Base-and (λ () (text "∩" math-font (default-font-size))) 56 | 'Base-diff (λ () (text "\\" math-font (default-font-size))) 57 | 'b-or (λ () (text "∪" math-font (default-font-size))) 58 | 'b-and (λ () (text "∩" math-font (default-font-size))) 59 | 'b-diff (λ () (text "\\" math-font (default-font-size))) 60 | 'b-not (λ () (text "¬" math-font (default-font-size))) 61 | 't-or (λ () (text "∪" math-font (default-font-size))) 62 | 't-and (λ () (text "∩" math-font (default-font-size))) 63 | 't-diff (λ () (text "\\" math-font (default-font-size))) 64 | 't-not (λ () (text "¬" math-font (default-font-size))) 65 | 'emptyP (λ () (hbl-append (text "empty" mf-font (default-font-size)) 66 | (text "×" (cons 'superscript mf-font) (default-font-size)))) 67 | 'emptyA (λ () (hbl-append (text "empty" mf-font (default-font-size)) 68 | (text "→" (cons 'superscript mf-font) (default-font-size)))) 69 | 'empty (λ () (text "empty" mf-font (default-font-size))) 70 | 'and (λ () (text "and" math-font (default-font-size))) 71 | 'or (λ () (text "or" math-font (default-font-size))) 72 | 'true (λ () (text "true" mf-font (default-font-size))) 73 | 'false (λ () (text "false" mf-font (default-font-size))) 74 | 'emptyP-aux (λ () (hbl-append (text "θ" math-font (default-font-size)) 75 | (text "×" (cons 'superscript mf-font) (default-font-size)))) 76 | 'emptyA-aux (λ () (hbl-append (text "θ" math-font (default-font-size)) 77 | (text "→" (cons 'superscript mf-font) (default-font-size)))) 78 | 'empty (λ () (text "empty" mf-font (default-font-size))) 79 | 'subtype (λ () (text "<:" math-font (default-font-size))) 80 | '<: (λ () (text "<:" math-font (default-font-size))) 81 | 'node (λ () (text "⟨_,_,_,_⟩" math-font (default-font-size))) 82 | 'atom (λ () (text "a" mf-font (default-font-size))) 83 | 'left (λ () (text "l" mf-font (default-font-size))) 84 | 'mid (λ () (text "m" mf-font (default-font-size))) 85 | 'right (λ () (text "r" mf-font (default-font-size))) 86 | 'parse (λ () (text "parse" mf-font (default-font-size))) 87 | 'Any-Pair (λ () (hbl-append (text "Any" lit-font (default-font-size)) 88 | (text "×" (cons 'superscript math-font) (default-font-size)))) 89 | 'Any-Fun (λ () (hbl-append (text "Any" lit-font (default-font-size)) 90 | (text "→" (cons 'superscript math-font) (default-font-size)))) 91 | 'Any-Base (λ () (hbl-append (text "Any" lit-font (default-font-size)) 92 | (text "ι" (cons 'superscript math-font) (default-font-size)))) 93 | 'select (λ () (text "select" mf-font (default-font-size))) 94 | 'maybe-project (λ () (hbl-append (text "proj" mf-font (default-font-size)) 95 | (text "?" (cons 'superscript mf-font) (default-font-size)))) 96 | 'project (λ () (text "proj" mf-font (default-font-size))) 97 | 'project-aux (λ () (hbl-append (text "ϕ" math-font (default-font-size)) 98 | (text "×" (cons 'superscript math-font) (default-font-size)))) 99 | 'maybe-domain (λ () (hbl-append (text "dom" mf-font (default-font-size)) 100 | (text "?" (cons 'superscript mf-font) (default-font-size)))) 101 | 'domain (λ () (text "dom" mf-font (default-font-size))) 102 | 'maybe-funapp (λ () (hbl-append (text "apply" mf-font (default-font-size)) 103 | (text "?" (cons 'superscript mf-font) (default-font-size)))) 104 | 'funapp (λ () (text "apply" mf-font (default-font-size))) 105 | 106 | ;; peano arith example lang 107 | 'peano-plus (λ () (text "plus" mf-font (default-font-size))) 108 | 'peano-lt (λ () (text "_ < _" math-font (default-font-size))) 109 | 'peano-gt (λ () (text "_ > _" math-font (default-font-size))) 110 | 'O (λ () (text "O" math-font (default-font-size))) 111 | 'S (λ () (text "S" math-font (default-font-size))) 112 | ) 113 | (add-compound-rewriters! 114 | 'less-than (binary-rw (text " < " math-font (default-font-size))) 115 | 'greater-than (binary-rw (text " > " math-font (default-font-size))) 116 | 'equal-to (binary-rw (text " = " math-font (default-font-size))) 117 | 'Set-union (binary-rw (text " ∪ " math-font (default-font-size))) 118 | 'Set-intersect (binary-rw (text " ∩ " math-font (default-font-size))) 119 | 'Set-diff (binary-rw (text " \\ " math-font (default-font-size))) 120 | 'Base-or (binary-rw (text " ∪ " math-font (default-font-size))) 121 | 'Base-and (binary-rw (text " ∩ " math-font (default-font-size))) 122 | 'Base-diff (binary-rw (text " \\ " math-font (default-font-size))) 123 | 124 | 'b-diff (binary-rw (text " \\ " math-font (default-font-size)) #:parenthesize-arg '(b-and b-or)) 125 | 'b-and (binary-rw (text " ∩ " math-font (default-font-size)) #:parenthesize-arg '(b-or b-diff)) 126 | 'b-or (binary-rw (text " ∪ " math-font (default-font-size)) #:parenthesize-arg '(b-and b-diff)) 127 | 'b-not (prefix-rw (text "¬" math-font (default-font-size)) #:parenthesize-arg '(b-and b-or b-diff)) 128 | '× (binary-rw (text " × " math-font (default-font-size))) 129 | '→ (binary-rw (text " → " math-font (default-font-size))) 130 | 131 | 132 | 'Node (bracket-rw 'angle) 133 | 'node (bracket-rw 'angle) 134 | 'Type (bracket-rw 'angle) 135 | 'Base (bracket-rw 'angle) 136 | 'Set (bracket-rw 'curly) 137 | 'Fun (binary-rw " → " #:parenthesize-arg '(Fun Pair And Or)) 138 | 'Pair (binary-rw " × " #:parenthesize-arg '(Fun Pair And Or)) 139 | 'Not (prefix-rw "¬ " #:parenthesize-arg '(Fun Pair And Or)) 140 | 'Or (binary-rw (text " ∨ " math-font (default-font-size)) 141 | #:parenthesize-arg '(Fun Pair And)) 142 | 'And (binary-rw (text " ∧ " math-font (default-font-size)) 143 | #:parenthesize-arg '(Fun Pair Or)) 144 | '¬ (prefix-rw (text "¬" 'symbol (default-font-size)) 145 | #:parenthesize-arg '(× →)) 146 | 'atom (function-rw (text "a" mf-font (default-font-size))) 147 | 'left (function-rw (text "l" mf-font (default-font-size))) 148 | 'mid (function-rw (text "m" mf-font (default-font-size))) 149 | 'right (function-rw (text "r" mf-font (default-font-size))) 150 | 151 | 't-and (binary-rw (text " ∩ " math-font (default-font-size)) 152 | #:parenthesize-arg '(T-or T-diff)) 153 | 't-or (binary-rw (text " ∪ " math-font (default-font-size)) 154 | #:parenthesize-arg '(T-and T-diff)) 155 | 't-diff (binary-rw (text " \\ " math-font (default-font-size)) 156 | #:parenthesize-arg '(T-and T-or)) 157 | 't-not (prefix-rw (text "¬" math-font (default-font-size)) 158 | #:parenthesize-arg '(T-and T-or T-diff)) 159 | 160 | 'AND (splice-rw) 161 | 'OR (splice-rw) 162 | 'PAND (bracket-rw 'round #:comma? #f) 163 | 'POR (bracket-rw 'round #:comma? #f) 164 | 'empty (function-rw (text "empty" mf-font (default-font-size))) 165 | 'emptyP (function-rw (hbl-append (text "empty" mf-font (default-font-size)) 166 | (text "×" (cons 'superscript mf-font) (default-font-size)))) 167 | 'emptyA (function-rw (hbl-append (text "empty" mf-font (default-font-size)) 168 | (text "→" (cons 'superscript mf-font) (default-font-size)))) 169 | 'emptyP-aux (function-rw (hbl-append (text "θ" math-font (default-font-size)) 170 | (text "×" (cons 'superscript mf-font) (default-font-size)))) 171 | 'emptyA-aux (function-rw (hbl-append (text "θ" math-font (default-font-size)) 172 | (text "→" (cons 'superscript mf-font) (default-font-size)))) 173 | 'subtype (binary-rw (text " <: " math-font (default-font-size))) 174 | '<: (binary-rw (text " <: " math-font (default-font-size))) 175 | 176 | 'set-cons (set-cons-rw) 177 | 'parse (function-rw (text "parse" mf-font (default-font-size))) 178 | 'select (function-rw (text "select" mf-font (default-font-size))) 179 | 'maybe-project (function-rw (hbl-append (text "proj" mf-font (default-font-size)) 180 | (text "?" (cons 'superscript mf-font) (default-font-size)))) 181 | 'project (function-rw (text "proj" mf-font (default-font-size))) 182 | 'project-aux (function-rw (hbl-append (text "ϕ" math-font (default-font-size)) 183 | (text "×" (cons 'superscript math-font) (default-font-size)))) 184 | 'maybe-domain (function-rw (hbl-append (text "dom" mf-font (default-font-size)) 185 | (text "?" (cons 'superscript mf-font) (default-font-size)))) 186 | 'domain (function-rw (text "dom" mf-font (default-font-size))) 187 | 'maybe-funapp (function-rw (hbl-append (text "apply" mf-font (default-font-size)) 188 | (text "?" (cons 'superscript mf-font) (default-font-size)))) 189 | 'funapp (function-rw (text "apply" mf-font (default-font-size))) 190 | ;; peano arith example lang 191 | 'peano-plus (function-rw (text "plus" mf-font (default-font-size))) 192 | 'peano-lt (binary-rw (text " < " math-font (default-font-size))) 193 | 'peano-gt (binary-rw (text " > " math-font (default-font-size))) 194 | ) 195 | 196 | ;; we only use unquote for binary ops -- remove pink from those 197 | (define (remove-some-pink x) 198 | (match x 199 | [(lw (list (app remove-some-pink xs) ...) l l-span col col-span unq? mf?) 200 | (lw xs l l-span col col-span unq? mf?)] 201 | [(lw (and literal (or 'or 'and "or" "and" "(" ")" "")) 202 | l l-span col col-span #t mf?) 203 | (lw literal l l-span col col-span #f mf?)] 204 | [_ x])) 205 | 206 | (add-unquote-rewriters! 207 | (match-lambda 208 | [(lw (list (lw "(" _ _ _ _ #t _) 209 | (lw (or 'AND 'OR 'PAND 'POR "OR" "AND" "PAND" "POR") _ _ _ _ #t _) 210 | _ ...) 211 | _ _ _ _ #t _) 212 | #t] 213 | [_ #f]) 214 | remove-some-pink) 215 | 216 | (metafunction-pict-style 'left-right/vertical-side-conditions) 217 | 218 | (define default-scale 1.5) 219 | 220 | (define-syntax-rule (define-metafunction-renderers [fun mf-name] ...) 221 | (begin 222 | (provide fun ...) 223 | (define (fun [scalar default-scale]) 224 | (scale (with-rewriters 225 | (λ () (render-metafunction mf-name #:contract? #t))) 226 | scalar)) 227 | ...)) 228 | 229 | 230 | 231 | (define (render-nts nts [scalar default-scale]) 232 | (apply 233 | vl-append 234 | 10 235 | (for*/list ([entry (in-list nts)] 236 | [nt-name (in-value (car entry))] 237 | [nt-syms (in-value (cdr entry))]) 238 | (vl-append 239 | (scale (text nt-name math-font) scalar) 240 | (scale (with-rewriters 241 | (λ () (render-language sst #:nts nt-syms))) 242 | scalar))))) 243 | 244 | 245 | (define-syntax-rule (render-semantic-types-term t) 246 | (scale (with-rewriters (λ () (render-term sst t))) 247 | default-scale)) 248 | 249 | (define (mf name [size (default-font-size)]) 250 | (scale (text name mf-font size) default-scale)) 251 | 252 | 253 | (define-language peano 254 | [p q ::= O (S p)] 255 | [bool ::= #true #false]) 256 | 257 | 258 | (define-metafunction peano 259 | peano-plus : p p -> p 260 | [(peano-plus O p) p] 261 | [(peano-plus (S p_1) p_2) 262 | (S q) 263 | (where q (peano-plus p_1 p_2))]) 264 | 265 | (define-metafunction peano 266 | peano-lt : p p -> bool 267 | [(peano-lt (S p) (S q)) (peano-lt p q)] 268 | [(peano-lt _ O) #false] 269 | [(peano-lt _ _) #true]) 270 | 271 | (define-metafunction peano 272 | peano-gt : p p -> bool 273 | [(peano-gt p q) #true 274 | (side-condition (term (peano-lt q p)))] 275 | [(peano-gt _ _) #false]) 276 | 277 | (define-syntax (render= stx) 278 | (syntax-case stx () 279 | [(_ lang term1 term2s) 280 | (syntax/loc stx (render= lang term1 term2s #:no-newline))] 281 | [(_ lang term1 term2 kw) 282 | (unless (or (eq? '#:no-newline (syntax-e #'kw)) 283 | (eq? '#:newline (syntax-e #'kw))) 284 | (raise-syntax-error 285 | 'render= 286 | "expected 4th argument to be #:no-newline or #:newline" 287 | #'kw 288 | stx)) 289 | (let ([newline? (eq? '#:newline (syntax-e #'kw))]) 290 | (with-syntax ([err (syntax/loc stx (error 'render= "~a and ~a are not equal!" 291 | '(term term1) 292 | '(term term2)))]) 293 | (quasisyntax/loc stx 294 | (begin 295 | (unless (equal? (term term1 #:lang lang) 296 | (term term2 #:lang lang)) 297 | err) 298 | (scale (with-rewriters 299 | (λ () (#,(if newline? #'vl-append #'hbl-append) 300 | 5 301 | (hbl-append 5 302 | (render-term lang term1) 303 | (text "≡" "Latin Modern Math")) 304 | (hbl-append 305 | #,(if newline? #'(blank 15 5) #'(blank 0 0)) 306 | (render-term lang term2))))) 307 | default-scale)))))] 308 | )) 309 | 310 | (define-syntax (render≈ stx) 311 | (syntax-case stx () 312 | [(_ type1 type2) 313 | (with-syntax ([err (syntax/loc stx (error 'render≈ "~a and ~a are not equivalent!" 314 | '(term type1) 315 | '(term type2)))]) 316 | (syntax/loc stx 317 | (begin 318 | (unless (judgment-holds (≈ type1 type2)) 319 | err) 320 | (scale (with-rewriters 321 | (λ () (hbl-append 5 322 | (render-term sst type1) 323 | (text "≡" "Latin Modern Math") 324 | (render-term sst type2)))) 325 | default-scale))))])) 326 | 327 | (define-syntax (render-valid-judgment stx) 328 | (syntax-case stx () 329 | [(_ judgment-statement) 330 | (with-syntax ([err (syntax/loc stx (error 'render-valid-judgment 331 | "~a does not hold!" 332 | 'term1))]) 333 | (syntax/loc stx 334 | (begin 335 | (unless (judgment-holds judgment-statement) 336 | err) 337 | (scale (with-rewriters 338 | (λ () (render-term sst judgment-statement))) 339 | default-scale))))])) 340 | 341 | 342 | (define-metafunction-renderers 343 | ;; Peano arith example functions 344 | [render-mf-peano-plus peano-plus] 345 | [render-mf-peano-lt peano-lt] 346 | [render-mf-peano-gt peano-gt] 347 | ;; sst functions 348 | [render-mf-Base-or Base-or] 349 | [render-mf-Base-and Base-and] 350 | [render-mf-Base-diff Base-diff] 351 | [render-mf-b-or b-or] 352 | [render-mf-b-and b-and] 353 | [render-mf-b-diff b-diff] 354 | [render-mf-b-not b-not] 355 | [render-mf-t-or t-or] 356 | [render-mf-t-and t-and] 357 | [render-mf-t-diff t-diff] 358 | [render-mf-t-not t-not] 359 | [render-mf-empty-prod emptyP] 360 | [render-mf-empty-prod-aux emptyP-aux] 361 | [render-mf-empty-arrow emptyA] 362 | [render-mf-empty-arrow-aux emptyA-aux] 363 | [render-mf-empty empty] 364 | [render-mf-subtype subtype] 365 | [render-mf-node node] 366 | [render-mf-atom atom] 367 | [render-mf-left left] 368 | [render-mf-mid mid] 369 | [render-mf-right right] 370 | [render-mf-parse parse] 371 | [render-mf-select select] 372 | [render-mf-maybe-project maybe-project] 373 | [render-mf-project project] 374 | [render-mf-project-aux project-aux] 375 | [render-mf-maybe-domain maybe-domain] 376 | [render-mf-domain domain] 377 | [render-mf-maybe-funapp maybe-funapp] 378 | [render-mf-funapp funapp] 379 | ) 380 | 381 | 382 | (define (render-peano-grammar [scalar default-scale]) 383 | (scale (with-rewriters 384 | (λ () 385 | (vl-append 386 | 10 387 | (vl-append 388 | (text "Peano Natural Numbers" math-font) 389 | (render-language peano #:nts '(p q))) 390 | (vl-append 391 | (text "Booleans" math-font) 392 | (render-language peano #:nts '(bool)))))) 393 | scalar)) 394 | 395 | 396 | (define-syntax-rule (render-sst-term t) 397 | (scale (with-rewriters (λ () (render-term sst t))) default-scale)) 398 | (define-syntax-rule (render-peano-term t) 399 | (scale (with-rewriters (λ () (render-term peano t))) default-scale)) --------------------------------------------------------------------------------