EqRel_subs: {A,r,x,y,z,w} ({s,t} s%A ⟶ t%A ⟶ (r s t)%bool) ⟶ x%A ⟶ y%A ⟶ z%A ⟶ w%A ⟶ ⊦x =A z ⟶ ⊦y =A w ⟶ ⊦(r x y) =bool (r z w) ❘
= [A,r,x,y,z,w,P,Q,R,S,T,U,V] (eq_trans bool (r x y) (r x w) (r z w) (P x y Q R) (P x w Q T) (P z w S T) (app_sub_eq A ([m] bool) ([m] r x m) y w R T V ([t,k:t%A] P x t Q k)) (app_sub_eq A ([m] bool) ([m] r m w) x z Q S U ([t,k:t%A] P t w k T)))❙
t_sat_pred: {A,p,s,t} s%A ⟶ t%A ⟶ ⊦s =A t ⟶ ({x} x%A ⟶ p x % bool) ⟶ ⊦p s ⟶ t%(A|p)❘
= [A,p,s,t,P,Q,R,S,T] refine_I Q valid_eq_flip T (app_sub_eq A ([x] bool) p s t P Q R S)❙
...
...
@@ -257,24 +250,15 @@ theory DHOL : ur:?LF =
t_sat_dep_conj_pred_eq_s: {A,s,t,p} s%A ⟶ t%A ⟶ ⊦s =A t ⟶ ({x} x%A ⟶ p x % bool) ⟶ ⊦p s ⟶ ⊦ (((p t) ∧ (t =(A|([x] p x)) s))) ❘
= [A,s,t,p,P,Q,R,S,T] refine_E2 (t_sat_pred P Q R ([x,k:x%A] dep_conj_pred_eq_s P S T x k) and_I T (eq_refl (refine_I A ([x] p x) s P T))) ❙
refine_eq_pres: {A,s,t,p} s%A ⟶ t%A ⟶ ⊦s =A t ⟶ ({x} x%A ⟶ p x % bool) ⟶ ⊦p s ⟶ ⊦s =(A|p) t ❘
= [A,s,t,p,P,Q,R,S,T] (eq_sym and_Er t_sat_dep_conj_pred_eq_s P Q R S T) ❙
refine_eq_pres_rev: {A,s,t,p} s%A ⟶ t%A ⟶ ⊦t =A s ⟶ ({x} x%A ⟶ p x % bool) ⟶ ⊦p s ⟶ ⊦t =(A|p) s ❘
= [A,s,t,p,P,Q,R,S,T] eq_sym refine_eq_pres P Q (eq_sym R) S T ❙
= [A,s,t,p,P,Q,R,S,T] (eq_sym and_Er t_sat_dep_conj_pred_eq_s P Q R S T) ❙
eq_conservation_up: {A,B,x,y} x%A ⟶ y%A ⟶ A<B ⟶ ⊦x =A y ⟶ ⊦x =B y ❘
= [A,B,x,y,P,Q,R,S] app_sub_eq A ([x] B) ([x] x) x y P Q S ([u,v:u%A] R u v)❙
func_trans_quo: {A,r,x,y,s} $A∕r ⟶ s%A∕r ⟶ x%A ⟶ y%A ⟶ ⊦x =(A∕r) s ⟶ ⊦y =(A∕r) s ⟶ ⊦x =(A∕r) y ❘
= [A,r,x,y,s,P,Q,R,S,T,U] eq_trans (quotient_I R P) Q (quotient_I S P) T eq_sym U ❙
= [A,B,f,r,P,Q,R] ([s, k:s%A∕r] (quotient_E k ([x, l:x%A, m: ⊦x =(A∕r) s] Q x l) ([x, y, l:x%A, m:y%A, n: ⊦x =(A∕r) s, o: ⊦y =(A∕r) s] R x y l m (func_trans_quo P k l m n o)))) ❙
props_in_true: {F} F%(bool|[x] x =bool true) ⟶ ⊦F ❘
= [F,P] valid_eq trueI (refine_E2 P)❙
true_props_at_true: {F} F%(bool|[x] x =bool true) ⟶ ⊦F =(bool|[x] x =bool true) true ❘
= [A,r,s,P,Q] props_in_true (quotient_E_quick Q ([z,k:z%A] in_class_bool_true A r z P k) ([z,zˈ,k:z%A,l:zˈ%A] ground_type_in_class P k l)) ❙
prop_quo_true: {A,r,s,p} $A∕r ⟶ s%A∕r ⟶ ({x} x%A ⟶ p x%(bool|[x] x =bool true)) ⟶ (p s)%(bool|[x] x =bool true) ❘
= [A,r,s,p,P,Q,R] (quotient_E_quick Q ([z,k:z%A] R z k) ([z,zˈ,k:z%A,l:zˈ%A] both_true_equals (refine_E1 R z k) (refine_E1 R zˈ l) (props_in_true R z k) (props_in_true R zˈ l))) ❙
quotient_sub: {A,Aˈ,r,rˈ} A<Aˈ ⟶ isEqRel A r ⟶ isEqRel Aˈ rˈ ⟶ ({x,y} x%A ⟶ y%A ⟶ ⊦r x y ⟶ ⊦rˈ x y) ⟶ A∕r < Aˈ∕rˈ ❘
= [A,Aˈ,r,rˈ,P,Q,R,S] [s,k:s%A∕r] quotient_E k ([x, l:x%A, m:⊦x=(A∕r) s] quotient_I Aˈ x rˈ (P x l) (quotient_form R)) ([x, xˈ, l:x%A, m:xˈ%A, n:⊦x=(A∕r) s, o:⊦xˈ=(A∕r) s] valid_eq (S x xˈ l m (valid_eq_flip (func_trans_quo A r x xˈ s (quotient_form Q) k l m n o) (quotient_eq l m Q))) (quotient_eq Aˈ x xˈ rˈ (P x l) (P xˈ m) R))❙
= [A,Aˈ,r,rˈ,P,Q,R,S] [s,k:s%A∕r] quotient_E k ([x, l:x%A, m:⊦x=(A∕r) s] quotient_I Aˈ x rˈ (P x l) (quotient_form R)) ([x, xˈ, l:x%A, m:xˈ%A, n:⊦x=(A∕r) s, o:⊦xˈ=(A∕r) s] valid_eq (S x xˈ l m (valid_eq_flip (eq_trans (quotient_I l (quotient_form Q)) k (quotient_I m (quotient_form Q)) n eq_sym o) (quotient_eq l m Q))) (quotient_eq Aˈ x xˈ rˈ (P x l) (P xˈ m) R))❙
quotient_subtp: {A,r} $A∕r ⟶ A < A∕r ❘
= [A,r,P] [x, s: x%A] (quotient_I A x r) s P ❙
...
...
@@ -321,11 +301,11 @@ theory DHOL : ur:?LF =
quotient_eq_triv_quotient: {A} A ≡ A∕([x,y] x=A y) ❘
= [A] subtp_antisym (quotient_subtp (quotient_form quotient_triv)) ([s,k:s%A∕([x,y] x=A y)] quotient_E k ([kˈ,l:kˈ%A,m:⊦kˈ =(A∕([x,y] x=A y)) s] l) ([kˈ,lˈ, m:kˈ%A,n:lˈ%A, o:⊦kˈ =(A∕([x,y] x=A y)) s,p:⊦lˈ =(A∕([x,y] x=A y)) s] valid_eq_flip (eq_trans (quotient_I m (quotient_form quotient_triv)) k (quotient_I n (quotient_form quotient_triv)) o (eq_sym p)) quotient_eq m n quotient_triv)) ❙
quotient_triv_eq: {A,r} isEqRel A r ⟶ isEqRel A ([x,y] x=(A∕r) y) ❘
= [A,r,P] [x,y,z,w, k:x%A,l:y%A,m:z%A,n:w%A] and_I (and_I (eq_refl quotient_I k (quotient_form P)) (equivalence_I ([f:⊦x=(A∕r) w] eq_sym f) ([f:⊦w=(A∕r) x] eq_sym f))) (impl_I ([f:⊦(x=(A∕r) y ∧ y=(A∕r) z)] eq_trans (quotient_I k quotient_form P) (quotient_I l quotient_form P) (quotient_I m quotient_form P) (and_El f) (and_Er f))) ❙
= [A,r,P] [x,y,z, k:x%A,l:y%A,m:z%A] and_I (and_I (eq_refl quotient_I k (quotient_form P)) (equivalence_I ([f:⊦x=(A∕r) y] eq_sym f) ([f:⊦y=(A∕r) x] eq_sym f))) (impl_I ([f:⊦(x=(A∕r) y ∧ y=(A∕r) z)] eq_trans (quotient_I k quotient_form P) (quotient_I l quotient_form P) (quotient_I m quotient_form P) (and_El f) (and_Er f))) ❙
quotient_triv_eq_eq: {A,r} isEqRel A r ⟶ (A∕r) ≡ A∕([x,y] x=(A∕r) y) ❘
= [A,r,P] quotient_eq_rel eqtp_refl P (quotient_triv_eq P) ([x,y, k:x%A,l:y%A] eq_sym quotient_eq k l P ) ❙
EqRel_on_quo: {A,r} isEqRel A r ⟶ isEqRel (A∕r) r ❘
= [A,r,P] [x,y,z,w, k:x%A∕r,l:y%A∕r,m:z%A∕r,n:w%A∕r] and_I (and_I (valid_eq_flip (eq_refl k) (props_in_true (quotient_eqv A x x r k k P ([s,t, f:s%A,g:t%A] EqRel_tp P f g)))) (equivalence_I ([f:⊦r x w] (valid_eq_flip (eq_sym (valid_eq f (props_in_true (quotient_eqv A x w r k n P ([s,t, g:s%A,h:t%A] EqRel_tp P g h))))) (props_in_true (quotient_eqv A w x r n k P ([s,t, g:s%A,h:t%A] EqRel_tp P g h))))) ([f:⊦r w x] (valid_eq_flip (eq_sym (valid_eq f (props_in_true (quotient_eqv A w x r n k P ([s,t, g:s%A,h:t%A] EqRel_tp P g h))))) (props_in_true (quotient_eqv A x w r k n P ([s,t, g:s%A,h:t%A] EqRel_tp P g h))))))) (impl_I ([f:⊦(r x y)∧(r y z)] valid_eq_flip (eq_trans k l m (valid_eq (and_El f) (props_in_true (quotient_eqv A x y r k l P ([s,t, g:s%A,h:t%A] EqRel_tp P g h)))) (valid_eq (and_Er f) (props_in_true (quotient_eqv A y z r l m P ([s,t, g:s%A,h:t%A] EqRel_tp P g h))))) (props_in_true (quotient_eqv A x z r k m P ([s,t, g:s%A,h:t%A] EqRel_tp P g h))))) ❙
= [A,r,P] [x,y,z, k:x%A∕r,l:y%A∕r,m:z%A∕r] and_I (and_I (valid_eq_flip (eq_refl k) (props_in_true (quotient_eqv A x x r k k P ([s,t, f:s%A,g:t%A] EqRel_tp P f g)))) (equivalence_I ([f:⊦r x y] (valid_eq_flip (eq_sym (valid_eq f (props_in_true (quotient_eqv A x y r k l P ([s,t, g:s%A,h:t%A] EqRel_tp P g h))))) (props_in_true (quotient_eqv A y x r l k P ([s,t, g:s%A,h:t%A] EqRel_tp P g h))))) ([f:⊦r y x] (valid_eq_flip (eq_sym (valid_eq f (props_in_true (quotient_eqv A y x r l k P ([s,t, g:s%A,h:t%A] EqRel_tp P g h))))) (props_in_true (quotient_eqv A x y r k l P ([s,t, g:s%A,h:t%A] EqRel_tp P g h))))))) (impl_I ([f:⊦(r x y)∧(r y z)] valid_eq_flip (eq_trans k l m (valid_eq (and_El f) (props_in_true (quotient_eqv A x y r k l P ([s,t, g:s%A,h:t%A] EqRel_tp P g h)))) (valid_eq (and_Er f) (props_in_true (quotient_eqv A y z r l m P ([s,t, g:s%A,h:t%A] EqRel_tp P g h))))) (props_in_true (quotient_eqv A x z r k m P ([s,t, g:s%A,h:t%A] EqRel_tp P g h))))) ❙
quotient_idempotent: {A,r} isEqRel A r ⟶ ((A∕r)∕r) ≡ (A∕r) ❘
= [A,r,P] subtp_antisym ([s,k:s%(A∕r)∕r] quotient_E k ([x,l:x%A∕r, m:⊦x=((A∕r)∕r)s] l) ([x,y, l:x%A∕r,m:y%A∕r, n:⊦x=((A∕r)∕r)s,o:⊦y=((A∕r)∕r)s] valid_eq (valid_eq_flip (eq_trans (quotient_I (A∕r) x r l (quotient_form (EqRel_on_quo P))) k (quotient_I (A∕r) y r m (quotient_form (EqRel_on_quo P))) n (eq_sym o)) (quotient_eq (A∕r) x y r l m (EqRel_on_quo P))) (props_in_true (quotient_eqv l m P ([z,w, g:z%A,h:w%A] EqRel_tp P g h))))) (quotient_subtp quotient_form EqRel_on_quo P) ❙
repeated_quo_help: {A,r,rˈ} isEqRel A r ⟶ isEqRel (A∕r) rˈ ⟶ isEqRel A rˈ ❘
= [A,r,rˈ,P,Q] [x,y,z,w, k:x%A,l:y%A,m:z%A,n:w%A] and_I (and_I (EqRel_refl Q (quotient_I k (quotient_form P))) (EqRel_sym Q (quotient_I k (quotient_form P)) (quotient_I n (quotient_form P)))) (EqRel_trans Q (quotient_I k (quotient_form P)) (quotient_I l (quotient_form P)) (quotient_I m (quotient_form P)))❙
= [A,r,rˈ,P,Q] [x,y,z, k:x%A,l:y%A,m:z%A] and_I (and_I (EqRel_refl Q (quotient_I k (quotient_form P))) (EqRel_sym Q (quotient_I k (quotient_form P)) (quotient_I l (quotient_form P)))) (EqRel_trans Q (quotient_I k (quotient_form P)) (quotient_I l (quotient_form P)) (quotient_I m (quotient_form P)))❙
repeated_quo_help2: {A,r,rˈ} isEqRel A r ⟶ isEqRel (A∕r) rˈ ⟶ A∕rˈ < (A∕r)∕rˈ ❘
= [A,r,rˈ,P,Q] quotient_sub A (A∕r) rˈ rˈ (quotient_subtp quotient_form P) (repeated_quo_help P Q) Q ([x,y, kˈ:x%A,lˈ:y%A, m:⊦rˈ x y] m )❙
repeated_quo_help3: {A,r,rˈ,x,y} isEqRel A r ⟶ isEqRel (A∕r) rˈ ⟶ x%A ⟶ y%A ⟶ ⊦r x y ⟶ ⊦rˈ x y ❘
...
...
@@ -347,7 +327,7 @@ theory DHOL : ur:?LF =
= [A,r,rˈ,P,Q] subtp_antisym (subtp_trans (repeated_quo_help5 A r rˈ P Q) (eqtp_subtp (quotient_idempotent (repeated_quo_help A r rˈ P Q)))) (repeated_quo_help2 P Q) ❙
quo_in_ref_subtp: {A,r,p} isEqRel A r ⟶ ({x} x%A ⟶ p x%bool) ⟶ isEqRel (A|p) r ❘
= [A,r,p,P,Q] [x,y,z,w, k:x%A|p,l:y%A|p,m:z%A|p,n:w%A|p] and_I (and_I (EqRel_refl P (refine_E1 k)) (EqRel_sym P (refine_E1 k) (refine_E1 n))) (EqRel_trans P (refine_E1 k) (refine_E1 l) (refine_E1 m))❙
= [A,r,p,P,Q] [x,y,z, k:x%A|p,l:y%A|p,m:z%A|p] and_I (and_I (EqRel_refl P (refine_E1 k)) (EqRel_sym P (refine_E1 k) (refine_E1 l))) (EqRel_trans P (refine_E1 k) (refine_E1 l) (refine_E1 m))❙
repeated_ref_quo_help: {A,r,p} isEqRel A r ⟶ ({x} x%A∕r ⟶ p x%bool) ⟶ (A∕r)|p < (A|p)∕r ❘
= [A,B,r,P] [f,g,h,i, k:f%(Π A ([x] (B x)∕r)),l:g%(Π A ([x] (B x)∕r)),m:h%(Π A ([x] (B x)∕r)),n:i%(Π A ([x] (B x)∕r))]
= [A,B,r,P] [f,g,h, k:f%(Π A ([x] (B x)∕r)),l:g%(Π A ([x] (B x)∕r)),m:h%(Π A ([x] (B x)∕r))]
(and_I (and_I
(
forall_I ([b,c:b%A] EqRel_refl (quo_codomain_EqRel c (P b c)) (app_tp k c))
)
(
equivalence_I
([a:⊦∀ A [x] (r (f@x) (i@x))]
([a:⊦∀ A [x] (r (f@x) (g@x))]
forall_I ([b, c:b%A]
impl_E
(equivalence_El (EqRel_sym (quo_codomain_EqRel c (P b c)) (app_tp k c) (app_tp n c)))
(equivalence_El (EqRel_sym (quo_codomain_EqRel c (P b c)) (app_tp k c) (app_tp l c)))
(forall_E a c)
))
([a:⊦∀ A [x] (r (i@x) (f@x))]
([a:⊦∀ A [x] (r (g@x) (f@x))]
forall_I ([b, c:b%A]
impl_E
(equivalence_El (EqRel_sym (quo_codomain_EqRel c (P b c)) (app_tp n c) (app_tp k c)))
(equivalence_El (EqRel_sym (quo_codomain_EqRel c (P b c)) (app_tp l c) (app_tp k c)))
(forall_E a c)
))
))
...
...
@@ -465,7 +445,7 @@ theory DHOL : ur:?LF =
quotiented_codomain_ax: {A,B,r} (Π A ([x] (B x)∕r)) < (Π A [x] B x)∕([f,g] ∀ A [x] (r (f@x) (g@x))) ❙
quotiented_codomain: {A,B,r} ({x} x%A ⟶ isEqRel (B x) r) ⟶ isEqRel (Π A [x] B x) ([f,g] ∀ A [x] (r (f@x) (g@x))) ⟶ (Π A [x] B x)∕([f,g] ∀ A [x] (r (f@x) (g@x))) < (Π A ([x] (B x)∕r)) ❘
quotiented_codomain_l: {A,B,r} ({x} x%A ⟶ isEqRel (B x) r) ⟶ isEqRel (Π A [x] B x) ([f,g] ∀ A [x] (r (f@x) (g@x))) ⟶ (Π A [x] B x)∕([f,g] ∀ A [x] (r (f@x) (g@x))) < (Π A ([x] (B x)∕r)) ❘
= [A,B,r,P,Q] [f,k:f%(Π A [x] B x)∕([u,v] ∀ A [x] (r (u@x) (v@x)))]
(quotient_E k
([g,l:g%(Π A [x] B x),m:⊦g=((Π A [x] B x)∕([u,v] ∀ A [x] (r (u@x) (v@x))))f]
...
...
@@ -485,6 +465,9 @@ theory DHOL : ur:?LF =
))
)
❙
quotiented_codomain: {A,B,r} ({x} x%A ⟶ isEqRel (B x) r) ⟶ isEqRel (Π A [x] B x) ([f,g] ∀ A [x] (r (f@x) (g@x))) ⟶ (Π A ([x] (B x)∕r)) ≡ (Π A [x] B x)∕([f,g] ∀ A [x] (r (f@x) (g@x))) ❘
= [A,B,r,P,Q] subtp_antisym (quotiented_codomain_ax) (quotiented_codomain_l P Q)❙
refined_domain: {A,B,p} isEqRel (Π A [x] B x) ([f,g] ∀ A [x] (p x ⇒ (f@x) =(B x) (g@x))) ⟶ (Π A [x] B x)∕([f,g] ∀ A [x] (p x ⇒ (f@x) =(B x) (g@x))) < (Π (A|p) [x] B x) ❘
= [A,B,p,P] [f,k:f%((Π A [x] B x)∕([g,h] ∀ A [x] (p x ⇒ (g@x) =(B x) (h@x))))]