Scm.Auxiliary-Functions
{-# OPTIONS --rewriting --confluence-check --lossy-unification #-}
module Scm.Auxiliary-Functions where
open import Scm.Notation
open import Scm.Abstract-Syntax
open import Scm.Domain-Equations
postulate _==_ : Ide β Ide β Bool
_[_/_] : βͺ π βαΆ π βαΆ Ide βΛ’ π β«
Ο [ Ξ± / I ] = Ξ» Iβ² β Ξ· (I == Iβ²) βΆ Ξ± , Ο Iβ²
postulate unknown : βͺ π β«
postulate initial-env : βͺ π β«
_[_/_]β² : βͺ π βαΆ π βαΆ π βαΆ π β«
Ο [ Ο΅ / Ξ± ]β² = Ξ» Ξ±β² β (Ξ± ==α΄Έ Ξ±β²) βΆ Ο΅ , Ο Ξ±β²
assign : βͺ π βαΆ π βαΆ π βαΆ π β«
assign = Ξ» Ξ± Ο΅ ΞΈ Ο β ΞΈ (Ο [ Ο΅ / Ξ± ]β²)
hold : βͺ π βαΆ (π βαΆ π) βαΆ π β«
hold = Ξ» Ξ± ΞΊ Ο β ΞΊ (Ο Ξ±) Ο
postulate new : βͺ (π βαΆ π) βαΆ π β«
alloc : βͺ π βαΆ (π βαΆ π) βαΆ π β«
alloc = Ξ» Ο΅ ΞΊ β new (Ξ» Ξ± β assign Ξ± Ο΅ (ΞΊ Ξ±))
initial-store : βͺ π β«
initial-store = Ξ» Ξ± β Ξ· unallocated π-in-π
postulate finished : βͺ π β«
truish : βͺ π βαΆ π β«
truish =
Ξ» Ο΅ β (Ο΅ β-π) βΆ
(((Ο΅ |-π) ==α΅ Ξ· false) βΆ Ξ· false , Ξ· true) ,
Ξ· true
cons : βͺ π
β«
cons =
Ξ» Ο΅β ΞΊ β
(# Ο΅β ==β₯ 2) βΆ alloc (Ο΅β β 1) (Ξ» Ξ±β β
alloc (Ο΅β β 2) (Ξ» Ξ±β β
ΞΊ ((Ξ±β , Ξ±β) π-in-π))) ,
β₯
list : βͺ π
β«
list = fix {D = π
} Ξ» listβ² β
Ξ» Ο΅β ΞΊ β
(# Ο΅β ==β₯ 0) βΆ ΞΊ (Ξ· null π-in-π) ,
listβ² (Ο΅β β 1) (Ξ» Ο΅ β cons β¨ (Ο΅β β 1) , Ο΅ β© ΞΊ)
car : βͺ π
β«
car =
Ξ» Ο΅β ΞΊ β (# Ο΅β ==β₯ 1) βΆ hold ((Ο΅β β 1) |-π βΒ²1) ΞΊ , β₯
cdr : βͺ π
β«
cdr =
Ξ» Ο΅β ΞΊ β (# Ο΅β ==β₯ 1) βΆ hold ((Ο΅β β 1) |-π βΒ²2) ΞΊ , β₯
setcar : βͺ π
β«
setcar =
Ξ» Ο΅β ΞΊ β
(# Ο΅β ==β₯ 2) βΆ assign ((Ο΅β β 1) |-π βΒ²1)
(Ο΅β β 2)
(ΞΊ (Ξ· unspecified π-in-π)) ,
β₯
setcdr : βͺ π
β«
setcdr =
Ξ» Ο΅β ΞΊ β
(# Ο΅β ==β₯ 2) βΆ assign ((Ο΅β β 1) |-π βΒ²2)
(Ο΅β β 2)
(ΞΊ (Ξ· unspecified π-in-π)) ,
β₯