Theory Export
section ‹Export›
theory Export imports Prover begin
definition ‹prove_sequent ≡ i.mkTree eff rules›
definition ‹prove ≡ λp. prove_sequent ([], [p])›
declare Stream.smember_code [code del]
lemma [code]: ‹Stream.smember x (y ## s) = (x = y ∨ Stream.smember x s)›
  unfolding Stream.smember_def by auto
code_printing
  constant the ⇀ (Haskell) "(\\x -> case x of { Just y -> y })"
  | constant Option.is_none ⇀ (Haskell) "(\\x -> case x of { Just y -> False; Nothing -> True })"
code_identifier
  code_module Product_Type ⇀ (Haskell) Arith
  | code_module Orderings ⇀ (Haskell) Arith
  | code_module Arith ⇀ (Haskell) Prover
  | code_module MaybeExt ⇀ (Haskell) Prover
  | code_module List ⇀ (Haskell) Prover
  | code_module Nat_Bijection ⇀ (Haskell) Prover
  | code_module Syntax ⇀ (Haskell) Prover
  | code_module Encoding ⇀ (Haskell) Prover
  | code_module HOL ⇀ (Haskell) Prover
  | code_module Set ⇀ (Haskell) Prover
  | code_module FSet ⇀ (Haskell) Prover
  | code_module Stream ⇀ (Haskell) Prover
  | code_module Fair_Stream ⇀ (Haskell) Prover
  | code_module Sum_Type ⇀ (Haskell) Prover
  | code_module Abstract_Completeness ⇀ (Haskell) Prover
  | code_module Export ⇀ (Haskell) Prover
export_code open prove in Haskell
text ‹
To export the Haskell code run:
\begin{verbatim}
  > isabelle build -e -D .
\end{verbatim}
To compile the exported code run:
\begin{verbatim}
  > ghc -O2 -i./program Main.hs
\end{verbatim}
To prove a formula, supply it using raw constructor names, e.g.:
\begin{verbatim}
  > ./Main "Imp (Pre 0 []) (Imp (Pre 1 []) (Pre 0 []))"
  |- (P) --> ((Q) --> (P))
  + ImpR on P and (Q) --> (P)
  P |- (Q) --> (P)
  + ImpR on Q and P
  Q, P |- P
 + Axiom on P
\end{verbatim}
The output is pretty-printed.
›
end