@@ -46,23 +46,27 @@ pub fn id_def<A: Prop, X: Prop, N: Nat>(
46
46
) -> Eq < App < Id < X > , A > , A > { unimplemented ! ( ) }
47
47
/// `inv(id{x}) == id{x}`.
48
48
pub fn id_inv < X : Prop > ( ) -> Eq < Inv < App < FId , X > > , App < FId , X > > { unimplemented ! ( ) }
49
- /// `(f : a -> b) ⋀ (f . inv(f)) => id{b}`.
49
+ /// `~(f . inv(f)) ⋀ (f : a -> b) ⋀ (f . inv(f)) => id{b}`.
50
50
pub fn comp_right_inv_to_id < F : Prop , A : Prop , B : Prop > (
51
+ _: Qu < Comp < F , Inv < F > > > ,
51
52
_: Ty < F , Pow < B , A > > ,
52
53
_: Comp < F , Inv < F > >
53
54
) -> App < FId , B > { unimplemented ! ( ) }
54
- /// `(f : a -> b) ⋀ id{b} => (f . inv(f))`.
55
+ /// `~ (f . inv(f)) ⋀ (f : a -> b) ⋀ id{b} => (f . inv(f))`.
55
56
pub fn id_to_comp_right_inv < F : Prop , A : Prop , B : Prop > (
57
+ _: Qu < Comp < F , Inv < F > > > ,
56
58
_: Ty < F , Pow < B , A > > ,
57
59
_: App < FId , B >
58
60
) -> Comp < F , Inv < F > > { unimplemented ! ( ) }
59
- /// `(f : a -> b) ⋀ (inv(f) . f) => id{a}`.
61
+ /// `~(inv(f) . f) ⋀ (f : a -> b) ⋀ (inv(f) . f) => id{a}`.
60
62
pub fn comp_left_inv_to_id < F : Prop , A : Prop , B : Prop > (
63
+ _: Qu < Comp < Inv < F > , F > > ,
61
64
_: Ty < F , Pow < B , A > > ,
62
65
_: Comp < Inv < F > , F >
63
66
) -> App < FId , A > { unimplemented ! ( ) }
64
- /// `(f : a -> b) ⋀ id{a} => (inv(f). f)`.
67
+ /// `~(inv(f) . f) ⋀ (f : a -> b) ⋀ id{a} => (inv(f). f)`.
65
68
pub fn id_to_comp_left_inv < F : Prop , A : Prop , B : Prop > (
69
+ _: Qu < Comp < Inv < F > , F > > ,
66
70
_: Ty < F , Pow < B , A > > ,
67
71
_: App < FId , A >
68
72
) -> Comp < Inv < F > , F > { unimplemented ! ( ) }
@@ -93,12 +97,18 @@ pub fn self_inv_to_eq_id<F: Prop, A: Prop>(
93
97
ty_f : Ty < F , Pow < A , A > > ,
94
98
eq_f : Eq < Inv < F > , F >
95
99
) -> Eq < Comp < F , F > , App < FId , A > > {
100
+ let x = inv:: self_inv_to_q ( eq_f. clone ( ) ) ;
101
+ let qu_f = qubit:: Qubit :: from_q ( quality:: right ( x. clone ( ) ) ) ;
102
+ let qu_inv_f = qubit:: Qubit :: from_q ( quality:: left ( x) ) ;
103
+ let qu_comp_f_inv_f = comp:: comp_qu ( qu_inv_f, qu_f) ;
104
+ let qu_comp_f_inv_f_2 = qu_comp_f_inv_f. clone ( ) ;
96
105
let ty_f_2 = ty_f. clone ( ) ;
97
106
let eq_f_2 = eq_f. clone ( ) ;
98
107
(
99
- Rc :: new ( move |x| comp_right_inv_to_id ( ty_f_2. clone ( ) ,
108
+ Rc :: new ( move |x| comp_right_inv_to_id ( qu_comp_f_inv_f . clone ( ) , ty_f_2. clone ( ) ,
100
109
comp_in_right_arg ( x, eq:: symmetry ( eq_f_2. clone ( ) ) ) ) ) ,
101
- Rc :: new ( move |x| comp_in_right_arg ( id_to_comp_right_inv ( ty_f. clone ( ) , x) , eq_f. clone ( ) ) ) ,
110
+ Rc :: new ( move |x| comp_in_right_arg ( id_to_comp_right_inv ( qu_comp_f_inv_f_2. clone ( ) ,
111
+ ty_f. clone ( ) , x) , eq_f. clone ( ) ) ) ,
102
112
)
103
113
}
104
114
/// `inv(id{a}) ~~ id{a}`.
@@ -173,19 +183,23 @@ pub fn para_to_eq_qu<A: Prop>(para_a: Para<A>) -> Eq<Qu<A>, A> {
173
183
pub fn pow_to_eq_qu < A : Prop , B : Prop > ( x : Pow < A , B > ) -> Eq < Qu < Pow < A , B > > , Pow < A , B > > {
174
184
tauto_to_eq_qu ( x. lift ( ) )
175
185
}
176
- /// `(f : a -> b) => (inv(f) . f) == id{a}`.
186
+ /// `~(inv(f) . f) ⋀ (f : a -> b) => (inv(f) . f) == id{a}`.
177
187
pub fn eq_comp_left_inv_id < F : Prop , A : Prop , B : Prop > (
188
+ qu_comp_inv_f_f : Qu < Comp < Inv < F > , F > > ,
178
189
ty_f : Ty < F , Pow < B , A > >
179
190
) -> Eq < Comp < Inv < F > , F > , Id < A > > {
180
191
let ty_f2 = ty_f. clone ( ) ;
181
- ( Rc :: new ( move |x| comp_left_inv_to_id ( ty_f. clone ( ) , x) ) ,
182
- Rc :: new ( move |x| id_to_comp_left_inv ( ty_f2. clone ( ) , x) ) )
192
+ let qu_comp_inv_f_f_2 = qu_comp_inv_f_f. clone ( ) ;
193
+ ( Rc :: new ( move |x| comp_left_inv_to_id ( qu_comp_inv_f_f. clone ( ) , ty_f. clone ( ) , x) ) ,
194
+ Rc :: new ( move |x| id_to_comp_left_inv ( qu_comp_inv_f_f_2. clone ( ) , ty_f2. clone ( ) , x) ) )
183
195
}
184
- /// `(f : a -> b) => (f . inv(f)) == id{b}`.
196
+ /// `~(f . inv(f)) ⋀ (f : a -> b) => (f . inv(f)) == id{b}`.
185
197
pub fn eq_comp_right_inv_id < F : Prop , A : Prop , B : Prop > (
198
+ qu_comp_f_inv_f : Qu < Comp < F , Inv < F > > > ,
186
199
ty_f : Ty < F , Pow < B , A > >
187
200
) -> Eq < Comp < F , Inv < F > > , Id < B > > {
188
201
let ty_f2 = ty_f. clone ( ) ;
189
- ( Rc :: new ( move |x| comp_right_inv_to_id ( ty_f. clone ( ) , x) ) ,
190
- Rc :: new ( move |x| id_to_comp_right_inv ( ty_f2. clone ( ) , x) ) )
202
+ let qu_comp_f_inv_f_2 = qu_comp_f_inv_f. clone ( ) ;
203
+ ( Rc :: new ( move |x| comp_right_inv_to_id ( qu_comp_f_inv_f. clone ( ) , ty_f. clone ( ) , x) ) ,
204
+ Rc :: new ( move |x| id_to_comp_right_inv ( qu_comp_f_inv_f_2. clone ( ) , ty_f2. clone ( ) , x) ) )
191
205
}
0 commit comments