abstract Math = {

flags startcat = Section ;

cat 
  Section ; Label ; Context ; Typ ; Obj ; Prop ; Proof ; Var ;

fun
  SDefObj  : Label -> Context -> Obj  -> Typ -> Obj  -> Section ;
  SDefProp : Label -> Context -> Prop -> Prop -> Section ;
  SAxiom   : Label -> Context -> Prop -> Section ;
  STheorem : Label -> Context -> Prop -> Proof -> Section ;

  CEmpty : Context ;
  CObj   : Var -> Typ -> Context -> Context ;
  CProp  : Prop -> Context -> Context ;

  OVar : Var -> Obj ;

  LNone : Label ;
  LString : String -> Label ;
  VString : String -> Var ;

  V_x, V_y, V_z : Var ; --- for js

  PLink : Proof ;

-- lexicon

  Set  : Typ ;
  Nat  : Typ ;
  Zero : Obj ;
  Succ : Obj -> Obj ;
  One  : Obj ;
  Two  : Obj ;
  Even : Obj -> Prop ;
  Odd  : Obj -> Prop ;
  Prime : Obj -> Prop ;
  Divisible : Obj -> Obj -> Prop ;
  
}
