fix(library/equations_compiler): always use ite for string literals
This commit is contained in:
parent
50821c9fac
commit
de587f938c
2 changed files with 26 additions and 168 deletions
|
|
@ -541,12 +541,17 @@ struct elim_match_fn {
|
|||
return r && has_variable && has_constructor;
|
||||
}
|
||||
|
||||
/* Return true iff the next pattern of every equation is a value or variable,
|
||||
/* Return true if the next pattern of every equation is a value or variable,
|
||||
and there are at least one equation where it is a variable and another where it is a
|
||||
value. */
|
||||
value.
|
||||
|
||||
We also perform a value transition if one of the next patterns is a
|
||||
string literal.
|
||||
*/
|
||||
bool is_value_transition(problem const & P) {
|
||||
bool has_value = false;
|
||||
bool has_variable = false;
|
||||
bool has_string = false;
|
||||
bool r = all_equations(P, [&](equation const & eqn) {
|
||||
expr const & p = head(eqn.m_patterns);
|
||||
if (is_local(p)) {
|
||||
|
|
@ -554,12 +559,18 @@ struct elim_match_fn {
|
|||
} else {
|
||||
type_context ctx = mk_type_context(eqn.m_lctx);
|
||||
if (is_value(ctx, p)) {
|
||||
has_value = true; return true;
|
||||
has_value = true;
|
||||
if (is_string_value(p)) {
|
||||
has_string = true;
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
});
|
||||
if (has_string)
|
||||
return true;
|
||||
if (!r || !has_value || !has_variable)
|
||||
return false;
|
||||
type_context ctx = mk_type_context(P);
|
||||
|
|
|
|||
|
|
@ -3,169 +3,16 @@ g (1, _)
|
|||
g (nat.succ (nat.succ _), nat.succ _)
|
||||
non_exhaustive_error.lean:2:0: warning: declaration 'g' uses sorry
|
||||
non_exhaustive_error.lean:6:11: error: non-exhaustive match, the following cases are missing:
|
||||
f {data := list.nil char} _
|
||||
f {data := ⟨0, _⟩ :: _} _
|
||||
f {data := ⟨1, _⟩ :: _} _
|
||||
f {data := ⟨2, _⟩ :: _} _
|
||||
f {data := ⟨3, _⟩ :: _} _
|
||||
f {data := ⟨4, _⟩ :: _} _
|
||||
f {data := ⟨5, _⟩ :: _} _
|
||||
f {data := ⟨6, _⟩ :: _} _
|
||||
f {data := ⟨7, _⟩ :: _} _
|
||||
f {data := ⟨8, _⟩ :: _} _
|
||||
f {data := ⟨9, _⟩ :: _} _
|
||||
f {data := ⟨10, _⟩ :: _} _
|
||||
f {data := ⟨11, _⟩ :: _} _
|
||||
f {data := ⟨12, _⟩ :: _} _
|
||||
f {data := ⟨13, _⟩ :: _} _
|
||||
f {data := ⟨14, _⟩ :: _} _
|
||||
f {data := ⟨15, _⟩ :: _} _
|
||||
f {data := ⟨16, _⟩ :: _} _
|
||||
f {data := ⟨17, _⟩ :: _} _
|
||||
f {data := ⟨18, _⟩ :: _} _
|
||||
f {data := ⟨19, _⟩ :: _} _
|
||||
f {data := ⟨20, _⟩ :: _} _
|
||||
f {data := ⟨21, _⟩ :: _} _
|
||||
f {data := ⟨22, _⟩ :: _} _
|
||||
f {data := ⟨23, _⟩ :: _} _
|
||||
f {data := ⟨24, _⟩ :: _} _
|
||||
f {data := ⟨25, _⟩ :: _} _
|
||||
f {data := ⟨26, _⟩ :: _} _
|
||||
f {data := ⟨27, _⟩ :: _} _
|
||||
f {data := ⟨28, _⟩ :: _} _
|
||||
f {data := ⟨29, _⟩ :: _} _
|
||||
f {data := ⟨30, _⟩ :: _} _
|
||||
f {data := ⟨31, _⟩ :: _} _
|
||||
f {data := ⟨32, _⟩ :: _} _
|
||||
f {data := ⟨33, _⟩ :: _} _
|
||||
f {data := ⟨34, _⟩ :: _} _
|
||||
f {data := ⟨35, _⟩ :: _} _
|
||||
f {data := ⟨36, _⟩ :: _} _
|
||||
f {data := ⟨37, _⟩ :: _} _
|
||||
f {data := ⟨38, _⟩ :: _} _
|
||||
f {data := ⟨39, _⟩ :: _} _
|
||||
f {data := ⟨40, _⟩ :: _} _
|
||||
f {data := ⟨41, _⟩ :: _} _
|
||||
f {data := ⟨42, _⟩ :: _} _
|
||||
f {data := ⟨43, _⟩ :: _} _
|
||||
f {data := ⟨44, _⟩ :: _} _
|
||||
f {data := ⟨45, _⟩ :: _} _
|
||||
f {data := ⟨46, _⟩ :: _} _
|
||||
f {data := ⟨47, _⟩ :: _} _
|
||||
f {data := ⟨48, _⟩ :: _} _
|
||||
f {data := ⟨49, _⟩ :: _} _
|
||||
f {data := ⟨50, _⟩ :: _} _
|
||||
f {data := ⟨51, _⟩ :: _} _
|
||||
f {data := ⟨52, _⟩ :: _} _
|
||||
f {data := ⟨53, _⟩ :: _} _
|
||||
f {data := ⟨54, _⟩ :: _} _
|
||||
f {data := ⟨55, _⟩ :: _} _
|
||||
f {data := ⟨56, _⟩ :: _} _
|
||||
f {data := ⟨57, _⟩ :: _} _
|
||||
f {data := ⟨58, _⟩ :: _} _
|
||||
f {data := ⟨59, _⟩ :: _} _
|
||||
f {data := ⟨60, _⟩ :: _} _
|
||||
f {data := ⟨61, _⟩ :: _} _
|
||||
f {data := ⟨62, _⟩ :: _} _
|
||||
f {data := ⟨63, _⟩ :: _} _
|
||||
f {data := ⟨64, _⟩ :: _} _
|
||||
f {data := ⟨65, _⟩ :: _} _
|
||||
f {data := ⟨66, _⟩ :: _} _
|
||||
f {data := ⟨67, _⟩ :: _} _
|
||||
f {data := ⟨68, _⟩ :: _} _
|
||||
f {data := ⟨69, _⟩ :: _} _
|
||||
f {data := ⟨70, _⟩ :: _} _
|
||||
f {data := ⟨71, _⟩ :: _} _
|
||||
f {data := ⟨72, _⟩ :: _} _
|
||||
f {data := ⟨73, _⟩ :: _} _
|
||||
f {data := ⟨74, _⟩ :: _} _
|
||||
f {data := ⟨75, _⟩ :: _} _
|
||||
f {data := ⟨76, _⟩ :: _} _
|
||||
f {data := ⟨77, _⟩ :: _} _
|
||||
f {data := ⟨78, _⟩ :: _} _
|
||||
f {data := ⟨79, _⟩ :: _} _
|
||||
f {data := ⟨80, _⟩ :: _} _
|
||||
f {data := ⟨81, _⟩ :: _} _
|
||||
f {data := ⟨82, _⟩ :: _} _
|
||||
f {data := ⟨83, _⟩ :: _} _
|
||||
f {data := ⟨84, _⟩ :: _} _
|
||||
f {data := ⟨85, _⟩ :: _} _
|
||||
f {data := ⟨86, _⟩ :: _} _
|
||||
f {data := ⟨87, _⟩ :: _} _
|
||||
f {data := ⟨88, _⟩ :: _} _
|
||||
f {data := ⟨89, _⟩ :: _} _
|
||||
f {data := ⟨90, _⟩ :: _} _
|
||||
f {data := ⟨91, _⟩ :: _} _
|
||||
f {data := ⟨92, _⟩ :: _} _
|
||||
f {data := ⟨93, _⟩ :: _} _
|
||||
f {data := ⟨94, _⟩ :: _} _
|
||||
f {data := ⟨95, _⟩ :: _} _
|
||||
f {data := ⟨96, _⟩ :: _} _
|
||||
f {data := ⟨97, _⟩ :: _} _
|
||||
f {data := ⟨98, _⟩ :: _} _
|
||||
f {data := ⟨99, _⟩ :: _} _
|
||||
f
|
||||
{data := ⟨nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
(nat.succ
|
||||
…)))))))))))))))))))))))))))))))))))))))))))))))))))))))))),
|
||||
_⟩ ::
|
||||
_}
|
||||
_
|
||||
f "hello world" 0
|
||||
f "hello world" (nat.succ (nat.succ _))
|
||||
f _ _
|
||||
non_exhaustive_error.lean:6:0: warning: declaration 'f' uses sorry
|
||||
non_exhaustive_error.lean:10:4: error: non-exhaustive match, the following cases are missing:
|
||||
foo (nat.succ _) 1
|
||||
non_exhaustive_error.lean:10:0: warning: declaration 'foo' uses sorry
|
||||
non_exhaustive_error.lean:17:11: error: non-exhaustive match, the following cases are missing:
|
||||
f 0 (nat.succ _)
|
||||
f (nat.succ _) _
|
||||
g 0 (nat.succ _)
|
||||
g (nat.succ _) _
|
||||
non_exhaustive_error.lean:17:0: warning: declaration '_mutual.f.g' uses sorry
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue