Created
July 10, 2017 04:09
-
-
Save palmskog/a1dec443236df970e4b71b4ba5d028bb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(* generated by Ott 0.25 from: fitch_first_order.ott *) | |
Require Import Arith. | |
Require Import Bool. | |
Require Import List. | |
Require Import Ott.ott_list_core. | |
Require Export dyadic_ordered. | |
Require Export FMapInterface. | |
Require Export String. | |
Require Import Ascii. | |
Hint Resolve ascii_dec : ott_coq_equality. | |
Module FitchFirstOrder | |
(ST : SpecType) (SUOT : SpecUsualOrderedType ST) | |
(DST : DyadicSpecType ST) (SUOTD : SpecUsualOrderedType DST) | |
(Map : FMapInterface.S with Module E := SUOTD). | |
Definition x := string. (*r variable *) | |
Lemma eq_x: forall (x' y : x), {x' = y} + {x' <> y}. | |
Proof. | |
decide equality; auto with ott_coq_equality arith. | |
Defined. | |
Hint Resolve eq_x : ott_coq_equality. | |
Definition f := string. (*r function name *) | |
Lemma eq_f: forall (x y : f), {x = y} + {x <> y}. | |
Proof. | |
decide equality; auto with ott_coq_equality arith. | |
Defined. | |
Hint Resolve eq_f : ott_coq_equality. | |
Definition c := string. (*r constant name *) | |
Lemma eq_c: forall (x y : c), {x = y} + {x <> y}. | |
Proof. | |
decide equality; auto with ott_coq_equality arith. | |
Defined. | |
Hint Resolve eq_c : ott_coq_equality. | |
Definition P := string. (*r predicate name *) | |
Lemma eq_P: forall (x y : P), {x = y} + {x <> y}. | |
Proof. | |
decide equality; auto with ott_coq_equality arith. | |
Defined. | |
Hint Resolve eq_P : ott_coq_equality. | |
Definition l := SUOT.t. (*r proof entry label *) | |
Definition n := nat. (*r index variable (subscript) *) | |
Lemma eq_n: forall (x y : n), {x = y} + {x <> y}. | |
Proof. | |
decide equality; auto with ott_coq_equality arith. | |
Defined. | |
Hint Resolve eq_n : ott_coq_equality. | |
Inductive t : Set := (*r term *) | |
| t_var (x5:x) | |
| t_const (c5:c) | |
| t_func (f5:f) (_:list t). | |
Inductive justification : Type := (*r derivation justification *) | |
| justification_premise : justification | |
| justification_lem : justification | |
| justification_copy (l5:l) | |
| justification_andi (l5:l) (l':l) | |
| justification_ande1 (l5:l) | |
| justification_ande2 (l5:l) | |
| justification_ori1 (l5:l) | |
| justification_ori2 (l5:l) | |
| justification_impe (l5:l) (l':l) | |
| justification_nege (l5:l) (l':l) | |
| justification_conte (l5:l) | |
| justification_negnegi (l5:l) | |
| justification_negnege (l5:l) | |
| justification_mt (l5:l) (l':l) | |
| justification_impi (l5:l) (l':l) | |
| justification_negi (l5:l) (l':l) | |
| justification_ore (l1:l) (l2:l) (l3:l) (l4:l) (l5:l) | |
| justification_pbc (l5:l) (l':l) | |
| justification_eqi : justification | |
| justification_eqe (l5:l) (l':l) | |
| justification_alli (l5:l) (l':l) | |
| justification_alle (l5:l) | |
| justification_exi (l5:l) | |
| justification_exe (l1:l) (l2:l) (l3:l). | |
Inductive fm : Set := (*r first-order formula *) | |
| fm_pred (P5:P) (_:list t) | |
| fm_eq (t5:t) (t':t) | |
| fm_neg (fm5:fm) | |
| fm_and (fm5:fm) (fm':fm) | |
| fm_or (fm5:fm) (fm':fm) | |
| fm_imp (fm5:fm) (fm':fm) | |
| fm_forall (x5:x) (fm5:fm) | |
| fm_ex (x5:x) (fm5:fm) | |
| fm_cont : fm. | |
Inductive reason : Type := | |
| reason_assumption : reason | |
| reason_justification (justification5:justification). | |
Inductive fmlist : Set := (*r list of first-order formulas *) | |
| fmlist_list (_:list fm). | |
Inductive derivation : Type := (*r derivation in proof *) | |
| derivation_deriv (l5:l) (fm5:fm) (reason5:reason) | |
| derivation_var (l5:l) (x5:x) | |
| derivation_var_assumption (l5:l) (x5:x) (fm5:fm). | |
Inductive judgment : Set := (*r judgment *) | |
| judgment_follows (fmlist5:fmlist) (fm5:fm). | |
Inductive proof : Type := (*r proof *) | |
| proof_entries (_:list entry) | |
with entry : Type := (*r proof entry *) | |
| entry_derivation (derivation5:derivation) | |
| entry_box (proof5:proof) | |
| entry_invalid : entry. | |
Inductive dyadicfm : Set := | |
| dyadicfm_fm (fm5:fm) | |
| dyadicfm_fm_fm (fm5:fm) (fm':fm) | |
| dyadicfm_var_fm (x5:x) (fm5:fm) | |
| dyadicfm_var_fm_fm (x5:x) (fm5:fm) (fm':fm). | |
Inductive claim : Type := (*r claim *) | |
| claim_judgment_proof (judgment5:judgment) (proof5:proof). | |
Definition G : Type := Map.t dyadicfm. | |
(** induction principles *) | |
Section t_rect. | |
Variables | |
(P_t : t -> Prop) | |
(P_list_t : list t -> Prop). | |
Hypothesis | |
(H_t_var : forall (x5:x), P_t (t_var x5)) | |
(H_t_const : forall (c5:c), P_t (t_const c5)) | |
(H_t_func : forall (t_list:list t), P_list_t t_list -> forall (f5:f), P_t (t_func f5 t_list)) | |
(H_list_t_nil : P_list_t nil) | |
(H_list_t_cons : forall (t0:t), P_t t0 -> forall (t_l:list t), P_list_t t_l -> P_list_t (cons t0 t_l)). | |
Fixpoint t_ott_ind (n:t) : P_t n := | |
match n as x return P_t x with | |
| (t_var x5) => H_t_var x5 | |
| (t_const c5) => H_t_const c5 | |
| (t_func f5 t_list) => H_t_func t_list (((fix t_list_ott_ind (t_l:list t) : P_list_t t_l := match t_l as x return P_list_t x with nil => H_list_t_nil | cons t1 xl => H_list_t_cons t1(t_ott_ind t1)xl (t_list_ott_ind xl) end)) t_list) f5 | |
end. | |
End t_rect. | |
Section entry_proof_rect. | |
Variables | |
(P_entry : entry -> Prop) | |
(P_proof : proof -> Prop) | |
(P_list_entry : list entry -> Prop). | |
Hypothesis | |
(H_entry_derivation : forall (derivation5:derivation), P_entry (entry_derivation derivation5)) | |
(H_entry_box : forall (proof5:proof), P_proof proof5 -> P_entry (entry_box proof5)) | |
(H_entry_invalid : P_entry entry_invalid) | |
(H_proof_entries : forall (entry_list:list entry), P_list_entry entry_list -> P_proof (proof_entries entry_list)) | |
(H_list_entry_nil : P_list_entry nil) | |
(H_list_entry_cons : forall (entry0:entry), P_entry entry0 -> forall (entry_l:list entry), P_list_entry entry_l -> P_list_entry (cons entry0 entry_l)). | |
Fixpoint proof_ott_ind (n:proof) : P_proof n := | |
match n as x return P_proof x with | |
| (proof_entries entry_list) => H_proof_entries entry_list (((fix entry_list_ott_ind (entry_l:list entry) : P_list_entry entry_l := match entry_l as x return P_list_entry x with nil => H_list_entry_nil | cons entry1 xl => H_list_entry_cons entry1(entry_ott_ind entry1)xl (entry_list_ott_ind xl) end)) entry_list) | |
end | |
with entry_ott_ind (n:entry) : P_entry n := | |
match n as x return P_entry x with | |
| (entry_derivation derivation5) => H_entry_derivation derivation5 | |
| (entry_box proof5) => H_entry_box proof5 (proof_ott_ind proof5) | |
| entry_invalid => H_entry_invalid | |
end. | |
End entry_proof_rect. | |
(** library functions *) | |
Fixpoint list_mem A (eq:forall a b:A,{a=b}+{a<>b}) (x:A) (l:list A) {struct l} : bool := | |
match l with | |
| nil => false | |
| cons h t => if eq h x then true else list_mem A eq x t | |
end. | |
Implicit Arguments list_mem. | |
(** substitutions *) | |
Fixpoint tsubst_t (t_5:t) (x_6:x) (t__6:t) {struct t__6} : t := | |
match t__6 with | |
| (t_var x5) => (if eq_x x5 x_6 then t_5 else (t_var x5)) | |
| (t_const c5) => t_const c5 | |
| (t_func f5 t_list) => t_func f5 (map (fun (t_:t) => (tsubst_t t_5 x_6 t_)) t_list) | |
end. | |
Fixpoint tsubst_fm (t_6:t) (x_6:x) (fm_6:fm) {struct fm_6} : fm := | |
match fm_6 with | |
| (fm_pred P5 t_list) => fm_pred P5 (map (fun (t_:t) => (tsubst_t t_6 x_6 t_)) t_list) | |
| (fm_eq t5 t') => fm_eq (tsubst_t t_6 x_6 t5) (tsubst_t t_6 x_6 t') | |
| (fm_neg fm5) => fm_neg (tsubst_fm t_6 x_6 fm5) | |
| (fm_and fm5 fm') => fm_and (tsubst_fm t_6 x_6 fm5) (tsubst_fm t_6 x_6 fm') | |
| (fm_or fm5 fm') => fm_or (tsubst_fm t_6 x_6 fm5) (tsubst_fm t_6 x_6 fm') | |
| (fm_imp fm5 fm') => fm_imp (tsubst_fm t_6 x_6 fm5) (tsubst_fm t_6 x_6 fm') | |
| (fm_forall x5 fm5) => fm_forall x5 (if list_mem eq_x x_6 (cons x5 nil) then fm5 else (tsubst_fm t_6 x_6 fm5)) | |
| (fm_ex x5 fm5) => fm_ex x5 (if list_mem eq_x x_6 (cons x5 nil) then fm5 else (tsubst_fm t_6 x_6 fm5)) | |
| fm_cont => fm_cont | |
end. | |
Definition tsubst_derivation (t5:t) (x_6:x) (derivation5:derivation) : derivation := | |
match derivation5 with | |
| (derivation_deriv l5 fm5 reason5) => derivation_deriv l5 (tsubst_fm t5 x_6 fm5) reason5 | |
| (derivation_var l5 x5) => derivation_var l5 x5 | |
| (derivation_var_assumption l5 x5 fm5) => derivation_var_assumption l5 x5 (tsubst_fm t5 x_6 fm5) | |
end. | |
Definition tsubst_fmlist (t5:t) (x5:x) (fmlist5:fmlist) : fmlist := | |
match fmlist5 with | |
| (fmlist_list fm_list) => fmlist_list (map (fun (fm_:fm) => (tsubst_fm t5 x5 fm_)) fm_list) | |
end. | |
Fixpoint tsubst_entry (t5:t) (x5:x) (entry5:entry) {struct entry5} : entry := | |
match entry5 with | |
| (entry_derivation derivation5) => entry_derivation (tsubst_derivation t5 x5 derivation5) | |
| (entry_box proof5) => entry_box (tsubst_proof t5 x5 proof5) | |
| entry_invalid => entry_invalid | |
end | |
with tsubst_proof (t5:t) (x5:x) (proof_6:proof) {struct proof_6} : proof := | |
match proof_6 with | |
| (proof_entries entry_list) => proof_entries (map (fun (entry_:entry) => (tsubst_entry t5 x5 entry_)) entry_list) | |
end. | |
Definition tsubst_judgment (t5:t) (x5:x) (judgment5:judgment) : judgment := | |
match judgment5 with | |
| (judgment_follows fmlist5 fm5) => judgment_follows (tsubst_fmlist t5 x5 fmlist5) (tsubst_fm t5 x5 fm5) | |
end. | |
Definition tsubst_dyadicfm (t5:t) (x_6:x) (dyadicfm5:dyadicfm) : dyadicfm := | |
match dyadicfm5 with | |
| (dyadicfm_fm fm5) => dyadicfm_fm (tsubst_fm t5 x_6 fm5) | |
| (dyadicfm_fm_fm fm5 fm') => dyadicfm_fm_fm (tsubst_fm t5 x_6 fm5) (tsubst_fm t5 x_6 fm') | |
| (dyadicfm_var_fm x5 fm5) => dyadicfm_var_fm x5 (tsubst_fm t5 x_6 fm5) | |
| (dyadicfm_var_fm_fm x5 fm5 fm') => dyadicfm_var_fm_fm x5 (tsubst_fm t5 x_6 fm5) (tsubst_fm t5 x_6 fm') | |
end. | |
Definition tsubst_claim (t5:t) (x5:x) (claim5:claim) : claim := | |
match claim5 with | |
| (claim_judgment_proof judgment5 proof5) => claim_judgment_proof (tsubst_judgment t5 x5 judgment5) (tsubst_proof t5 x5 proof5) | |
end. | |
(** library functions *) | |
Fixpoint list_minus A (eq:forall a b:A,{a=b}+{a<>b}) (l1:list A) (l2:list A) {struct l1} : list A := | |
match l1 with | |
| nil => nil | |
| cons h t => if (list_mem (A:=A) eq h l2) then list_minus A eq t l2 else cons h (list_minus A eq t l2) | |
end. | |
Implicit Arguments list_minus. | |
(** free variables *) | |
Fixpoint ftx_t (t_5:t) : list x := | |
match t_5 with | |
| (t_var x5) => (cons x5 nil) | |
| (t_const c5) => nil | |
| (t_func f5 t_list) => ((flat_map (fun (t_:t) => (ftx_t t_)) t_list)) | |
end. | |
Fixpoint ftx_fm (fm_6:fm) : list x := | |
match fm_6 with | |
| (fm_pred P5 t_list) => ((flat_map (fun (t_:t) => (ftx_t t_)) t_list)) | |
| (fm_eq t5 t') => (app (ftx_t t5) (ftx_t t')) | |
| (fm_neg fm5) => ((ftx_fm fm5)) | |
| (fm_and fm5 fm') => (app (ftx_fm fm5) (ftx_fm fm')) | |
| (fm_or fm5 fm') => (app (ftx_fm fm5) (ftx_fm fm')) | |
| (fm_imp fm5 fm') => (app (ftx_fm fm5) (ftx_fm fm')) | |
| (fm_forall x5 fm5) => ((list_minus eq_x (ftx_fm fm5) (cons x5 nil))) | |
| (fm_ex x5 fm5) => ((list_minus eq_x (ftx_fm fm5) (cons x5 nil))) | |
| fm_cont => nil | |
end. | |
Definition ftx_derivation (derivation5:derivation) : list x := | |
match derivation5 with | |
| (derivation_deriv l5 fm5 reason5) => ((ftx_fm fm5)) | |
| (derivation_var l5 x5) => nil | |
| (derivation_var_assumption l5 x5 fm5) => ((ftx_fm fm5)) | |
end. | |
Definition ftx_fmlist (fmlist5:fmlist) : list x := | |
match fmlist5 with | |
| (fmlist_list fm_list) => ((flat_map (fun (fm_:fm) => (ftx_fm fm_)) fm_list)) | |
end. | |
Fixpoint ftx_entry (entry5:entry) : list x := | |
match entry5 with | |
| (entry_derivation derivation5) => ((ftx_derivation derivation5)) | |
| (entry_box proof5) => ((ftx_proof proof5)) | |
| entry_invalid => nil | |
end | |
with ftx_proof (proof_6:proof) : list x := | |
match proof_6 with | |
| (proof_entries entry_list) => ((flat_map (fun (entry_:entry) => (ftx_entry entry_)) entry_list)) | |
end. | |
Definition ftx_judgment (judgment5:judgment) : list x := | |
match judgment5 with | |
| (judgment_follows fmlist5 fm5) => (app (ftx_fmlist fmlist5) (ftx_fm fm5)) | |
end. | |
Definition ftx_dyadicfm (dyadicfm5:dyadicfm) : list x := | |
match dyadicfm5 with | |
| (dyadicfm_fm fm5) => ((ftx_fm fm5)) | |
| (dyadicfm_fm_fm fm5 fm') => (app (ftx_fm fm5) (ftx_fm fm')) | |
| (dyadicfm_var_fm x5 fm5) => ((ftx_fm fm5)) | |
| (dyadicfm_var_fm_fm x5 fm5 fm') => (app (ftx_fm fm5) (ftx_fm fm')) | |
end. | |
Definition ftx_claim (claim5:claim) : list x := | |
match claim5 with | |
| (claim_judgment_proof judgment5 proof5) => (app (ftx_judgment judgment5) (ftx_proof proof5)) | |
end. | |
Definition proof_list_entry (proof5 : proof) : list entry := | |
match proof5 with | |
| proof_entries ls => ls | |
end. | |
Definition fmlist_list_fm (fmlist5 : fmlist) : list fm := | |
match fmlist5 with | |
| fmlist_list ls => ls | |
end. | |
(** definitions *) | |
(* defns validity *) | |
Inductive valid_claim : claim -> Prop := (* defn valid_claim *) | |
| vc_claim : forall (fmlist5:fmlist) (fm5:fm) (proof5:proof) (l5:l) (justification5:justification), | |
(last (proof_list_entry proof5 ) entry_invalid) = (entry_derivation (derivation_deriv l5 fm5 (reason_justification justification5))) -> | |
valid_proof (Map.empty dyadicfm) fmlist5 proof5 -> | |
valid_claim (claim_judgment_proof (judgment_follows fmlist5 fm5) proof5) | |
with valid_proof : G -> fmlist -> proof -> Prop := (* defn valid_proof *) | |
| vp_empty : forall (G5:G) (fmlist5:fmlist), | |
valid_proof G5 fmlist5 (proof_entries nil) | |
| vp_derivation : forall (G5:G) (fmlist5:fmlist) (l5:l) (fm5:fm) (justification5:justification) (proof5:proof), | |
valid_derivation G5 fmlist5 (derivation_deriv l5 fm5 (reason_justification justification5)) -> | |
valid_proof (Map.add (inl l5 ) (dyadicfm_fm fm5 ) G5 ) fmlist5 proof5 -> | |
valid_proof G5 fmlist5 (proof_entries (cons (entry_derivation (derivation_deriv l5 fm5 (reason_justification justification5))) (proof_list_entry proof5 ))) | |
| vp_box_imp : forall (G5:G) (fmlist5:fmlist) (l5:l) (fm5:fm) (proof5 proof':proof) (l':l) (fm':fm) (reason5:reason), | |
(last (proof_list_entry (proof_entries (cons (entry_derivation (derivation_deriv l5 fm5 reason_assumption)) (proof_list_entry proof5 ))) ) entry_invalid) = (entry_derivation (derivation_deriv l' fm' reason5)) -> | |
valid_proof (Map.add (inl l5 ) (dyadicfm_fm fm5 ) G5 ) fmlist5 proof5 -> | |
valid_proof (Map.add (inr ( l5 , l' )) (dyadicfm_fm_fm fm5 fm' ) G5 ) fmlist5 proof' -> | |
valid_proof G5 fmlist5 (proof_entries (cons (entry_box (proof_entries (cons (entry_derivation (derivation_deriv l5 fm5 reason_assumption)) (proof_list_entry proof5 ))) ) (proof_list_entry proof' ))) | |
| vp_box_all : forall (G5:G) (fmlist5:fmlist) (l5:l) (x5:x) (proof5 proof':proof) (l':l) (fm':fm) (reason5:reason), | |
(last (proof_list_entry proof5 ) entry_invalid) = (entry_derivation (derivation_deriv l' fm' reason5)) -> | |
valid_proof G5 fmlist5 proof5 -> | |
valid_proof (Map.add (inr ( l5 , l' )) (dyadicfm_var_fm x5 fm' ) G5 ) fmlist5 proof' -> | |
valid_proof G5 fmlist5 (proof_entries (cons (entry_box (proof_entries (cons (entry_derivation (derivation_var l5 x5)) (proof_list_entry proof5 ))) ) (proof_list_entry proof' ))) | |
| vp_box_ex : forall (G5:G) (fmlist5:fmlist) (l5:l) (x5:x) (fm5:fm) (proof5 proof':proof) (l':l) (fm':fm) (reason5:reason), | |
(last (proof_list_entry proof5 ) entry_invalid) = (entry_derivation (derivation_deriv l' fm' reason5)) -> | |
valid_proof (Map.add (inl l5 ) (dyadicfm_fm fm5 ) G5 ) fmlist5 proof5 -> | |
valid_proof (Map.add (inr ( l5 , l' )) (dyadicfm_var_fm_fm x5 fm5 fm' ) G5 ) fmlist5 proof' -> | |
valid_proof G5 fmlist5 (proof_entries (cons (entry_box (proof_entries (cons (entry_derivation (derivation_var_assumption l5 x5 fm5)) (proof_list_entry proof5 ))) ) (proof_list_entry proof' ))) | |
with valid_derivation : G -> fmlist -> derivation -> Prop := (* defn valid_derivation *) | |
| vd_premise : forall (G5:G) (fmlist5:fmlist) (l5:l) (fm5:fm), | |
(In fm5 (fmlist_list_fm fmlist5 )) -> | |
valid_derivation G5 fmlist5 (derivation_deriv l5 fm5 (reason_justification justification_premise)) | |
| vd_lem : forall (G5:G) (fmlist5:fmlist) (l5:l) (fm5:fm), | |
valid_derivation G5 fmlist5 (derivation_deriv l5 (fm_or fm5 (fm_neg fm5)) (reason_justification justification_lem)) | |
| vd_copy : forall (G5:G) (fmlist5:fmlist) (l5:l) (fm5:fm) (l':l), | |
(Map.find (inl l' ) G5 = Some (dyadicfm_fm fm5 )) -> | |
valid_derivation G5 fmlist5 (derivation_deriv l5 fm5 (reason_justification (justification_copy l'))) | |
| vd_conte : forall (G5:G) (fmlist5:fmlist) (l5:l) (fm5:fm) (l':l), | |
(Map.find (inl l' ) G5 = Some (dyadicfm_fm fm_cont )) -> | |
valid_derivation G5 fmlist5 (derivation_deriv l5 fm5 (reason_justification (justification_conte l'))) | |
| vd_andi : forall (G5:G) (fmlist5:fmlist) (l_5:l) (fm5 fm':fm) (l1 l2:l), | |
(Map.find (inl l1 ) G5 = Some (dyadicfm_fm fm5 )) -> | |
(Map.find (inl l2 ) G5 = Some (dyadicfm_fm fm' )) -> | |
valid_derivation G5 fmlist5 (derivation_deriv l_5 (fm_and fm5 fm') (reason_justification (justification_andi l1 l2))) | |
| vd_ande1 : forall (G5:G) (fmlist5:fmlist) (l5:l) (fm5:fm) (l':l) (fm':fm), | |
(Map.find (inl l' ) G5 = Some (dyadicfm_fm (fm_and fm5 fm') )) -> | |
valid_derivation G5 fmlist5 (derivation_deriv l5 fm5 (reason_justification (justification_ande1 l'))) | |
| vd_ande2 : forall (G5:G) (fmlist5:fmlist) (l5:l) (fm':fm) (l':l) (fm5:fm), | |
(Map.find (inl l' ) G5 = Some (dyadicfm_fm (fm_and fm5 fm') )) -> | |
valid_derivation G5 fmlist5 (derivation_deriv l5 fm' (reason_justification (justification_ande2 l'))) | |
| vd_ori1 : forall (G5:G) (fmlist5:fmlist) (l5:l) (fm5 fm':fm) (l':l), | |
(Map.find (inl l' ) G5 = Some (dyadicfm_fm fm5 )) -> | |
valid_derivation G5 fmlist5 (derivation_deriv l5 (fm_or fm5 fm') (reason_justification (justification_ori1 l'))) | |
| vd_ori2 : forall (G5:G) (fmlist5:fmlist) (l5:l) (fm5 fm':fm) (l':l), | |
(Map.find (inl l' ) G5 = Some (dyadicfm_fm fm' )) -> | |
valid_derivation G5 fmlist5 (derivation_deriv l5 (fm_or fm5 fm') (reason_justification (justification_ori2 l'))) | |
| vd_impe : forall (G5:G) (fmlist5:fmlist) (l_5:l) (fm5:fm) (l1 l2:l) (fm':fm), | |
(Map.find (inl l1 ) G5 = Some (dyadicfm_fm fm' )) -> | |
(Map.find (inl l2 ) G5 = Some (dyadicfm_fm (fm_imp fm' fm5) )) -> | |
valid_derivation G5 fmlist5 (derivation_deriv l_5 fm5 (reason_justification (justification_impe l1 l2))) | |
| vd_negnegi : forall (G5:G) (fmlist5:fmlist) (l5:l) (fm5:fm) (l':l), | |
(Map.find (inl l' ) G5 = Some (dyadicfm_fm fm5 )) -> | |
valid_derivation G5 fmlist5 (derivation_deriv l5 (fm_neg (fm_neg fm5)) (reason_justification (justification_negnegi l'))) | |
| vd_negnege : forall (G5:G) (fmlist5:fmlist) (l5:l) (fm5:fm) (l':l), | |
(Map.find (inl l' ) G5 = Some (dyadicfm_fm (fm_neg (fm_neg fm5)) )) -> | |
valid_derivation G5 fmlist5 (derivation_deriv l5 fm5 (reason_justification (justification_negnege l'))) | |
| vd_mt : forall (G5:G) (fmlist5:fmlist) (l_5:l) (fm5:fm) (l1 l2:l) (fm':fm), | |
(Map.find (inl l1 ) G5 = Some (dyadicfm_fm (fm_imp fm5 fm') )) -> | |
(Map.find (inl l2 ) G5 = Some (dyadicfm_fm (fm_neg fm') )) -> | |
valid_derivation G5 fmlist5 (derivation_deriv l_5 (fm_neg fm5) (reason_justification (justification_mt l1 l2))) | |
| vd_nege : forall (G5:G) (fmlist5:fmlist) (l_5 l1 l2:l) (fm5:fm), | |
(Map.find (inl l1 ) G5 = Some (dyadicfm_fm fm5 )) -> | |
(Map.find (inl l2 ) G5 = Some (dyadicfm_fm (fm_neg fm5) )) -> | |
valid_derivation G5 fmlist5 (derivation_deriv l_5 fm_cont (reason_justification (justification_nege l1 l2))) | |
| vd_impi : forall (G5:G) (fmlist5:fmlist) (l_5:l) (fm5 fm':fm) (l1 l2:l), | |
(Map.find (inr ( l1 , l2 )) G5 = Some (dyadicfm_fm_fm fm5 fm' )) -> | |
valid_derivation G5 fmlist5 (derivation_deriv l_5 (fm_imp fm5 fm') (reason_justification (justification_impi l1 l2))) | |
| vd_negi : forall (G5:G) (fmlist5:fmlist) (l_5:l) (fm5:fm) (l1 l2:l), | |
(Map.find (inr ( l1 , l2 )) G5 = Some (dyadicfm_fm_fm fm5 fm_cont )) -> | |
valid_derivation G5 fmlist5 (derivation_deriv l_5 (fm_neg fm5) (reason_justification (justification_negi l1 l2))) | |
| vd_ore : forall (G5:G) (fmlist5:fmlist) (l_6:l) (fm'':fm) (l1 l2 l3 l4 l5:l) (fm5 fm':fm), | |
(Map.find (inl l1 ) G5 = Some (dyadicfm_fm (fm_or fm5 fm') )) -> | |
(Map.find (inr ( l2 , l3 )) G5 = Some (dyadicfm_fm_fm fm5 fm'' )) -> | |
(Map.find (inr ( l4 , l5 )) G5 = Some (dyadicfm_fm_fm fm' fm'' )) -> | |
valid_derivation G5 fmlist5 (derivation_deriv l_6 fm'' (reason_justification (justification_ore l1 l2 l3 l4 l5))) | |
| vd_pbc : forall (G5:G) (fmlist5:fmlist) (l_5:l) (fm5:fm) (l1 l2:l), | |
(Map.find (inr ( l1 , l2 )) G5 = Some (dyadicfm_fm_fm (fm_neg fm5) fm_cont )) -> | |
valid_derivation G5 fmlist5 (derivation_deriv l_5 fm5 (reason_justification (justification_pbc l1 l2))) | |
| vd_eqi : forall (G5:G) (fmlist5:fmlist) (l5:l) (t5:t), | |
valid_derivation G5 fmlist5 (derivation_deriv l5 (fm_eq t5 t5) (reason_justification justification_eqi)) | |
| vd_eqe : forall (G5:G) (fmlist5:fmlist) (l_5:l) (fm5:fm) (t':t) (x5:x) (l1 l2:l) (t5:t), | |
(Map.find (inl l1 ) G5 = Some (dyadicfm_fm (fm_eq t5 t') )) -> | |
(Map.find (inl l2 ) G5 = Some (dyadicfm_fm (tsubst_fm t5 x5 fm5 ) )) -> | |
valid_derivation G5 fmlist5 (derivation_deriv l_5 (tsubst_fm t' x5 fm5 ) (reason_justification (justification_eqe l1 l2))) | |
| vd_alle : forall (G5:G) (fmlist5:fmlist) (l5:l) (fm5:fm) (t5:t) (x5:x) (l':l), | |
(Map.find (inl l' ) G5 = Some (dyadicfm_fm (fm_forall x5 fm5) )) -> | |
valid_derivation G5 fmlist5 (derivation_deriv l5 (tsubst_fm t5 x5 fm5 ) (reason_justification (justification_alle l'))) | |
| vd_exi : forall (G5:G) (fmlist5:fmlist) (l5:l) (x5:x) (fm5:fm) (l':l) (t5:t), | |
(Map.find (inl l' ) G5 = Some (dyadicfm_fm (tsubst_fm t5 x5 fm5 ) )) -> | |
valid_derivation G5 fmlist5 (derivation_deriv l5 (fm_ex x5 fm5) (reason_justification (justification_exi l'))) | |
| vd_alli : forall (G5:G) (fmlist5:fmlist) (l_5:l) (x5:x) (fm5:fm) (l1 l2:l) (x':x), | |
(Map.find (inr ( l1 , l2 )) G5 = Some (dyadicfm_var_fm x' (tsubst_fm (t_var x') x5 fm5 ) )) -> | |
valid_derivation G5 fmlist5 (derivation_deriv l_5 (fm_forall x5 fm5) (reason_justification (justification_alli l1 l2))) | |
| vd_exe : forall (G5:G) (fmlist5:fmlist) (l_5:l) (fm':fm) (l1 l2 l3:l) (x5:x) (fm5:fm) (x':x), | |
(Map.find (inl l1 ) G5 = Some (dyadicfm_fm (fm_ex x5 fm5) )) -> | |
(Map.find (inr ( l2 , l3 )) G5 = Some (dyadicfm_var_fm_fm x' (tsubst_fm (t_var x') x5 fm5 ) fm' )) -> | |
valid_derivation G5 fmlist5 (derivation_deriv l_5 fm' (reason_justification (justification_exe l1 l2 l3))). | |
End FitchFirstOrder. | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment