44 lines
706 B
Text
44 lines
706 B
Text
import Std.Tactic.Do
|
|
|
|
open Std.Do
|
|
|
|
set_option mvcgen.warning false
|
|
|
|
axiom P : Nat → Prop
|
|
axiom P' : Nat → Prop
|
|
axiom Q : Nat → Prop
|
|
axiom R : Assertion ps
|
|
|
|
axiom hPQ : ∀ n, P n → P' n → Q n
|
|
|
|
axiom G : StateM Nat Unit
|
|
axiom H : StateM Nat Unit
|
|
|
|
noncomputable def F : StateM Nat Unit := do
|
|
G
|
|
H
|
|
|
|
@[spec]
|
|
axiom G_spec : ⦃⌜True⌝⦄ G ⦃⇓ _ n => ⌜P n ∧ P' n⌝⦄
|
|
|
|
@[spec]
|
|
axiom H_spec : ⦃fun n => ⌜Q n⌝⦄ H ⦃⇓ _ => R⦄
|
|
|
|
theorem F_spec :
|
|
⦃⌜True⌝⦄
|
|
F
|
|
⦃⇓ _ => R⦄ := by
|
|
mvcgen [F]
|
|
|
|
-- Goal:
|
|
-- s✝¹ : Nat
|
|
-- r✝ : Unit
|
|
-- s✝ : Nat
|
|
-- h : P s✝ ∧ P' s✝
|
|
-- ⊢ Q s✝
|
|
|
|
rename_i h
|
|
cases h
|
|
apply hPQ
|
|
assumption
|
|
assumption
|