35 lines
1.6 KiB
Elm
35 lines
1.6 KiB
Elm
|
module Bergamot.Latex exposing (..)
|
||
|
|
||
|
import Bergamot.Syntax exposing (..)
|
||
|
import Bergamot.Rules exposing (..)
|
||
|
|
||
|
termToLatex : (a -> String) -> Term a -> String
|
||
|
termToLatex f t =
|
||
|
case t of
|
||
|
Call "type" [t1, t2] -> termToLatex f t1 ++ " : " ++ termToLatex f t2
|
||
|
Call "intlit" [t1] -> termToLatex f t1
|
||
|
Call "tpair" [t1, t2] -> termToLatex f t1 ++ "\\times" ++ termToLatex f t2
|
||
|
Call "plus" [t1, t2] -> termToLatex f t1 ++ " + " ++ termToLatex f t2
|
||
|
Call "pair" [t1, t2] -> "(" ++ termToLatex f t1 ++ ", " ++ termToLatex f t2 ++ ")"
|
||
|
Call s [] -> "\\text{" ++ s ++ "}"
|
||
|
Call s ts -> "\\text{" ++ s ++ "}(" ++ String.join "," (List.map (termToLatex f) ts) ++ ")"
|
||
|
Var x -> f x
|
||
|
IntLit i -> String.fromInt i
|
||
|
StringLit s -> "\"" ++ s ++ "\""
|
||
|
|
||
|
metavariableToLatex : Metavariable -> String
|
||
|
metavariableToLatex (MkMetavariable s) =
|
||
|
let
|
||
|
noQuestion = String.dropLeft 1 s
|
||
|
in
|
||
|
if String.startsWith "tau" noQuestion then "\\" ++ noQuestion else noQuestion
|
||
|
|
||
|
ruleToLatex : Rule -> String
|
||
|
ruleToLatex r = "\\cfrac{" ++ String.join "\\quad " (List.map (termToLatex metavariableToLatex) r.premises) ++ "}{" ++ termToLatex metavariableToLatex r.conclusion ++ "}\\ \\texttt{" ++ r.name ++ "}"
|
||
|
|
||
|
unificationVarToLatex : UnificationVar -> String
|
||
|
unificationVarToLatex (MkUnificationVar s) = s
|
||
|
|
||
|
proofTreeToLatex : ProofTree -> String
|
||
|
proofTreeToLatex (MkProofTree node) = "\\cfrac{" ++ String.join "\\quad " (List.map proofTreeToLatex node.premises) ++ "}{" ++ termToLatex unificationVarToLatex node.conclusion ++ "}\\ \\texttt{" ++ node.name ++ "}"
|