+
+--type-preservation : {Γ Γ′ Γ′′ : Context} {b b′ : Behaviour} {η : Label}
+-- → Γ ⊢B b ▹ Γ′
+-- → b ↝ b′ ∶ η
+-- → Γ ↦⟨ η ⟩ Γ′′
+-- → Γ′′ ⊢B b′ ▹ Γ′
+--type-preservation _ = {!-c -t 30!}
+
+type-preservation-if-then : {Γ Γ′ : Context} {b₁ b₂ : Behaviour} {t : State} {e : Expr}
+ → Γ ⊢B if e then b₁ else b₂ ▹ Γ′
+ → (if e then b₁ else b₂) ↝ b₁ ∶ (lb-read t)
+ → Γ ↦⟨ lb-read t ⟩ Γ
+ → Γ ⊢B b₁ ▹ Γ′
+type-preservation-if-then (t-if et t1 t2) _ _ = t1
+
+type-preservation-if-else : {Γ Γ′ : Context} {b₁ b₂ : Behaviour} {t : State} {e : Expr}
+ → Γ ⊢B if e then b₁ else b₂ ▹ Γ′
+ → (if e then b₁ else b₂) ↝ b₂ ∶ (lb-read t)
+ → Γ ↦⟨ lb-read t ⟩ Γ
+ → Γ ⊢B b₂ ▹ Γ′
+type-preservation-if-else (t-if et t1 t2) _ _ = t2
+
+type-preservation-iter : {Γ Γ′ : Context} {b : Behaviour} {t : State} {e : Expr}
+ → Γ ⊢B while[ e ] b ▹ Γ′
+ → (while[ e ] b) ↝ (b ∶ (while[ e ] b)) ∶ (lb-read t)
+ → Γ ↦⟨ lb-read t ⟩ Γ
+ → Γ ⊢B (b ∶ (while[ e ] b)) ▹ Γ′
+type-preservation-iter (t-while te t) _ _ = t-seq t (t-while te t)
+
+type-preservation-no-iter : {Γ Γ′ : Context} {b : Behaviour} {t : State} {e : Expr}
+ → Γ ⊢B while[ e ] b ▹ Γ′
+ → (while[ e ] b) ↝ nil ∶ (lb-read t)
+ → Γ ↦⟨ lb-read t ⟩ Γ
+ → Γ ⊢B (nil ∶ (while[ e ] b)) ▹ Γ
+type-preservation-no-iter (t-while te t) _ _ = t-seq t-nil (t-while te t)
+
+type-preservation-assign : {Γ Γ′ Γ′′ : Context} {x : Variable} {t : State} {e : Expr} {Tₑ : Type}
+ → Γ ⊢B x ≃ e ▹ Γ′
+ → (x ≃ e) ↝ nil ∶ (lb-assign x e)
+ → Γ ↦⟨ lb-assign x e ⟩ Γ′′
+ → Γ′′ ⊢B x ≃ e ▹ Γ′
+type-preservation-assign (t-assign-new x₁ x₂) _ _ = {!!}
+type-preservation-assign (t-assign-new-left x₁ x₂) _ _ = {!!}
+type-preservation-assign (t-assign-new-right x₁ x₂) _ _ = {!!}
+type-preservation-assign (t-assign-exists x₁ x₂ x₃) _ _ = {!!}