Library Additions.extract_scm


Require Import Constants.
Require Import generation.
Require Import monoid.
Require Import machine.
Require Import strategies.
Require Import spec.
Require Import log2_spec.
Require Import log2_implementation.
Require Import Compare_dec.

Require Import while.
Require Import imperative.
Require Import develop.
Require Import dicho_strat.
Require Import binary_strat.
Require Import trivial.
Require Import standard.
Require Import monofun.
Require Import matrix.
Require Import ZArith.
Require Import main.


Extraction Language Scheme.

Axiom int : Set.
Axiom i2n : int nat.
Axiom z2i : Z int.

Extract Inlined Constant int ⇒ "int".

Extract Constant i2n
 "(lambda (i) (if (zero? i) `(O) `(S ,(i2n (- i 1)))))".

Extract Constant z2i
 "(lambda (z) (define (p2i p) (match p ((XH) 1) ((XO p) (* 2 (p2i p))) ((XI p) (+ 1 (* 2 (p2i p)))))) (match z ((Z0) 0) ((Zpos p) (p2i p)) ((Zneg p) (- (p2i p))))) ".

Extraction Inline Wf_nat.gt_wf_rec Wf_nat.lt_wf_rec.

Extraction NoInline u o top pop.

Extraction NoInline M11 M12 M21 M22 Mat_mult.

Set Extraction AccessOpaque.

Extraction "fibo" fibonacci i2n z2i.