Theory WS1S_Examples
section ‹Examples for WS1S (Minimum Semantics)›
theory WS1S_Examples
imports Formula_Derivatives.WS1S_Formula
begin
abbreviation (input) FImp where "FImp φ ψ ≡ FOr (FNot φ) ψ"
abbreviation FIff where "FIff φ ψ ≡ FAnd (FImp φ ψ) (FImp ψ φ)"
abbreviation FBall where "FBall X φ ≡ FAll FO (FImp (FBase (In False 0 X)) φ)"
abbreviation SUBSET where "SUBSET X Y ≡ FBall X (FBase (In False 0 Y))"
abbreviation EQ where "EQ X Y ≡ FAnd (SUBSET X Y) (SUBSET Y X)"
abbreviation First where "First x ≡ FNot (FEx FO (FBase (Less None 0 (x+1))))"
abbreviation Last where "Last x ≡ FNot (FEx FO (FBase (Less None (x+1) 0)))"
abbreviation Succ where "Succ sucx x ≡ FAnd (FBase (Less None x sucx)) (FNot (FEx FO (FAnd (FBase (Less None (x+1) 0)) (FBase (Less None 0 (sucx+1))))))"
definition "Thm idx φ = check_eqv idx φ (FBool True)"
abbreviation FTrue (‹⊤›) where "FTrue ≡ FBool True"
abbreviation FFalse (‹⊥›) where "FFalse ≡ FBool False"
notation FImp (infixr ‹-->› 25)
notation (output) FO (‹1›)
notation (output) SO (‹2›)
notation FEx (‹∃⇩_ _› [10] 10)
notation FAll (‹∀⇩_ _› [10] 10)
notation FNot (‹¬ _› [40] 40)
notation FOr (infixr ‹∨› 30)
notation FAnd (infixr ‹∧› 35)
abbreviation FLess (‹x⇩_ < x⇩_› [65, 66] 65) where "FLess m1 m2 ≡ FBase (Less None m1 m2)"
abbreviation FIn (‹x⇩_ ∈ X⇘_⇙› [65, 66] 65) where "FIn m M ≡ FBase (In False m M)"
abbreviation FEq_Const (‹x⇩_ = _› [65, 66] 65) where "FEq_Const m n ≡ FBase (Eq_Const None m n)"
abbreviation FEq_Plus (‹x⇩_ = x⇩_ + _› [65, 66] 65) where "FEq_Plus m n i ≡ FBase (Plus_FO None m n i)"
abbreviation FSuc_SO (‹X⇩_ = X⇩_ + 1› [65, 66] 65) where "FSuc_SO m n ≡ FBase (Suc_SO False False m n)"
abbreviation FQ (‹[x⇩_]› [66] 65) where "FQ m ≡ FBase (Fo m)"
lemma "check_eqv (Abs_idx (1, 0)) (FAnd (FEq_Const 0 100000) (FEq_Const 0 0)) FFalse"
by check_equiv
lemma "check_eqv (Abs_idx (1, 0)) (FEq_Plus 0 0 1) FFalse"
by check_equiv
lemma "check_eqv (Abs_idx (0, 1)) (FSuc_SO 0 0) (FBase (Empty 0))"
by check_equiv
lemma "check_eqv (Abs_idx (0, 2))
(FEx SO (FAnd (FBase (Subset 1 0)) (FSuc_SO 0 2)))
(FAll FO (FImp (FIn 0 0) (FEx FO (FAnd (FEq_Plus 1 0 1) (FIn 0 1)))))"
by check_equiv
value "automaton (σ (Abs_idx (0, 1))) (FBase (Eq_Presb None 0 (2 ^ 32)))"
value "automaton (σ (Abs_idx (1, 0))) (nFAnd (FEq_Const 0 100000) (FEq_Const 0 42))"
value "automaton (σ (Abs_idx (1, 0))) (nFAnd (FOr (FEq_Const 0 100000) (FEx FO (FBase (Eq_FO False 1 0)))) (FEq_Const 0 42))"
definition "M2L = (FEx SO (FAll FO (FBase (In False 0 0))) :: formula)"
definition "Φ = (FAll FO (FEx FO (FBase (Less None 1 0))) :: formula)"
lemma "Thm (Abs_idx (0, 1)) (FNot M2L)"
by (simp add: Thm_def M2L_def) check_equiv
lemma "Thm (Abs_idx (0, 0)) Φ"
by (simp add: Thm_def Φ_def) check_equiv
abbreviation Globally (‹□_› [40] 40) where "Globally P == %n. FAll FO (FImp (FNot (FBase (Less None (n+1) 0))) (P 0))"
abbreviation Future (‹◇_› [40] 40) where "Future P == %n. FEx FO (FAnd (FNot (FBase (Less None (n+1) 0))) (P 0))"
abbreviation IMP (infixr ‹→› 50) where "IMP P1 P2 == %n. FImp (P1 n) (P2 n)"
definition Ψ :: "nat ⇒ formula" where
"Ψ n = FAll FO (((□(foldr (λi φ. (λm. FBase (In False m i)) → φ) [0..<n] (λm. FBase (In False m n)))) →
foldr (λi φ. (□(λm. FBase (In False m i))) → φ) [0..<n] (□(λm. FBase (In False m n)))) 0)"
lemma "Thm (Abs_idx (0, 1)) (Ψ 0)"
by (simp add: Thm_def Ψ_def) check_equiv
lemma "Thm (Abs_idx (0, 2)) (Ψ 1)"
by (simp add: Thm_def Ψ_def) check_equiv
lemma "Thm (Abs_idx (0, 3)) (Ψ 2)"
by (simp add: Thm_def Ψ_def numeral_nat) check_equiv
lemma "Thm (Abs_idx (0, 4)) (Ψ 3)"
by (simp add: Thm_def Ψ_def numeral_nat) check_equiv
lemma "Thm (Abs_idx (0, 5)) (Ψ 4)"
by (simp add: Thm_def Ψ_def numeral_nat) check_equiv
lemma "Thm (Abs_idx (0, 6)) (Ψ 5)"
by (simp add: Thm_def Ψ_def numeral_nat) check_equiv
lemma "Thm (Abs_idx (0, 11)) (Ψ 10)"
by (simp add: Thm_def Ψ_def numeral_nat) check_equiv
lemma "Thm (Abs_idx (0, 16)) (Ψ 15)"
by (simp add: Thm_def Ψ_def numeral_nat) check_equiv
end