Using functions in definitions
up vote
1
down vote
favorite
I'm modeling a program in which users can choose from different operators and functions for writing queries (i.e. formulas) for the system. For showing these operators, here I defined add
and mul
functions and used nat datatype, instead of my program's functions and datatypes. How should I define formula
that enables me to use it in definition compute_formula
. I'm a bit stuck at solving this issue. Thank you.
Fixpoint add n m :=
match n with
| 0 => m
| S p => S (p + m)
end
where "n + m" := (add n m) : nat_scope.
Fixpoint mul n m :=
match n with
| 0 => 0
| S p => m + p * m
end
where "n * m" := (mul n m) : nat_scope.
Definition formula : Set :=
nat-> nat -> ?operators_add_mull ->formula.
Definition compute_formula (f: formula) : nat :=
match f with
|firstnumber,secondnumber, ?operators_add_mull =>
?operators_add_mull firstnumber secondnumber
end.
coq
add a comment |
up vote
1
down vote
favorite
I'm modeling a program in which users can choose from different operators and functions for writing queries (i.e. formulas) for the system. For showing these operators, here I defined add
and mul
functions and used nat datatype, instead of my program's functions and datatypes. How should I define formula
that enables me to use it in definition compute_formula
. I'm a bit stuck at solving this issue. Thank you.
Fixpoint add n m :=
match n with
| 0 => m
| S p => S (p + m)
end
where "n + m" := (add n m) : nat_scope.
Fixpoint mul n m :=
match n with
| 0 => 0
| S p => m + p * m
end
where "n * m" := (mul n m) : nat_scope.
Definition formula : Set :=
nat-> nat -> ?operators_add_mull ->formula.
Definition compute_formula (f: formula) : nat :=
match f with
|firstnumber,secondnumber, ?operators_add_mull =>
?operators_add_mull firstnumber secondnumber
end.
coq
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
I'm modeling a program in which users can choose from different operators and functions for writing queries (i.e. formulas) for the system. For showing these operators, here I defined add
and mul
functions and used nat datatype, instead of my program's functions and datatypes. How should I define formula
that enables me to use it in definition compute_formula
. I'm a bit stuck at solving this issue. Thank you.
Fixpoint add n m :=
match n with
| 0 => m
| S p => S (p + m)
end
where "n + m" := (add n m) : nat_scope.
Fixpoint mul n m :=
match n with
| 0 => 0
| S p => m + p * m
end
where "n * m" := (mul n m) : nat_scope.
Definition formula : Set :=
nat-> nat -> ?operators_add_mull ->formula.
Definition compute_formula (f: formula) : nat :=
match f with
|firstnumber,secondnumber, ?operators_add_mull =>
?operators_add_mull firstnumber secondnumber
end.
coq
I'm modeling a program in which users can choose from different operators and functions for writing queries (i.e. formulas) for the system. For showing these operators, here I defined add
and mul
functions and used nat datatype, instead of my program's functions and datatypes. How should I define formula
that enables me to use it in definition compute_formula
. I'm a bit stuck at solving this issue. Thank you.
Fixpoint add n m :=
match n with
| 0 => m
| S p => S (p + m)
end
where "n + m" := (add n m) : nat_scope.
Fixpoint mul n m :=
match n with
| 0 => 0
| S p => m + p * m
end
where "n * m" := (mul n m) : nat_scope.
Definition formula : Set :=
nat-> nat -> ?operators_add_mull ->formula.
Definition compute_formula (f: formula) : nat :=
match f with
|firstnumber,secondnumber, ?operators_add_mull =>
?operators_add_mull firstnumber secondnumber
end.
coq
coq
edited Nov 9 at 2:22
asked Nov 9 at 1:52
Tom And.
305
305
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
1
down vote
accepted
First, your syntax for defining a data type is not quite right: you need to use the Inductive
keyword:
Inductive formula : Set :=
| Formula : nat -> nat -> ?operators_add_mul -> formula.
It remains to figure out what the arguments to the Formula
constructor should be. The Coq function type ->
is a type like any other, and we can use it as the third argument:
Inductive formula : Set :=
| Formula : nat -> nat -> (nat -> nat -> nat) -> formula.
After defining this data type, you can write an expression like Formula 3 5 add
, which denotes the addition of 3 and 5. To inspect the formula data type, you need to write match
using the Formula
constructor:
Definition compute_formula (f : formula) : nat :=
match f with
| Formula n m f => f n m
end.
What if theInductive formula
was polymorphic with implicit arguments. How should I write the match declaration in theDefinition compute_formula
. In other words how I use polymorphic Inductive types as arguments in functions likecompute_formula
? Maybe this is totally different question.
– Tom And.
Nov 22 at 19:07
Yeah, a new question would be better.
– Arthur Azevedo De Amorim
Nov 22 at 19:15
I posted here stackoverflow.com/questions/53437324/…
– Tom And.
Nov 22 at 20:17
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
accepted
First, your syntax for defining a data type is not quite right: you need to use the Inductive
keyword:
Inductive formula : Set :=
| Formula : nat -> nat -> ?operators_add_mul -> formula.
It remains to figure out what the arguments to the Formula
constructor should be. The Coq function type ->
is a type like any other, and we can use it as the third argument:
Inductive formula : Set :=
| Formula : nat -> nat -> (nat -> nat -> nat) -> formula.
After defining this data type, you can write an expression like Formula 3 5 add
, which denotes the addition of 3 and 5. To inspect the formula data type, you need to write match
using the Formula
constructor:
Definition compute_formula (f : formula) : nat :=
match f with
| Formula n m f => f n m
end.
What if theInductive formula
was polymorphic with implicit arguments. How should I write the match declaration in theDefinition compute_formula
. In other words how I use polymorphic Inductive types as arguments in functions likecompute_formula
? Maybe this is totally different question.
– Tom And.
Nov 22 at 19:07
Yeah, a new question would be better.
– Arthur Azevedo De Amorim
Nov 22 at 19:15
I posted here stackoverflow.com/questions/53437324/…
– Tom And.
Nov 22 at 20:17
add a comment |
up vote
1
down vote
accepted
First, your syntax for defining a data type is not quite right: you need to use the Inductive
keyword:
Inductive formula : Set :=
| Formula : nat -> nat -> ?operators_add_mul -> formula.
It remains to figure out what the arguments to the Formula
constructor should be. The Coq function type ->
is a type like any other, and we can use it as the third argument:
Inductive formula : Set :=
| Formula : nat -> nat -> (nat -> nat -> nat) -> formula.
After defining this data type, you can write an expression like Formula 3 5 add
, which denotes the addition of 3 and 5. To inspect the formula data type, you need to write match
using the Formula
constructor:
Definition compute_formula (f : formula) : nat :=
match f with
| Formula n m f => f n m
end.
What if theInductive formula
was polymorphic with implicit arguments. How should I write the match declaration in theDefinition compute_formula
. In other words how I use polymorphic Inductive types as arguments in functions likecompute_formula
? Maybe this is totally different question.
– Tom And.
Nov 22 at 19:07
Yeah, a new question would be better.
– Arthur Azevedo De Amorim
Nov 22 at 19:15
I posted here stackoverflow.com/questions/53437324/…
– Tom And.
Nov 22 at 20:17
add a comment |
up vote
1
down vote
accepted
up vote
1
down vote
accepted
First, your syntax for defining a data type is not quite right: you need to use the Inductive
keyword:
Inductive formula : Set :=
| Formula : nat -> nat -> ?operators_add_mul -> formula.
It remains to figure out what the arguments to the Formula
constructor should be. The Coq function type ->
is a type like any other, and we can use it as the third argument:
Inductive formula : Set :=
| Formula : nat -> nat -> (nat -> nat -> nat) -> formula.
After defining this data type, you can write an expression like Formula 3 5 add
, which denotes the addition of 3 and 5. To inspect the formula data type, you need to write match
using the Formula
constructor:
Definition compute_formula (f : formula) : nat :=
match f with
| Formula n m f => f n m
end.
First, your syntax for defining a data type is not quite right: you need to use the Inductive
keyword:
Inductive formula : Set :=
| Formula : nat -> nat -> ?operators_add_mul -> formula.
It remains to figure out what the arguments to the Formula
constructor should be. The Coq function type ->
is a type like any other, and we can use it as the third argument:
Inductive formula : Set :=
| Formula : nat -> nat -> (nat -> nat -> nat) -> formula.
After defining this data type, you can write an expression like Formula 3 5 add
, which denotes the addition of 3 and 5. To inspect the formula data type, you need to write match
using the Formula
constructor:
Definition compute_formula (f : formula) : nat :=
match f with
| Formula n m f => f n m
end.
answered Nov 9 at 2:46
Arthur Azevedo De Amorim
13.9k21623
13.9k21623
What if theInductive formula
was polymorphic with implicit arguments. How should I write the match declaration in theDefinition compute_formula
. In other words how I use polymorphic Inductive types as arguments in functions likecompute_formula
? Maybe this is totally different question.
– Tom And.
Nov 22 at 19:07
Yeah, a new question would be better.
– Arthur Azevedo De Amorim
Nov 22 at 19:15
I posted here stackoverflow.com/questions/53437324/…
– Tom And.
Nov 22 at 20:17
add a comment |
What if theInductive formula
was polymorphic with implicit arguments. How should I write the match declaration in theDefinition compute_formula
. In other words how I use polymorphic Inductive types as arguments in functions likecompute_formula
? Maybe this is totally different question.
– Tom And.
Nov 22 at 19:07
Yeah, a new question would be better.
– Arthur Azevedo De Amorim
Nov 22 at 19:15
I posted here stackoverflow.com/questions/53437324/…
– Tom And.
Nov 22 at 20:17
What if the
Inductive formula
was polymorphic with implicit arguments. How should I write the match declaration in the Definition compute_formula
. In other words how I use polymorphic Inductive types as arguments in functions like compute_formula
? Maybe this is totally different question.– Tom And.
Nov 22 at 19:07
What if the
Inductive formula
was polymorphic with implicit arguments. How should I write the match declaration in the Definition compute_formula
. In other words how I use polymorphic Inductive types as arguments in functions like compute_formula
? Maybe this is totally different question.– Tom And.
Nov 22 at 19:07
Yeah, a new question would be better.
– Arthur Azevedo De Amorim
Nov 22 at 19:15
Yeah, a new question would be better.
– Arthur Azevedo De Amorim
Nov 22 at 19:15
I posted here stackoverflow.com/questions/53437324/…
– Tom And.
Nov 22 at 20:17
I posted here stackoverflow.com/questions/53437324/…
– Tom And.
Nov 22 at 20:17
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53218742%2fusing-functions-in-definitions%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown