Last active
October 9, 2021 08:43
-
-
Save mukeshtiwari/82d56ffdce8e9707cb2c9baf610608b6 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
up: N | |
Hacc: ∀ y : N, y < up → Acc (λ x y0 : N, x < y0) y | |
IHup: ∀ y : N, y < up → length (length_byte_list y) = N.to_nat (y / 256 + 1) | |
Hnp: (up <? 256) = true | |
Hup: up / 256 = 0 | |
----------------------------------------------------------------------------- | |
1/1 | |
length | |
((if up <? 256 as upp return ((up <? 256) = upp → list byte) | |
then | |
λ Hnp0 : (up <? 256) = true, | |
(np_total up (match N.ltb_lt up 256 with | |
| conj H _ => H | |
end Hnp0) :: Datatypes.nil)%list | |
else | |
λ Hnp0 : (up <? 256) = false, | |
(np_total (up mod 256) (nmod_256 up) | |
:: (if up / 256 <? 256 as upp | |
return ((up / 256 <? 256) = upp → list byte) | |
then | |
λ Hnp1 : (up / 256 <? 256) = true, | |
np_total (up / 256) | |
(match N.ltb_lt (up / 256) 256 with | |
| conj H _ => H | |
end Hnp1) :: Datatypes.nil | |
else | |
λ Hnp1 : (up / 256 <? 256) = false, | |
np_total ((up / 256) mod 256) (nmod_256 (up / 256)) | |
:: (fix length_byte_list | |
(up0 : N) (H : Acc (λ x y : N, x < y) (up0 / 256)) | |
{struct H} : list byte := | |
(if up0 <? 256 as upp | |
return ((up0 <? 256) = upp → list byte) | |
then | |
λ Hnp2 : (up0 <? 256) = true, | |
np_total up0 | |
(match N.ltb_lt up0 256 with | |
| conj H0 _ => H0 | |
end Hnp2) :: Datatypes.nil | |
else | |
λ Hnp2 : (up0 <? 256) = false, | |
np_total (up0 mod 256) (nmod_256 up0) | |
:: length_byte_list (up0 / 256) | |
(Acc_inv H | |
match | |
N_eq_gt up0 (up0 / 256) | |
(match N.ltb_ge up0 256 with | |
| conj H0 _ => H0 | |
end Hnp2) eq_refl | |
with | |
| conj _ H0 => H0 | |
end)) eq_refl) (up / 256 / 256) | |
(Acc_ind (λ x : N, ∀ a : N, a < x → Acc N.lt a) | |
(λ (z : N) (_ : ∀ y : N, zwf y z → Acc zwf y) | |
(IHz : ∀ y : N, | |
zwf y z → ∀ a : N, a < y → Acc N.lt a) | |
(a : N) (Hxa : a < z), | |
Acc_intro a | |
(λ (y : N) (Hy : y < a), | |
IHz a | |
(Morphisms.iff_flip_impl_subrelation | |
(N.to_nat a < N.to_nat z)%nat | |
(Z.of_N a < Z.of_N z)%Z | |
(ZifyClasses.mkrel nat Z lt Z.of_nat Z.lt | |
Nat2Z.inj_lt | |
(N.to_nat a) | |
(Z.of_N a) | |
(ZifyClasses.mkapp N nat Z Z N.to_nat | |
Z.of_N Z.of_nat | |
(λ x : Z, x) N_nat_Z a | |
(Z.of_N a) eq_refl) | |
(N.to_nat z) | |
(Z.of_N z) | |
(ZifyClasses.mkapp N nat Z Z N.to_nat | |
Z.of_N Z.of_nat | |
(λ x : Z, x) N_nat_Z z | |
(Z.of_N z) eq_refl)) | |
(ZMicromega.ZTautoChecker_sound | |
(Tauto.IMPL | |
(Tauto.A Tauto.isProp | |
{| | |
RingMicromega.Flhs := | |
EnvRing.PEX 1; | |
RingMicromega.Fop := | |
RingMicromega.OpLt; | |
RingMicromega.Frhs := | |
EnvRing.PEX 2 | |
|} tt) None | |
(Tauto.A Tauto.isProp | |
{| | |
RingMicromega.Flhs := | |
EnvRing.PEX 1; | |
RingMicromega.Fop := | |
RingMicromega.OpLt; | |
RingMicromega.Frhs := | |
EnvRing.PEX 2 | |
|} tt)) Datatypes.nil eq_refl | |
(λ p : positive, | |
match p with | |
| (_~1)%positive => 0%Z | |
| (_~0)%positive => Z.of_N z | |
| 1%positive => Z.of_N a | |
end) | |
(ZifyClasses.rew_iff | |
(a < z) | |
(Z.of_N a < Z.of_N z)%Z | |
(ZifyClasses.mkrel N Z N.lt Z.of_N | |
Z.lt N2Z.inj_lt a | |
(Z.of_N a) eq_refl z | |
(Z.of_N z) eq_refl) Hxa))) y | |
(Morphisms.iff_flip_impl_subrelation | |
(y < a) (Z.of_N y < Z.of_N a)%Z | |
(ZifyClasses.mkrel N Z N.lt Z.of_N Z.lt | |
N2Z.inj_lt y | |
(Z.of_N y) eq_refl a | |
(Z.of_N a) eq_refl) | |
(ZMicromega.ZTautoChecker_sound | |
(Tauto.IMPL | |
(Tauto.A Tauto.isProp | |
{| | |
RingMicromega.Flhs := | |
EnvRing.PEX 1; | |
RingMicromega.Fop := | |
RingMicromega.OpLt; | |
RingMicromega.Frhs := | |
EnvRing.PEX 2 | |
|} tt) None | |
(Tauto.A Tauto.isProp | |
{| | |
RingMicromega.Flhs := | |
EnvRing.PEX 1; | |
RingMicromega.Fop := | |
RingMicromega.OpLt; | |
RingMicromega.Frhs := | |
EnvRing.PEX 2 | |
|} tt)) Datatypes.nil eq_refl | |
(λ p : positive, | |
match p with | |
| (_~1)%positive => 0%Z | |
| (_~0)%positive => Z.of_N a | |
| 1%positive => Z.of_N y | |
end) | |
(ZifyClasses.rew_iff | |
(y < a) | |
(Z.of_N y < Z.of_N a)%Z | |
(ZifyClasses.mkrel N Z N.lt Z.of_N | |
Z.lt N2Z.inj_lt y | |
(Z.of_N y) eq_refl a | |
(Z.of_N a) eq_refl) Hy))))) | |
(nat_ind | |
(λ n : nat, | |
∀ a : N, | |
(N.to_nat a < n)%nat | |
→ Acc (ltof N (λ a0 : N, N.to_nat a0)) a) | |
(λ (a : N) (Ha : (N.to_nat a < 0)%nat), | |
False_ind | |
(Acc (ltof N (λ a0 : N, N.to_nat a0)) a) | |
(Nat.nlt_0_r Ha)) | |
(λ (n : nat) (IHn : ∀ a : N, | |
(N.to_nat a < n)%nat | |
→ | |
Acc | |
(ltof N | |
(λ a0 : N, N.to_nat a0)) a) | |
(a : N) (Ha : (N.to_nat a < S n)%nat), | |
Acc_intro a | |
(λ (b : N) (Hb : (N.to_nat b < N.to_nat a)%nat), | |
IHn b (Nat.lt_le_trans Hb (lt_n_Sm_le Ha)))) | |
(N.to_nat (up / 256)) (up / 256 / 256) | |
(Nat.lt_le_trans | |
(Morphisms.iff_flip_impl_subrelation | |
(N.to_nat (up / 256 / 256) < | |
N.to_nat (up / 256))%nat | |
(Z.of_N (up / 256 / 256) < Z.of_N (up / 256))%Z | |
(ZifyClasses.mkrel nat Z lt Z.of_nat Z.lt | |
Nat2Z.inj_lt (N.to_nat (up / 256 / 256)) | |
(Z.of_N (up / 256 / 256)) | |
(ZifyClasses.mkapp N nat Z Z N.to_nat | |
Z.of_N Z.of_nat | |
(λ x : Z, x) N_nat_Z | |
(up / 256 / 256) | |
(Z.of_N (up / 256 / 256)) eq_refl) | |
(N.to_nat (up / 256)) | |
(Z.of_N (up / 256)) | |
(ZifyClasses.mkapp N nat Z Z N.to_nat | |
Z.of_N Z.of_nat | |
(λ x : Z, x) N_nat_Z | |
(up / 256) (Z.of_N (up / 256)) eq_refl)) | |
(ZMicromega.ZTautoChecker_sound | |
(Tauto.IMPL | |
(Tauto.A Tauto.isProp | |
{| | |
RingMicromega.Flhs := | |
EnvRing.PEX 1; | |
RingMicromega.Fop := | |
RingMicromega.OpLt; | |
RingMicromega.Frhs := | |
EnvRing.PEX 2 | |
|} tt) None | |
(Tauto.A Tauto.isProp | |
{| | |
RingMicromega.Flhs := | |
EnvRing.PEX 1; | |
RingMicromega.Fop := | |
RingMicromega.OpLt; | |
RingMicromega.Frhs := | |
EnvRing.PEX 2 | |
|} tt)) Datatypes.nil eq_refl | |
(λ p : positive, | |
match p with | |
| (_~1)%positive => 0%Z | |
| (_~0)%positive => Z.of_N (up / 256) | |
| 1%positive => Z.of_N (up / 256 / 256) | |
end) | |
(ZifyClasses.rew_iff | |
(up / 256 / 256 < up / 256) | |
(Z.of_N (up / 256 / 256) < | |
Z.of_N (up / 256))%Z | |
(ZifyClasses.mkrel N Z N.lt Z.of_N Z.lt | |
N2Z.inj_lt | |
(up / 256 / 256) | |
(Z.of_N (up / 256 / 256)) eq_refl | |
(up / 256) | |
(Z.of_N (up / 256)) eq_refl) | |
match | |
N_eq_gt up | |
(up / 256) | |
(match N.ltb_ge up 256 with | |
| conj H _ => H | |
end Hnp0) eq_refl | |
with | |
| conj _ H => H | |
end))) | |
(lt_n_Sm_le (le_n (S (N.to_nat (up / 256))))))) | |
(up / 256 / 256 / 256) | |
(Morphisms.iff_flip_impl_subrelation | |
(up / 256 / 256 / 256 < up / 256 / 256) | |
(Z.of_N (up / 256 / 256 / 256) < | |
Z.of_N (up / 256 / 256))%Z | |
(ZifyClasses.mkrel N Z N.lt Z.of_N Z.lt N2Z.inj_lt | |
(up / 256 / 256 / 256) | |
(Z.of_N (up / 256 / 256 / 256)) eq_refl | |
(up / 256 / 256) (Z.of_N (up / 256 / 256)) | |
eq_refl) | |
(ZMicromega.ZTautoChecker_sound | |
(Tauto.IMPL | |
(Tauto.A Tauto.isProp | |
{| | |
RingMicromega.Flhs := EnvRing.PEX 1; | |
RingMicromega.Fop := RingMicromega.OpLt; | |
RingMicromega.Frhs := EnvRing.PEX 2 | |
|} tt) None | |
(Tauto.A Tauto.isProp | |
{| | |
RingMicromega.Flhs := EnvRing.PEX 1; | |
RingMicromega.Fop := RingMicromega.OpLt; | |
RingMicromega.Frhs := EnvRing.PEX 2 | |
|} tt)) Datatypes.nil eq_refl | |
(λ p : positive, | |
match p with | |
| (_~1)%positive => 0%Z | |
| (_~0)%positive => Z.of_N (up / 256 / 256) | |
| 1%positive => Z.of_N (up / 256 / 256 / 256) | |
end) | |
(ZifyClasses.rew_iff | |
(up / 256 / 256 / 256 < up / 256 / 256) | |
(Z.of_N (up / 256 / 256 / 256) < | |
Z.of_N (up / 256 / 256))%Z | |
(ZifyClasses.mkrel N Z N.lt Z.of_N Z.lt | |
N2Z.inj_lt (up / 256 / 256 / 256) | |
(Z.of_N (up / 256 / 256 / 256)) eq_refl | |
(up / 256 / 256) | |
(Z.of_N (up / 256 / 256)) eq_refl) | |
match | |
N_eq_gt (up / 256) | |
(up / 256 / 256) | |
(match N.ltb_ge (up / 256) 256 with | |
| conj H _ => H | |
end Hnp1) eq_refl | |
with | |
| conj _ H => H | |
end))))) eq_refl)%list) eq_refl) = | |
Pos.to_nat 1 | |
Error: | |
Abstracting over the term "up <? 256" leads to a term | |
λ b : bool, | |
length | |
((if b as upp return (b = upp → list byte) | |
then | |
λ Hnp0 : b = true, | |
(np_total up (match N.ltb_lt up 256 with | |
| conj H _ => H | |
end Hnp0) :: Datatypes.nil)%list | |
else | |
λ Hnp0 : b = false, | |
(np_total (up mod 256) (nmod_256 up) | |
:: (if up / 256 <? 256 as upp | |
return ((up / 256 <? 256) = upp → list byte) | |
then | |
λ Hnp1 : (up / 256 <? 256) = true, | |
np_total (up / 256) | |
(match N.ltb_lt (up / 256) 256 with | |
| conj H _ => H | |
end Hnp1) :: Datatypes.nil | |
else | |
λ Hnp1 : (up / 256 <? 256) = false, | |
np_total ((up / 256) mod 256) (nmod_256 (up / 256)) | |
:: (fix length_byte_list | |
(up0 : N) (H : Acc (λ x y : N, x < y) (up0 / 256)) | |
{struct H} : list byte := | |
(if up0 <? 256 as upp | |
return ((up0 <? 256) = upp → list byte) | |
then | |
λ Hnp2 : (up0 <? 256) = true, | |
np_total up0 | |
(match N.ltb_lt up0 256 with | |
| conj H0 _ => H0 | |
end Hnp2) :: Datatypes.nil | |
else | |
λ Hnp2 : (up0 <? 256) = false, | |
np_total (up0 mod 256) (nmod_256 up0) | |
:: length_byte_list (up0 / 256) | |
(Acc_inv H | |
match | |
N_eq_gt up0 (up0 / 256) | |
(match N.ltb_ge up0 256 with | |
| conj H0 _ => H0 | |
end Hnp2) eq_refl | |
with | |
| conj _ H0 => H0 | |
end)) eq_refl) | |
(up / 256 / 256) | |
(Acc_ind (λ x : N, ∀ a : N, a < x → Acc N.lt a) | |
(λ (z : N) (_ : ∀ y : N, zwf y z → Acc zwf y) | |
(IHz : ∀ y : N, | |
zwf y z → ∀ a : N, a < y → Acc N.lt a) | |
(a : N) (Hxa : a < z), | |
Acc_intro a | |
(λ (y : N) (Hy : y < a), | |
IHz a | |
(Morphisms.iff_flip_impl_subrelation | |
(N.to_nat a < N.to_nat z)%nat | |
(Z.of_N a < Z.of_N z)%Z | |
(ZifyClasses.mkrel nat Z lt Z.of_nat | |
Z.lt Nat2Z.inj_lt | |
(N.to_nat a) | |
(Z.of_N a) | |
(ZifyClasses.mkapp N nat Z Z | |
N.to_nat Z.of_N Z.of_nat | |
(λ x : Z, x) N_nat_Z a | |
(Z.of_N a) eq_refl) | |
(N.to_nat z) | |
(Z.of_N z) | |
(ZifyClasses.mkapp N nat Z Z | |
N.to_nat Z.of_N Z.of_nat | |
(λ x : Z, x) N_nat_Z z | |
(Z.of_N z) eq_refl)) | |
(ZMicromega.ZTautoChecker_sound | |
(Tauto.IMPL | |
(Tauto.A Tauto.isProp | |
{| | |
RingMicromega.Flhs := | |
EnvRing.PEX 1; | |
RingMicromega.Fop := | |
RingMicromega.OpLt; | |
RingMicromega.Frhs := | |
EnvRing.PEX 2 | |
|} tt) None | |
(Tauto.A Tauto.isProp | |
{| | |
RingMicromega.Flhs := | |
EnvRing.PEX 1; | |
RingMicromega.Fop := | |
RingMicromega.OpLt; | |
RingMicromega.Frhs := | |
EnvRing.PEX 2 | |
|} tt)) Datatypes.nil eq_refl | |
(λ p : positive, | |
match p with | |
| (_~1)%positive => 0%Z | |
| (_~0)%positive => Z.of_N z | |
| 1%positive => Z.of_N a | |
end) | |
(ZifyClasses.rew_iff | |
(a < z) | |
(Z.of_N a < Z.of_N z)%Z | |
(ZifyClasses.mkrel N Z N.lt | |
Z.of_N Z.lt N2Z.inj_lt a | |
(Z.of_N a) eq_refl z | |
(Z.of_N z) eq_refl) Hxa))) y | |
(Morphisms.iff_flip_impl_subrelation | |
(y < a) (Z.of_N y < Z.of_N a)%Z | |
(ZifyClasses.mkrel N Z N.lt Z.of_N Z.lt | |
N2Z.inj_lt y | |
(Z.of_N y) eq_refl a | |
(Z.of_N a) eq_refl) | |
(ZMicromega.ZTautoChecker_sound | |
(Tauto.IMPL | |
(Tauto.A Tauto.isProp | |
{| | |
RingMicromega.Flhs := | |
EnvRing.PEX 1; | |
RingMicromega.Fop := | |
RingMicromega.OpLt; | |
RingMicromega.Frhs := | |
EnvRing.PEX 2 | |
|} tt) None | |
(Tauto.A Tauto.isProp | |
{| | |
RingMicromega.Flhs := | |
EnvRing.PEX 1; | |
RingMicromega.Fop := | |
RingMicromega.OpLt; | |
RingMicromega.Frhs := | |
EnvRing.PEX 2 | |
|} tt)) Datatypes.nil eq_refl | |
(λ p : positive, | |
match p with | |
| (_~1)%positive => 0%Z | |
| (_~0)%positive => Z.of_N a | |
| 1%positive => Z.of_N y | |
end) | |
(ZifyClasses.rew_iff | |
(y < a) | |
(Z.of_N y < Z.of_N a)%Z | |
(ZifyClasses.mkrel N Z N.lt | |
Z.of_N Z.lt N2Z.inj_lt y | |
(Z.of_N y) eq_refl a | |
(Z.of_N a) eq_refl) Hy))))) | |
(nat_ind | |
(λ n : nat, | |
∀ a : N, | |
(N.to_nat a < n)%nat | |
→ Acc (ltof N (λ a0 : N, N.to_nat a0)) a) | |
(λ (a : N) (Ha : (N.to_nat a < 0)%nat), | |
False_ind | |
(Acc (ltof N (λ a0 : N, N.to_nat a0)) a) | |
(Nat.nlt_0_r Ha)) | |
(λ (n : nat) (IHn : ∀ a : N, | |
(N.to_nat a < n)%nat | |
→ | |
Acc | |
(ltof N | |
(λ a0 : N, N.to_nat a0)) a) | |
(a : N) (Ha : (N.to_nat a < S n)%nat), | |
Acc_intro a | |
(λ (b0 : N) (Hb : | |
(N.to_nat b0 < N.to_nat a)%nat), | |
IHn b0 | |
(Nat.lt_le_trans Hb (lt_n_Sm_le Ha)))) | |
(N.to_nat (up / 256)) | |
(up / 256 / 256) | |
(Nat.lt_le_trans | |
(Morphisms.iff_flip_impl_subrelation | |
(N.to_nat (up / 256 / 256) < | |
N.to_nat (up / 256))%nat | |
(Z.of_N (up / 256 / 256) < | |
Z.of_N (up / 256))%Z | |
(ZifyClasses.mkrel nat Z lt Z.of_nat Z.lt | |
Nat2Z.inj_lt | |
(N.to_nat (up / 256 / 256)) | |
(Z.of_N (up / 256 / 256)) | |
(ZifyClasses.mkapp N nat Z Z N.to_nat | |
Z.of_N Z.of_nat | |
(λ x : Z, x) N_nat_Z | |
(up / 256 / 256) | |
(Z.of_N (up / 256 / 256)) eq_refl) | |
(N.to_nat (up / 256)) | |
(Z.of_N (up / 256)) | |
(ZifyClasses.mkapp N nat Z Z N.to_nat | |
Z.of_N Z.of_nat | |
(λ x : Z, x) N_nat_Z | |
(up / 256) | |
(Z.of_N (up / 256)) eq_refl)) | |
(ZMicromega.ZTautoChecker_sound | |
(Tauto.IMPL | |
(Tauto.A Tauto.isProp | |
{| | |
RingMicromega.Flhs := | |
EnvRing.PEX 1; | |
RingMicromega.Fop := | |
RingMicromega.OpLt; | |
RingMicromega.Frhs := | |
EnvRing.PEX 2 | |
|} tt) None | |
(Tauto.A Tauto.isProp | |
{| | |
RingMicromega.Flhs := | |
EnvRing.PEX 1; | |
RingMicromega.Fop := | |
RingMicromega.OpLt; | |
RingMicromega.Frhs := | |
EnvRing.PEX 2 | |
|} tt)) Datatypes.nil eq_refl | |
(λ p : positive, | |
match p with | |
| (_~1)%positive => 0%Z | |
| (_~0)%positive => Z.of_N (up / 256) | |
| 1%positive => | |
Z.of_N (up / 256 / 256) | |
end) | |
(ZifyClasses.rew_iff | |
(up / 256 / 256 < up / 256) | |
(Z.of_N (up / 256 / 256) < | |
Z.of_N (up / 256))%Z | |
(ZifyClasses.mkrel N Z N.lt Z.of_N | |
Z.lt N2Z.inj_lt | |
(up / 256 / 256) | |
(Z.of_N (up / 256 / 256)) eq_refl | |
(up / 256) | |
(Z.of_N (up / 256)) eq_refl) | |
match | |
N_eq_gt up | |
(up / 256) | |
(match N.ltb_ge up 256 with | |
| conj H _ => H | |
end Hnp0) eq_refl | |
with | |
| conj _ H => H | |
end))) | |
(lt_n_Sm_le (le_n (S (N.to_nat (up / 256))))))) | |
(up / 256 / 256 / 256) | |
(Morphisms.iff_flip_impl_subrelation | |
(up / 256 / 256 / 256 < up / 256 / 256) | |
(Z.of_N (up / 256 / 256 / 256) < | |
Z.of_N (up / 256 / 256))%Z | |
(ZifyClasses.mkrel N Z N.lt Z.of_N Z.lt | |
N2Z.inj_lt (up / 256 / 256 / 256) | |
(Z.of_N (up / 256 / 256 / 256)) eq_refl | |
(up / 256 / 256) (Z.of_N (up / 256 / 256)) | |
eq_refl) | |
(ZMicromega.ZTautoChecker_sound | |
(Tauto.IMPL | |
(Tauto.A Tauto.isProp | |
{| | |
RingMicromega.Flhs := EnvRing.PEX 1; | |
RingMicromega.Fop := | |
RingMicromega.OpLt; | |
RingMicromega.Frhs := EnvRing.PEX 2 | |
|} tt) None | |
(Tauto.A Tauto.isProp | |
{| | |
RingMicromega.Flhs := EnvRing.PEX 1; | |
RingMicromega.Fop := | |
RingMicromega.OpLt; | |
RingMicromega.Frhs := EnvRing.PEX 2 | |
|} tt)) Datatypes.nil eq_refl | |
(λ p : positive, | |
match p with | |
| (_~1)%positive => 0%Z | |
| (_~0)%positive => Z.of_N (up / 256 / 256) | |
| 1%positive => | |
Z.of_N (up / 256 / 256 / 256) | |
end) | |
(ZifyClasses.rew_iff | |
(up / 256 / 256 / 256 < up / 256 / 256) | |
(Z.of_N (up / 256 / 256 / 256) < | |
Z.of_N (up / 256 / 256))%Z | |
(ZifyClasses.mkrel N Z N.lt Z.of_N Z.lt | |
N2Z.inj_lt (up / 256 / 256 / 256) | |
(Z.of_N (up / 256 / 256 / 256)) eq_refl | |
(up / 256 / 256) | |
(Z.of_N (up / 256 / 256)) eq_refl) | |
match | |
N_eq_gt (up / 256) | |
(up / 256 / 256) | |
(match N.ltb_ge (up / 256) 256 with | |
| conj H _ => H | |
end Hnp1) eq_refl | |
with | |
| conj _ H => H | |
end))))) eq_refl)%list) eq_refl) = | |
Pos.to_nat 1 | |
which is ill-typed. | |
Reason is: Incorrect elimination of "N.ltb_lt up 256" in the inductive type | |
"and": | |
ill-formed elimination predicate. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment