(** ** Non-Standard Model *)
Module NonStan. Section Nonstan.
Variable R : BSRS.
Instance IB : interp (option (string bool)) (fun _ => Some nil) :=
{|
i_f b x := match x with Some u => Some (b :: u) | None => None end ;
i_e := Some nil;
i_P x y := match x, y with Some u, Some v => derivable R u v | _, _ => True end ;
i_Q := False
|}.

(* Specifications: *)
Lemma IB_eval_Some rho t u v :
eval rho t = Some v -> eval rho (prep u t) = Some (u ++ v).
Lemma IB_eval_None rho t u :
eval rho t = None -> eval rho (prep u t) = None.
Lemma IB_enc rho u :
eval rho (enc u) = Some u.
Lemma IB_deriv rho u v :
rho ⊨ (Pr (enc u) (enc v)) <-> derivable R u v.
Lemma IB_deriv' rho t1 t2 u v :
eval rho t1 = Some u -> eval rho t2 = Some v ->
rho ⊨ (Pr t1 t2) <-> derivable R u v.
Lemma IB_F1 rho :
rho ⊫ F1 R.
Lemma IB_F2 rho :
rho ⊫ F2 R.
Lemma IB_F rho :
rho ⊨ F R.
Lemma IB_nonstandard rho :
rho ⊨ ¬ ∀ 0; ¬ Pr 0 0.