(* ** Some Hoare Rules *)
From Undecidability Require Export TM.Compound.Multi TM.Combinators.Combinators.
From Undecidability.TM.Hoare Require Import HoareLogic HoareRegister.
(* *** Nop *)
(* A classic example for Hoare logic *)
(* *** [Relabel] *)
(* *** [Return] *)
(* *** Sequential Composition *)

(* Version that disregards labels of [Q] *)
Lemma Seq_Spec' (sig : finType) (n : nat) (F1 F2 : finType) (pM1 : pTM sig F1 n) (pM2 : pTM sig F2 n)
(P : Assert sig n) (Q : Assert sig n) (R : F2 -> Assert sig n) :
Triple P pM1 (fun _ => Q) ->
(Triple Q pM2 R) ->
Triple P (pM1;;pM2) R.