Scm.Auxiliary-Functions
module Scm.Auxiliary-Functions where open import Scm.Notation open import Scm.Abstract-Syntax open import Scm.Domain-Equations -- Environments Ο : π = Ide β π postulate _==_ : Ide β Ide β Bool _[_/_] : π β π β Ide β π Ο [ Ξ± / I ] = Ξ» Iβ² β Ξ· (I == Iβ²) βΆ Ξ± , Ο Iβ² postulate unknown : π -- Ο I = unknown represents the lack of a binding for I in Ο postulate initial-env : π -- initial-env shoud include various procedures and values -- Stores Ο : π = π β π _[_/_]β² : π β π β π β π Ο [ Ο΅ / Ξ± ]β² = Ξ» Ξ±β² β (Ξ± ==α΄Έ Ξ±β²) βΆ Ο΅ , Ο Ξ±β² assign : π β π β π β π assign = Ξ» Ξ± Ο΅ ΞΈ Ο β ΞΈ (Ο [ Ο΅ / Ξ± ]β²) hold : π β (π β π) β π hold = Ξ» Ξ± ΞΊ Ο β ΞΊ (Ο Ξ±) Ο postulate new : (π β π) β π -- new ΞΊ Ο = ΞΊ Ξ± Οβ² where Ο Ξ± = unallocated, Οβ² Ξ± β unallocated alloc : π β (π β π) β π alloc = Ξ» Ο΅ ΞΊ β new (Ξ» Ξ± β assign Ξ± Ο΅ (ΞΊ Ξ±)) -- should be β₯ when Ο΅ |-π == unallocated initial-store : π initial-store = Ξ» Ξ± β Ξ· unallocated π-in-π postulate finished : π -- normal termination with answer depending on final store truish : π β π truish = Ξ» Ο΅ β (Ο΅ β-π) βΆ (((Ο΅ |-π) ==α΅ Ξ· false) βΆ Ξ· false , Ξ· true) , Ξ· true
\clearpage
-- Lists cons : π cons = Ξ» Ο΅β ΞΊ β (# Ο΅β ==β₯ 2) βΆ alloc (Ο΅β β 1) (Ξ» Ξ±β β alloc (Ο΅β β 2) (Ξ» Ξ±β β ΞΊ ((Ξ±β , Ξ±β) π-in-π))) , β₯ list : π list = fix Ξ» 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-π)) , β₯