Compiler for LOOP language, version 2 #
Equations
- Compiler.v2.l2s ev P = SCORE.Com.CON ev;;Compiler.v2.l2s.l2s' ev P
Instances For
Equations
- Compiler.v2.l2s.l2s' ev LOOP.Com.SKIP = SCORE.Com.SKIP
- Compiler.v2.l2s.l2s' ev (LOOP.Com.ZER x) = SCORE.Com.CON x
- Compiler.v2.l2s.l2s' ev (LOOP.Com.ASN x y) = SCORE.Com.FOR y (SCORE.Com.INC ev);;SCORE.Com.CON x;;SCORE.Com.FOR ev (SCORE.Com.INC x);;SCORE.Com.FOR x (SCORE.Com.DEC ev)
- Compiler.v2.l2s.l2s' ev (LOOP.Com.INC x) = SCORE.Com.INC x
- Compiler.v2.l2s.l2s' ev (P_2;;Q) = Compiler.v2.l2s.l2s' ev P_2;;Compiler.v2.l2s.l2s' ev Q
- Compiler.v2.l2s.l2s' ev (LOOP.Com.LOOP x P_2) = SCORE.Com.FOR x (Compiler.v2.l2s.l2s' ev P_2)
Instances For
Equations
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
theorem
Compiler.eq_states_idents_no_fail
{σ : LOOP.Store}
{τ : SCORE.Store}
{P : LOOP.Com}
{Q : SCORE.Com}
{ids : Finset Ident}
:
LOOP.eval P (some σ) ∼[ids] SCORE.eval Q (some τ) →
(∃ (σ' : LOOP.Store), LOOP.eval P (some σ) = some σ') ∧ ∃ (τ' : SCORE.Store), SCORE.eval Q (some τ) = some τ'
theorem
Compiler.v2.ev_invariant
{τ : SCORE.Store}
{τ' : SCORE.Store}
{ev : Ident}
{P : LOOP.Com}
(h_ids : ev ∉ P.ids)
:
(τ ev).head? = some 0 → SCORE.eval (Compiler.v2.l2s.l2s' ev P) (some τ) = some τ' → (τ' ev).head? = some 0
theorem
Compiler.v2.ev_inariant_ASN
{τ : SCORE.Store}
{τ' : SCORE.Store}
{x : Ident}
{y : Ident}
{ev : Ident}
(h_ids : ev ∉ (LOOP.Com.ASN x y).ids)
:
(τ ev).head? = some 0 →
SCORE.eval (Compiler.v2.l2s.l2s' ev (LOOP.Com.ASN x y)) (some τ) = some τ' → (τ' ev).head? = some 0
theorem
Compiler.v2.soundness'_ext
{σ : LOOP.Store}
{τ : SCORE.Store}
{ev : Ident}
{ext : Finset Ident}
(P : LOOP.Com)
:
theorem
Compiler.v2.soundness_ext
{s : LOOP.State}
{t : SCORE.State}
{ev : Ident}
{ext : Finset Ident}
(P : LOOP.Com)
:
ev ∉ P.ids ∪ ext → s ∼[P.ids ∪ ext] t → LOOP.eval P s ∼[P.ids ∪ ext] SCORE.eval (Compiler.v2.l2s ev P) t
theorem
Compiler.v2.soundness
{s : LOOP.State}
{t : SCORE.State}
{ev : Ident}
(P : LOOP.Com)
:
ev ∉ P.ids → s ∼[P.ids] t → LOOP.eval P s ∼[P.ids] SCORE.eval (Compiler.v2.l2s ev P) t