import Logic.Syntax
import Beth.Semantics
universe u
namespace Beth
open Syntax
open Pf
def soundness {W : Type u}[BethFrame W] {Γ : Ctxt}{tm : Tm} : Pf Γ tm → Entails W Γ tm
| Pf.assume => by
apply Semantics.assumption
| Pf.wk le pf => by
apply Semantics.wkaa
exact le
apply soundness pf
| Pf.and_I p q => by
apply Semantics.and_Ia
apply soundness p
apply soundness q
| Pf.and_E₁ p => by
apply Semantics.and_E₁a
apply soundness p
| Pf.and_E₂ p => by
apply Semantics.and_E₂a
apply soundness p
| or_I₁ p => by
apply Semantics.or_I₁
apply soundness p
| or_I₂ q => by
apply Semantics.or_I₂
apply soundness q
| or_E p_or_q c_ass_p c_ass_q => by
apply Semantics.or_EaW : Type uaW : Type uaW : Type u
apply soundness p_or_qaW : Type u
apply soundness c_ass_p
apply soundness c_ass_q
| Pf.imp_I p => by
apply Semantics.imp_I
apply soundness p
| Pf.imp_E p q => by
apply Semantics.imp_Eaa
apply soundness p
apply soundness q
| Pf.tt_I => fun _ _ => trivial
| Pf.ff_E pf => by
apply Semantics.ff_E
apply soundness pf