Definition canonical_frame: FlatSemantics.frame :=
  FlatSemantics.Build_frame (sig cP)
    (fun a b => Included _ (proj1_sig a) (proj1_sig b))
    (fun a b c => Included _ (context_sepcon (proj1_sig a) (proj1_sig b)) (proj1_sig c)).Definition canonical_eval: SeparationEmpLanguage.Var -> FlatSemantics.sem canonical_frame :=
  fun p a => proj1_sig a (SeparationEmpLanguage.varp p).Definition canonical_Kmodel: @Kmodel FlatSemantics.MD FlatSemantics.kMD :=
  FlatSemantics.Build_Kmodel canonical_frame canonical_eval.Definition rel: bijection (Kworlds canonical_Kmodel) (sig cP) := bijection_refl.Definition H_R:
  forall m n Phi Psi, rel m Phi -> rel n Psi ->
    (m <= n <-> Included _ (proj1_sig Phi) (proj1_sig Psi)).Definition H_J:
  forall m1 m2 m Phi1 Phi2 Phi, rel m1 Phi1 -> rel m2 Phi2 -> rel m Phi ->
    (join m1 m2 m <-> Included _ (context_sepcon (proj1_sig Phi1) (proj1_sig Phi2)) (proj1_sig Phi)).

Theorem ParametricCompleteness: strongly_complete (ParametricSeparationLogic.G SLP) FlatSemantics.SM (KripkeModelClass _ (FlatSemantics.Kmodel_Monotonic + FlatSemantics.Kmodel_PreOrder + FlatSemantics.Kmodel_SeparationAlgebra + FlatSemantics.Kmodel_UpwardsClosed + FlatSemantics.Kmodel_DownwardsClosed + FlatSemantics.Kmodel_Unital + FlatSemantics.Parametric_Kmodel_Class SAP)).