interface Prooftext = open Grammar, LexTheory, Symbolic, Symbol, (C=ConstructX), Constructors, Combinators in { oper Chapter = Text ; Section = Text ; Sections = Text ; Decl = Text ; Decls = Text ; Prop = S ; Branching= S ; Proof = Text ; Proofs = Text ; Typ = CN ; Object = NP ; Label = NP ; Adverb = PConj ; Ref = NP ; Refs = [NP] ; Number = Num ; chapter : Label -> Sections -> Chapter = \title,jments -> appendText (mkText (mkPhr (mkUtt title)) TEmpty) jments ; definition : Decls -> Object -> Object -> Section = \decl,a,b -> appendText decl (mkText (mkPhr (mkUtt (mkS (pred b a)))) TEmpty) ; theorem : Prop -> Proof -> Section = \prop,prf -> appendText (mkText (mkPhr prop) TEmpty) prf ; assumption : Prop -> Decl = \p -> mkText (mkPhr (mkUtt (mkImp (mkVP assume_VS p)))) TEmpty ; declaration : Object -> Typ -> Decl = \a,ty -> mkText (mkPhr (mkUtt (mkImp (mkVP assume_VS (mkS (pred ty a)))))) TEmpty ; proof = overload { proof : Prop -> Proof = \p -> mkText (mkPhr p) TEmpty ; proof : Str -> Proof = \s -> {s = s ++ "." ; lock_Text = <>} ; proof : Adverb -> Prop -> Proof = \a,p -> mkText (mkPhr a (mkUtt p) NoVoc) TEmpty ; proof : Decl -> Proof = \d -> d ; proof : Proof -> Proof -> Proof = appendText ; proof : Branching -> Proofs -> Proof = \b,ps -> mkText (mkPhr b) ps } ; proofs : Proof -> Proof -> Proofs = appendText ; cases : Num -> Branching = \n -> mkS (pred have_V2 (mkNP we_Pron) (mkNP (mkDet n) case_N)) ; by : Ref -> Adverb = \h -> C.mkPConj (mkAdv by8means_Prep h).s ; therefore : Adverb = therefore_PConj ; afortiori : Adverb = C.mkPConj ["a fortiori"] ; hypothesis : Adverb = C.mkPConj (mkAdv by8means_Prep (mkNP (mkDet DefArt) hypothesis_N)).s ; ref : Label -> Ref = \h -> h ; refs : Refs -> Ref = \rs -> mkNP and_Conj rs ; mkLabel : Str -> Label ; }